From: github-actions Date: Thu, 13 Jun 2024 15:13:12 +0000 (+0000) Subject: Publish autogenerated nightly docs X-Git-Url: http://internal-gitweb-vhost/script/%22https:/enum.AnyDatabaseConfig.html?a=commitdiff_plain;h=d3ef2a2b55152ac536346bbd4d158b053660d8a3;p=bitcoindevkit.org Publish autogenerated nightly docs --- diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html index 947a038aa8..56eec9c99a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.BlockEvent.html @@ -1,18 +1,18 @@ BlockEvent in bdk_bitcoind_rpc - Rust

Struct bdk_bitcoind_rpc::BlockEvent

source ·
pub struct BlockEvent<B> {
     pub block: B,
-    pub checkpoint: CheckPoint,
+    pub checkpoint: CheckPoint,
 }
Expand description

A newly emitted block from Emitter.

Fields§

§block: B

Either a full [Block] or [Header] of the new block.

-
§checkpoint: CheckPoint

The checkpoint of the new block.

-

A [CheckPoint] is a node of a linked list of [BlockId]s. This checkpoint is linked to -all [BlockId]s originally passed in Emitter::new as well as emitted blocks since then. +

§checkpoint: CheckPoint

The checkpoint of the new block.

+

A CheckPoint is a node of a linked list of BlockIds. This checkpoint is linked to +all BlockIds originally passed in Emitter::new as well as emitted blocks since then. These blocks are guaranteed to be of the same chain.

This is important as BDK structures require block-to-apply to be connected with another block in the original chain.

Implementations§

source§

impl<B> BlockEvent<B>

source

pub fn block_height(&self) -> u32

The block height of this new block.

source

pub fn block_hash(&self) -> BlockHash

The block hash of this new block.

-
source

pub fn connected_to(&self) -> BlockId

The [BlockId] of a previous block that this block connects to.

-

This either returns a [BlockId] of a previously emitted block or from the chain we started +

source

pub fn connected_to(&self) -> BlockId

The BlockId of a previous block that this block connects to.

+

This either returns a BlockId of a previously emitted block or from the chain we started with (passed in as last_cp in Emitter::new).

This value is derived from BlockEvent::checkpoint.

Trait Implementations§

source§

impl<B: Debug> Debug for BlockEvent<B>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<B> Freeze for BlockEvent<B>
where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html index 2a04dd89be..779e430544 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_bitcoind_rpc/struct.Emitter.html @@ -1,6 +1,6 @@ Emitter in bdk_bitcoind_rpc - Rust

Struct bdk_bitcoind_rpc::Emitter

source ·
pub struct Emitter<'c, C> { /* private fields */ }
Expand description

The Emitter is used to emit data sourced from [bitcoincore_rpc::Client].

Refer to module-level documentation for more.

-

Implementations§

source§

impl<'c, C: RpcApi> Emitter<'c, C>

source

pub fn new(client: &'c C, last_cp: CheckPoint, start_height: u32) -> Self

Construct a new Emitter.

+

Implementations§

source§

impl<'c, C: RpcApi> Emitter<'c, C>

source

pub fn new(client: &'c C, last_cp: CheckPoint, start_height: u32) -> Self

Construct a new Emitter.

last_cp informs the emitter of the chain we are starting off with. This way, the emitter can start emission from a block that connects to the original chain.

start_height starts emission from a given height (if there are no conflicts with the diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html index 39aaa3c2ae..7b6f7fa68b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/all.html @@ -1 +1 @@ -List of all items in this crate

\ No newline at end of file +List of all items in this crate
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.BIP32_MAX_INDEX.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.BIP32_MAX_INDEX.html index c3d181804f..9ea449b782 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.BIP32_MAX_INDEX.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.BIP32_MAX_INDEX.html @@ -1,2 +1,2 @@ -BIP32_MAX_INDEX in bdk_chain - Rust

Constant bdk_chain::BIP32_MAX_INDEX

source ·
pub const BIP32_MAX_INDEX: u32 = _; // 2_147_483_647u32
Expand description

Maximum BIP32 derivation index.

+BIP32_MAX_INDEX in bdk_chain - Rust

Constant bdk_chain::BIP32_MAX_INDEX

source ·
pub const BIP32_MAX_INDEX: u32 = _; // 2_147_483_647u32
Expand description

Maximum BIP32 derivation index.

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html index d510d23f0a..ae58ddc720 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/constant.COINBASE_MATURITY.html @@ -1,2 +1,2 @@ -COINBASE_MATURITY in bdk_chain - Rust

Constant bdk_chain::COINBASE_MATURITY

source ·
pub const COINBASE_MATURITY: u32 = 100;
Expand description

How many confirmations are needed f or a coinbase output to be spent.

+COINBASE_MATURITY in bdk_chain - Rust

Constant bdk_chain::COINBASE_MATURITY

source ·
pub const COINBASE_MATURITY: u32 = 100;
Expand description

How many confirmations are needed f or a coinbase output to be spent.

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html index 829a2589af..4a51e55f4a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/index.html @@ -1,4 +1,4 @@ -bdk_chain - Rust

Crate bdk_chain

source ·
Expand description

This crate is a collection of core structures for Bitcoin Dev Kit.

+bdk_chain - Rust

Crate bdk_chain

source ·
Expand description

This crate is a collection of core structures for Bitcoin Dev Kit.

The goal of this crate is to give wallets the mechanisms needed to:

  1. Figure out what data they need to fetch.
  2. @@ -14,7 +14,7 @@ consistently.
  3. Data persistence agnostic – bdk_chain does not care where you cache on-chain data, what you cache or how you retrieve it from persistent storage.
-

Re-exports§

Modules§

Re-exports§

Modules§

Structs§

  • A reference to a block in the canonical chain.
  • An Anchor implementation that also records the exact confirmation height of the transaction.
  • An Anchor implementation that also records the exact confirmation time and height of the transaction.
  • Represents the ID of a descriptor, defined as the sha256 hash of the descriptor string, checksum excluded.
  • A TxOut with as much data as we can retrieve about it
  • An iterator for derived script pubkeys.
  • An index storing TxOuts that have a script pubkey that matches those in a list.

Enums§

Constants§

Traits§

  • Trait that “anchors” blockchain data to a specific block of height and hash.
  • An Anchor that can be constructed from a given block, block height and transaction position diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html index a091526c24..a076202d71 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/indexed_tx_graph/trait.Indexer.html @@ -20,4 +20,4 @@ This trait’s methods should rarely be called directly.

source

fn apply_changeset(&mut self, changeset: Self::ChangeSet)

Apply changeset to itself.

source

fn initial_changeset(&self) -> Self::ChangeSet

Determines the ChangeSet between self and an empty Indexer.

source

fn is_tx_relevant(&self, tx: &Transaction) -> bool

Determines whether the transaction should be included in the index.

-

Implementors§

\ No newline at end of file +

Implementors§

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html new file mode 100644 index 0000000000..90037d5be8 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html @@ -0,0 +1,2 @@ +DEFAULT_LOOKAHEAD in bdk_chain::keychain - Rust

Constant bdk_chain::keychain::DEFAULT_LOOKAHEAD

source ·
pub const DEFAULT_LOOKAHEAD: u32 = 25;
Expand description

The default lookahead for a KeychainTxOutIndex

+
\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/enum.InsertDescriptorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/enum.InsertDescriptorError.html new file mode 100644 index 0000000000..2273692201 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/enum.InsertDescriptorError.html @@ -0,0 +1,37 @@ +InsertDescriptorError in bdk_chain::keychain - Rust

Enum bdk_chain::keychain::InsertDescriptorError

source ·
pub enum InsertDescriptorError<K> {
+    DescriptorAlreadyAssigned {
+        descriptor: Descriptor<DescriptorPublicKey>,
+        existing_assignment: K,
+    },
+    KeychainAlreadyAssigned {
+        keychain: K,
+        existing_assignment: Descriptor<DescriptorPublicKey>,
+    },
+}
Expand description

Variants§

§

DescriptorAlreadyAssigned

The descriptor has already been assigned to a keychain so you can’t assign it to another

+

Fields

§descriptor: Descriptor<DescriptorPublicKey>

The descriptor you have attempted to reassign

+
§existing_assignment: K

The keychain that the descriptor is already assigned to

+
§

KeychainAlreadyAssigned

The keychain is already assigned to a descriptor so you can’t reassign it

+

Fields

§keychain: K

The keychain that you have attempted to reassign

+
§existing_assignment: Descriptor<DescriptorPublicKey>

The descriptor that the keychain is already assigned to

+

Trait Implementations§

source§

impl<K: Clone> Clone for InsertDescriptorError<K>

source§

fn clone(&self) -> InsertDescriptorError<K>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<K: Debug> Debug for InsertDescriptorError<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Display for InsertDescriptorError<K>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<K: Debug> Error for InsertDescriptorError<K>

1.30.0 · source§

fn source(&self) -> Option<&(dyn Error + 'static)>

The lower-level source of this error, if any. Read more
1.0.0 · source§

fn description(&self) -> &str

👎Deprecated since 1.42.0: use the Display impl or to_string()
1.0.0 · source§

fn cause(&self) -> Option<&dyn Error>

👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
source§

fn provide<'a>(&'a self, request: &mut Request<'a>)

🔬This is a nightly-only experimental API. (error_generic_member_access)
Provides type based access to context intended for error reports. Read more
source§

impl<K: PartialEq> PartialEq for InsertDescriptorError<K>

source§

fn eq(&self, other: &InsertDescriptorError<K>) -> bool

This method tests for self and other values to be equal, and is used +by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
source§

impl<K> StructuralPartialEq for InsertDescriptorError<K>

Auto Trait Implementations§

§

impl<K> !Freeze for InsertDescriptorError<K>

§

impl<K> RefUnwindSafe for InsertDescriptorError<K>
where + K: RefUnwindSafe,

§

impl<K> Send for InsertDescriptorError<K>
where + K: Send,

§

impl<K> Sync for InsertDescriptorError<K>
where + K: Sync,

§

impl<K> Unpin for InsertDescriptorError<K>
where + K: Unpin,

§

impl<K> UnwindSafe for InsertDescriptorError<K>
where + K: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where + T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where + T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where + T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

+
source§

impl<T, U> Into<U> for T
where + U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

+

That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

+
source§

impl<T> ToOwned for T
where + T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for T
where + T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for T
where + U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where + U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where + V: MultiLane<T>,

§

fn vzip(self) -> V

\ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html index f118a2d38d..1aadb971cb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/index.html @@ -1,4 +1,4 @@ -bdk_chain::keychain - Rust

Module bdk_chain::keychain

source ·
Expand description

Module for keychain related structures.

+bdk_chain::keychain - Rust

Module bdk_chain::keychain

source ·
Expand description

Module for keychain related structures.

A keychain here is a set of application-defined indexes for a miniscript descriptor where we can derive script pubkeys at a particular derivation index. The application’s index is simply anything that implements Ord.

@@ -7,4 +7,4 @@ has a txout containing an indexed script pubkey). Internally, this also maintains “revealed” and “lookahead” index counts per keychain.

Structs§

\ No newline at end of file +indexes [TxOut]s with them.
  • The keychain doesn’t exist. Most likley hasn’t been inserted with KeychainTxOutIndex::insert_descriptor.
  • Enums§

    Constants§

    Type Aliases§

    • A tuple of keychain index and T representing the indexed value.
    • A tuple of keychain K, derivation index (u32) and a T associated with them.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js index fa5ca6e6e3..a6e50315ef 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/sidebar-items.js @@ -1 +1 @@ -window.SIDEBAR_ITEMS = {"struct":["Balance","ChangeSet","KeychainTxOutIndex"]}; \ No newline at end of file +window.SIDEBAR_ITEMS = {"constant":["DEFAULT_LOOKAHEAD"],"enum":["InsertDescriptorError"],"struct":["Balance","ChangeSet","KeychainTxOutIndex","NoSuchKeychain"],"type":["Indexed","KeychainIndexed"]}; \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html index add9b35350..63b70fcfed 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.Balance.html @@ -12,8 +12,8 @@

    This is the balance you can spend right now that shouldn’t get cancelled via another party double spending it.

    source

    pub fn total(&self) -> Amount

    Get the whole balance visible to the wallet.

    -

    Trait Implementations§

    source§

    impl Add for Balance

    §

    type Output = Balance

    The resulting type after applying the + operator.
    source§

    fn add(self, other: Self) -> Self

    Performs the + operation. Read more
    source§

    impl Clone for Balance

    source§

    fn clone(&self) -> Balance

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Balance

    source§

    fn default() -> Balance

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for Balance

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for Balance

    source§

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Add for Balance

    §

    type Output = Balance

    The resulting type after applying the + operator.
    source§

    fn add(self, other: Self) -> Self

    Performs the + operation. Read more
    source§

    impl Clone for Balance

    source§

    fn clone(&self) -> Balance

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Balance

    source§

    fn default() -> Balance

    Returns the “default value” for a type. Read more
    source§

    impl<'de> Deserialize<'de> for Balance

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Display for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for Balance

    source§

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Serialize for Balance

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Balance

    source§

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html index 72096e2c9e..949d7f5ee0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.ChangeSet.html @@ -1,25 +1,25 @@ -ChangeSet in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::ChangeSet

    source ·
    pub struct ChangeSet<K> {
    +ChangeSet in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::ChangeSet

    source ·
    pub struct ChangeSet<K> {
         pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
         pub last_revealed: BTreeMap<DescriptorId, u32>,
     }
    Expand description

    Represents updates to the derivation index of a KeychainTxOutIndex. It maps each keychain K to a descriptor and its last revealed index.

    -

    It can be applied to KeychainTxOutIndex with apply_changeset. `ChangeSet are -monotone in that they will never decrease the revealed derivation index.

    +

    It can be applied to KeychainTxOutIndex with apply_changeset.

    +

    The last_revealed field is monotone in that append will never decrease it. +keychains_added is not monotone, once it is set any attempt to change it is subject to the +same one-to-one keychain <-> descriptor mapping invariant as KeychainTxOutIndex itself.

    Fields§

    §keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>

    Contains the keychains that have been added and their respective descriptor

    §last_revealed: BTreeMap<DescriptorId, u32>

    Contains for each descriptor_id the last revealed index of derivation

    -

    Trait Implementations§

    source§

    impl<K: Ord> Append for ChangeSet<K>

    source§

    fn append(&mut self, other: Self)

    Append another ChangeSet into self.

    -

    For each keychain in keychains_added in the given ChangeSet: -If the keychain already exist with a different descriptor, we overwrite the old descriptor.

    -

    For each last_revealed in the given ChangeSet: -If the keychain already exists, increase the index when the other’s index > self’s index.

    -
    source§

    fn is_empty(&self) -> bool

    Returns whether the changeset are empty.

    -
    source§

    impl<K: Clone> Clone for ChangeSet<K>

    source§

    fn clone(&self) -> ChangeSet<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for ChangeSet<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K> Default for ChangeSet<K>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de, K> Deserialize<'de> for ChangeSet<K>
    where - K: Ord + Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>

    source§

    fn from(indexer: ChangeSet<K>) -> Self

    Converts to this type from the input type.
    source§

    impl<K: PartialEq> PartialEq for ChangeSet<K>

    source§

    fn eq(&self, other: &ChangeSet<K>) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl<K: Ord> Append for ChangeSet<K>

    source§

    fn append(&mut self, other: Self)

    Merge another ChangeSet<K> into self.

    +

    For the keychains_added field this method respects the invariants of +insert_descriptor. last_revealed always becomes the larger of the two.

    +
    source§

    fn is_empty(&self) -> bool

    Returns whether the changeset are empty.

    +
    source§

    impl<K: Clone> Clone for ChangeSet<K>

    source§

    fn clone(&self) -> ChangeSet<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for ChangeSet<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K> Default for ChangeSet<K>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de, K> Deserialize<'de> for ChangeSet<K>
    where + K: Ord + Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where + __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>

    source§

    fn from(indexer: ChangeSet<K>) -> Self

    Converts to this type from the input type.
    source§

    impl<K: PartialEq> PartialEq for ChangeSet<K>

    source§

    fn eq(&self, other: &ChangeSet<K>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    source§

    impl<K> Serialize for ChangeSet<K>
    where - K: Ord + Serialize,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<K> StructuralPartialEq for ChangeSet<K>

    Auto Trait Implementations§

    §

    impl<K> Freeze for ChangeSet<K>

    §

    impl<K> RefUnwindSafe for ChangeSet<K>
    where +sufficient, and should not be overridden without very good reason.

    source§

    impl<K> Serialize for ChangeSet<K>
    where + K: Ord + Serialize,

    source§

    fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl<K> StructuralPartialEq for ChangeSet<K>

    Auto Trait Implementations§

    §

    impl<K> Freeze for ChangeSet<K>

    §

    impl<K> RefUnwindSafe for ChangeSet<K>
    where K: RefUnwindSafe,

    §

    impl<K> Send for ChangeSet<K>
    where K: Send,

    §

    impl<K> Sync for ChangeSet<K>
    where K: Sync,

    §

    impl<K> Unpin for ChangeSet<K>

    §

    impl<K> UnwindSafe for ChangeSet<K>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html index 6dc07e0bbe..c4bcb03da3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.KeychainTxOutIndex.html @@ -1,8 +1,15 @@ -KeychainTxOutIndex in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::KeychainTxOutIndex

    source ·
    pub struct KeychainTxOutIndex<K> { /* private fields */ }
    Expand description

    KeychainTxOutIndex controls how script pubkeys are revealed for multiple keychains, and +KeychainTxOutIndex in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::KeychainTxOutIndex

    source ·
    pub struct KeychainTxOutIndex<K> { /* private fields */ }
    Expand description

    KeychainTxOutIndex controls how script pubkeys are revealed for multiple keychains, and indexes [TxOut]s with them.

    A single keychain is a chain of script pubkeys derived from a single Descriptor. Keychains are identified using the K generic. Script pubkeys are identified by the keychain that they are derived from K, as well as the derivation index u32.

    +

    There is a strict 1-to-1 relationship between descriptors and keychains. Each keychain has one +and only one descriptor and each descriptor has one and only one keychain. The +insert_descriptor method will return an error if you try and violate this invariant. This +rule is a proxy for a stronger rule: no two descriptors should produce the same script pubkey. +Having two descriptors produce the same script pubkey should cause whichever keychain derives +the script pubkey first to be the effective owner of it but you should not rely on this +behaviour. ⚠ It is up you, the developer, not to violate this invariant.

    §Revealed script pubkeys

    Tracking how script pubkeys are revealed is useful for collecting chain data. For example, if the user has requested 5 script pubkeys (to receive money with), we only need to use those @@ -15,18 +22,20 @@ NOT have knowledge of which script pubkeys are revealed. So when we index a tran txout (using index_tx/index_txout) we scan the txouts against script pubkeys derived above the last revealed index. These additionally-derived script pubkeys are called the lookahead.

    -

    The KeychainTxOutIndex is constructed with the lookahead and cannot be altered. The -default lookahead count is 1000. Use new to set a custom lookahead.

    +

    The KeychainTxOutIndex is constructed with the lookahead and cannot be altered. See +DEFAULT_LOOKAHEAD for the value used in the Default implementation. Use new to set a +custom lookahead.

    §Unbounded script pubkey iterator

    For script-pubkey-based chain sources (such as Electrum/Esplora), an initial scan is best done by iterating though derived script pubkeys one by one and requesting transaction histories for each script pubkey. We will stop after x-number of script pubkeys have empty histories. An -unbounded script pubkey iterator is useful to pass to such a chain source.

    +unbounded script pubkey iterator is useful to pass to such a chain source because it doesn’t +require holding a reference to the index.

    Call unbounded_spk_iter to get an unbounded script pubkey iterator for a given keychain. Call all_unbounded_spk_iters to get unbounded script pubkey iterators for all keychains.

    §Change sets

    -

    Methods that can update the last revealed index or add keychains will return super::ChangeSet to report -these changes. This can be persisted for future recovery.

    +

    Methods that can update the last revealed index or add keychains will return ChangeSet to report +these changes. This should be persisted for future recovery.

    §Synopsis

    use bdk_chain::keychain::KeychainTxOutIndex;
     
    @@ -42,35 +51,12 @@ these changes. This can be persisted for future recovery.

    let mut txout_index = KeychainTxOutIndex::<MyKeychain>::default(); -let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor); -let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor); -let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42); +let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor)?; +let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor)?; +let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42)?; let new_spk_for_user = txout_index.reveal_next_spk(&MyKeychain::MyAppUser{ user_id: 42 });
    -

    §Non-recommend keychain to descriptor assignments

    -

    A keychain (K) is used to identify a descriptor. However, the following keychain to descriptor -arrangements result in behavior that is harder to reason about and is not recommended.

    -

    §Multiple keychains identifying the same descriptor

    -

    Although a single keychain variant can only identify a single descriptor, multiple keychain -variants can identify the same descriptor.

    -

    If multiple keychains identify the same descriptor:

    -
      -
    1. Methods that take in a keychain (such as reveal_next_spk) will work normally when any -keychain (that identifies that descriptor) is passed in.
    2. -
    3. Methods that return data which associates with a descriptor (such as outpoints, -txouts, unused_spks, etc.) the method will return the highest-ranked keychain variant -that identifies the descriptor. Rank is determined by the Ord implementation of the keychain -type.
    4. -
    -

    This arrangement is not recommended since some methods will return a single keychain variant -even though multiple keychain variants identify the same descriptor.

    -

    §Reassigning the descriptor of a single keychain

    -

    Descriptors added to KeychainTxOutIndex are never removed. However, a keychain that -identifies a descriptor can be reassigned to identify a different descriptor. This may result in -a situation where a descriptor has no associated keychain(s), and relevant [TxOut]s, -[OutPoint]s and [Script]s (of that descriptor) will not be return by KeychainTxOutIndex. -Therefore, reassigning the descriptor of a single keychain is not recommended.

    -

    Implementations§

    source§

    impl<K> KeychainTxOutIndex<K>

    source

    pub fn new(lookahead: u32) -> Self

    Construct a KeychainTxOutIndex with the given lookahead.

    +

    Implementations§

    source§

    impl<K> KeychainTxOutIndex<K>

    source

    pub fn new(lookahead: u32) -> Self

    Construct a KeychainTxOutIndex with the given lookahead.

    The lookahead is the number of script pubkeys to derive and cache from the internal descriptors over and above the last revealed script index. Without a lookahead the index will miss outputs you own when processing transactions whose output script pubkeys lie @@ -78,33 +64,31 @@ beyond the last revealed index. In certain situations, such as when performing a scan of the blockchain during wallet import, it may be uncertain or unknown what the index of the last revealed script pubkey actually is.

    Refer to struct-level docs for more about lookahead.

    -
    source§

    impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

    Methods that are re-exposed from the internal SpkTxOutIndex.

    -
    source

    pub fn inner(&self) -> &SpkTxOutIndex<(DescriptorId, u32)>

    Return a reference to the internal SpkTxOutIndex.

    +
    source§

    impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

    Methods that are re-exposed from the internal SpkTxOutIndex.

    +
    source

    pub fn inner(&self) -> &SpkTxOutIndex<(K, u32)>

    Return a reference to the internal SpkTxOutIndex.

    WARNING: The internal index will contain lookahead spks. Refer to struct-level docs for more about lookahead.

    -
    source

    pub fn outpoints( - &self -) -> impl DoubleEndedIterator<Item = ((K, u32), OutPoint)> + '_

    Get the set of indexed outpoints, corresponding to tracked keychains.

    -
    source

    pub fn txouts( +

    source

    pub fn outpoints(&self) -> &BTreeSet<KeychainIndexed<K, OutPoint>>

    Get the set of indexed outpoints, corresponding to tracked keychains.

    +
    source

    pub fn txouts( &self -) -> impl DoubleEndedIterator<Item = (K, u32, OutPoint, &TxOut)> + '_

    Iterate over known txouts that spend to tracked script pubkeys.

    -
    source

    pub fn txouts_in_tx( +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> + ExactSizeIterator

    Iterate over known txouts that spend to tracked script pubkeys.

    +
    source

    pub fn txouts_in_tx( &self, txid: Txid -) -> impl DoubleEndedIterator<Item = (K, u32, OutPoint, &TxOut)>

    Finds all txouts on a transaction that has previously been scanned and indexed.

    -
    source

    pub fn txout(&self, outpoint: OutPoint) -> Option<(K, u32, &TxOut)>

    Return the [TxOut] of outpoint if it has been indexed, and if it corresponds to a +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>>

    Finds all txouts on a transaction that has previously been scanned and indexed.

    +
    source

    pub fn txout(&self, outpoint: OutPoint) -> Option<KeychainIndexed<K, &TxOut>>

    Return the [TxOut] of outpoint if it has been indexed, and if it corresponds to a tracked keychain.

    The associated keychain and keychain index of the txout’s spk is also returned.

    This calls SpkTxOutIndex::txout internally.

    -
    source

    pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script>

    Return the script that exists under the given keychain’s index.

    +
    source

    pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script>

    Return the script that exists under the given keychain’s index.

    This calls SpkTxOutIndex::spk_at_index internally.

    -
    source

    pub fn index_of_spk(&self, script: &Script) -> Option<(K, u32)>

    Returns the keychain and keychain index associated with the spk.

    +
    source

    pub fn index_of_spk(&self, script: &Script) -> Option<&(K, u32)>

    Returns the keychain and keychain index associated with the spk.

    This calls SpkTxOutIndex::index_of_spk internally.

    -
    source

    pub fn is_used(&self, keychain: K, index: u32) -> bool

    Returns whether the spk under the keychain’s index has been used.

    +
    source

    pub fn is_used(&self, keychain: K, index: u32) -> bool

    Returns whether the spk under the keychain’s index has been used.

    Here, “unused” means that after the script pubkey was stored in the index, the index has never scanned a transaction output with it.

    This calls SpkTxOutIndex::is_used internally.

    -
    source

    pub fn mark_used(&mut self, keychain: K, index: u32) -> bool

    Marks the script pubkey at index as used even though the tracker hasn’t seen an output +

    source

    pub fn mark_used(&mut self, keychain: K, index: u32) -> bool

    Marks the script pubkey at index as used even though the tracker hasn’t seen an output with it.

    This only has an effect when the index had been added to self already and was unused.

    Returns whether the spk under the given keychain and index is successfully @@ -114,12 +98,12 @@ keychain, or when the spk is already marked as used.

    the transaction output using it to the index yet. Other callers will consider index on keychain used until you call unmark_used.

    This calls SpkTxOutIndex::mark_used internally.

    -
    source

    pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool

    Undoes the effect of mark_used. Returns whether the index is inserted back into +

    source

    pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool

    Undoes the effect of mark_used. Returns whether the index is inserted back into unused.

    Note that if self has scanned an output with this script pubkey, then this will have no effect.

    This calls SpkTxOutIndex::unmark_used internally.

    -
    source

    pub fn sent_and_received( +

    source

    pub fn sent_and_received( &self, tx: &Transaction, range: impl RangeBounds<K> @@ -128,7 +112,7 @@ keychains in range. Value is sent when a script pubkey in received when it is on an output. For sent to be computed correctly, the output being spent must have already been scanned by the index. Calculating received just uses the [Transaction] outputs directly, so it will be correct even if it has not been scanned.

    -

    source

    pub fn net_value( +

    source

    pub fn net_value( &self, tx: &Transaction, range: impl RangeBounds<K> @@ -136,53 +120,55 @@ spent must have already been scanned by the index. Calculating received just use takes from the transaction outputs in the index. Shorthand for calling sent_and_received and subtracting sent from received.

    This calls SpkTxOutIndex::net_value internally.

    -

    source§

    impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

    source

    pub fn keychains( +

    source§

    impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K>

    source

    pub fn keychains( &self -) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_

    Return the map of the keychain to descriptors.

    -
    source

    pub fn insert_descriptor( +) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_

    Return all keychains and their corresponding descriptors.

    +
    source

    pub fn insert_descriptor( &mut self, keychain: K, descriptor: Descriptor<DescriptorPublicKey> -) -> ChangeSet<K>

    Insert a descriptor with a keychain associated to it.

    -

    Adding a descriptor means you will be able to derive new script pubkeys under it -and the txout index will discover transaction outputs with those script pubkeys.

    -

    When trying to add a keychain that already existed under a different descriptor, or a descriptor -that already existed with a different keychain, the old keychain (or descriptor) will be -overwritten.

    -
    source

    pub fn get_descriptor( +) -> Result<ChangeSet<K>, InsertDescriptorError<K>>

    Insert a descriptor with a keychain associated to it.

    +

    Adding a descriptor means you will be able to derive new script pubkeys under it and the +txout index will discover transaction outputs with those script pubkeys (once they’ve been +derived and added to the index).

    +

    keychain <-> descriptor is a one-to-one mapping that cannot be changed. Attempting to do so +will return a InsertDescriptorError<K>.

    +
    source

    pub fn get_descriptor( &self, keychain: &K ) -> Option<&Descriptor<DescriptorPublicKey>>

    Gets the descriptor associated with the keychain. Returns None if the keychain doesn’t have a descriptor associated with it.

    -
    source

    pub fn lookahead(&self) -> u32

    Get the lookahead setting.

    +
    source

    pub fn lookahead(&self) -> u32

    Get the lookahead setting.

    Refer to new for more information on the lookahead.

    -
    source

    pub fn lookahead_to_target(&mut self, keychain: &K, target_index: u32)

    Store lookahead scripts until target_index (inclusive).

    +
    source

    pub fn lookahead_to_target(&mut self, keychain: &K, target_index: u32)

    Store lookahead scripts until target_index (inclusive).

    This does not change the global lookahead setting.

    -
    source

    pub fn unbounded_spk_iter( +

    source

    pub fn unbounded_spk_iter( &self, keychain: &K ) -> Option<SpkIterator<Descriptor<DescriptorPublicKey>>>

    Get an unbounded spk iterator over a given keychain. Returns None if the provided keychain doesn’t exist

    -
    source

    pub fn all_unbounded_spk_iters( +

    source

    pub fn all_unbounded_spk_iters( &self ) -> BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>>

    Get unbounded spk iterators for all keychains.

    -
    source

    pub fn revealed_spks( +

    source

    pub fn revealed_spks( &self, range: impl RangeBounds<K> -) -> impl DoubleEndedIterator<Item = (&K, u32, &Script)> + Clone

    Iterate over revealed spks of keychains in range

    -
    source

    pub fn revealed_keychain_spks<'a>( +) -> impl Iterator<Item = KeychainIndexed<K, &Script>>

    Iterate over revealed spks of keychains in range

    +
    source

    pub fn revealed_keychain_spks<'a>( &'a self, keychain: &'a K -) -> impl DoubleEndedIterator<Item = (u32, &Script)> + 'a

    Iterate over revealed spks of the given keychain.

    -
    source

    pub fn unused_spks( +) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + 'a

    Iterate over revealed spks of the given keychain with ascending indices.

    +

    This is a double ended iterator so you can easily reverse it to get an iterator where +the script pubkeys that were most recently revealed are first.

    +
    source

    pub fn unused_spks( &self -) -> impl DoubleEndedIterator<Item = (K, u32, &Script)> + Clone

    Iterate over revealed, but unused, spks of all keychains.

    -
    source

    pub fn unused_keychain_spks( +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, &Script>> + Clone

    Iterate over revealed, but unused, spks of all keychains.

    +
    source

    pub fn unused_keychain_spks( &self, keychain: &K -) -> impl DoubleEndedIterator<Item = (u32, &Script)> + Clone

    Iterate over revealed, but unused, spks of the given keychain. +) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + Clone

    Iterate over revealed, but unused, spks of the given keychain. Returns an empty iterator if the provided keychain doesn’t exist.

    -
    source

    pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)>

    Get the next derivation index for keychain. The next index is the index after the last revealed +

    source

    pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)>

    Get the next derivation index for keychain. The next index is the index after the last revealed derivation index.

    The second field in the returned tuple represents whether the next derivation index is new. There are two scenarios where the next derivation index is reused (not new):

    @@ -192,77 +178,75 @@ There are two scenarios where the next derivation index is reused (not new):

    Not checking the second field of the tuple may result in address reuse.

    Returns None if the provided keychain doesn’t exist.

    -
    source

    pub fn last_revealed_indices(&self) -> BTreeMap<K, u32>

    Get the last derivation index that is revealed for each keychain.

    +
    source

    pub fn last_revealed_indices(&self) -> BTreeMap<K, u32>

    Get the last derivation index that is revealed for each keychain.

    Keychains with no revealed indices will not be included in the returned BTreeMap.

    -
    source

    pub fn last_revealed_index(&self, keychain: &K) -> Option<u32>

    Get the last derivation index revealed for keychain. Returns None if the keychain doesn’t +

    source

    pub fn last_revealed_index(&self, keychain: &K) -> Option<u32>

    Get the last derivation index revealed for keychain. Returns None if the keychain doesn’t exist, or if the keychain doesn’t have any revealed scripts.

    -
    source

    pub fn reveal_to_target_multi( +

    source

    pub fn reveal_to_target_multi( &mut self, keychains: &BTreeMap<K, u32> -) -> (BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>>, ChangeSet<K>)

    Convenience method to call Self::reveal_to_target on multiple keychains.

    -
    source

    pub fn reveal_to_target( +) -> ChangeSet<K>

    Convenience method to call Self::reveal_to_target on multiple keychains.

    +
    source

    pub fn reveal_to_target( &mut self, keychain: &K, target_index: u32 -) -> Option<(SpkIterator<Descriptor<DescriptorPublicKey>>, ChangeSet<K>)>

    Reveals script pubkeys of the keychain’s descriptor up to and including the +) -> Option<(Vec<Indexed<ScriptBuf>>, ChangeSet<K>)>

    Reveals script pubkeys of the keychain’s descriptor up to and including the target_index.

    If the target_index cannot be reached (due to the descriptor having no wildcard and/or the target_index is in the hardened index range), this method will make a best-effort and reveal up to the last possible index.

    -

    This returns an iterator of newly revealed indices (alongside their scripts) and a -super::ChangeSet, which reports updates to the latest revealed index. If no new script +

    This returns list of newly revealed indices (alongside their scripts) and a +ChangeSet, which reports updates to the latest revealed index. If no new script pubkeys are revealed, then both of these will be empty.

    Returns None if the provided keychain doesn’t exist.

    -
    source

    pub fn reveal_next_spk( +

    source

    pub fn reveal_next_spk( &mut self, keychain: &K -) -> Option<((u32, &Script), ChangeSet<K>)>

    Attempts to reveal the next script pubkey for keychain.

    +) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)>

    Attempts to reveal the next script pubkey for keychain.

    Returns the derivation index of the revealed script pubkey, the revealed script pubkey and a -super::ChangeSet which represents changes in the last revealed index (if any). +ChangeSet which represents changes in the last revealed index (if any). Returns None if the provided keychain doesn’t exist.

    When a new script cannot be revealed, we return the last revealed script and an empty -super::ChangeSet. There are two scenarios when a new script pubkey cannot be derived:

    +ChangeSet. There are two scenarios when a new script pubkey cannot be derived:

    1. The descriptor has no wildcard and already has one script revealed.
    2. The descriptor has already revealed scripts up to the numeric bound.
    3. There is no descriptor associated with the given keychain.
    -
    source

    pub fn next_unused_spk( +

    source

    pub fn next_unused_spk( &mut self, keychain: &K -) -> Option<((u32, &Script), ChangeSet<K>)>

    Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest +) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)>

    Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest index that has not been used yet.

    This will derive and reveal a new script pubkey if no more unused script pubkeys exist.

    If the descriptor has no wildcard and already has a used script pubkey or if a descriptor has used all scripts up to the derivation bounds, then the last derived script pubkey will be returned.

    -

    Returns None if the provided keychain doesn’t exist.

    -
    source

    pub fn keychain_outpoints<'a>( +

    Returns None if there are no script pubkeys that have been used and no new script pubkey +could be revealed (see reveal_next_spk for when this happens).

    +

    source

    pub fn keychain_outpoints<'a>( &'a self, keychain: &'a K -) -> impl DoubleEndedIterator<Item = (u32, OutPoint)> + 'a

    Iterate over all [OutPoint]s that have TxOuts with script pubkeys derived from +) -> impl DoubleEndedIterator<Item = Indexed<OutPoint>> + 'a

    Iterate over all [OutPoint]s that have TxOuts with script pubkeys derived from keychain.

    -
    source

    pub fn keychain_outpoints_in_range<'a>( +

    source

    pub fn keychain_outpoints_in_range<'a>( &'a self, range: impl RangeBounds<K> + 'a -) -> impl DoubleEndedIterator<Item = (&'a K, u32, OutPoint)> + 'a

    Iterate over [OutPoint]s that have script pubkeys derived from keychains in range.

    -
    source

    pub fn last_used_index(&self, keychain: &K) -> Option<u32>

    Returns the highest derivation index of the keychain where KeychainTxOutIndex has +) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, OutPoint>> + 'a

    Iterate over [OutPoint]s that have script pubkeys derived from keychains in range.

    +
    source

    pub fn last_used_index(&self, keychain: &K) -> Option<u32>

    Returns the highest derivation index of the keychain where KeychainTxOutIndex has found a [TxOut] with it’s script pubkey.

    -
    source

    pub fn last_used_indices(&self) -> BTreeMap<K, u32>

    Returns the highest derivation index of each keychain that KeychainTxOutIndex has found +

    source

    pub fn last_used_indices(&self) -> BTreeMap<K, u32>

    Returns the highest derivation index of each keychain that KeychainTxOutIndex has found a [TxOut] with it’s script pubkey.

    -
    source

    pub fn apply_changeset(&mut self, changeset: ChangeSet<K>)

    Applies the derivation changeset to the KeychainTxOutIndex, as specified in the -ChangeSet::append documentation:

    -
      -
    • Extends the number of derived scripts per keychain
    • -
    • Adds new descriptors introduced
    • -
    • If a descriptor is introduced for a keychain that already had a descriptor, overwrites -the old descriptor
    • -
    -

    Trait Implementations§

    source§

    impl<K: Clone> Clone for KeychainTxOutIndex<K>

    source§

    fn clone(&self) -> KeychainTxOutIndex<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for KeychainTxOutIndex<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K> Default for KeychainTxOutIndex<K>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K>

    §

    type ChangeSet = ChangeSet<K>

    The resultant “changeset” when new transaction data is indexed.
    source§

    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

    Scan and index the given outpoint and txout.
    source§

    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

    Scans a transaction for relevant outpoints, which are stored and indexed internally.
    source§

    fn initial_changeset(&self) -> Self::ChangeSet

    Determines the ChangeSet between self and an empty Indexer.
    source§

    fn apply_changeset(&mut self, changeset: Self::ChangeSet)

    Apply changeset to itself.
    source§

    fn is_tx_relevant(&self, tx: &Transaction) -> bool

    Determines whether the transaction should be included in the index.

    Auto Trait Implementations§

    §

    impl<K> Freeze for KeychainTxOutIndex<K>

    §

    impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where +
    source

    pub fn apply_changeset(&mut self, changeset: ChangeSet<K>)

    Applies the ChangeSet<K> to the KeychainTxOutIndex<K>

    +

    Keychains added by the keychains_added field of ChangeSet<K> respect the one-to-one +keychain <-> descriptor invariant by silently ignoring attempts to violate it (but will +panic if debug_assertions are enabled).

    +

    Trait Implementations§

    source§

    impl<K: Clone> Clone for KeychainTxOutIndex<K>

    source§

    fn clone(&self) -> KeychainTxOutIndex<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for KeychainTxOutIndex<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K> Default for KeychainTxOutIndex<K>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K>

    §

    type ChangeSet = ChangeSet<K>

    The resultant “changeset” when new transaction data is indexed.
    source§

    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

    Scan and index the given outpoint and txout.
    source§

    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

    Scans a transaction for relevant outpoints, which are stored and indexed internally.
    source§

    fn initial_changeset(&self) -> Self::ChangeSet

    Determines the ChangeSet between self and an empty Indexer.
    source§

    fn apply_changeset(&mut self, changeset: Self::ChangeSet)

    Apply changeset to itself.
    source§

    fn is_tx_relevant(&self, tx: &Transaction) -> bool

    Determines whether the transaction should be included in the index.

    Auto Trait Implementations§

    §

    impl<K> Freeze for KeychainTxOutIndex<K>

    §

    impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where K: RefUnwindSafe,

    §

    impl<K> Send for KeychainTxOutIndex<K>
    where K: Send,

    §

    impl<K> Sync for KeychainTxOutIndex<K>
    where - K: Sync,

    §

    impl<K> Unpin for KeychainTxOutIndex<K>

    §

    impl<K> UnwindSafe for KeychainTxOutIndex<K>
    where - K: RefUnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + K: Sync,

    §

    impl<K> Unpin for KeychainTxOutIndex<K>
    where + K: Unpin,

    §

    impl<K> UnwindSafe for KeychainTxOutIndex<K>

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.NoSuchKeychain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.NoSuchKeychain.html new file mode 100644 index 0000000000..41dae2bfb9 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/struct.NoSuchKeychain.html @@ -0,0 +1,23 @@ +NoSuchKeychain in bdk_chain::keychain - Rust

    Struct bdk_chain::keychain::NoSuchKeychain

    source ·
    pub struct NoSuchKeychain<K>(/* private fields */);
    Expand description

    The keychain doesn’t exist. Most likley hasn’t been inserted with KeychainTxOutIndex::insert_descriptor.

    +

    Trait Implementations§

    source§

    impl<K: Clone> Clone for NoSuchKeychain<K>

    source§

    fn clone(&self) -> NoSuchKeychain<K>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug> Debug for NoSuchKeychain<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K: Debug> Display for NoSuchKeychain<K>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K: PartialEq> PartialEq for NoSuchKeychain<K>

    source§

    fn eq(&self, other: &NoSuchKeychain<K>) -> bool

    This method tests for self and other values to be equal, and is used +by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always +sufficient, and should not be overridden without very good reason.
    source§

    impl<K: Eq> Eq for NoSuchKeychain<K>

    source§

    impl<K> StructuralPartialEq for NoSuchKeychain<K>

    Auto Trait Implementations§

    §

    impl<K> Freeze for NoSuchKeychain<K>
    where + K: Freeze,

    §

    impl<K> RefUnwindSafe for NoSuchKeychain<K>
    where + K: RefUnwindSafe,

    §

    impl<K> Send for NoSuchKeychain<K>
    where + K: Send,

    §

    impl<K> Sync for NoSuchKeychain<K>
    where + K: Sync,

    §

    impl<K> Unpin for NoSuchKeychain<K>
    where + K: Unpin,

    §

    impl<K> UnwindSafe for NoSuchKeychain<K>
    where + K: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where + T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where + T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    +
    source§

    impl<T, U> Into<U> for T
    where + U: From<T>,

    source§

    fn into(self) -> U

    Calls U::from(self).

    +

    That is, this conversion is whatever the implementation of +From<T> for U chooses to do.

    +
    source§

    impl<T> ToOwned for T
    where + T: Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T> ToString for T
    where + T: Display + ?Sized,

    source§

    default fn to_string(&self) -> String

    Converts the given value to a String. Read more
    source§

    impl<T, U> TryFrom<U> for T
    where + U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for T
    where + U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    §

    impl<V, T> VZip<V> for T
    where + V: MultiLane<T>,

    §

    fn vzip(self) -> V

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/constant.DEFAULT_LOOKAHEAD.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/constant.DEFAULT_LOOKAHEAD.html new file mode 100644 index 0000000000..76e08381e4 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/constant.DEFAULT_LOOKAHEAD.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

    Redirecting to ../../../bdk_chain/keychain/constant.DEFAULT_LOOKAHEAD.html...

    + + + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/enum.InsertDescriptorError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/enum.InsertDescriptorError.html new file mode 100644 index 0000000000..e19d71f784 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/enum.InsertDescriptorError.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

    Redirecting to ../../../bdk_chain/keychain/enum.InsertDescriptorError.html...

    + + + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.NoSuchKeychain.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.NoSuchKeychain.html new file mode 100644 index 0000000000..a070bbc020 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/txout_index/struct.NoSuchKeychain.html @@ -0,0 +1,11 @@ + + + + + Redirection + + +

    Redirecting to ../../../bdk_chain/keychain/struct.NoSuchKeychain.html...

    + + + \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.Indexed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.Indexed.html new file mode 100644 index 0000000000..ad1d312faf --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.Indexed.html @@ -0,0 +1,2 @@ +Indexed in bdk_chain::keychain - Rust

    Type Alias bdk_chain::keychain::Indexed

    source ·
    pub type Indexed<T> = (u32, T);
    Expand description

    A tuple of keychain index and T representing the indexed value.

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.KeychainIndexed.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.KeychainIndexed.html new file mode 100644 index 0000000000..7514b24a86 --- /dev/null +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/keychain/type.KeychainIndexed.html @@ -0,0 +1,2 @@ +KeychainIndexed in bdk_chain::keychain - Rust

    Type Alias bdk_chain::keychain::KeychainIndexed

    source ·
    pub type KeychainIndexed<K, T> = ((K, u32), T);
    Expand description

    A tuple of keychain K, derivation index (u32) and a T associated with them.

    +
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html index eafd573b9f..fc29f9155c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/index.html @@ -1,2 +1,2 @@ -bdk_chain::spk_client - Rust

    Module bdk_chain::spk_client

    source ·
    Expand description

    Helper types for spk-based blockchain clients.

    +bdk_chain::spk_client - Rust

    Module bdk_chain::spk_client

    source ·
    Expand description

    Helper types for spk-based blockchain clients.

    Structs§

    • Data required to perform a spk-based blockchain client full scan.
    • Data returned from a spk-based blockchain client full scan.
    • Data required to perform a spk-based blockchain client sync.
    • Data returned from a spk-based blockchain client sync.
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html index 84c3e1bc4a..4df95fbd32 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanRequest.html @@ -1,6 +1,6 @@ -FullScanRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanRequest

    source ·
    pub struct FullScanRequest<K> {
    +FullScanRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanRequest

    source ·
    pub struct FullScanRequest<K> {
         pub chain_tip: CheckPoint,
    -    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = (u32, ScriptBuf)> + Send>>,
    +    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
     }
    Expand description

    Data required to perform a spk-based blockchain client full scan.

    A client full scan iterates through all the scripts for the given keychains, fetching relevant data until some stop gap number of scripts is found that have no data. This operation is @@ -8,9 +8,9 @@ generally only used when importing or restoring previously used keychains in whi used scripts is not known. The full scan process also updates the chain from the given CheckPoint.

    Fields§

    §chain_tip: CheckPoint

    A checkpoint for the current LocalChain::tip. The full scan process will return a new chain update that extends this tip.

    -
    §spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = (u32, ScriptBuf)> + Send>>

    Iterators of script pubkeys indexed by the keychain index.

    -

    Implementations§

    source§

    impl<K: Ord + Clone> FullScanRequest<K>

    source

    pub fn from_chain_tip(chain_tip: CheckPoint) -> Self

    Construct a new FullScanRequest from a given chain_tip.

    -
    source

    pub fn from_keychain_txout_index( +

    §spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>

    Iterators of script pubkeys indexed by the keychain index.

    +

    Implementations§

    source§

    impl<K: Ord + Clone> FullScanRequest<K>

    source

    pub fn from_chain_tip(chain_tip: CheckPoint) -> Self

    Construct a new FullScanRequest from a given chain_tip.

    +
    source

    pub fn from_keychain_txout_index( chain_tip: CheckPoint, index: &KeychainTxOutIndex<K> ) -> Self
    where @@ -18,26 +18,26 @@ The full scan process will return a new chain update that extends this tip.

    Unbounded script pubkey iterators for each keychain (K) are extracted using KeychainTxOutIndex::all_unbounded_spk_iters and is used to populate the FullScanRequest.

    -

    source

    pub fn set_spks_for_keychain( +

    source

    pub fn set_spks_for_keychain( self, keychain: K, - spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static> + spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> ) -> Self

    Set the [Script]s for a given keychain.

    This consumes the FullScanRequest and returns the updated one.

    -
    source

    pub fn chain_spks_for_keychain( +

    source

    pub fn chain_spks_for_keychain( self, keychain: K, - spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static> + spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static> ) -> Self

    Chain on additional [Script]s that will be synced against.

    This consumes the FullScanRequest and returns the updated one.

    -
    source

    pub fn inspect_spks_for_all_keychains( +

    source

    pub fn inspect_spks_for_all_keychains( self, inspect: impl FnMut(K, u32, &Script) + Send + Sync + Clone + 'static ) -> Self
    where K: Send + 'static,

    Add a closure that will be called for every [Script] previously added to any keychain in this request.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn inspect_spks_for_keychain( +

    source

    pub fn inspect_spks_for_keychain( self, keychain: K, inspect: impl FnMut(u32, &Script) + Send + Sync + 'static diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html index 5d736d9069..ed7e72fd07 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.FullScanResult.html @@ -1,4 +1,4 @@ -FullScanResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanResult

    source ·
    pub struct FullScanResult<K, A = ConfirmationTimeHeightAnchor> {
    +FullScanResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::FullScanResult

    source ·
    pub struct FullScanResult<K, A = ConfirmationTimeHeightAnchor> {
         pub graph_update: TxGraph<A>,
         pub chain_update: CheckPoint,
         pub last_active_indices: BTreeMap<K, u32>,
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html
    index 3dfb9db580..d60833cd8e 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncRequest.html
    @@ -1,4 +1,4 @@
    -SyncRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncRequest

    source ·
    pub struct SyncRequest {
    +SyncRequest in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncRequest

    source ·
    pub struct SyncRequest {
         pub chain_tip: CheckPoint,
         pub spks: Box<dyn ExactSizeIterator<Item = ScriptBuf> + Send>,
         pub txids: Box<dyn ExactSizeIterator<Item = Txid> + Send>,
    @@ -11,53 +11,53 @@ The sync process will return a new chain update that extends this tip.

    §spks: Box<dyn ExactSizeIterator<Item = ScriptBuf> + Send>

    Transactions that spend from or to these indexed script pubkeys.

    §txids: Box<dyn ExactSizeIterator<Item = Txid> + Send>

    Transactions with these txids.

    §outpoints: Box<dyn ExactSizeIterator<Item = OutPoint> + Send>

    Transactions with these outpoints or spent from these outpoints.

    -

    Implementations§

    source§

    impl SyncRequest

    source

    pub fn from_chain_tip(cp: CheckPoint) -> Self

    Construct a new SyncRequest from a given cp tip.

    -
    source

    pub fn set_spks( +

    Implementations§

    source§

    impl SyncRequest

    source

    pub fn from_chain_tip(cp: CheckPoint) -> Self

    Construct a new SyncRequest from a given cp tip.

    +
    source

    pub fn set_spks( self, spks: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = ScriptBuf> + Send + 'static> ) -> Self

    Set the [Script]s that will be synced against.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn set_txids( +

    source

    pub fn set_txids( self, txids: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = Txid> + Send + 'static> ) -> Self

    Set the [Txid]s that will be synced against.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn set_outpoints( +

    source

    pub fn set_outpoints( self, outpoints: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = OutPoint> + Send + 'static> ) -> Self

    Set the [OutPoint]s that will be synced against.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn chain_spks( +

    source

    pub fn chain_spks( self, spks: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = ScriptBuf> + Send + 'static, Item = ScriptBuf> ) -> Self

    Chain on additional [Script]s that will be synced against.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn chain_txids( +

    source

    pub fn chain_txids( self, txids: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = Txid> + Send + 'static, Item = Txid> ) -> Self

    Chain on additional [Txid]s that will be synced against.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn chain_outpoints( +

    source

    pub fn chain_outpoints( self, outpoints: impl IntoIterator<IntoIter = impl ExactSizeIterator<Item = OutPoint> + Send + 'static, Item = OutPoint> ) -> Self

    Chain on additional [OutPoint]s that will be synced against.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn inspect_spks( +

    source

    pub fn inspect_spks( self, inspect: impl FnMut(&Script) + Send + Sync + 'static ) -> Self

    Add a closure that will be called for [Script]s previously added to this request.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn inspect_txids( +

    source

    pub fn inspect_txids( self, inspect: impl FnMut(&Txid) + Send + Sync + 'static ) -> Self

    Add a closure that will be called for [Txid]s previously added to this request.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn inspect_outpoints( +

    source

    pub fn inspect_outpoints( self, inspect: impl FnMut(&OutPoint) + Send + Sync + 'static ) -> Self

    Add a closure that will be called for [OutPoint]s previously added to this request.

    This consumes the SyncRequest and returns the updated one.

    -
    source

    pub fn populate_with_revealed_spks<K: Clone + Ord + Debug + Send + Sync>( +

    source

    pub fn populate_with_revealed_spks<K: Clone + Ord + Debug + Send + Sync>( self, index: &KeychainTxOutIndex<K>, spk_range: impl RangeBounds<K> diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html index 09d1a71604..05504948a6 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/spk_client/struct.SyncResult.html @@ -1,4 +1,4 @@ -SyncResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncResult

    source ·
    pub struct SyncResult<A = ConfirmationTimeHeightAnchor> {
    +SyncResult in bdk_chain::spk_client - Rust

    Struct bdk_chain::spk_client::SyncResult

    source ·
    pub struct SyncResult<A = ConfirmationTimeHeightAnchor> {
         pub graph_update: TxGraph<A>,
         pub chain_update: CheckPoint,
     }
    Expand description

    Data returned from a spk-based blockchain client sync.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html index 90a05303ff..72ebd1892d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkIterator.html @@ -1,4 +1,4 @@ -SpkIterator in bdk_chain - Rust

    Struct bdk_chain::SpkIterator

    source ·
    pub struct SpkIterator<D> { /* private fields */ }
    Expand description

    An iterator for derived script pubkeys.

    +SpkIterator in bdk_chain - Rust

    Struct bdk_chain::SpkIterator

    source ·
    pub struct SpkIterator<D> { /* private fields */ }
    Expand description

    An iterator for derived script pubkeys.

    SpkIterator is an implementation of the Iterator trait which possesses its own next() and nth() functions, both of which circumvent the unnecessary intermediate derivations required when using their default implementations.

    @@ -9,20 +9,20 @@ when using their default implementations.

    let mut spk_iter = SpkIterator::new(&descriptor); assert_eq!(spk_iter.next(), Some((0, external_spk_0))); assert_eq!(spk_iter.next(), None);
    -

    Implementations§

    source§

    impl<D> SpkIterator<D>
    where - D: Borrow<Descriptor<DescriptorPublicKey>>,

    source

    pub fn new(descriptor: D) -> Self

    Create a new script pubkey iterator from descriptor.

    +

    Implementations§

    source§

    impl<D> SpkIterator<D>
    where + D: Borrow<Descriptor<DescriptorPublicKey>>,

    source

    pub fn new(descriptor: D) -> Self

    Create a new script pubkey iterator from descriptor.

    This iterates from derivation index 0 and stops at index 0x7FFFFFFF (as specified in BIP-32). Non-wildcard descriptors will only return one script pubkey at derivation index 0.

    Use new_with_range to create an iterator with a specified derivation index range.

    -
    source

    pub fn new_with_range<R>(descriptor: D, range: R) -> Self
    where +

    source

    pub fn new_with_range<R>(descriptor: D, range: R) -> Self
    where R: RangeBounds<u32>,

    Create a new script pubkey iterator from descriptor and a given range.

    Non-wildcard descriptors will only emit a single script pubkey (at derivation index 0). Wildcard descriptors have an end-bound of 0x7FFFFFFF (inclusive).

    Refer to new for more.

    -
    source

    pub fn descriptor(&self) -> &D

    Get a reference to the internal descriptor.

    -

    Trait Implementations§

    source§

    impl<D: Clone> Clone for SpkIterator<D>

    source§

    fn clone(&self) -> SpkIterator<D> ⓘ

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<D> Iterator for SpkIterator<D>
    where - D: Borrow<Descriptor<DescriptorPublicKey>>,

    §

    type Item = (u32, ScriptBuf)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    source§

    fn next_chunk<const N: usize>( +

    source

    pub fn descriptor(&self) -> &D

    Get a reference to the internal descriptor.

    +

    Trait Implementations§

    source§

    impl<D: Clone> Clone for SpkIterator<D>

    source§

    fn clone(&self) -> SpkIterator<D> ⓘ

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<D> Iterator for SpkIterator<D>
    where + D: Borrow<Descriptor<DescriptorPublicKey>>,

    §

    type Item = (u32, ScriptBuf)

    The type of the elements being iterated over.
    source§

    fn next(&mut self) -> Option<Self::Item>

    Advances the iterator and returns the next value. Read more
    source§

    fn nth(&mut self, n: usize) -> Option<Self::Item>

    Returns the nth element of the iterator. Read more
    source§

    fn next_chunk<const N: usize>( &mut self ) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>
    where Self: Sized,

    🔬This is a nightly-only experimental API. (iter_next_chunk)
    Advances the iterator and returns an array containing the next N values. Read more
    1.0.0 · source§

    fn size_hint(&self) -> (usize, Option<usize>)

    Returns the bounds on the remaining length of the iterator. Read more
    1.0.0 · source§

    fn count(self) -> usize
    where @@ -224,4 +224,4 @@ until that buffer is filled. Clone,

    §

    type Owned = T

    The resulting type after obtaining ownership.
    source§

    fn to_owned(&self) -> T

    Creates owned data from borrowed data, usually by cloning. Read more
    source§

    fn clone_into(&self, target: &mut T)

    Uses borrowed data to replace owned data, usually by cloning. Read more
    source§

    impl<T, U> TryFrom<U> for T
    where U: Into<T>,

    §

    type Error = Infallible

    The type returned in the event of a conversion error.
    source§

    fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

    Performs the conversion.
    source§

    impl<T, U> TryInto<U> for T
    where U: TryFrom<T>,

    §

    type Error = <U as TryFrom<T>>::Error

    The type returned in the event of a conversion error.
    source§

    fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

    Performs the conversion.
    §

    impl<V, T> VZip<V> for T
    where - V: MultiLane<T>,

    §

    fn vzip(self) -> V

    \ No newline at end of file + V: MultiLane<T>,
    §

    fn vzip(self) -> V

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html index 9d187bf4c6..d7eaed0252 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/struct.SpkTxOutIndex.html @@ -10,7 +10,7 @@ combination of (keychain, derivation_index).

    in there in the first place. SpkTxOutIndex is intentionally monotone – you cannot delete or modify txouts that have been indexed. To find out which txouts from the index are actually in the chain or unspent, you must use other sources of information like a TxGraph.

    -

    Implementations§

    source§

    impl<I: Clone + Ord> SpkTxOutIndex<I>

    source

    pub fn scan(&mut self, tx: &Transaction) -> BTreeSet<I>

    Scans a transaction’s outputs for matching script pubkeys.

    +

    Implementations§

    source§

    impl<I: Clone + Ord + Debug> SpkTxOutIndex<I>

    source

    pub fn scan(&mut self, tx: &Transaction) -> BTreeSet<I>

    Scans a transaction’s outputs for matching script pubkeys.

    Typically, this is used in two situations:

    1. After loading transaction data from the disk, you may scan over all the txouts to restore all @@ -88,7 +88,7 @@ matches one of our script pubkeys.

      have scanned the TxOuts the transaction is spending. For example, if you want to filter out all the transactions in a block that are irrelevant, you must first scan all the transactions in the block and only then use this method.

      -

    Trait Implementations§

    source§

    impl<I: Clone> Clone for SpkTxOutIndex<I>

    source§

    fn clone(&self) -> SpkTxOutIndex<I>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<I: Debug> Debug for SpkTxOutIndex<I>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<I> Default for SpkTxOutIndex<I>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<I: Clone + Ord> Indexer for SpkTxOutIndex<I>

    §

    type ChangeSet = ()

    The resultant “changeset” when new transaction data is indexed.
    source§

    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

    Scan and index the given outpoint and txout.
    source§

    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

    Scans a transaction for relevant outpoints, which are stored and indexed internally.
    source§

    fn initial_changeset(&self) -> Self::ChangeSet

    Determines the ChangeSet between self and an empty Indexer.
    source§

    fn apply_changeset(&mut self, _changeset: Self::ChangeSet)

    Apply changeset to itself.
    source§

    fn is_tx_relevant(&self, tx: &Transaction) -> bool

    Determines whether the transaction should be included in the index.

    Auto Trait Implementations§

    §

    impl<I> Freeze for SpkTxOutIndex<I>

    §

    impl<I> RefUnwindSafe for SpkTxOutIndex<I>
    where +

    Trait Implementations§

    source§

    impl<I: Clone> Clone for SpkTxOutIndex<I>

    source§

    fn clone(&self) -> SpkTxOutIndex<I>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<I: Debug> Debug for SpkTxOutIndex<I>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<I> Default for SpkTxOutIndex<I>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<I: Clone + Ord + Debug> Indexer for SpkTxOutIndex<I>

    §

    type ChangeSet = ()

    The resultant “changeset” when new transaction data is indexed.
    source§

    fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet

    Scan and index the given outpoint and txout.
    source§

    fn index_tx(&mut self, tx: &Transaction) -> Self::ChangeSet

    Scans a transaction for relevant outpoints, which are stored and indexed internally.
    source§

    fn initial_changeset(&self) -> Self::ChangeSet

    Determines the ChangeSet between self and an empty Indexer.
    source§

    fn apply_changeset(&mut self, _changeset: Self::ChangeSet)

    Apply changeset to itself.
    source§

    fn is_tx_relevant(&self, tx: &Transaction) -> bool

    Determines whether the transaction should be included in the index.

    Auto Trait Implementations§

    §

    impl<I> Freeze for SpkTxOutIndex<I>

    §

    impl<I> RefUnwindSafe for SpkTxOutIndex<I>
    where I: RefUnwindSafe,

    §

    impl<I> Send for SpkTxOutIndex<I>
    where I: Send,

    §

    impl<I> Sync for SpkTxOutIndex<I>
    where I: Sync,

    §

    impl<I> Unpin for SpkTxOutIndex<I>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html index a66af4af0b..617b897aad 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_chain/trait.Append.html @@ -71,4 +71,4 @@ T7: Append, T8: Append, T9: Append, - T10: Append,

    source§

    fn append(&mut self, _other: Self)

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T> Append for Vec<T>

    source§

    fn append(&mut self, other: Self)

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T: Ord> Append for BTreeSet<T>

    source§

    fn append(&mut self, other: Self)

    source§

    fn is_empty(&self) -> bool

    Implementors§

    source§

    impl<A: Ord> Append for bdk_chain::tx_graph::ChangeSet<A>

    source§

    impl<A: Anchor, IA: Append> Append for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>

    source§

    impl<K: Ord> Append for bdk_chain::keychain::ChangeSet<K>

    \ No newline at end of file + T10: Append,
    source§

    fn append(&mut self, _other: Self)

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T> Append for Vec<T>

    source§

    fn append(&mut self, other: Self)

    source§

    fn is_empty(&self) -> bool

    source§

    impl<T: Ord> Append for BTreeSet<T>

    source§

    fn append(&mut self, other: Self)

    source§

    fn is_empty(&self) -> bool

    Implementors§

    source§

    impl<A: Ord> Append for bdk_chain::tx_graph::ChangeSet<A>

    source§

    impl<A: Anchor, IA: Append> Append for bdk_chain::indexed_tx_graph::ChangeSet<A, IA>

    source§

    impl<K: Ord> Append for bdk_chain::keychain::ChangeSet<K>

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html index c1da0d6692..55a92b025b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/index.html @@ -27,6 +27,6 @@ has shown a user. bdk_chain -via a new TxGraph to be appended to any existing TxGraph data.

    +via a new TxGraph to be appended to any existing TxGraph data.

    Refer to example_esplora for a complete example.

    Re-exports§

    • pub use esplora_client;

    Traits§

    • Trait to extend the functionality of [esplora_client::AsyncClient].
    • Trait to extend the functionality of [esplora_client::BlockingClient].

    Type Aliases§

    • [esplora_client::Error]
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html index 5160dad7e5..3bd6af68e8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraAsyncExt.html @@ -2,35 +2,35 @@ // Required methods fn full_scan<'life0, 'async_trait, K>( &'life0 self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize - ) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>> where K: 'async_trait + Ord + Clone + Send, Self: 'async_trait, 'life0: 'async_trait; fn sync<'life0, 'async_trait>( &'life0 self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize - ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>> + ) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>> where Self: 'async_trait, 'life0: 'async_trait; }
    Expand description

    Trait to extend the functionality of [esplora_client::AsyncClient].

    Refer to crate-level documentation for more.

    Required Methods§

    source

    fn full_scan<'life0, 'async_trait, K>( &'life0 self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where K: 'async_trait + Ord + Clone + Send, Self: 'async_trait, 'life0: 'async_trait,

    Scan keychain scripts for transactions against Esplora, returning an update that can be applied to the receiving structures.

    • request: struct with data required to perform a spk-based blockchain client full scan, -see [FullScanRequest]
    • +see FullScanRequest

    The full scan for each keychain stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the max number of HTTP requests to @@ -46,30 +46,30 @@ and

    source

    fn sync<'life0, 'async_trait>( &'life0 self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where Self: 'async_trait, 'life0: 'async_trait,

    Sync a set of scripts with the blockchain (via an Esplora client) for the data -specified and return a [TxGraph].

    +specified and return a TxGraph.

    • request: struct with data required to perform a spk-based blockchain client sync, see -[SyncRequest]
    • +SyncRequest

    If the scripts to sync are unknown, such as when restoring or importing a keychain that may include scripts that have been used, use full_scan with the keychain.

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraAsyncExt for AsyncClient

    source§

    fn full_scan<'life0, 'async_trait, K>( &'life0 self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<FullScanResult<K>, Box<Error>>> + Send + 'async_trait>>
    where K: 'async_trait + Ord + Clone + Send, Self: 'async_trait, 'life0: 'async_trait,

    source§

    fn sync<'life0, 'async_trait>( &'life0 self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where +) -> Pin<Box<dyn Future<Output = Result<SyncResult, Box<Error>>> + Send + 'async_trait>>
    where Self: 'async_trait, 'life0: 'async_trait,

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html index 7b84dbda2d..48d83be333 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_esplora/trait.EsploraExt.html @@ -2,27 +2,27 @@ // Required methods fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize - ) -> Result<FullScanResult<K>, Error>; + ) -> Result<FullScanResult<K>, Error>; fn sync( &self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize - ) -> Result<SyncResult, Error>; + ) -> Result<SyncResult, Error>; }
    Expand description

    Trait to extend the functionality of [esplora_client::BlockingClient].

    Refer to crate-level documentation for more.

    Required Methods§

    source

    fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

    Scan keychain scripts for transactions against Esplora, returning an update that can be +) -> Result<FullScanResult<K>, Error>

    Scan keychain scripts for transactions against Esplora, returning an update that can be applied to the receiving structures.

    • request: struct with data required to perform a spk-based blockchain client full scan, -see [FullScanRequest]
    • +see FullScanRequest

    The full scan for each keychain stops after a gap of stop_gap script pubkeys with no associated transactions. parallel_requests specifies the max number of HTTP requests to @@ -38,23 +38,23 @@ and

    source

    fn sync( &self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Result<SyncResult, Error>

    Sync a set of scripts with the blockchain (via an Esplora client) for the data -specified and return a [TxGraph].

    +) -> Result<SyncResult, Error>

    Sync a set of scripts with the blockchain (via an Esplora client) for the data +specified and return a TxGraph.

    • request: struct with data required to perform a spk-based blockchain client sync, see -[SyncRequest]
    • +SyncRequest

    If the scripts to sync are unknown, such as when restoring or importing a keychain that may include scripts that have been used, use full_scan with the keychain.

    Object Safety§

    This trait is not object safe.

    Implementations on Foreign Types§

    source§

    impl EsploraExt for BlockingClient

    source§

    fn full_scan<K: Ord + Clone>( &self, - request: FullScanRequest<K>, + request: FullScanRequest<K>, stop_gap: usize, parallel_requests: usize -) -> Result<FullScanResult<K>, Error>

    source§

    fn sync( +) -> Result<FullScanResult<K>, Error>

    source§

    fn sync( &self, - request: SyncRequest, + request: SyncRequest, parallel_requests: usize -) -> Result<SyncResult, Error>

    Implementors§

    \ No newline at end of file +) -> Result<SyncResult, Error>

    Implementors§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html index 4e79113f87..ffa6aec7bd 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_file_store/struct.Store.html @@ -1,7 +1,7 @@ Store in bdk_file_store - Rust

    Struct bdk_file_store::Store

    source ·
    pub struct Store<C>
    where C: Sync + Send,
    { /* private fields */ }
    Expand description

    Persists an append-only list of changesets (C) to a single file.

    Implementations§

    source§

    impl<C> Store<C>
    where - C: Append + Serialize + DeserializeOwned + Send + Sync,

    source

    pub fn create_new<P>(magic: &[u8], file_path: P) -> Result<Self, FileError>

    source

    pub fn create_new<P>(magic: &[u8], file_path: P) -> Result<Self, FileError>
    where P: AsRef<Path>,

    Create a new Store file in write-only mode; error if the file exists.

    magic is the prefixed bytes to write to the new file. This will be checked when opening the Store in the future with open.

    @@ -41,7 +41,7 @@ changeset.

    directly after the appended changeset.

    Trait Implementations§

    source§

    impl<C> Debug for Store<C>
    where C: Sync + Send + Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<C> PersistBackend<C> for Store<C>
    where - C: Append + Serialize + DeserializeOwned + Send + Sync,

    source§

    fn write_changes(&mut self, changeset: &C) -> Result<()>

    Writes a changeset to the persistence backend. Read more
    source§

    fn load_from_persistence(&mut self) -> Result<Option<C>>

    Return the aggregate changeset C from persistence.

    Auto Trait Implementations§

    §

    impl<C> Freeze for Store<C>

    §

    impl<C> RefUnwindSafe for Store<C>

    source§

    fn write_changes(&mut self, changeset: &C) -> Result<()>

    Writes a changeset to the persistence backend. Read more
    source§

    fn load_from_persistence(&mut self) -> Result<Option<C>>

    Return the aggregate changeset C from persistence.

    Auto Trait Implementations§

    §

    impl<C> Freeze for Store<C>

    §

    impl<C> RefUnwindSafe for Store<C>
    where C: RefUnwindSafe,

    §

    impl<C> Send for Store<C>

    §

    impl<C> Sync for Store<C>

    §

    impl<C> Unpin for Store<C>
    where C: Unpin,

    §

    impl<C> UnwindSafe for Store<C>
    where C: UnwindSafe,

    Blanket Implementations§

    source§

    impl<T> Any for T
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/index.html index 1f32907d66..d844e13214 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/index.html @@ -1,5 +1,5 @@ bdk_persist - Rust

    Crate bdk_persist

    source ·
    Expand description

    §BDK Persist

    This crate is home to the PersistBackend trait which defines the behavior of a database to perform the task of persisting changes made to BDK data structures.

    The Persist type provides a convenient wrapper around a PersistBackend that allows staging changes before committing them.

    -

    Structs§

    Structs§

    Traits§

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.CombinedChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.CombinedChangeSet.html index e752303242..7c0c6a7a5b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.CombinedChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.CombinedChangeSet.html @@ -1,15 +1,15 @@ CombinedChangeSet in bdk_persist - Rust

    Struct bdk_persist::CombinedChangeSet

    source ·
    pub struct CombinedChangeSet<K, A> {
    -    pub chain: ChangeSet,
    -    pub indexed_tx_graph: ChangeSet<A, ChangeSet<K>>,
    +    pub chain: ChangeSet,
    +    pub indexed_tx_graph: ChangeSet<A, ChangeSet<K>>,
         pub network: Option<Network>,
    -}
    Expand description

    Changes from a combination of [bdk_chain] structures.

    -

    Fields§

    §chain: ChangeSet

    Changes to the LocalChain.

    -
    §indexed_tx_graph: ChangeSet<A, ChangeSet<K>>

    Changes to IndexedTxGraph.

    +}
    Expand description

    Changes from a combination of bdk_chain structures.

    +

    Fields§

    §chain: ChangeSet

    Changes to the LocalChain.

    +
    §indexed_tx_graph: ChangeSet<A, ChangeSet<K>>

    Changes to IndexedTxGraph.

    §network: Option<Network>

    Stores the network type of the transaction data.

    -

    Trait Implementations§

    source§

    impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>

    source§

    fn append(&mut self, other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>

    source§

    fn clone(&self) -> CombinedChangeSet<K, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug, A: Debug> Debug for CombinedChangeSet<K, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K, A> Default for CombinedChangeSet<K, A>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where +

    Trait Implementations§

    source§

    impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>

    source§

    fn append(&mut self, other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    source§

    impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>

    source§

    fn clone(&self) -> CombinedChangeSet<K, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl<K: Debug, A: Debug> Debug for CombinedChangeSet<K, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K, A> Default for CombinedChangeSet<K, A>

    source§

    fn default() -> Self

    Returns the “default value” for a type. Read more
    source§

    impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where A: Ord + Deserialize<'de>, K: Ord + Deserialize<'de>,

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where - __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

    source§

    fn from(chain: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

    source§

    fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> Self

    Converts to this type from the input type.
    source§

    impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>

    source§

    fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

    This method tests for self and other values to be equal, and is used + __D: Deserializer<'de>,
    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

    source§

    fn from(chain: ChangeSet) -> Self

    Converts to this type from the input type.
    source§

    impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

    source§

    fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> Self

    Converts to this type from the input type.
    source§

    impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>

    source§

    fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl<K, A> Serialize for CombinedChangeSet<K, A>
    where A: Ord + Serialize, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.Persist.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.Persist.html index 54fec6dbe9..9dfe37191d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.Persist.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_persist/struct.Persist.html @@ -4,7 +4,7 @@ before they are persisted.

    Persist::stage can be used to stage changes first and then Persist::commit can be used to write changes to disk.

    Implementations§

    source§

    impl<C> Persist<C>
    where - C: Default + Append,

    source

    pub fn new(backend: impl PersistBackend<C> + Send + Sync + 'static) -> Self

    Create a new Persist from PersistBackend.

    + C: Default + Append,
    source

    pub fn new(backend: impl PersistBackend<C> + Send + Sync + 'static) -> Self

    Create a new Persist from PersistBackend.

    source

    pub fn stage(&mut self, changeset: C)

    Stage a changeset to be committed later with commit.

    source

    pub fn staged(&self) -> &C

    Get the changes that have not been committed yet.

    source

    pub fn commit(&mut self) -> Result<Option<C>>

    Commit the staged changes to the underlying persistence backend.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html index aa0e58d7ee..033c9727ae 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_sqlite/struct.Store.html @@ -2,10 +2,10 @@

    The changesets loaded or stored represent changes to keychain and blockchain data.

    Implementations§

    source§

    impl<K, A> Store<K, A>
    where K: Ord + for<'de> Deserialize<'de> + Serialize + Send, - A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,

    source

    pub fn new(conn: Connection) -> Result<Self, Error>

    Creates a new store from a [Connection].

    + A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,
    source

    pub fn new(conn: Connection) -> Result<Self, Error>

    Creates a new store from a [Connection].

    Trait Implementations§

    source§

    impl<K, A> Debug for Store<K, A>

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<K, A, C> PersistBackend<C> for Store<K, A>
    where K: Ord + for<'de> Deserialize<'de> + Serialize + Send, - A: Anchor + for<'de> Deserialize<'de> + Serialize + Send, + A: Anchor + for<'de> Deserialize<'de> + Serialize + Send, C: Clone + From<CombinedChangeSet<K, A>> + Into<CombinedChangeSet<K, A>>,

    source§

    fn write_changes(&mut self, changeset: &C) -> Result<()>

    Writes a changeset to the persistence backend. Read more
    source§

    fn load_from_persistence(&mut self) -> Result<Option<C>>

    Return the aggregate changeset C from persistence.

    Auto Trait Implementations§

    §

    impl<K, A> !Freeze for Store<K, A>

    §

    impl<K, A> RefUnwindSafe for Store<K, A>

    §

    impl<K, A> Send for Store<K, A>
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html index 0057b90bff..0a90975ab9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/enum.Descriptor.html @@ -236,8 +236,8 @@ default(0x02) y-coordinate.

    This function will return an error if hardened derivation is attempted.

    Trait Implementations§

    §

    impl<Pk> Clone for Descriptor<Pk>
    where Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    §

    impl<Pk> Debug for Descriptor<Pk>
    where - Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    §

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    §

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable. -Panics if the descriptor wildcard is hardened.
    §

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor id, calculated as the sha256 of the descriptor, checksum not + Pk: MiniscriptKey,
    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    source§

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable. +Panics if the descriptor wildcard is hardened.
    source§

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor id, calculated as the sha256 of the descriptor, checksum not included.
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where Pk: FromStrKey,

    §

    fn deserialize<D>( deserializer: D diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html index d1d09c9ff6..7b1b191cf1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/enum.Error.html @@ -1,4 +1,4 @@ -Error in bdk_wallet::descriptor::error - Rust

    Enum bdk_wallet::descriptor::error::Error

    source ·
    pub enum Error {
    +Error in bdk_wallet::descriptor::error - Rust

    Enum bdk_wallet::descriptor::error::Error

    source ·
    pub enum Error {
     
    Show 13 variants InvalidHdKeyPath, InvalidDescriptorChecksum, HardenedDerivationXpub, @@ -26,7 +26,7 @@
    §

    Miniscript(Error)

    Miniscript error

    §

    Hex(HexToBytesError)

    Hex decoding error

    §

    ExternalAndInternalAreTheSame

    The provided wallet descriptors are identical

    -

    Trait Implementations§

    source§

    impl Debug for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for Error

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<HexToBytesError> for Error

    source§

    fn from(err: HexToBytesError) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.
    source§

    impl From<ParsePublicKeyError> for Error

    source§

    fn from(err: ParsePublicKeyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for Error

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for Error

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for CreateTxError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for Error

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<HexToBytesError> for Error

    source§

    fn from(err: HexToBytesError) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.
    source§

    impl From<ParsePublicKeyError> for Error

    source§

    fn from(err: ParsePublicKeyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/index.html index 3e0ac10330..097dee9880 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/error/index.html @@ -1,2 +1,2 @@ -bdk_wallet::descriptor::error - Rust

    Module bdk_wallet::descriptor::error

    source ·
    Expand description

    Descriptor errors

    +bdk_wallet::descriptor::error - Rust

    Module bdk_wallet::descriptor::error

    source ·
    Expand description

    Descriptor errors

    Enums§

    • Errors related to the parsing and usage of descriptors
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html index 1b0bc5ab28..2166108f27 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/descriptor/policy/enum.PolicyError.html @@ -12,7 +12,7 @@
    §

    AddOnPartialComplete

    Can not add to an item that is Satisfaction::PartialComplete

    §

    MixedTimelockUnits

    Can not merge CSV or timelock values unless both are less than or both are equal or greater than 500_000_000

    §

    IncompatibleConditions

    Incompatible conditions (not currently used)

    -

    Trait Implementations§

    source§

    impl Debug for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for PolicyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<PolicyError> for CreateTxError

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for PolicyError

    source§

    fn eq(&self, other: &PolicyError) -> bool

    This method tests for self and other values to be equal, and is used +

    Trait Implementations§

    source§

    impl Debug for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for PolicyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for PolicyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<PolicyError> for CreateTxError

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl From<PolicyError> for Error

    source§

    fn from(err: PolicyError) -> Self

    Converts to this type from the input type.
    source§

    impl PartialEq for PolicyError

    source§

    fn eq(&self, other: &PolicyError) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
    source§

    impl Eq for PolicyError

    source§

    impl StructuralPartialEq for PolicyError

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html index 3054669bf6..a8d4162836 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/index.html @@ -167,4 +167,4 @@ that the Wallet can use to update its view of the chain.

    submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

    -

    Re-exports§

    • pub extern crate bitcoin;
    • pub extern crate miniscript;
    • pub use descriptor::template;
    • pub use descriptor::HdKeyPaths;
    • pub use wallet::signer;
    • pub use wallet::signer::SignOptions;
    • pub use wallet::tx_builder::TxBuilder;
    • pub use wallet::Wallet;
    • pub use bdk_chain as chain;

    Modules§

    Macros§

    • Macro to write full descriptors with code
    • Macro to write descriptor fragments with code

    Structs§

    Enums§

    Functions§

    • Get the version of BDK at runtime

    \ No newline at end of file +

    Re-exports§

    Modules§

    Macros§

    • Macro to write full descriptors with code
    • Macro to write descriptor fragments with code

    Structs§

    Enums§

    Functions§

    • Get the version of BDK at runtime
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html index ec2cc48cde..741a0d760d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/keys/enum.KeyError.html @@ -12,7 +12,7 @@
    §

    Message(String)

    Custom error message

    §

    Bip32(Error)

    BIP32 error

    §

    Miniscript(Error)

    Miniscript error

    -

    Trait Implementations§

    source§

    impl Debug for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for KeyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl Debug for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Display for KeyError

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Error for KeyError

    1.30.0 · source§

    fn source(&self) -> Option<&(dyn Error + 'static)>

    The lower-level source of this error, if any. Read more
    1.0.0 · source§

    fn description(&self) -> &str

    👎Deprecated since 1.42.0: use the Display impl or to_string()
    1.0.0 · source§

    fn cause(&self) -> Option<&dyn Error>

    👎Deprecated since 1.33.0: replaced by Error::source, which can support downcasting
    source§

    fn provide<'a>(&'a self, request: &mut Request<'a>)

    🔬This is a nightly-only experimental API. (error_generic_member_access)
    Provides type based access to context intended for error reports. Read more
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<Error> for KeyError

    source§

    fn from(err: Error) -> Self

    Converts to this type from the input type.
    source§

    impl From<KeyError> for Error

    source§

    fn from(key_error: KeyError) -> Error

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html index cbeae4c490..77fd14d2e3 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/struct.LocalOutput.html @@ -4,14 +4,14 @@ pub keychain: KeychainKind, pub is_spent: bool, pub derivation_index: u32, - pub confirmation_time: ConfirmationTime, + pub confirmation_time: ConfirmationTime, }
    Expand description

    An unspent output owned by a Wallet.

    Fields§

    §outpoint: OutPoint

    Reference to a transaction output

    §txout: TxOut

    Transaction output

    §keychain: KeychainKind

    Type of keychain

    §is_spent: bool

    Whether this UTXO is spent or not

    §derivation_index: u32

    The derivation index for the script pubkey in the wallet

    -
    §confirmation_time: ConfirmationTime

    The confirmation time for transaction containing this utxo

    +
    §confirmation_time: ConfirmationTime

    The confirmation time for transaction containing this utxo

    Trait Implementations§

    source§

    impl Clone for LocalOutput

    source§

    fn clone(&self) -> LocalOutput

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for LocalOutput

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl<'de> Deserialize<'de> for LocalOutput

    source§

    fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
    where __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    source§

    impl Hash for LocalOutput

    source§

    fn hash<__H: Hasher>(&self, state: &mut __H)

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where H: Hasher, diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html index 01ba10f8ec..340e1feb92 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/enum.ApplyBlockError.html @@ -1,11 +1,11 @@ ApplyBlockError in bdk_wallet::wallet - Rust

    Enum bdk_wallet::wallet::ApplyBlockError

    source ·
    pub enum ApplyBlockError {
    -    CannotConnect(CannotConnectError),
    +    CannotConnect(CannotConnectError),
         UnexpectedConnectedToHash {
             connected_to_hash: BlockHash,
             expected_hash: BlockHash,
         },
     }
    Expand description

    An error that may occur when applying a block to Wallet.

    -

    Variants§

    §

    CannotConnect(CannotConnectError)

    Occurs when the update chain cannot connect with original chain.

    +

    Variants§

    §

    CannotConnect(CannotConnectError)

    Occurs when the update chain cannot connect with original chain.

    §

    UnexpectedConnectedToHash

    Occurs when the connected_to hash does not match the hash derived from block.

    Fields

    §connected_to_hash: BlockHash

    Block hash of connected_to.

    §expected_hash: BlockHash

    Expected block hash of connected_to, as derived from block.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/fn.wallet_name_from_descriptor.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/fn.wallet_name_from_descriptor.html index 757717ea5a..e2e00ba488 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/fn.wallet_name_from_descriptor.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/fn.wallet_name_from_descriptor.html @@ -1,4 +1,4 @@ -wallet_name_from_descriptor in bdk_wallet::wallet - Rust

    Function bdk_wallet::wallet::wallet_name_from_descriptor

    source ·
    pub fn wallet_name_from_descriptor<T>(
    +wallet_name_from_descriptor in bdk_wallet::wallet - Rust

    Function bdk_wallet::wallet::wallet_name_from_descriptor

    source ·
    pub fn wallet_name_from_descriptor<T>(
         descriptor: T,
         change_descriptor: Option<T>,
         network: Network,
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/index.html
    index 3bacfea4dc..3207507e47 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/index.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/index.html
    @@ -1,4 +1,4 @@
    -bdk_wallet::wallet - Rust

    Module bdk_wallet::wallet

    source ·
    Expand description

    Wallet

    +bdk_wallet::wallet - Rust

    Module bdk_wallet::wallet

    source ·
    Expand description

    Wallet

    This module defines the Wallet.

    Modules§

    Structs§

    • A derived address and the index it was found at. For convenience this automatically derefs to Address
    • Balance, differentiated into various categories.
    • An update to Wallet.
    • A Bitcoin wallet

    Enums§

    Traits§

    source§

    impl Display for Balance

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    source§

    impl PartialEq for Balance

    source§

    fn eq(&self, other: &Balance) -> bool

    This method tests for self and other values to be equal, and is used by ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always -sufficient, and should not be overridden without very good reason.
    §

    impl Serialize for Balance

    §

    fn serialize<__S>( +sufficient, and should not be overridden without very good reason.

    source§

    impl Serialize for Balance

    source§

    fn serialize<__S>( &self, __serializer: __S ) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where - __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    §

    impl Eq for Balance

    §

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where + __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    source§

    impl Eq for Balance

    source§

    impl StructuralPartialEq for Balance

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html index 2ab63dc181..a40fd518fb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Update.html @@ -1,14 +1,14 @@ Update in bdk_wallet::wallet - Rust

    Struct bdk_wallet::wallet::Update

    source ·
    pub struct Update {
         pub last_active_indices: BTreeMap<KeychainKind, u32>,
    -    pub graph: TxGraph<ConfirmationTimeHeightAnchor>,
    -    pub chain: Option<CheckPoint>,
    +    pub graph: TxGraph<ConfirmationTimeHeightAnchor>,
    +    pub chain: Option<CheckPoint>,
     }
    Expand description

    An update to Wallet.

    -

    It updates [bdk_chain::keychain::KeychainTxOutIndex], [bdk_chain::TxGraph] and [local_chain::LocalChain] atomically.

    +

    It updates bdk_chain::keychain::KeychainTxOutIndex, bdk_chain::TxGraph and local_chain::LocalChain atomically.

    Fields§

    §last_active_indices: BTreeMap<KeychainKind, u32>

    Contains the last active derivation indices per keychain (K), which is used to update the -[KeychainTxOutIndex].

    -
    §graph: TxGraph<ConfirmationTimeHeightAnchor>

    Update for the wallet’s internal [TxGraph].

    -
    §chain: Option<CheckPoint>

    Update for the wallet’s internal LocalChain.

    -

    Trait Implementations§

    source§

    impl Clone for Update

    source§

    fn clone(&self) -> Update

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Update

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Update

    source§

    fn default() -> Update

    Returns the “default value” for a type. Read more
    source§

    impl From<FullScanResult<KeychainKind>> for Update

    source§

    fn from(value: FullScanResult<KeychainKind>) -> Self

    Converts to this type from the input type.
    source§

    impl From<SyncResult> for Update

    source§

    fn from(value: SyncResult) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T§graph: TxGraph<ConfirmationTimeHeightAnchor>

    Update for the wallet’s internal TxGraph.

    +
    §chain: Option<CheckPoint>

    Update for the wallet’s internal LocalChain.

    +

    Trait Implementations§

    source§

    impl Clone for Update

    source§

    fn clone(&self) -> Update

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    source§

    impl Debug for Update

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more
    source§

    impl Default for Update

    source§

    fn default() -> Update

    Returns the “default value” for a type. Read more
    source§

    impl From<FullScanResult<KeychainKind>> for Update

    source§

    fn from(value: FullScanResult<KeychainKind>) -> Self

    Converts to this type from the input type.
    source§

    impl From<SyncResult> for Update

    source§

    fn from(value: SyncResult) -> Self

    Converts to this type from the input type.

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html index 5a9e18d2e0..d652145427 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/struct.Wallet.html @@ -16,7 +16,7 @@ Its main components are:

    network: Network, genesis_hash: BlockHash ) -> Result<Self, DescriptorError>

    Creates a wallet that does not persist data, with a custom genesis hash.

    -
    source§

    impl Wallet

    source§

    impl Wallet

    source

    pub fn new<E: IntoWalletDescriptor>( descriptor: E, change_descriptor: E, db: impl PersistBackend<ChangeSet> + Send + Sync + 'static, @@ -83,7 +83,7 @@ useful for syncing from alternative networks.

    §Panics

    This panics when the caller requests for an address of derivation index greater than the BIP32 max index.

    -
    source

    pub fn reveal_next_address( +

    source

    pub fn reveal_next_address( &mut self, keychain: KeychainKind ) -> Result<AddressInfo>

    Attempt to reveal the next address of the given keychain.

    @@ -93,7 +93,7 @@ index defined in §Errors

    If writing to persistent storage fails.

    -
    source

    pub fn reveal_addresses_to( +

    source

    pub fn reveal_addresses_to( &mut self, keychain: KeychainKind, index: u32 @@ -104,7 +104,7 @@ possible index. If all addresses up to the given index are already no new addresses are returned.

    §Errors

    If writing to persistent storage fails.

    -
    source

    pub fn next_unused_address( +

    source

    pub fn next_unused_address( &mut self, keychain: KeychainKind ) -> Result<AddressInfo>

    Get the next unused address for the given keychain, i.e. the address with the lowest @@ -113,54 +113,54 @@ derivation index that hasn’t been used.

    are available. See also reveal_next_address.

    §Errors

    If writing to persistent storage fails.

    -
    source

    pub fn mark_used(&mut self, keychain: KeychainKind, index: u32) -> bool

    Marks an address used of the given keychain at index.

    +
    source

    pub fn mark_used(&mut self, keychain: KeychainKind, index: u32) -> bool

    Marks an address used of the given keychain at index.

    Returns whether the given index was present and then removed from the unused set.

    -
    source

    pub fn unmark_used(&mut self, keychain: KeychainKind, index: u32) -> bool

    Undoes the effect of mark_used and returns whether the index was inserted +

    source

    pub fn unmark_used(&mut self, keychain: KeychainKind, index: u32) -> bool

    Undoes the effect of mark_used and returns whether the index was inserted back into the unused set.

    Since this is only a superficial marker, it will have no effect if the address at the given index was actually used, i.e. the wallet has previously indexed a tx output for the derived spk.

    -
    source

    pub fn list_unused_addresses( +

    source

    pub fn list_unused_addresses( &self, keychain: KeychainKind ) -> impl DoubleEndedIterator<Item = AddressInfo> + '_

    List addresses that are revealed but unused.

    Note if the returned iterator is empty you can reveal more addresses by using reveal_next_address or reveal_addresses_to.

    -
    source

    pub fn is_mine(&self, script: &Script) -> bool

    Return whether or not a script is part of this wallet (either internal or external)

    -
    source

    pub fn derivation_of_spk(&self, spk: &Script) -> Option<(KeychainKind, u32)>

    Finds how the wallet derived the script pubkey spk.

    +
    source

    pub fn is_mine(&self, script: &Script) -> bool

    Return whether or not a script is part of this wallet (either internal or external)

    +
    source

    pub fn derivation_of_spk(&self, spk: &Script) -> Option<(KeychainKind, u32)>

    Finds how the wallet derived the script pubkey spk.

    Will only return Some(_) if the wallet has given out the spk.

    -
    source

    pub fn list_unspent(&self) -> impl Iterator<Item = LocalOutput> + '_

    Return the list of unspent outputs of this wallet

    -
    source

    pub fn list_output(&self) -> impl Iterator<Item = LocalOutput> + '_

    List all relevant outputs (includes both spent and unspent, confirmed and unconfirmed).

    +
    source

    pub fn list_unspent(&self) -> impl Iterator<Item = LocalOutput> + '_

    Return the list of unspent outputs of this wallet

    +
    source

    pub fn list_output(&self) -> impl Iterator<Item = LocalOutput> + '_

    List all relevant outputs (includes both spent and unspent, confirmed and unconfirmed).

    To list only unspent outputs (UTXOs), use Wallet::list_unspent instead.

    -
    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    -
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    -
    source

    pub fn all_unbounded_spk_iters( +

    source

    pub fn checkpoints(&self) -> CheckPointIter

    Get all the checkpoints the wallet is currently storing indexed by height.

    +
    source

    pub fn latest_checkpoint(&self) -> CheckPoint

    Returns the latest checkpoint.

    +
    source

    pub fn all_unbounded_spk_iters( &self -) -> BTreeMap<KeychainKind, impl Iterator<Item = (u32, ScriptBuf)> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    +) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone>

    Get unbounded script pubkey iterators for both Internal and External keychains.

    This is intended to be used when doing a full scan of your addresses (e.g. after restoring from seed words). You pass the BTreeMap of iterators to a blockchain data source (e.g. electrum server) which will go through each address until it reaches a stop gap.

    Note carefully that iterators go over all script pubkeys on the keychains (not what script pubkeys the wallet is storing internally).

    -
    source

    pub fn unbounded_spk_iter( +

    source

    pub fn unbounded_spk_iter( &self, keychain: KeychainKind -) -> impl Iterator<Item = (u32, ScriptBuf)> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    +) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone

    Get an unbounded script pubkey iterator for the given keychain.

    See all_unbounded_spk_iters for more documentation

    -
    source

    pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput>

    Returns the utxo owned by this wallet corresponding to outpoint if it exists in the +

    source

    pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput>

    Returns the utxo owned by this wallet corresponding to outpoint if it exists in the wallet’s database.

    -
    source

    pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut)

    Inserts a [TxOut] at [OutPoint] into the wallet’s transaction graph.

    +
    source

    pub fn insert_txout(&mut self, outpoint: OutPoint, txout: TxOut)

    Inserts a [TxOut] at [OutPoint] into the wallet’s transaction graph.

    This is used for providing a previous output’s value so that we can use calculate_fee or calculate_fee_rate on a given transaction. Outputs inserted with this method will not be returned in list_unspent or list_output.

    Any inserted TxOuts are not persisted until commit is called.

    WARNING: This should only be used to add TxOuts that the wallet does not own. Only insert TxOuts that you trust the values for!

    -
    source

    pub fn calculate_fee( +

    source

    pub fn calculate_fee( &self, tx: &Transaction -) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    +) -> Result<Amount, CalculateFeeError>

    Calculates the fee of a given transaction. Returns [Amount::ZERO] if tx is a coinbase transaction.

    To calculate the fee for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -170,10 +170,10 @@ manually insert the TxOut(s) into the tx graph using the
    let tx = &psbt.clone().extract_tx().expect("tx");
     let fee = wallet.calculate_fee(tx).expect("fee");
    -
    source

    pub fn calculate_fee_rate( +

    source

    pub fn calculate_fee_rate( &self, tx: &Transaction -) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    +) -> Result<FeeRate, CalculateFeeError>

    Calculate the [FeeRate] for a given transaction.

    To calculate the fee rate for a [Transaction] with inputs not owned by this wallet you must manually insert the TxOut(s) into the tx graph using the insert_txout function.

    Note tx does not have to be in the graph for this to work.

    @@ -183,7 +183,7 @@ manually insert the TxOut(s) into the tx graph using the
    let tx = &psbt.clone().extract_tx().expect("tx");
     let fee_rate = wallet.calculate_fee_rate(tx).expect("fee rate");
    -
    source

    pub fn sent_and_received(&self, tx: &Transaction) -> (Amount, Amount)

    Compute the tx’s sent and received [Amount]s.

    +
    source

    pub fn sent_and_received(&self, tx: &Transaction) -> (Amount, Amount)

    Compute the tx’s sent and received [Amount]s.

    This method returns a tuple (sent, received). Sent is the sum of the txin amounts that spend from previous txouts tracked by this wallet. Received is the summation of this tx’s outputs that send to script pubkeys tracked by this wallet.

    @@ -193,15 +193,15 @@ of this tx’s outputs that send to script pubkeys tracked by this wallet.

    let tx = &psbt.clone().extract_tx().expect("tx");
     let (sent, received) = wallet.sent_and_received(tx);
    -
    source

    pub fn get_tx( +

    source

    pub fn get_tx( &self, txid: Txid -) -> Option<CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>>

    Get a single transaction from the wallet as a [CanonicalTx] (if the transaction exists).

    +) -> Option<CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>>

    Get a single transaction from the wallet as a CanonicalTx (if the transaction exists).

    CanonicalTx contains the full transaction alongside meta-data such as:

      -
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist +
    • Blocks that the transaction is Anchored in. These may or may not be blocks that exist in the best chain.
    • -
    • The [ChainPosition] of the transaction in the best chain - whether the transaction is +
    • The ChainPosition of the transaction in the best chain - whether the transaction is confirmed or unconfirmed. If the transaction is confirmed, the anchor which proves the confirmation is provided. If the transaction is unconfirmed, the unix timestamp of when the transaction was last seen in the mempool is provided.
    • @@ -234,17 +234,17 @@ the transaction was last seen in the mempool is provided. last_seen, ), }
    -
    source

    pub fn insert_checkpoint( +

    source

    pub fn insert_checkpoint( &mut self, - block_id: BlockId -) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain. + block_id: BlockId +) -> Result<bool, AlterCheckPointError>

    Add a new checkpoint to the wallet’s internal view of the chain. This stages but does not commit the change.

    Returns whether anything changed with the insertion (e.g. false if checkpoint was already there).

    -
    source

    pub fn insert_tx( +

    source

    pub fn insert_tx( &mut self, tx: Transaction, - position: ConfirmationTime + position: ConfirmationTime ) -> Result<bool, InsertTxError>

    Add a transaction to the wallet’s internal view of the chain. This stages but does not commit the change.

    Returns whether anything changed with the transaction insertion (e.g. false if the @@ -255,19 +255,19 @@ inserting new transactions.

    WARNING: If position is confirmed, we anchor the tx to a the lowest checkpoint that is >= the position’s height. The caller is responsible for ensuring the tx exists in our local view of the best chain’s history.

    -
    source

    pub fn transactions( +

    source

    pub fn transactions( &self -) -> impl Iterator<Item = CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>> + '_

    Iterate over the transactions in the wallet.

    -
    source

    pub fn balance(&self) -> Balance

    Return the balance, separated into available, trusted-pending, untrusted-pending and immature +) -> impl Iterator<Item = CanonicalTx<'_, Arc<Transaction>, ConfirmationTimeHeightAnchor>> + '_

    Iterate over the transactions in the wallet.

    +
    source

    pub fn balance(&self) -> Balance

    Return the balance, separated into available, trusted-pending, untrusted-pending and immature values.

    -
    source

    pub fn add_signer( +

    source

    pub fn add_signer( &mut self, keychain: KeychainKind, ordering: SignerOrdering, signer: Arc<dyn TransactionSigner> )

    Add an external signer

    See the signer module for an example.

    -
    source

    pub fn get_signers(&self, keychain: KeychainKind) -> Arc<SignersContainer>

    Get the signers

    +
    source

    pub fn get_signers(&self, keychain: KeychainKind) -> Arc<SignersContainer>

    Get the signers

    §Example
    let descriptor = "wpkh(tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/1'/0'/0/*)";
     let change_descriptor = "wpkh(tprv8ZgxMBicQKsPe73PBRSmNbTfbcsZnwWhz5eVmhHpi31HW29Z7mc9B4cWGRQzopNUzZUT391DeDJxL2PefNunWyLgqCKRMDkU1s2s8bAfoSk/84'/1'/0'/1/*)";
    @@ -278,7 +278,7 @@ values.

    } Ok::<(), Box<dyn std::error::Error>>(())
    -
    source

    pub fn build_tx(&mut self) -> TxBuilder<'_, DefaultCoinSelectionAlgorithm>

    Start building a transaction.

    +
    source

    pub fn build_tx(&mut self) -> TxBuilder<'_, DefaultCoinSelectionAlgorithm>

    Start building a transaction.

    This returns a blank TxBuilder from which you can specify the parameters for the transaction.

    §Example
    let psbt = {
    @@ -289,7 +289,7 @@ values.

    }; // sign and broadcast ...
    -
    source

    pub fn build_fee_bump( +

    source

    pub fn build_fee_bump( &mut self, txid: Txid ) -> Result<TxBuilder<'_, DefaultCoinSelectionAlgorithm>, BuildFeeBumpError>

    Bump the fee of a transaction previously created with this wallet.

    @@ -317,7 +317,7 @@ pre-populated with the inputs and outputs of the original transaction.

    let _ = wallet.sign(&mut psbt, SignOptions::default())?; let fee_bumped_tx = psbt.extract_tx(); // broadcast fee_bumped_tx to replace original
    -
    source

    pub fn sign( +

    source

    pub fn sign( &self, psbt: &mut Psbt, sign_options: SignOptions @@ -335,14 +335,14 @@ in this library will.

    }; let finalized = wallet.sign(&mut psbt, SignOptions::default())?; assert!(finalized, "we should have signed all the inputs"); -

    source

    pub fn policies( +

    source

    pub fn policies( &self, keychain: KeychainKind ) -> Result<Option<Policy>, DescriptorError>

    Return the spending policies for the wallet’s descriptor

    -
    source

    pub fn public_descriptor(&self, keychain: KeychainKind) -> &ExtendedDescriptor

    Return the “public” version of the wallet’s descriptor, meaning a new descriptor that has +

    source

    pub fn public_descriptor(&self, keychain: KeychainKind) -> &ExtendedDescriptor

    Return the “public” version of the wallet’s descriptor, meaning a new descriptor that has the same structure but with every secret key removed

    This can be used to build a watch-only version of a wallet

    -
    source

    pub fn finalize_psbt( +

    source

    pub fn finalize_psbt( &self, psbt: &mut Psbt, sign_options: SignOptions @@ -352,56 +352,56 @@ validation and construct the respective scriptSig or scriptWi for further information.

    Returns true if the PSBT could be finalized, and false otherwise.

    The SignOptions can be used to tweak the behavior of the finalizer.

    -

    source

    pub fn secp_ctx(&self) -> &Secp256k1<All>

    Return the secp256k1 context used for all signing operations

    -
    source

    pub fn get_descriptor_for_keychain( +

    source

    pub fn secp_ctx(&self) -> &Secp256k1<All>

    Return the secp256k1 context used for all signing operations

    +
    source

    pub fn get_descriptor_for_keychain( &self, keychain: KeychainKind ) -> &ExtendedDescriptor

    Returns the descriptor used to create addresses for a particular keychain.

    -
    source

    pub fn derivation_index(&self, keychain: KeychainKind) -> Option<u32>

    The derivation index of this wallet. It will return None if it has not derived any addresses. +

    source

    pub fn derivation_index(&self, keychain: KeychainKind) -> Option<u32>

    The derivation index of this wallet. It will return None if it has not derived any addresses. Otherwise, it will return the index of the highest address it has derived.

    -
    source

    pub fn next_derivation_index(&self, keychain: KeychainKind) -> u32

    The index of the next address that you would get if you were to ask the wallet for a new address

    -
    source

    pub fn cancel_tx(&mut self, tx: &Transaction)

    Informs the wallet that you no longer intend to broadcast a tx that was built from it.

    +
    source

    pub fn next_derivation_index(&self, keychain: KeychainKind) -> u32

    The index of the next address that you would get if you were to ask the wallet for a new address

    +
    source

    pub fn cancel_tx(&mut self, tx: &Transaction)

    Informs the wallet that you no longer intend to broadcast a tx that was built from it.

    This frees up the change address used when creating the tx for use in future transactions.

    -
    source

    pub fn get_psbt_input( +

    source

    pub fn get_psbt_input( &self, utxo: LocalOutput, sighash_type: Option<PsbtSighashType>, only_witness_utxo: bool ) -> Result<Input, CreateTxError>

    get the corresponding PSBT Input for a LocalUtxo

    -
    source

    pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String

    Return the checksum of the public descriptor associated to keychain

    +
    source

    pub fn descriptor_checksum(&self, keychain: KeychainKind) -> String

    Return the checksum of the public descriptor associated to keychain

    Internally calls Self::get_descriptor_for_keychain to fetch the right descriptor

    -
    source

    pub fn apply_update( +

    source

    pub fn apply_update( &mut self, update: impl Into<Update> -) -> Result<(), CannotConnectError>

    Applies an update to the wallet and stages the changes (but does not commit them).

    +) -> Result<(), CannotConnectError>

    Applies an update to the wallet and stages the changes (but does not commit them).

    Usually you create an update by interacting with some blockchain data source and inserting transactions related to your wallet into it.

    -
    source

    pub fn commit(&mut self) -> Result<bool>

    Commits all currently staged changed to the persistence backend returning and error when +

    source

    pub fn commit(&mut self) -> Result<bool>

    Commits all currently staged changed to the persistence backend returning and error when this fails.

    This returns whether the update resulted in any changes.

    -
    source

    pub fn staged(&self) -> &ChangeSet

    Returns the changes that will be committed with the next call to commit.

    -
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Get a reference to the inner [TxGraph].

    -
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner [KeychainTxOutIndex].

    -
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner [LocalChain].

    -
    source

    pub fn apply_block( +

    source

    pub fn staged(&self) -> &ChangeSet

    Returns the changes that will be committed with the next call to commit.

    +
    source

    pub fn tx_graph(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Get a reference to the inner TxGraph.

    +
    source

    pub fn spk_index(&self) -> &KeychainTxOutIndex<KeychainKind>

    Get a reference to the inner KeychainTxOutIndex.

    +
    source

    pub fn local_chain(&self) -> &LocalChain

    Get a reference to the inner LocalChain.

    +
    source

    pub fn apply_block( &mut self, block: &Block, height: u32 -) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the +) -> Result<(), CannotConnectError>

    Introduces a block of height to the wallet, and tries to connect it to the prev_blockhash of the block’s header.

    This is a convenience method that is equivalent to calling apply_block_connected_to with prev_blockhash and height-1 as the connected_to parameter.

    -
    source

    pub fn apply_block_connected_to( +

    source

    pub fn apply_block_connected_to( &mut self, block: &Block, height: u32, - connected_to: BlockId -) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the + connected_to: BlockId +) -> Result<(), ApplyHeaderError>

    Applies relevant transactions from block of height to the wallet, and connects the block to the internal chain.

    The connected_to parameter informs the wallet how this block connects to the internal -[LocalChain]. Relevant transactions are filtered from the block and inserted into the -internal [TxGraph].

    -
    source

    pub fn apply_unconfirmed_txs<'t>( +LocalChain. Relevant transactions are filtered from the block and inserted into the +internal TxGraph.

    +

    source

    pub fn apply_unconfirmed_txs<'t>( &mut self, unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)> )

    Apply relevant unconfirmed transactions to the wallet.

    @@ -410,18 +410,18 @@ internal [TxGraph].

    when the transaction was last seen in the mempool. This is used for conflict resolution when there is conflicting unconfirmed transactions. The transaction with the later last_seen is prioritized.

    -
    source§

    impl Wallet

    Methods to construct sync/full-scan requests for spk-based chain sources.

    -
    source

    pub fn start_sync_with_revealed_spks(&self) -> SyncRequest

    Create a partial [SyncRequest] for this wallet for all revealed spks.

    +
    source§

    impl Wallet

    Methods to construct sync/full-scan requests for spk-based chain sources.

    +
    source

    pub fn start_sync_with_revealed_spks(&self) -> SyncRequest

    Create a partial SyncRequest for this wallet for all revealed spks.

    This is the first step when performing a spk-based wallet partial sync, the returned -[SyncRequest] collects all revealed script pubkeys from the wallet keychain needed to +SyncRequest collects all revealed script pubkeys from the wallet keychain needed to start a blockchain sync with a spk based blockchain client.

    -
    source

    pub fn start_full_scan(&self) -> FullScanRequest<KeychainKind>

    Create a [`FullScanRequest] for this wallet.

    +
    source

    pub fn start_full_scan(&self) -> FullScanRequest<KeychainKind>

    Create a `FullScanRequest for this wallet.

    This is the first step when performing a spk-based wallet full scan, the returned -[`FullScanRequest] collects iterators for the wallet’s keychain script pub keys needed to +`FullScanRequest collects iterators for the wallet’s keychain script pub keys needed to start a blockchain full scan with a spk based blockchain client.

    This operation is generally only used when importing or restoring a previously used wallet in which the list of used scripts is not known.

    -

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet

    source§

    fn as_ref(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Debug for Wallet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where +

    Trait Implementations§

    source§

    impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet

    source§

    fn as_ref(&self) -> &TxGraph<ConfirmationTimeHeightAnchor>

    Converts this type into a shared reference of the (usually inferred) input type.
    source§

    impl Debug for Wallet

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result

    Formats the value using the given formatter. Read more

    Auto Trait Implementations§

    Blanket Implementations§

    source§

    impl<T> Any for T
    where T: 'static + ?Sized,

    source§

    fn type_id(&self) -> TypeId

    Gets the TypeId of self. Read more
    source§

    impl<T> Borrow<T> for T
    where T: ?Sized,

    source§

    fn borrow(&self) -> &T

    Immutably borrows from an owned value. Read more
    source§

    impl<T> BorrowMut<T> for T
    where T: ?Sized,

    source§

    fn borrow_mut(&mut self) -> &mut T

    Mutably borrows from an owned value. Read more
    source§

    impl<T> From<T> for T

    source§

    fn from(t: T) -> T

    Returns the argument unchanged.

    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html index 73d467633e..34a12cb0cc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/bdk_wallet/wallet/type.ChangeSet.html @@ -1,9 +1,9 @@ -ChangeSet in bdk_wallet::wallet - Rust

    Type Alias bdk_wallet::wallet::ChangeSet

    source ·
    pub type ChangeSet = CombinedChangeSet<KeychainKind, ConfirmationTimeHeightAnchor>;
    Expand description

    The changes made to a wallet by applying an Update.

    +ChangeSet in bdk_wallet::wallet - Rust

    Type Alias bdk_wallet::wallet::ChangeSet

    source ·
    pub type ChangeSet = CombinedChangeSet<KeychainKind, ConfirmationTimeHeightAnchor>;
    Expand description

    The changes made to a wallet by applying an Update.

    Aliased Type§

    struct ChangeSet {
         pub chain: BTreeMap<u32, Option<BlockHash>>,
    -    pub indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>,
    +    pub indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>,
         pub network: Option<Network>,
     }

    Fields§

    §chain: BTreeMap<u32, Option<BlockHash>>

    Changes to the LocalChain.

    -
    §indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>

    Changes to IndexedTxGraph.

    +
    §indexed_tx_graph: ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<KeychainKind>>

    Changes to IndexedTxGraph.

    §network: Option<Network>

    Stores the network type of the transaction data.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html index d5d66e6bf7..45b0aec17f 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_bitcoind_rpc_polling/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_bitcoind_rpc_polling - Rust

    Type Alias example_bitcoind_rpc_polling::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file +ChangeSet in example_bitcoind_rpc_polling - Rust

    Type Alias example_bitcoind_rpc_polling::ChangeSet

    source ·
    pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html index ddc241fe6e..491b30d7cc 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.create_tx.html @@ -1,4 +1,4 @@ -create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<A: Anchor, O: ChainOracle>(
    +create_tx in example_cli - Rust

    Function example_cli::create_tx

    source ·
    pub fn create_tx<A: Anchor, O: ChainOracle>(
         graph: &mut KeychainTxGraph<A>,
         chain: &O,
         keymap: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>,
    @@ -6,4 +6,4 @@
         address: Address,
         value: u64
     ) -> Result<(Transaction, Option<CreateTxChange>)>
    where - O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file + O::Error: Error + Send + Sync + 'static,
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html index b1a87a8108..e8badee105 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.handle_commands.html @@ -1,4 +1,4 @@ -handle_commands in example_cli - Rust

    Function example_cli::handle_commands

    source ·
    pub fn handle_commands<CS: Subcommand, S: Args, A: Anchor, O: ChainOracle, C>(
    +handle_commands in example_cli - Rust

    Function example_cli::handle_commands

    source ·
    pub fn handle_commands<CS: Subcommand, S: Args, A: Anchor, O: ChainOracle, C>(
         graph: &Mutex<KeychainTxGraph<A>>,
         db: &Mutex<Persist<C>>,
         chain: &Mutex<O>,
    @@ -7,5 +7,5 @@
         broadcast: impl FnOnce(S, &Transaction) -> Result<()>,
         cmd: Commands<CS, S>
     ) -> Result<()>
    where - O::Error: Error + Send + Sync + 'static, - C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file + O::Error: Error + Send + Sync + 'static, + C: Default + Append + DeserializeOwned + Serialize + From<KeychainChangeSet<A>>,
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html index b53a610ea4..243fa083f0 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.init.html @@ -1,7 +1,7 @@ -init in example_cli - Rust

    Function example_cli::init

    source ·
    pub fn init<CS: Subcommand, S: Args, C>(
    +init in example_cli - Rust

    Function example_cli::init

    source ·
    pub fn init<CS: Subcommand, S: Args, C>(
         db_magic: &[u8],
         db_default_path: &str
     ) -> Result<Init<CS, S, C>>
    where - C: Default + Append + Serialize + DeserializeOwned + Send + Sync + 'static,
    Expand description

    Parses command line arguments and initializes all components, creating + C: Default + Append + Serialize + DeserializeOwned + Send + Sync + 'static,

    Expand description

    Parses command line arguments and initializes all components, creating a file store with the given parameters, or loading one if it exists.

    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html index d1ac50fd8f..3fd14ad7b1 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/fn.planned_utxos.html @@ -1,5 +1,5 @@ -planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<A: Anchor, O: ChainOracle, K: Clone + CanDerive>(
    +planned_utxos in example_cli - Rust

    Function example_cli::planned_utxos

    source ·
    pub fn planned_utxos<A: Anchor, O: ChainOracle, K: Clone + CanDerive>(
         graph: &KeychainTxGraph<A>,
         chain: &O,
         assets: &Assets<K>
    -) -> Result<Vec<PlannedUtxo<K, A>>, O::Error>
    \ No newline at end of file +) -> Result<Vec<PlannedUtxo<K, A>>, O::Error>
    \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/index.html index f3a1e90733..a0fd798cb5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/index.html @@ -1,2 +1,2 @@ -example_cli - Rust

    Crate example_cli

    source ·

    Re-exports§

    • pub use anyhow;
    • pub use bdk_file_store;
    • pub use clap;

    Structs§

    Enums§

    Functions§

    • Parses command line arguments and initializes all components, creating +example_cli - Rust

      Crate example_cli

      source ·

      Re-exports§

      Structs§

      Enums§

      Functions§

      Type Aliases§

      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html index 5aaa356a40..82fe0c39e4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.CreateTxChange.html @@ -1,8 +1,8 @@ CreateTxChange in example_cli - Rust

      Struct example_cli::CreateTxChange

      source ·
      pub struct CreateTxChange {
      -    pub index_changeset: ChangeSet<Keychain>,
      +    pub index_changeset: ChangeSet<Keychain>,
           pub change_keychain: Keychain,
           pub index: u32,
      -}

      Fields§

      §index_changeset: ChangeSet<Keychain>§change_keychain: Keychain§index: u32

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for T
      where +}

      Fields§

      §index_changeset: ChangeSet<Keychain>§change_keychain: Keychain§index: u32

      Auto Trait Implementations§

      Blanket Implementations§

      source§

      impl<T> Any for T
      where T: 'static + ?Sized,

      source§

      fn type_id(&self) -> TypeId

      Gets the TypeId of self. Read more
      source§

      impl<T> Borrow<T> for T
      where T: ?Sized,

      source§

      fn borrow(&self) -> &T

      Immutably borrows from an owned value. Read more
      source§

      impl<T> BorrowMut<T> for T
      where T: ?Sized,

      source§

      fn borrow_mut(&mut self) -> &mut T

      Mutably borrows from an owned value. Read more
      source§

      impl<T> From<T> for T

      source§

      fn from(t: T) -> T

      Returns the argument unchanged.

      diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html index a8054682ce..dfc6f6e062 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/struct.Init.html @@ -1,13 +1,13 @@ -Init in example_cli - Rust

      Struct example_cli::Init

      source ·
      pub struct Init<CS: Subcommand, S: Args, C> {
      +Init in example_cli - Rust

      Struct example_cli::Init

      source ·
      pub struct Init<CS: Subcommand, S: Args, C> {
           pub args: Args<CS, S>,
           pub keymap: KeyMap,
      -    pub index: KeychainTxOutIndex<Keychain>,
      +    pub index: KeychainTxOutIndex<Keychain>,
           pub db: Mutex<Persist<C>>,
           pub init_changeset: C,
       }
      Expand description

      The initial state returned by init.

      Fields§

      §args: Args<CS, S>

      Arguments parsed by the cli.

      §keymap: KeyMap

      Descriptor keymap.

      -
      §index: KeychainTxOutIndex<Keychain>

      Keychain-txout index.

      +
      §index: KeychainTxOutIndex<Keychain>

      Keychain-txout index.

      §db: Mutex<Persist<C>>

      Persistence backend.

      §init_changeset: C

      Initial changeset.

      Auto Trait Implementations§

      §

      impl<CS, S, C> !Freeze for Init<CS, S, C>

      §

      impl<CS, S, C> RefUnwindSafe for Init<CS, S, C>
      where diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html index 0ecea609e6..ed9191b483 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainChangeSet.html @@ -1 +1 @@ -KeychainChangeSet in example_cli - Rust

      Type Alias example_cli::KeychainChangeSet

      source ·
      pub type KeychainChangeSet<A> = (ChangeSet, ChangeSet<A, ChangeSet<Keychain>>);
      \ No newline at end of file +KeychainChangeSet in example_cli - Rust

      Type Alias example_cli::KeychainChangeSet

      source ·
      pub type KeychainChangeSet<A> = (ChangeSet, ChangeSet<A, ChangeSet<Keychain>>);
      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html index 1a92e2720e..0c4c6027c4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.KeychainTxGraph.html @@ -1,5 +1,5 @@ -KeychainTxGraph in example_cli - Rust

      Type Alias example_cli::KeychainTxGraph

      source ·
      pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;

      Aliased Type§

      struct KeychainTxGraph<A> {
      -    pub index: KeychainTxOutIndex<Keychain>,
      +KeychainTxGraph in example_cli - Rust

      Type Alias example_cli::KeychainTxGraph

      source ·
      pub type KeychainTxGraph<A> = IndexedTxGraph<A, KeychainTxOutIndex<Keychain>>;

      Aliased Type§

      struct KeychainTxGraph<A> {
      +    pub index: KeychainTxOutIndex<Keychain>,
           /* private fields */
      -}

      Fields§

      §index: KeychainTxOutIndex<Keychain>

      Transaction index.

      +}

      Fields§

      §index: KeychainTxOutIndex<Keychain>

      Transaction index.

      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html index 426d5cfa9a..85cd9e4793 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_cli/type.PlannedUtxo.html @@ -1 +1 @@ -PlannedUtxo in example_cli - Rust

      Type Alias example_cli::PlannedUtxo

      source ·
      pub type PlannedUtxo<K, A> = (Plan<K>, FullTxOut<A>);
      \ No newline at end of file +PlannedUtxo in example_cli - Rust

      Type Alias example_cli::PlannedUtxo

      source ·
      pub type PlannedUtxo<K, A> = (Plan<K>, FullTxOut<A>);
      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html index d61dd2103e..0856f6cfb4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/fn.main.html @@ -1 +1 @@ -main in example_electrum - Rust

      Function example_electrum::main

      source ·
      pub(crate) fn main() -> Result<()>
      \ No newline at end of file +main in example_electrum - Rust

      Function example_electrum::main

      source ·
      pub(crate) fn main() -> Result<()>
      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html index 3695de6e4d..9655f5a077 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/index.html @@ -1 +1 @@ -example_electrum - Rust

      Crate example_electrum

      source ·

      Structs§

      Enums§

      Constants§

      Functions§

      Type Aliases§

      \ No newline at end of file +example_electrum - Rust

      Crate example_electrum

      source ·

      Structs§

      Enums§

      Constants§

      Functions§

      Type Aliases§

      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html index 3ec31251e2..b0594e467a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_electrum/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_electrum - Rust

      Type Alias example_electrum::ChangeSet

      source ·
      pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationHeightAnchor, ChangeSet<Keychain>>);
      \ No newline at end of file +ChangeSet in example_electrum - Rust

      Type Alias example_electrum::ChangeSet

      source ·
      pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationHeightAnchor, ChangeSet<Keychain>>);
      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html index d08beeb163..870f1cced5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/fn.main.html @@ -1 +1 @@ -main in example_esplora - Rust

      Function example_esplora::main

      source ·
      pub(crate) fn main() -> Result<()>
      \ No newline at end of file +main in example_esplora - Rust

      Function example_esplora::main

      source ·
      pub(crate) fn main() -> Result<()>
      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html index 52dbd8798b..675841759b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/index.html @@ -1 +1 @@ -example_esplora - Rust

      Crate example_esplora

      source ·

      Structs§

      Enums§

      Constants§

      Functions§

      Type Aliases§

      \ No newline at end of file +example_esplora - Rust

      Crate example_esplora

      source ·

      Structs§

      Enums§

      Constants§

      Functions§

      Type Aliases§

      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html index f5b9f8ca41..182d9d1563 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/example_esplora/type.ChangeSet.html @@ -1 +1 @@ -ChangeSet in example_esplora - Rust

      Type Alias example_esplora::ChangeSet

      source ·
      pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
      \ No newline at end of file +ChangeSet in example_esplora - Rust

      Type Alias example_esplora::ChangeSet

      source ·
      pub(crate) type ChangeSet = (ChangeSet, ChangeSet<ConfirmationTimeHeightAnchor, ChangeSet<Keychain>>);
      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js index 535547b922..ab6263decb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search-index.js @@ -1,6 +1,6 @@ var searchIndex = new Map(JSON.parse('[\ ["bdk_bitcoind_rpc",{"t":"KFFEONNNNNNONNNNNNMNNNNNNNNNNNN","n":["BitcoindRpcErrorExt","BlockEvent","Emitter","bitcoincore_rpc","block","block_hash","block_height","borrow","borrow","borrow_mut","borrow_mut","checkpoint","connected_to","fmt","from","from","into","into","is_not_found_error","mempool","new","next_block","next_header","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip"],"q":[[0,"bdk_bitcoind_rpc"],[31,"bitcoin::blockdata::block"],[32,"bdk_chain::chain_data"],[33,"core::fmt"],[34,"bitcoin::blockdata::transaction"],[35,"alloc::vec"],[36,"bitcoincore_rpc::error"],[37,"core::result"],[38,"bitcoincore_rpc::client"],[39,"bdk_chain::local_chain"],[40,"core::option"],[41,"core::any"]],"i":[0,0,0,0,1,1,1,12,1,12,1,1,1,1,12,1,12,1,10,12,12,12,12,12,1,12,1,12,1,12,1],"f":"`````{{{d{{b{c}}}}}f{}}{{{d{{b{c}}}}}h{}}{{{d{c}}}{{d{e}}}{}{}}0{{{d{jc}}}{{d{je}}}{}{}}0`{{{d{{b{c}}}}}l{}}{{{d{{b{c}}}}{d{jn}}}A`Ab}{cc{}}0{ce{}{}}0{{{d{Ad}}}Af}{{{d{j{Ah{c}}}}}{{Bd{{B`{{An{AjAl}}}}Bb}}}Bf}{{{d{c}}Bhh}{{Ah{c}}}Bf}{{{d{j{Ah{c}}}}}{{Bd{{Bl{{b{Bj}}}}Bb}}}Bf}{{{d{j{Ah{c}}}}}{{Bd{{Bl{{b{Bn}}}}Bb}}}Bf}{c{{Bd{e}}}{}{}}000{{{d{c}}}C`{}}077","D":"Bd","p":[[5,"BlockEvent",0],[1,"reference"],[5,"BlockHash",31],[1,"u32"],[0,"mut"],[5,"BlockId",32],[5,"Formatter",33],[8,"Result",33],[10,"Debug",33],[10,"BitcoindRpcErrorExt",0],[1,"bool"],[5,"Emitter",0],[5,"Transaction",34],[1,"u64"],[1,"tuple"],[5,"Vec",35],[6,"Error",36],[6,"Result",37],[10,"RpcApi",38],[5,"CheckPoint",39],[5,"Block",31],[6,"Option",40],[5,"Header",31],[5,"TypeId",41]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA0ABAAEAAAACAADAA4AAAAYAAcA"}],\ -["bdk_chain",{"t":"KKKSFSKGFGFPPKFRFEFFEPPNNMNNNOOMNNNNNENNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNONNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNOONNNNCNNNNNNNNNNNNMNNNMNONNNCCNENNNNNONNNNNNNNNNNNDNNNNNONCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONNNNNNNNNNNNNNNNNNNNNNNOOOFRFKNNNMNNNNNNNNNNNNNNNNNNNNNNNOOMMOMNNNNNNNNMNNNNNNNNNNNFFFNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNONNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNONNNNNFGPFIFFPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNONNNNNNNFFFFNNNNNNNNNNNOONOONNNNNNNOONNNNNNNNNOONNNNNOONNNNNNNNONNNNNNNNGFFPPFFFFNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOONNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorFromBlockPosition","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeHeightAnchor","Confirmed","Confirmed","DescriptorExt","DescriptorId","Error","FullTxOut","IndexedTxGraph","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","all_spks","all_zeros","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","apply_changeset","as_byte_array","as_raw_hash","as_ref","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","cmp","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from_block_position","from_block_position","from_block_position","from_block_position","from_byte_array","from_engine","from_raw_hash","from_slice","from_slice_delegated","from_str","get_chain_tip","hash","hash","hash","hash","hash","hash","hash","height","index","index_of_spk","index_tx","index_txout","indexed_tx_graph","initial_changeset","insert_spk","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","local_chain","mark_used","miniscript","net_value","new","new_with_range","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serde","serialize","serialize","serialize","serialize","serialize","spent_by","spk_at_index","spk_client","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","last_seen","time","ChangeSet","ChangeSet","IndexedTxGraph","Indexer","append","apply_block","apply_block_relevant","apply_changeset","apply_changeset","apply_update","as_ref","batch_insert_relevant","batch_insert_relevant_unconfirmed","batch_insert_unconfirmed","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph","index","index_tx","index_txout","indexer","initial_changeset","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","ChangeSet","KeychainTxOutIndex","add","all_unbounded_spk_iters","append","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","confirmed","default","default","default","deserialize","deserialize","eq","eq","fmt","fmt","fmt","fmt","from","from","from","get_descriptor","immature","index_of_spk","index_tx","index_txout","initial_changeset","inner","insert_descriptor","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","keychains_added","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","net_value","new","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_keychain_spks","revealed_spks","sent_and_received","serialize","serialize","spk_at_index","to_owned","to_owned","to_owned","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","untrusted_pending","unused_keychain_spks","unused_spks","vzip","vzip","vzip","AlterCheckPointError","ApplyHeaderError","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","apply_changeset","apply_header","apply_header_connected_to","apply_update","block_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","disconnect_from","eq","eq","eq","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_block_ids","from_blocks","from_changeset","from_genesis_hash","from_header","from_tip","genesis_hash","get","get","get_chain_tip","hash","height","height","initial_changeset","insert","insert_block","into","into","into","into","into","into","into","into_iter","into_iter","is_block_in_chain","iter","iter_checkpoints","new","next","original_hash","prev","push","range","range","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","vzip","FullScanRequest","FullScanResult","SyncRequest","SyncResult","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_outpoints","chain_spks","chain_spks_for_keychain","chain_tip","chain_tip","chain_txids","chain_update","chain_update","from","from","from","from","from_chain_tip","from_chain_tip","from_keychain_txout_index","graph_update","graph_update","inspect_outpoints","inspect_spks","inspect_spks_for_all_keychains","inspect_spks_for_keychain","inspect_txids","into","into","into","into","last_active_indices","outpoints","populate_with_revealed_spks","set_outpoints","set_spks","set_spks_for_keychain","set_txids","spks","spks_by_keychain","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txids","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","append","apply_changeset","apply_update","as_ref","balance","batch_insert_unconfirmed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts","eq","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_chain_txs","map_anchors","map_anchors","new","next","next","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","to_string","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_list_chain_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txs","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_last_seen_unconfirmed","vzip","vzip","vzip","vzip","vzip","vzip","vzip","walk_ancestors","walk_conflicts","walk_descendants"],"q":[[0,"bdk_chain"],[269,"bdk_chain::ConfirmationTime"],[272,"bdk_chain::indexed_tx_graph"],[329,"bdk_chain::keychain"],[431,"bdk_chain::local_chain"],[573,"bdk_chain::spk_client"],[637,"bdk_chain::tx_graph"],[798,"bdk_chain::spk_txout_index"],[799,"bitcoin::blockdata::script::owned"],[800,"alloc::collections::btree::map"],[801,"core::clone"],[802,"core::cmp"],[803,"bdk_chain::descriptor_ext"],[804,"bdk_chain::tx_data_traits"],[805,"bdk_chain::chain_data"],[806,"bitcoin_hashes::sha256"],[807,"bdk_chain::spk_iter"],[808,"core::option"],[809,"miniscript::descriptor::key"],[810,"miniscript::descriptor"],[811,"core::borrow"],[812,"core::result"],[813,"serde::de"],[814,"core::fmt"],[815,"bitcoin::blockdata::block"],[816,"bitcoin_hashes"],[817,"bdk_chain::chain_oracle"],[818,"core::hash"],[819,"core::slice::index"],[820,"bitcoin::blockdata::script::borrowed"],[821,"bitcoin::blockdata::transaction"],[822,"bitcoin_units::amount"],[823,"core::ops::range"],[824,"alloc::collections::btree::set"],[825,"core::iter::traits::double_ended"],[826,"serde::ser"],[827,"alloc::string"],[828,"core::iter::traits::exact_size"],[829,"core::any"],[830,"core::iter::traits::collect"],[831,"core::default"],[832,"bdk_chain::keychain::txout_index"],[833,"core::iter::traits::iterator"],[834,"core::marker"],[835,"core::ops::function"],[836,"core::convert"],[837,"alloc::sync"],[838,"std::collections::hash::set"]],"i":[0,0,0,0,0,0,0,0,0,0,0,19,20,0,0,46,0,0,0,0,0,19,20,1,7,8,9,10,11,10,11,13,1,7,7,7,7,0,1,19,20,9,10,11,21,7,7,22,1,19,20,9,10,11,21,7,22,21,1,19,20,9,10,11,21,7,22,1,19,20,9,10,11,21,7,22,19,19,20,9,10,11,21,7,10,11,8,8,19,10,11,11,1,9,10,11,22,29,20,9,10,11,7,29,7,19,20,9,10,11,21,7,1,19,20,9,10,11,21,7,7,7,7,1,19,20,20,9,9,9,10,11,21,7,7,22,42,9,10,11,7,7,7,7,7,7,46,19,20,9,10,11,7,9,9,7,1,1,1,0,1,1,1,19,20,9,10,11,21,7,22,22,46,19,20,21,13,21,21,1,1,1,0,0,1,0,1,22,22,22,22,21,1,1,19,20,9,10,11,21,7,1,1,1,0,20,9,10,11,7,21,1,0,7,1,19,20,9,10,11,21,7,22,7,7,1,19,20,9,10,11,21,7,22,1,19,20,9,10,11,21,7,22,0,1,21,1,1,1,19,20,9,10,11,21,7,22,20,1,1,1,19,20,9,10,11,21,7,22,105,106,105,0,68,0,0,66,67,67,68,67,67,67,67,67,67,67,66,67,66,66,66,67,66,66,66,67,66,67,66,66,66,67,66,67,68,68,66,68,67,67,67,67,67,67,66,66,68,67,66,66,67,66,67,66,67,66,67,66,0,0,0,77,78,74,78,78,74,78,77,74,78,77,74,78,77,74,78,77,77,74,78,77,74,77,74,77,74,78,77,77,74,78,77,78,77,78,78,78,78,78,78,74,78,77,74,78,78,78,78,78,74,74,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,74,77,78,74,78,77,77,77,77,77,74,78,77,74,78,77,78,78,78,74,78,77,78,78,77,78,78,74,78,77,0,0,84,0,0,0,0,84,0,0,79,79,79,79,85,87,85,79,81,86,83,84,87,85,79,81,86,83,84,85,79,81,86,83,84,85,79,81,86,83,84,79,85,79,81,86,83,84,85,85,79,81,81,86,86,83,83,84,84,87,85,79,81,86,83,84,85,79,79,79,85,79,79,85,79,79,85,85,86,79,85,79,87,85,79,81,86,83,84,87,85,79,85,79,85,87,86,85,85,85,79,79,85,79,81,86,83,84,81,86,83,84,87,85,79,81,86,83,84,83,87,85,79,81,86,83,84,87,85,79,81,86,83,84,86,87,85,79,81,86,83,84,0,0,0,0,89,107,92,108,89,107,92,108,89,89,92,89,92,89,107,108,89,107,92,108,89,92,92,107,108,89,89,92,92,89,89,107,92,108,108,89,89,89,89,92,89,89,92,89,107,92,108,89,107,92,108,89,89,107,92,108,89,107,92,108,0,0,0,97,97,0,0,0,0,70,70,75,98,75,75,70,70,70,70,70,102,103,70,98,99,97,75,102,103,70,98,99,97,75,70,99,102,102,103,103,70,98,99,75,70,98,99,75,98,99,70,75,98,75,70,70,98,99,97,75,70,70,70,70,98,99,97,97,75,102,103,70,98,99,97,75,70,70,70,70,70,70,70,70,70,70,70,102,103,70,98,99,97,75,102,103,70,75,75,98,70,70,75,70,102,103,70,98,99,75,70,98,99,75,97,70,70,70,102,103,70,98,99,97,75,70,70,102,103,70,98,99,97,75,70,98,99,70,70,98,75,75,75,102,103,70,98,99,97,75,70,102,103,70,98,99,97,75,70,70,70],"f":"```````````````````````{{{d{{b{c}}}}}{{d{{h{cf}}}}}{jl}}{{}n}{{{d{A`}}}Ab}{{{d{Ab}}}Ab}{{{d{Ad}}}Ab}{{{d{Af}}}Ab}``{{{d{AhAj}}Aj}Al}{{{d{Ah{b{c}}}}e}Al{jl}{}}{{{d{n}}}{{d{c}}}{}}{{{d{n}}}{{d{An}}}}{{{d{n}}}{{d{{Bb{B`}}}}}}{{{d{n}}}{{d{{Bd{B`}}}}}}`{{{d{c}}}{{d{e}}}{}{}}000000010{{{d{Ahc}}}{{d{Ahe}}}{}{}}00000000`{{{d{{b{c}}}}}{{b{c}}}j}{{{d{{Bf{c}}}}}{{Bf{c}}}j}{{{d{Bh}}}Bh}={{{d{Ad}}}Ad}{{{d{Af}}}Af}{{{d{{Bj{c}}}}}{{Bj{c}}}j}{{{d{n}}}n}{{{d{{Bl{c}}}}}{{Bl{c}}}j}{{{d{c}}{d{Ahe}}}Al{}{}}00000000{{{Bf{{d{c}}}}}{{Bf{c}}}j}{{{d{{Bf{c}}}}{d{{Bf{c}}}}}Bnl}{{{d{Bh}}{d{Bh}}}Bn}{{{d{Ab}}{d{Ab}}}Bn}{{{d{Ad}}{d{Ad}}}Bn}{{{d{Af}}{d{Af}}}Bn}{{{d{{Bj{c}}}}{d{{Bj{c}}}}}Bnl}{{{d{n}}{d{n}}}Bn}``{{{d{A`}}}C`}0{{{d{{Bf{c}}}}}{{Cb{C`}}}A`}{{{d{Ad}}}C`}{{{d{Af}}}C`}`{{}{{b{c}}}{}}{{}Ab}{{}Ad}{{}Af}{{{d{{Bl{c}}}}}{{d{c}}}{{Ch{{Cf{Cd}}}}}}{{{d{Cj}}}n}{c{{Cl{Bh}}}Cn}{c{{Cl{Ab}}}Cn}{c{{Cl{Ad}}}Cn}{c{{Cl{Af}}}Cn}{c{{Cl{n}}}Cn}{{{d{Cj}}}D`}{{}c{}}{{{d{{Bf{c}}}}{d{{Bf{c}}}}}DbDd}{{{d{Bh}}{d{Bh}}}Db}{{{d{Ab}}{d{Ab}}}Db}{{{d{Ad}}{d{Ad}}}Db}{{{d{Af}}{d{Af}}}Db}{{{d{{Bj{c}}}}{d{{Bj{c}}}}}DbDd}{{{d{n}}{d{n}}}Db}{{{d{{b{c}}}}{d{AhDf}}}DhDj}{{{d{{Bf{c}}}}{d{AhDf}}}DhDj}{{{d{Bh}}{d{AhDf}}}Dh}{{{d{Ab}}{d{AhDf}}}Dh}{{{d{Ad}}{d{AhDf}}}Dh}{{{d{Af}}{d{AhDf}}}Dh}{{{d{{Bj{c}}}}{d{AhDf}}}DhDj}{{{d{n}}{d{AhDf}}}Dh}000{cc{}}00{{{Bf{Af}}}Bh}1{{{Dn{{d{C`}}{d{Dl}}}}}Ab}{{{Dn{C`Dl}}}Ab}3333{Ann}4{{{d{E`}}AbEb}Ed}{{{d{E`}}AbEb}Ab}{{{d{E`}}AbEb}Ad}{{{d{E`}}AbEb}Af}{cn{}}05{{{d{{Bd{B`}}}}}{{Cl{nEf}}}}0{{{d{Eh}}}{{Cl{nc}}}{}}{{{d{{El{}{{Ej{c}}}}}}}{{Cl{Abc}}}Dj}{{{d{{Bf{c}}}}{d{Ahe}}}AlEnF`}{{{d{Bh}}{d{Ahc}}}AlF`}{{{d{Ab}}{d{Ahc}}}AlF`}{{{d{Ad}}{d{Ahc}}}AlF`}{{{d{Af}}{d{Ahc}}}AlF`}{{{d{n}}{d{Ahc}}}AlF`}``{{{d{n}}c}{{d{e}}}{{Fb{{Bd{B`}}}}}{}}{{{d{{b{c}}}}{d{Fd}}}{{Cb{{d{c}}}}}{jl}}{{{d{Ah{b{c}}}}{d{Ff}}}e{jl}{}}{{{d{Ah{b{c}}}}Fh{d{Fj}}}e{jl}{}}`{{{d{{b{c}}}}}e{jl}{}}{{{d{Ah{b{c}}}}cf}Db{jl}}{ce{}{}}000000000{{{d{{El{}{{Ej{c}}}}}}AbAb}{{Cl{{Cb{Db}}c}}}Dj}{{{d{{Bf{c}}}}}Db{}}{{{d{Bh}}}Db}{{{d{{Bj{c}}}}C`}DbA`}{{{d{Aj}}}Db}1`{{{d{{b{c}}}}{d{Ff}}}Db{jl}}0{{{d{{b{c}}}}{d{c}}}Db{jl}}``{{{d{Ah{b{c}}}}{d{c}}}Db{jl}}`{{{d{{b{c}}}}{d{Ff}}e}Fl{jl}{{Fn{c}}}}{c{{Bl{c}}}{{Ch{{Cf{Cd}}}}}}{{ce}{{Bl{c}}}{{Ch{{Cf{Cd}}}}}{{Fn{C`}}}}{{{d{Ah{Bl{c}}}}}{{Cb{e}}}{{Ch{{Cf{Cd}}}}}{}}{{{d{Ah{Bl{c}}}}Eb}{{Cb{e}}}{{Ch{{Cf{Cd}}}}}{}}`{{{d{{b{c}}}}}{{d{{G`{{Dn{cFh}}}}}}}{jl}}{{{d{{b{c}}}}e}{{`{{Gd{}{{Gb{{Dn{{d{c}}Fh}}}}}}}}}{jl}{{Fn{c}}}}{{{d{{Bf{c}}}}{d{{Bf{c}}}}}{{Cb{Bn}}}Gf}{{{d{Bh}}{d{Bh}}}{{Cb{Bn}}}}{{{d{Ab}}{d{Ab}}}{{Cb{Bn}}}}{{{d{Ad}}{d{Ad}}}{{Cb{Bn}}}}{{{d{Af}}{d{Af}}}{{Cb{Bn}}}}{{{d{{Bj{c}}}}{d{{Bj{c}}}}}{{Cb{Bn}}}Gf}{{{d{n}}{d{n}}}{{Cb{Bn}}}}{{{d{Ah{b{c}}}}{d{Ff}}}{{G`{c}}}{jl}}{{{d{Ah{b{c}}}}Fh{d{Fj}}}{{Cb{{d{c}}}}}{jl}}{{{d{{b{c}}}}{d{Ff}}e}{{Dn{GhGh}}}{jl}{{Fn{c}}}}`{{{d{Bh}}c}ClGj}{{{d{Ab}}c}ClGj}{{{d{Ad}}c}ClGj}{{{d{Af}}c}ClGj}{{{d{n}}c}ClGj}`{{{d{{b{c}}}}{d{c}}}{{Cb{{d{Fd}}}}}{jl}}`{nc{}}{{{d{c}}}e{}{}}00000000{nAn}{{{d{c}}}Gl{}}{c{{Cl{e}}}{}{}}00000000000000000`{{{d{{b{c}}}}Fh}{{Cb{{Dn{{d{c}}{d{Fj}}}}}}}{jl}}`{{{d{{b{c}}}}}{{`{{Gd{}{{Gb{{Dn{{d{c}}Fh{d{Fj}}}}}}}}Gn}}}{jl}}{{{d{{b{c}}}}H`}{{`{{Gd{}{{Gb{{Dn{{d{c}}Fh{d{Fj}}}}}}}}}}}{jl}}{{{d{c}}}Hb{}}00000000{D`Bh}{{{d{Ah{b{c}}}}{d{c}}}Db{jl}}{{{d{{b{c}}}}e}{{`{{Gd{}{{Gb{{Dn{{d{c}}{d{Fd}}}}}}}}j}}}{jl}{{Fn{c}}}}{ce{}{}}00000000```````{{{d{Ah{Hd{ce}}}}{Hd{ce}}}AlA`Aj}{{{d{Ah{Hf{ce}}}}E`C`}{{Hd{c}}}{EdA`}Hh}{{{d{Ah{Hf{ce}}}}{d{E`}}C`}{{Hd{c}}}{EdA`}Hh}{{{d{Ah{Hh{}{{Hj{c}}}}}}c}Al{}}{{{d{Ah{Hf{ce}}}}{Hd{c}}}AlA`Hh}{{{d{Ah{Hf{ce}}}}{Hl{c}}}{{Hd{c}}}A`Hh}{{{d{{Hf{ce}}}}}{{d{{Hl{c}}}}}{}{}}{{{d{Ah{Hf{ce}}}}i}{{Hd{c}}}A`Hh{{Hn{}{{Gb{c}}}}}{{Hn{}{{Gb{{Dn{{d{Ff}}g}}}}}}}}{{{d{Ah{Hf{ce}}}}g}{{Hd{c}}}A`Hh{{Hn{}{{Gb{{Dn{{d{Ff}}D`}}}}}}}}{{{d{Ah{Hf{ce}}}}g}{{Hd{c}}}A`Hh{{Hn{}{{Gb{{Dn{FfD`}}}}}}}}{{{d{c}}}{{d{e}}}{}{}}0{{{d{Ahc}}}{{d{Ahe}}}{}{}}0{{{d{{Hd{ce}}}}}{{Hd{ce}}}jj}{{{d{c}}{d{Ahe}}}Al{}{}}{{}{{Hf{ce}}}{}I`}{{}{{Hd{ce}}}{}I`}{c{{Cl{{Hd{eg}}}}}Cn{lIb}Ib}{{{d{{Hd{ce}}}}{d{{Hd{ce}}}}}DbDdDd}{{{d{{Hf{ce}}}}{d{AhDf}}}DhDjDj}{{{d{{Hd{ce}}}}{d{AhDf}}}DhDjDj}{cc{}}{{{Id{c}}}{{Hd{e{Id{c}}}}}{}{}}{{{If{c}}}{{Hd{ce}}}{}I`}2{{{d{{Hf{ce}}}}}{{d{{Hl{c}}}}}{}{}}``{{{d{Ah{Hh{}{{Hj{c}}}}}}{d{Ff}}}c{}}{{{d{Ah{Hh{}{{Hj{c}}}}}}Fh{d{Fj}}}c{}}`{{{d{{Hh{}{{Hj{c}}}}}}}c{}}{{{d{{Hf{ce}}}}}{{Hd{c}}}A`Hh}{{{d{Ah{Hf{ce}}}}H`c}{{Hd{c}}}A`Hh}{{{d{Ah{Hf{ce}}}}H`D`}{{Hd{c}}}A`Hh}{{{d{Ah{Hf{ce}}}}Ff}{{Hd{c}}}A`Hh}{{{d{Ah{Hf{ce}}}}FhFj}{{Hd{c}}}A`Hh}{ce{}{}}0{{{d{{Hd{ce}}}}}DbA`Aj}{{{d{{Hh{}{{Hj{c}}}}}}{d{Ff}}}Db{}}{c{{Hf{ec}}}{}{}}{{{d{{Hd{ce}}}}g}Cl{lIh}IhGj}{{{d{c}}}e{}{}}{c{{Cl{e}}}{}{}}000{{{d{c}}}Hb{}}077```{{IjIj}Ij}{{{d{{Il{c}}}}}{{h{c{Bl{{Cf{Cd}}}}}}}{jlDj}}{{{d{Ah{Id{c}}}}{Id{c}}}All}{{{d{Ah{Il{c}}}}{Id{c}}}Al{jlDj}}{{{d{Ah{Il{c}}}}e}Al{jlDj}{}}{{{d{c}}}{{d{e}}}{}{}}00{{{d{Ahc}}}{{d{Ahe}}}{}{}}00{{{d{{Id{c}}}}}{{Id{c}}}j}{{{d{{Il{c}}}}}{{Il{c}}}j}{{{d{Ij}}}Ij}{{{d{c}}{d{Ahe}}}Al{}{}}00`{{}{{Id{c}}}{}}{{}{{Il{c}}}{}}{{}Ij}{c{{Cl{{Id{e}}}}}Cn{lIb}}{c{{Cl{Ij}}}Cn}{{{d{{Id{c}}}}{d{{Id{c}}}}}DbDd}{{{d{Ij}}{d{Ij}}}Db}{{{d{{Id{c}}}}{d{AhDf}}}DhDj}{{{d{{Il{c}}}}{d{AhDf}}}DhDj}{{{d{Ij}}{d{AhDf}}}Dh}0{cc{}}00{{{d{{Il{c}}}}{d{c}}}{{Cb{{d{{Cf{Cd}}}}}}}{jlDj}}`{{{d{{Il{c}}}}{d{Fd}}}{{Cb{{Dn{cC`}}}}}{jlDj}}{{{d{Ah{Il{c}}}}{d{Ff}}}e{jlDj}{}}{{{d{Ah{Il{c}}}}Fh{d{Fj}}}e{jlDj}{}}{{{d{{Il{c}}}}}e{jlDj}{}}{{{d{{Il{c}}}}}{{d{{b{{Dn{nC`}}}}}}}{jlDj}}{{{d{Ah{Il{c}}}}c{Cf{Cd}}}{{Id{c}}}{jlDj}}{ce{}{}}00{{{d{{Id{c}}}}}Dbl}{{{d{{Il{c}}}}{d{Ff}}}Db{jlDj}}{{{d{{Il{c}}}}cC`}Db{jlDj}}{{{d{{Il{c}}}}{d{c}}}{{`{{Gd{}{{Gb{{Dn{C`Fh}}}}}}}}}{jlDj}}{{{d{{Il{c}}}}e}{{`{{Gd{}{{Gb{{Dn{{d{c}}C`Fh}}}}}}}}}{jlDj}{{Fn{c}}}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Dn{{d{c}}{d{{Cf{Cd}}}}}}}}}}Gn}}}{jlDj}}``{{{d{{Il{c}}}}{d{c}}}{{Cb{C`}}}{jlDj}}{{{d{{Il{c}}}}}{{h{cC`}}}{jlDj}}10{{{d{{Il{c}}}}}C`{jlDj}}{{{d{Ah{Il{c}}}}{d{c}}C`}Al{jlDj}}{{{d{Ah{Il{c}}}}cC`}Db{jlDj}}{{{d{{Il{c}}}}{d{Ff}}e}Fl{jlDj}{{Fn{c}}}}{C`{{Il{c}}}{}}{{{d{{Il{c}}}}{d{c}}}{{Cb{{Dn{C`Db}}}}}{jlDj}}{{{d{Ah{Il{c}}}}{d{c}}}{{Cb{{Dn{{Dn{C`{d{Fd}}}}{Id{c}}}}}}}{jlDj}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Dn{{Dn{cC`}}Fh}}}}}}}}}{jlDj}}1{{{d{Ah{Il{c}}}}{d{c}}C`}{{Cb{{Dn{{Bl{{Cf{Cd}}}}{Id{c}}}}}}}{jlDj}}{{{d{Ah{Il{c}}}}{d{{h{cC`}}}}}{{Dn{{h{c{Bl{{Cf{Cd}}}}}}{Id{c}}}}}{jlDj}}{{{d{{Il{c}}}}{d{c}}}{{`{{Gd{}{{Gb{{Dn{C`{d{Fd}}}}}}}}}}}{jlDj}}{{{d{{Il{c}}}}e}{{`{{Gd{}{{Gb{{Dn{{d{c}}C`{d{Fd}}}}}}}}j}}}{jlDj}{{Fn{c}}}}{{{d{{Il{c}}}}{d{Ff}}e}{{Dn{GhGh}}}{jlDj}{{Fn{c}}}}{{{d{{Id{c}}}}e}Cl{lIh}Gj}{{{d{Ij}}c}ClGj}{{{d{{Il{c}}}}cC`}{{Cb{{d{Fd}}}}}{jlDj}}{{{d{c}}}e{}{}}00{{{d{c}}}Gl{}}{{{d{Ij}}}Gh}`0{c{{Cl{e}}}{}{}}00000{{{d{{Il{c}}}}Fh}{{Cb{{Dn{cC`{d{Fj}}}}}}}{jlDj}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Dn{cC`Fh{d{Fj}}}}}}}}}}}{jlDj}}{{{d{{Il{c}}}}H`}{{`{{Gd{}{{Gb{{Dn{cC`Fh{d{Fj}}}}}}}}}}}{jlDj}}{{{d{c}}}Hb{}}00{{{d{{Il{c}}}}{d{c}}}{{Cb{{Bl{{Cf{Cd}}}}}}}{jlDj}}{{{d{Ah{Il{c}}}}cC`}Db{jlDj}}`{{{d{{Il{c}}}}{d{c}}}{{`{{Gd{}{{Gb{{Dn{C`{d{Fd}}}}}}}}j}}}{jlDj}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Dn{cC`{d{Fd}}}}}}}}j}}}{jlDj}}{ce{}{}}00``````````{{{d{AhIn}}{d{J`}}}{{Cl{AlJb}}}}{{{d{AhIn}}{d{Jd}}C`}{{Cl{J`Jf}}}}{{{d{AhIn}}{d{Jd}}C`Ab}{{Cl{J`Jh}}}}{{{d{AhIn}}Jj}{{Cl{J`Jf}}}}{{{d{Jj}}}Ab}{{{d{c}}}{{d{e}}}{}{}}000000{{{d{Ahc}}}{{d{Ahe}}}{}{}}000000{{{d{Jj}}}Jj}{{{d{In}}}In}{{{d{Jb}}}Jb}{{{d{Jl}}}Jl}{{{d{Jf}}}Jf}{{{d{Jh}}}Jh}{{{d{c}}{d{Ahe}}}Al{}{}}00000{{{d{AhIn}}Ab}{{Cl{J`Jb}}}}{{{d{Jj}}{d{Jj}}}Db}{{{d{In}}{d{In}}}Db}{{{d{Jb}}{d{Jb}}}Db}{{{d{Jl}}{d{Jl}}}Db}{{{d{Jf}}{d{Jf}}}Db}{{{d{Jh}}{d{Jh}}}Db}{{Jjc}{{Cl{JjJj}}}{{Hn{}{{Gb{Ab}}}}}}{{{d{Jj}}{d{AhDf}}}Dh}{{{d{In}}{d{AhDf}}}Dh}{{{d{Jb}}{d{AhDf}}}Dh}0{{{d{Jl}}{d{AhDf}}}Dh}0{{{d{Jf}}{d{AhDf}}}Dh}0{{{d{Jh}}{d{AhDf}}}Dh}0{cc{}}000000{c{{Cl{Jj{Cb{Jj}}}}}{{Hn{}{{Gb{Ab}}}}}}{{{h{C`Dl}}}{{Cl{InJb}}}}{J`{{Cl{InJb}}}}{Dl{{Dn{InJ`}}}}{{{d{Jd}}C`}Jj}{Jj{{Cl{InJb}}}}{{{d{In}}}Dl}{{{d{Jj}}C`}{{Cb{Jj}}}}{{{d{In}}C`}{{Cb{Jj}}}}{{{d{In}}}{{Cl{Abc}}}{}}{{{d{Jj}}}Dl}{{{d{Jj}}}C`}`{{{d{In}}}J`}{{JjAb}Jj}{{{d{AhIn}}Ab}{{Cl{J`Jl}}}}{ce{}{}}0000000{Jjc{}}{{{d{In}}AbAb}{{Cl{{Cb{Db}}c}}}{}}{{{d{Jj}}}Jn}{{{d{In}}}Jn}{AbJj}{{{d{AhJn}}}{{Cb{c}}}{}}`{{{d{Jj}}}{{Cb{Jj}}}}{{JjAb}{{Cl{JjJj}}}}{{{d{Jj}}c}{{`{{K`{}{{Gb{Jj}}}}}}}{{Fn{C`}}}}{{{d{In}}c}{{`{{K`{}{{Gb{Jj}}}}}}}{{Fn{C`}}}}{{{d{In}}}Jj}{{{d{c}}}e{}{}}00000{{{d{c}}}Gl{}}000{c{{Cl{e}}}{}{}}000000`0000000{{{d{c}}}Hb{}}000000`???????````{{{d{c}}}{{d{e}}}{}{}}000{{{d{Ahc}}}{{d{Ahe}}}{}{}}000{{Kbe}Kb{{Gn{}{{Gb{Fh}}}}Kd}{{Hn{}{{Kf{c}}{Gb{Fh}}}}}}{{Kbe}Kb{{Gn{}{{Gb{f}}}}Kd}{{Hn{}{{Kf{c}}{Gb{f}}}}}}{{{Kh{c}}cg}{{Kh{c}}}{lj}{{K`{}{{Gb{{Dn{C`f}}}}}}Kd}{{Hn{}{{Kf{e}}}}}}``{{Kbe}Kb{{Gn{}{{Gb{H`}}}}Kd}{{Hn{}{{Kf{c}}{Gb{H`}}}}}}``{cc{}}000{JjKb}{Jj{{Kh{c}}}{lj}}{{Jj{d{{Il{c}}}}}{{Kh{c}}}{Djlj}}``{{Kbc}Kb{{Kj{{d{Fh}}}}KdKl}}{{Kbc}Kb{{Kj{{d{Fd}}}}KdKl}}{{{Kh{c}}e}{{Kh{c}}}{Kdlj}{{Kj{cC`{d{Fd}}}}KdKlj}}{{{Kh{c}}ce}{{Kh{c}}}{Kdlj}{{Kj{C`{d{Fd}}}}KdKl}}{{Kbc}Kb{{Kj{{d{H`}}}}KdKl}}{ce{}{}}000``{{Kb{d{{Il{c}}}}e}Kb{jlDjKdKl}{{Fn{c}}}}{{Kbe}Kb{{Gn{}{{Gb{Fh}}}}Kd}{{Hn{}{{Kf{c}}}}}}{{Kbe}Kb{{Gn{}{{Gb{f}}}}Kd}{{Hn{}{{Kf{c}}}}}}>{{Kbe}Kb{{Gn{}{{Gb{H`}}}}Kd}{{Hn{}{{Kf{c}}}}}}``{c{{Cl{e}}}{}{}}0000000`{{{d{c}}}Hb{}}0006666`````````{{{d{{Hl{c}}}}}{{d{{G`{{Dn{cH`}}}}}}}{}}{{{d{{Hl{c}}}}}{{`{{K`{}{{Gb{{Dn{Fh{d{Fj}}}}}}}}}}}{}}{{{d{{If{c}}}}}{{`{{K`{}{{Gb{C`}}}}}}}A`}``{{{d{Ah{If{c}}}}{If{c}}}All}{{{d{Ah{Hl{c}}}}{If{c}}}Al{jl}}{{{d{Ah{Hl{c}}}}{Hl{c}}}{{If{c}}}{jl}}{{{d{{Hl{c}}}}}{{d{{Hl{c}}}}}{}}{{{d{{Hl{c}}}}{d{e}}Abik}IjA`{{El{}{{Ej{Kn}}}}}j{{Hn{}{{Gb{{Dn{gFh}}}}}}}{{Kj{{d{g}}{d{Fd}}}{{L`{Db}}}}}}{{{d{Ah{Hl{c}}}}e}{{If{c}}}{jl}{{Hn{}{{Gb{{Dn{FfD`}}}}}}}}{{{d{c}}}{{d{e}}}{}{}}000000{{{d{Ahc}}}{{d{Ahe}}}{}{}}000000{{{d{{Hl{c}}}}{d{Ff}}}{{Cl{GhLb}}}{}}`{c{{Cb{Fl}}}{}}{c{{Cb{Gh}}}{}}01{{{d{{Hl{c}}}}}{{Hl{c}}}j}{{{d{{Ld{ce}}}}}{{Ld{ce}}}jj}{{{d{{Lf{ce}}}}}{{Lf{ce}}}jj}{{{d{{If{c}}}}}{{If{c}}}j}{{{d{c}}{d{Ahe}}}Al{}{}}000{{{d{{Ld{ce}}}}{d{{Ld{ce}}}}}Bnll}{{{d{{Lf{ce}}}}{d{{Lf{ce}}}}}Bnll}{{}{{Hl{c}}}{}}{{}{{If{c}}}{}}{{{d{{Ld{ce}}}}}{{d{g}}}{}{}{}}{c{{Cl{{If{e}}}}}Cn{lIb}}{{{d{{Hl{c}}}}{d{Ff}}}{{`{{K`{}{{Gb{{Dn{EbH`}}}}}}}}}{}}{{{d{{Hl{c}}}}{d{{Hl{c}}}}}DbDd}{{{d{{Ld{ce}}}}{d{{Ld{ce}}}}}DbDdDd}{{{d{{Lf{ce}}}}{d{{Lf{ce}}}}}DbDdDd}{{{d{Lb}}{d{Lb}}}Db}{{{d{{If{c}}}}{d{{If{c}}}}}DbDd}{{{d{{Hl{c}}}}{d{e}}Abi}{{`{{K`{}{{Gb{{Dn{g{Bj{c}}}}}}}}}}}A`{{El{}{{Ej{Kn}}}}}j{{Hn{}{{Gb{{Dn{gFh}}}}}}}}0{{{d{{Hl{c}}}}}{{`{{K`{}{{Gb{{Dn{Fh{d{Fj}}}}}}}}}}}{}}{{{d{{Hl{c}}}}{d{AhDf}}}DhDj}{{{d{{Ld{ce}}}}{d{AhDf}}}DhDjDj}{{{d{{Lf{ce}}}}{d{AhDf}}}DhDjDj}{{{d{Lb}}{d{AhDf}}}Dh}0{{{d{{If{c}}}}{d{AhDf}}}DhDj}{cc{}}000000{{{d{{Hl{c}}}}}{{`{{K`{}{{Gb{{Ld{{Lh{Ff}}c}}}}}}}}}{}}{{{d{{Hl{c}}}}{d{e}}AbH`}{{Cb{{Bf{{d{c}}}}}}}A`{{El{}{{Ej{Kn}}}}}}{{{d{{Hl{c}}}}{d{e}}AbFh}{{Cb{{Dn{{Bf{{d{c}}}}H`}}}}}A`{{El{}{{Ej{Kn}}}}}}{{{d{{Hl{c}}}}H`}{{Cb{{Lh{Ff}}}}}{}}{{{d{{Hl{c}}}}H`}{{Cb{{Ld{{Lh{Ff}}c}}}}}{}}{{{d{{Hl{c}}}}Fh}{{Cb{{d{Fj}}}}}{}}{{{d{{Hl{c}}}}}{{If{c}}}{jl}}{{{d{Ah{Hl{c}}}}H`c}{{If{c}}}{jl}}{{{d{Ah{Hl{c}}}}H`D`}{{If{c}}}{jl}}{{{d{Ah{Hl{c}}}}e}{{If{c}}}{jl}{{Lj{{Lh{Ff}}}}}}{{{d{Ah{Hl{c}}}}FhFj}{{If{c}}}{jl}}{ce{}{}}00000000{{{d{{Hl{c}}}}}Db{}}{{{d{{If{c}}}}}Dbl}``{{{d{{Hl{c}}}}{d{e}}Ab}{{`{{K`{}{{Gb{{Lf{{Lh{Ff}}c}}}}}}}}}A`El}{{{Hl{c}}g}{{Hl{e}}}{jl}{jl}{{Kj{c}{{L`{e}}}}}}{{{If{c}}g}{{If{e}}}ll{{Kj{c}{{L`{e}}}}}}{c{{Hl{e}}}{{Hn{}{{Gb{Ff}}}}}{jl}}{{{d{Ah{Ll{cg}}}}}{{Cb{i}}}{}{}{{Kj{Eb{Lh{Ff}}}{{L`{{Cb{e}}}}}}}{}}{{{d{Ah{Ln{cg}}}}}{{Cb{i}}}{}{}{{Kj{EbH`}{{L`{{Cb{e}}}}}}}{}}{{{d{{Hl{c}}}}Fh}{{d{{M`{H`}}}}}{}}{{{d{{Ld{ce}}}}{d{{Ld{ce}}}}}{{Cb{Bn}}}GfGf}{{{d{{Lf{ce}}}}{d{{Lf{ce}}}}}{{Cb{Bn}}}GfGf}{{{d{{If{c}}}}e}Cl{lIh}Gj}{{{d{c}}}e{}{}}000{{{d{c}}}Gl{}}{{{d{{Hl{c}}}}{d{e}}Abik}{{Cl{Ij}}}A`Elj{{Hn{}{{Gb{{Dn{gFh}}}}}}}{{Kj{{d{g}}{d{Fd}}}{{L`{Db}}}}}}{{{d{{Hl{c}}}}{d{e}}Abi}{{`{{K`{}{{Gb{{Cl{{Dn{g{Bj{c}}}}}}}}}}}}}A`Elj{{Hn{}{{Gb{{Dn{gFh}}}}}}}}0{c{{Cl{e}}}{}{}}000000{{{d{{Hl{c}}}}{d{e}}AbH`}{{Cl{{Cb{{Bf{{d{c}}}}}}}}}A`El}{{{d{{Hl{c}}}}{d{e}}AbFh}{{Cl{{Cb{{Dn{{Bf{{d{c}}}}H`}}}}}}}A`El}2222222{{{d{{Hl{c}}}}{d{e}}Ab}{{`{{K`{}{{Gb{{Cl{{Lf{{Lh{Ff}}c}}}}}}}}}}}A`El}``{{{d{{Hl{c}}}}H`}{{Cb{{h{C`{d{Fj}}}}}}}{}}{{{d{{Hl{c}}}}H`}{{`{{Gd{}{{Gb{{Dn{C`{d{{M`{H`}}}}}}}}}}}}}{}}`{{{d{{If{c}}}}}{{`{{K`{}{{Gb{{Dn{Fh{d{Fj}}}}}}}}}}}{}}``{{{d{c}}}Hb{}}000000{{{d{Ah{Hl{c}}}}D`}{{If{c}}}{jl}}{ce{}{}}000000{{{d{{Hl{c}}}}ei}{{Ll{ci}}}{jl}{{Lj{{Lh{Ff}}}}}{}{{Kj{Eb{Lh{Ff}}}{{L`{{Cb{g}}}}}}}}{{{d{{Hl{c}}}}{d{Ff}}g}{{Ln{cg}}}{}{}{{Kj{EbH`}{{L`{{Cb{e}}}}}}}}{{{d{{Hl{c}}}}H`g}{{Ln{cg}}}{jl}{}{{Kj{EbH`}{{L`{{Cb{e}}}}}}}}","D":"BLl","p":[[5,"SpkTxOutIndex",0,798],[1,"reference"],[5,"ScriptBuf",799],[5,"BTreeMap",800],[10,"Clone",801],[10,"Ord",802],[5,"DescriptorId",0,803],[10,"Anchor",0,804],[5,"BlockId",0,805],[5,"ConfirmationHeightAnchor",0,805],[5,"ConfirmationTimeHeightAnchor",0,805],[0,"mut"],[10,"Append",0,804],[1,"unit"],[5,"Hash",806],[1,"u8"],[1,"array"],[1,"slice"],[6,"ChainPosition",0,805],[6,"ConfirmationTime",0,805],[5,"FullTxOut",0,805],[5,"SpkIterator",0,807],[6,"Ordering",802],[1,"u32"],[6,"Option",808],[6,"DescriptorPublicKey",809],[6,"Descriptor",810],[10,"Borrow",811],[10,"DescriptorExt",0,803],[6,"Result",812],[10,"Deserializer",813],[1,"u64"],[1,"bool"],[10,"PartialEq",802],[5,"Formatter",814],[8,"Result",814],[10,"Debug",814],[5,"BlockHash",815],[1,"tuple"],[5,"Block",815],[1,"usize"],[10,"AnchorFromBlockPosition",0,804],[5,"FromSliceError",816],[1,"str"],[17,"Error"],[10,"ChainOracle",0,817],[10,"Hash",818],[10,"Hasher",818],[10,"SliceIndex",819],[5,"Script",820],[5,"Transaction",821],[5,"OutPoint",821],[5,"TxOut",821],[5,"SignedAmount",822],[10,"RangeBounds",823],[5,"BTreeSet",824],[17,"Item"],[10,"DoubleEndedIterator",825],[10,"PartialOrd",802],[5,"Amount",822],[10,"Serializer",826],[5,"String",827],[10,"ExactSizeIterator",828],[5,"Txid",821],[5,"TypeId",829],[5,"ChangeSet",272],[5,"IndexedTxGraph",272],[10,"Indexer",272],[17,"ChangeSet"],[5,"TxGraph",637],[10,"IntoIterator",830],[10,"Default",831],[10,"Deserialize",813],[5,"ChangeSet",329,832],[5,"ChangeSet",637],[10,"Serialize",826],[5,"Balance",329],[5,"KeychainTxOutIndex",329,832],[5,"LocalChain",431],[8,"ChangeSet",431],[5,"MissingGenesisError",431],[5,"Header",815],[5,"CannotConnectError",431],[6,"ApplyHeaderError",431],[5,"CheckPoint",431],[5,"AlterCheckPointError",431],[5,"CheckPointIter",431],[10,"Iterator",833],[5,"SyncRequest",573],[10,"Send",834],[17,"IntoIter"],[5,"FullScanRequest",573],[10,"FnMut",835],[10,"Sync",834],[6,"Infallible",836],[17,"Output"],[6,"CalculateFeeError",637],[5,"TxNode",637],[5,"CanonicalTx",637],[5,"Arc",837],[10,"Into",836],[5,"TxAncestors",637],[5,"TxDescendants",637],[5,"HashSet",838],[15,"Confirmed",269],[15,"Unconfirmed",269],[5,"SyncResult",573],[5,"FullScanResult",573]],"r":[[0,804],[1,804],[2,804],[3,807],[4,805],[6,817],[7,805],[8,805],[9,805],[10,805],[13,803],[14,803],[16,805],[17,272],[18,807],[19,798],[20,637],[330,832],[331,832]],"b":[[35,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[36,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[119,"impl-Display-for-DescriptorId"],[120,"impl-LowerHex-for-DescriptorId"],[121,"impl-Debug-for-DescriptorId"],[122,"impl-UpperHex-for-DescriptorId"],[128,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[129,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[299,"impl-From%3CChangeSet%3CK%3E%3E-for-ChangeSet%3CA,+ChangeSet%3CK%3E%3E"],[300,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[335,"impl-KeychainTxOutIndex%3CK%3E"],[336,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[359,"impl-Debug-for-Balance"],[360,"impl-Display-for-Balance"],[482,"impl-Display-for-MissingGenesisError"],[483,"impl-Debug-for-MissingGenesisError"],[484,"impl-Debug-for-AlterCheckPointError"],[485,"impl-Display-for-AlterCheckPointError"],[486,"impl-Debug-for-CannotConnectError"],[487,"impl-Display-for-CannotConnectError"],[488,"impl-Debug-for-ApplyHeaderError"],[489,"impl-Display-for-ApplyHeaderError"],[703,"impl-Debug-for-CalculateFeeError"],[704,"impl-Display-for-CalculateFeeError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAALgBSQASAAAAFQAAABkAAAAbAAIAIQABACQAFQA7ABEATgAGAFoAAQBdAAMAYwAEAGkAEgB/AAAAgQABAIcAAACKAAQAkAACAJQABQCcAAAAngABAKEAAACsAAAAtQAAALoAAAC+AAEAwwAGAM0ABQDWAAkA4QASAPkACAAFAQgAFQEAABsBAAAfAQsALAEBAD0BAABAAQkATQEAAFEBDABfAQoAcAECAHkBAACSAQEAlQEDAJwBBQClAQIArQECAL8BGQDaAQUA4QEJAPsBAAAJAgIADwIAABYCEAAoAg0ANwIGAEICBwBtAgcAdgIHAIwCAACPAgAAkgINAKICEQC1AgQAvQIFANwCAQDfAgAA5gIBAOkCBwD0AgYA/QIGAA0DBgAVAwYA"}],\ +["bdk_chain",{"t":"KKKSFSKGFGFPPKFRFEEEFFEPPNNMNNNOOMNNNNNENNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNONNNNNMNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNOONNNNCNNNNNNNNNNNNMNNNMNONNNCCNENNNNNONNNNNNNNNNNNDNNNNNONCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNCNONNNNNNNNNNNNNNNNNNNNNNNOOOFRFKNNNMNNNNNNNNNNNNNNNNNNNNNNNOOMMOMNNNNNNNNMNNNNNNNNNNNFFSPIGPIFFNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNONNNNNNNOOOOFGPFIFFPFFNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNONNNNNNNFFFFNNNNNNNNNNNOONOONNNNNNNOONNNNNNNNNOONNNNNOONNNNNNNNONNNNNNNNGFFPPFFFFNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNONOONNNNNNNNNNNNNNNNNN","n":["Anchor","AnchorFromBlockPosition","Append","BIP32_MAX_INDEX","BlockId","COINBASE_MATURITY","ChainOracle","ChainPosition","ConfirmationHeightAnchor","ConfirmationTime","ConfirmationTimeHeightAnchor","Confirmed","Confirmed","DescriptorExt","DescriptorId","Error","FullTxOut","Indexed","IndexedTxGraph","KeychainIndexed","SpkIterator","SpkTxOutIndex","TxGraph","Unconfirmed","Unconfirmed","all_spks","all_zeros","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","anchor_block","append","apply_changeset","as_byte_array","as_raw_hash","as_ref","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_position","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cloned","cmp","cmp","cmp","cmp","cmp","cmp","cmp","confirmation_height","confirmation_height","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_height_upper_bound","confirmation_time","default","default","default","default","descriptor","descriptor_id","deserialize","deserialize","deserialize","deserialize","deserialize","dust_value","engine","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","from_block_position","from_block_position","from_block_position","from_block_position","from_byte_array","from_engine","from_raw_hash","from_slice","from_slice_delegated","from_str","get_chain_tip","hash","hash","hash","hash","hash","hash","hash","height","index","index_of_spk","index_tx","index_txout","indexed_tx_graph","initial_changeset","insert_spk","into","into","into","into","into","into","into","into","into","into_iter","is_block_in_chain","is_confirmed","is_confirmed","is_confirmed_and_spendable","is_empty","is_mature","is_on_coinbase","is_relevant","is_tx_relevant","is_used","keychain","local_chain","mark_used","miniscript","net_value","new","new_with_range","next","nth","outpoint","outpoints","outputs_in_range","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","partial_cmp","scan","scan_txout","sent_and_received","serde","serialize","serialize","serialize","serialize","serialize","spent_by","spk_at_index","spk_client","to_byte_array","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_raw_hash","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_graph","txout","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unconfirmed","unmark_used","unused_spks","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","height","last_seen","time","ChangeSet","ChangeSet","IndexedTxGraph","Indexer","append","apply_block","apply_block_relevant","apply_changeset","apply_changeset","apply_update","as_ref","batch_insert_relevant","batch_insert_relevant_unconfirmed","batch_insert_unconfirmed","borrow","borrow","borrow_mut","borrow_mut","clone","clone_into","default","default","deserialize","eq","fmt","fmt","from","from","from","from","graph","graph","index","index_tx","index_txout","indexer","initial_changeset","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","is_empty","is_tx_relevant","new","serialize","to_owned","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","Balance","ChangeSet","DEFAULT_LOOKAHEAD","DescriptorAlreadyAssigned","Indexed","InsertDescriptorError","KeychainAlreadyAssigned","KeychainIndexed","KeychainTxOutIndex","NoSuchKeychain","add","all_unbounded_spk_iters","append","apply_changeset","apply_changeset","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","confirmed","default","default","default","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","get_descriptor","immature","index_of_spk","index_tx","index_txout","initial_changeset","inner","insert_descriptor","into","into","into","into","into","is_empty","is_tx_relevant","is_used","keychain_outpoints","keychain_outpoints_in_range","keychains","keychains_added","last_revealed","last_revealed_index","last_revealed_indices","last_used_index","last_used_indices","lookahead","lookahead_to_target","mark_used","net_value","new","next_index","next_unused_spk","outpoints","reveal_next_spk","reveal_to_target","reveal_to_target_multi","revealed_keychain_spks","revealed_spks","sent_and_received","serialize","serialize","spk_at_index","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","total","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","txout","txouts","txouts_in_tx","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","untrusted_pending","unused_keychain_spks","unused_spks","vzip","vzip","vzip","vzip","vzip","descriptor","existing_assignment","existing_assignment","keychain","AlterCheckPointError","ApplyHeaderError","CannotConnect","CannotConnectError","ChangeSet","CheckPoint","CheckPointIter","InconsistentBlocks","LocalChain","MissingGenesisError","apply_changeset","apply_header","apply_header_connected_to","apply_update","block_id","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","disconnect_from","eq","eq","eq","eq","eq","eq","extend","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from_block_ids","from_blocks","from_changeset","from_genesis_hash","from_header","from_tip","genesis_hash","get","get","get_chain_tip","hash","height","height","initial_changeset","insert","insert_block","into","into","into","into","into","into","into","into_iter","into_iter","is_block_in_chain","iter","iter_checkpoints","new","next","original_hash","prev","push","range","range","tip","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_include_height","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_hash","vzip","vzip","vzip","vzip","vzip","vzip","vzip","FullScanRequest","FullScanResult","SyncRequest","SyncResult","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain_outpoints","chain_spks","chain_spks_for_keychain","chain_tip","chain_tip","chain_txids","chain_update","chain_update","from","from","from","from","from_chain_tip","from_chain_tip","from_keychain_txout_index","graph_update","graph_update","inspect_outpoints","inspect_spks","inspect_spks_for_all_keychains","inspect_spks_for_keychain","inspect_txids","into","into","into","into","last_active_indices","outpoints","populate_with_revealed_spks","set_outpoints","set_spks","set_spks_for_keychain","set_txids","spks","spks_by_keychain","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txids","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","CalculateFeeError","CanonicalTx","ChangeSet","MissingTxOut","NegativeFee","TxAncestors","TxDescendants","TxGraph","TxNode","all_anchors","all_txouts","anchor_heights","anchors","anchors","append","apply_changeset","apply_update","as_ref","balance","batch_insert_unconfirmed","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","calculate_fee","chain_position","checked_sum","checked_sum","checked_sum","checked_sum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","deref","deserialize","direct_conflicts","eq","eq","eq","eq","eq","filter_chain_txouts","filter_chain_unspents","floating_txouts","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","full_txs","get_chain_position","get_chain_spend","get_tx","get_tx_node","get_txout","initial_changeset","insert_anchor","insert_seen_at","insert_tx","insert_txout","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_empty","last_seen","last_seen_unconfirmed","list_chain_txs","map_anchors","map_anchors","new","next","next","outspends","partial_cmp","partial_cmp","serialize","to_owned","to_owned","to_owned","to_owned","to_string","try_balance","try_filter_chain_txouts","try_filter_chain_unspents","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_get_chain_position","try_get_chain_spend","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_list_chain_txs","tx","tx_node","tx_outputs","tx_spends","txid","txouts","txouts","txs","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_last_seen_unconfirmed","vzip","vzip","vzip","vzip","vzip","vzip","vzip","walk_ancestors","walk_conflicts","walk_descendants"],"q":[[0,"bdk_chain"],[271,"bdk_chain::ConfirmationTime"],[274,"bdk_chain::indexed_tx_graph"],[331,"bdk_chain::keychain"],[470,"bdk_chain::keychain::InsertDescriptorError"],[474,"bdk_chain::local_chain"],[616,"bdk_chain::spk_client"],[680,"bdk_chain::tx_graph"],[841,"bdk_chain::spk_txout_index"],[842,"bitcoin::blockdata::script::owned"],[843,"alloc::collections::btree::map"],[844,"core::clone"],[845,"core::cmp"],[846,"core::fmt"],[847,"bdk_chain::descriptor_ext"],[848,"bdk_chain::tx_data_traits"],[849,"bdk_chain::chain_data"],[850,"bitcoin_hashes::sha256"],[851,"bdk_chain::spk_iter"],[852,"core::option"],[853,"miniscript::descriptor::key"],[854,"miniscript::descriptor"],[855,"core::borrow"],[856,"core::result"],[857,"serde::de"],[858,"bitcoin::blockdata::block"],[859,"bitcoin_hashes"],[860,"bdk_chain::chain_oracle"],[861,"core::hash"],[862,"core::slice::index"],[863,"bitcoin::blockdata::script::borrowed"],[864,"bitcoin::blockdata::transaction"],[865,"bitcoin_units::amount"],[866,"core::ops::range"],[867,"alloc::collections::btree::set"],[868,"core::iter::traits::double_ended"],[869,"serde::ser"],[870,"alloc::string"],[871,"core::iter::traits::exact_size"],[872,"core::any"],[873,"core::iter::traits::collect"],[874,"core::default"],[875,"bdk_chain::keychain::txout_index"],[876,"alloc::vec"],[877,"core::iter::traits::iterator"],[878,"core::marker"],[879,"core::ops::function"],[880,"core::convert"],[881,"alloc::sync"],[882,"std::collections::hash::set"]],"i":[0,0,0,0,0,0,0,0,0,0,0,20,21,0,0,46,0,0,0,0,0,0,0,20,21,1,8,9,10,11,12,11,12,14,1,8,8,8,8,0,1,20,21,10,11,12,22,8,8,23,1,20,21,10,11,12,22,8,23,22,1,20,21,10,11,12,22,8,23,1,20,21,10,11,12,22,8,23,20,20,21,10,11,12,22,8,11,12,9,9,20,11,12,12,1,10,11,12,23,30,21,10,11,12,8,30,8,20,21,10,11,12,22,8,1,20,21,10,11,12,22,8,8,8,8,1,20,21,21,10,10,10,11,12,22,8,8,23,42,10,11,12,8,8,8,8,8,8,46,20,21,10,11,12,8,10,10,8,1,1,1,0,1,1,1,20,21,10,11,12,22,8,23,23,46,20,21,22,14,22,22,1,1,1,0,0,1,0,1,23,23,23,23,22,1,1,20,21,10,11,12,22,8,1,1,1,0,21,10,11,12,8,22,1,0,8,1,20,21,10,11,12,22,8,23,8,8,1,20,21,10,11,12,22,8,23,1,20,21,10,11,12,22,8,23,0,1,22,1,1,1,20,21,10,11,12,22,8,23,21,1,1,1,20,21,10,11,12,22,8,23,110,111,110,0,68,0,0,66,67,67,68,67,67,67,67,67,67,67,66,67,66,66,66,67,66,66,66,67,66,67,66,66,66,67,66,67,68,68,66,68,67,67,67,67,67,67,66,66,68,67,66,66,67,66,67,66,67,66,67,66,0,0,0,79,0,0,79,0,0,0,77,78,75,78,78,78,79,75,80,77,78,79,75,80,77,78,79,75,80,77,78,79,75,80,77,77,78,75,77,75,77,79,75,80,77,78,79,79,75,80,80,77,77,78,79,75,80,77,78,77,78,78,78,78,78,78,78,79,75,80,77,75,78,78,78,78,78,75,75,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,78,75,77,78,78,79,75,80,77,79,80,77,77,77,77,78,79,75,80,77,78,79,75,80,77,78,78,78,78,79,75,80,77,78,78,77,78,78,78,79,75,80,77,112,112,113,113,0,0,90,0,0,0,0,90,0,0,85,85,85,85,91,93,91,85,87,92,89,90,93,91,85,87,92,89,90,91,85,87,92,89,90,91,85,87,92,89,90,85,91,85,87,92,89,90,91,91,85,87,87,92,92,89,89,90,90,93,91,85,87,92,89,90,91,85,85,85,91,85,85,91,85,85,91,91,92,85,91,85,93,91,85,87,92,89,90,93,91,85,91,85,91,93,92,91,91,91,85,85,91,85,87,92,89,90,87,92,89,90,93,91,85,87,92,89,90,89,93,91,85,87,92,89,90,93,91,85,87,92,89,90,92,93,91,85,87,92,89,90,0,0,0,0,94,114,97,115,94,114,97,115,94,94,97,94,97,94,114,115,94,114,97,115,94,97,97,114,115,94,94,97,97,94,94,114,97,115,115,94,94,94,94,97,94,94,97,94,114,97,115,94,114,97,115,94,94,114,97,115,94,114,97,115,0,0,0,102,102,0,0,0,0,70,70,74,103,74,74,70,70,70,70,70,107,108,70,103,104,102,74,107,108,70,103,104,102,74,70,104,107,107,108,108,70,103,104,74,70,103,104,74,103,104,70,74,103,74,70,70,103,104,102,74,70,70,70,70,103,104,102,102,74,107,108,70,103,104,102,74,70,70,70,70,70,70,70,70,70,70,70,107,108,70,103,104,102,74,107,108,70,74,74,103,70,70,74,70,107,108,70,103,104,74,70,103,104,74,102,70,70,70,107,108,70,103,104,102,74,70,70,107,108,70,103,104,102,74,70,103,104,70,70,103,74,74,74,107,108,70,103,104,102,74,70,107,108,70,103,104,102,74,70,70,70],"f":"`````````````````````````{{{d{{b{c}}}}}{{d{{h{cf}}}}}{jln}}{{}A`}{{{d{Ab}}}Ad}{{{d{Ad}}}Ad}{{{d{Af}}}Ad}{{{d{Ah}}}Ad}``{{{d{AjAl}}Al}An}{{{d{Aj{b{c}}}}e}An{jln}{}}{{{d{A`}}}{{d{c}}}{}}{{{d{A`}}}{{d{B`}}}}{{{d{A`}}}{{d{{Bd{Bb}}}}}}{{{d{A`}}}{{d{{Bf{Bb}}}}}}`{{{d{c}}}{{d{e}}}{}{}}000000100{{{d{Ajc}}}{{d{Aje}}}{}{}}00000000`{{{d{{b{c}}}}}{{b{c}}}j}{{{d{{Bh{c}}}}}{{Bh{c}}}j}{{{d{Bj}}}Bj}={{{d{Af}}}Af}{{{d{Ah}}}Ah}{{{d{{Bl{c}}}}}{{Bl{c}}}j}{{{d{A`}}}A`}{{{d{{Bn{c}}}}}{{Bn{c}}}j}{{{d{c}}{d{Aje}}}An{}{}}00000000{{{Bh{{d{c}}}}}{{Bh{c}}}j}{{{d{{Bh{c}}}}{d{{Bh{c}}}}}C`l}{{{d{Bj}}{d{Bj}}}C`}{{{d{Ad}}{d{Ad}}}C`}{{{d{Af}}{d{Af}}}C`}{{{d{Ah}}{d{Ah}}}C`}{{{d{{Bl{c}}}}{d{{Bl{c}}}}}C`l}{{{d{A`}}{d{A`}}}C`}``{{{d{Ab}}}Cb}0{{{d{{Bh{c}}}}}{{Cd{Cb}}}Ab}{{{d{Af}}}Cb}{{{d{Ah}}}Cb}`{{}{{b{c}}}{}}{{}Ad}{{}Af}{{}Ah}{{{d{{Bn{c}}}}}{{d{c}}}{{Cj{{Ch{Cf}}}}}}{{{d{Cl}}}A`}{c{{Cn{Bj}}}D`}{c{{Cn{Ad}}}D`}{c{{Cn{Af}}}D`}{c{{Cn{Ah}}}D`}{c{{Cn{A`}}}D`}{{{d{Cl}}}Db}{{}c{}}{{{d{{Bh{c}}}}{d{{Bh{c}}}}}DdDf}{{{d{Bj}}{d{Bj}}}Dd}{{{d{Ad}}{d{Ad}}}Dd}{{{d{Af}}{d{Af}}}Dd}{{{d{Ah}}{d{Ah}}}Dd}{{{d{{Bl{c}}}}{d{{Bl{c}}}}}DdDf}{{{d{A`}}{d{A`}}}Dd}{{{d{{b{c}}}}{d{AjDh}}}Djn}{{{d{{Bh{c}}}}{d{AjDh}}}Djn}{{{d{Bj}}{d{AjDh}}}Dj}{{{d{Ad}}{d{AjDh}}}Dj}{{{d{Af}}{d{AjDh}}}Dj}{{{d{Ah}}{d{AjDh}}}Dj}{{{d{{Bl{c}}}}{d{AjDh}}}Djn}{{{d{A`}}{d{AjDh}}}Dj}000{cc{}}0{{{Bh{Ah}}}Bj}11{{{Dn{{d{Cb}}{d{Dl}}}}}Ad}{{{Dn{CbDl}}}Ad}333{B`A`}44{{{d{E`}}AdEb}Ed}{{{d{E`}}AdEb}Ad}{{{d{E`}}AdEb}Af}{{{d{E`}}AdEb}Ah}{cA`{}}05{{{d{{Bf{Bb}}}}}{{Cn{A`Ef}}}}0{{{d{Eh}}}{{Cn{A`c}}}{}}{{{d{{El{}{{Ej{c}}}}}}}{{Cn{Adc}}}n}{{{d{{Bh{c}}}}{d{Aje}}}AnEnF`}{{{d{Bj}}{d{Ajc}}}AnF`}{{{d{Ad}}{d{Ajc}}}AnF`}{{{d{Af}}{d{Ajc}}}AnF`}{{{d{Ah}}{d{Ajc}}}AnF`}{{{d{A`}}{d{Ajc}}}AnF`}``{{{d{A`}}c}{{d{e}}}{{Fb{{Bf{Bb}}}}}{}}{{{d{{b{c}}}}{d{Fd}}}{{Cd{{d{c}}}}}{jln}}{{{d{Aj{b{c}}}}{d{Ff}}}e{jln}{}}{{{d{Aj{b{c}}}}Fh{d{Fj}}}e{jln}{}}`{{{d{{b{c}}}}}e{jln}{}}{{{d{Aj{b{c}}}}cf}Dd{jln}}{ce{}{}}000000000{{{d{{El{}{{Ej{c}}}}}}AdAd}{{Cn{{Cd{Dd}}c}}}n}{{{d{{Bh{c}}}}}Dd{}}{{{d{Bj}}}Dd}{{{d{{Bl{c}}}}Cb}DdAb}{{{d{Al}}}Dd}1`{{{d{{b{c}}}}{d{Ff}}}Dd{jln}}0{{{d{{b{c}}}}{d{c}}}Dd{jln}}``{{{d{Aj{b{c}}}}{d{c}}}Dd{jln}}`{{{d{{b{c}}}}{d{Ff}}e}Fl{jln}{{Fn{c}}}}{c{{Bn{c}}}{{Cj{{Ch{Cf}}}}}}{{ce}{{Bn{c}}}{{Cj{{Ch{Cf}}}}}{{Fn{Cb}}}}{{{d{Aj{Bn{c}}}}}{{Cd{e}}}{{Cj{{Ch{Cf}}}}}{}}{{{d{Aj{Bn{c}}}}Eb}{{Cd{e}}}{{Cj{{Ch{Cf}}}}}{}}`{{{d{{b{c}}}}}{{d{{G`{{Dn{cFh}}}}}}}{jln}}{{{d{{b{c}}}}e}{{`{{Gd{}{{Gb{{Dn{{d{c}}Fh}}}}}}}}}{jln}{{Fn{c}}}}{{{d{{Bh{c}}}}{d{{Bh{c}}}}}{{Cd{C`}}}Gf}{{{d{Bj}}{d{Bj}}}{{Cd{C`}}}}{{{d{Ad}}{d{Ad}}}{{Cd{C`}}}}{{{d{Af}}{d{Af}}}{{Cd{C`}}}}{{{d{Ah}}{d{Ah}}}{{Cd{C`}}}}{{{d{{Bl{c}}}}{d{{Bl{c}}}}}{{Cd{C`}}}Gf}{{{d{A`}}{d{A`}}}{{Cd{C`}}}}{{{d{Aj{b{c}}}}{d{Ff}}}{{G`{c}}}{jln}}{{{d{Aj{b{c}}}}Fh{d{Fj}}}{{Cd{{d{c}}}}}{jln}}{{{d{{b{c}}}}{d{Ff}}e}{{Dn{GhGh}}}{jln}{{Fn{c}}}}`{{{d{Bj}}c}CnGj}{{{d{Ad}}c}CnGj}{{{d{Af}}c}CnGj}{{{d{Ah}}c}CnGj}{{{d{A`}}c}CnGj}`{{{d{{b{c}}}}{d{c}}}{{Cd{{d{Fd}}}}}{jln}}`{A`c{}}{{{d{c}}}e{}{}}00000000{A`B`}{{{d{c}}}Gl{}}{c{{Cn{e}}}{}{}}00000000000000000`{{{d{{b{c}}}}Fh}{{Cd{{Dn{{d{c}}{d{Fj}}}}}}}{jln}}`{{{d{{b{c}}}}}{{`{{Gd{}{{Gb{{Dn{{d{c}}Fh{d{Fj}}}}}}}}Gn}}}{jln}}{{{d{{b{c}}}}H`}{{`{{Gd{}{{Gb{{Dn{{d{c}}Fh{d{Fj}}}}}}}}}}}{jln}}{{{d{c}}}Hb{}}00000000{DbBj}{{{d{Aj{b{c}}}}{d{c}}}Dd{jln}}{{{d{{b{c}}}}e}{{`{{Gd{}{{Gb{{Dn{{d{c}}{d{Fd}}}}}}}}j}}}{jln}{{Fn{c}}}}{ce{}{}}00000000```````{{{d{Aj{Hd{ce}}}}{Hd{ce}}}AnAbAl}{{{d{Aj{Hf{ce}}}}E`Cb}{{Hd{c}}}{EdAb}Hh}{{{d{Aj{Hf{ce}}}}{d{E`}}Cb}{{Hd{c}}}{EdAb}Hh}{{{d{Aj{Hh{}{{Hj{c}}}}}}c}An{}}{{{d{Aj{Hf{ce}}}}{Hd{c}}}AnAbHh}{{{d{Aj{Hf{ce}}}}{Hl{c}}}{{Hd{c}}}AbHh}{{{d{{Hf{ce}}}}}{{d{{Hl{c}}}}}{}{}}{{{d{Aj{Hf{ce}}}}i}{{Hd{c}}}AbHh{{Hn{}{{Gb{c}}}}}{{Hn{}{{Gb{{Dn{{d{Ff}}g}}}}}}}}{{{d{Aj{Hf{ce}}}}g}{{Hd{c}}}AbHh{{Hn{}{{Gb{{Dn{{d{Ff}}Db}}}}}}}}{{{d{Aj{Hf{ce}}}}g}{{Hd{c}}}AbHh{{Hn{}{{Gb{{Dn{FfDb}}}}}}}}{{{d{c}}}{{d{e}}}{}{}}0{{{d{Ajc}}}{{d{Aje}}}{}{}}0{{{d{{Hd{ce}}}}}{{Hd{ce}}}jj}{{{d{c}}{d{Aje}}}An{}{}}{{}{{Hf{ce}}}{}I`}{{}{{Hd{ce}}}{}I`}{c{{Cn{{Hd{eg}}}}}D`{lIb}Ib}{{{d{{Hd{ce}}}}{d{{Hd{ce}}}}}DdDfDf}{{{d{{Hf{ce}}}}{d{AjDh}}}Djnn}{{{d{{Hd{ce}}}}{d{AjDh}}}Djnn}{cc{}}0{{{Id{c}}}{{Hd{ce}}}{}I`}{{{If{c}}}{{Hd{e{If{c}}}}}{}{}}{{{d{{Hf{ce}}}}}{{d{{Hl{c}}}}}{}{}}``{{{d{Aj{Hh{}{{Hj{c}}}}}}{d{Ff}}}c{}}{{{d{Aj{Hh{}{{Hj{c}}}}}}Fh{d{Fj}}}c{}}`{{{d{{Hh{}{{Hj{c}}}}}}}c{}}{{{d{{Hf{ce}}}}}{{Hd{c}}}AbHh}{{{d{Aj{Hf{ce}}}}H`c}{{Hd{c}}}AbHh}{{{d{Aj{Hf{ce}}}}H`Db}{{Hd{c}}}AbHh}{{{d{Aj{Hf{ce}}}}Ff}{{Hd{c}}}AbHh}{{{d{Aj{Hf{ce}}}}FhFj}{{Hd{c}}}AbHh}{ce{}{}}0{{{d{{Hd{ce}}}}}DdAbAl}{{{d{{Hh{}{{Hj{c}}}}}}{d{Ff}}}Dd{}}{c{{Hf{ec}}}{}{}}{{{d{{Hd{ce}}}}g}Cn{lIh}IhGj}{{{d{c}}}e{}{}}{c{{Cn{e}}}{}{}}000{{{d{c}}}Hb{}}077``````````{{IjIj}Ij}{{{d{{Il{c}}}}}{{h{c{Bn{{Ch{Cf}}}}}}}{jln}}{{{d{Aj{If{c}}}}{If{c}}}Anl}{{{d{Aj{Il{c}}}}e}An{jln}{}}{{{d{Aj{Il{c}}}}{If{c}}}An{jln}}{{{d{c}}}{{d{e}}}{}{}}0000{{{d{Ajc}}}{{d{Aje}}}{}{}}0000{{{d{{Il{c}}}}}{{Il{c}}}j}{{{d{{In{c}}}}}{{In{c}}}j}{{{d{{If{c}}}}}{{If{c}}}j}{{{d{{J`{c}}}}}{{J`{c}}}j}{{{d{Ij}}}Ij}{{{d{c}}{d{Aje}}}An{}{}}0000`{{}{{Il{c}}}{}}{{}{{If{c}}}{}}{{}Ij}{c{{Cn{{If{e}}}}}D`{lIb}}{c{{Cn{Ij}}}D`}{{{d{{In{c}}}}{d{{In{c}}}}}DdDf}{{{d{{If{c}}}}{d{{If{c}}}}}DdDf}{{{d{{J`{c}}}}{d{{J`{c}}}}}DdDf}{{{d{Ij}}{d{Ij}}}Dd}{{{d{{Il{c}}}}{d{AjDh}}}Djn}{{{d{{In{c}}}}{d{AjDh}}}Djn}0{{{d{{If{c}}}}{d{AjDh}}}Djn}{{{d{{J`{c}}}}{d{AjDh}}}Djn}0{{{d{Ij}}{d{AjDh}}}Dj}0{cc{}}0000{{{d{{Il{c}}}}{d{c}}}{{Cd{{d{{Ch{Cf}}}}}}}{jln}}`{{{d{{Il{c}}}}{d{Fd}}}{{Cd{{d{{Dn{cCb}}}}}}}{jln}}{{{d{Aj{Il{c}}}}{d{Ff}}}e{jln}{}}{{{d{Aj{Il{c}}}}Fh{d{Fj}}}e{jln}{}}{{{d{{Il{c}}}}}e{jln}{}}{{{d{{Il{c}}}}}{{d{{b{{Dn{cCb}}}}}}}{jln}}{{{d{Aj{Il{c}}}}c{Ch{Cf}}}{{Cn{{If{c}}{In{c}}}}}{jln}}{ce{}{}}0000{{{d{{If{c}}}}}Ddl}{{{d{{Il{c}}}}{d{Ff}}}Dd{jln}}{{{d{{Il{c}}}}cCb}Dd{jln}}{{{d{{Il{c}}}}{d{c}}}{{`{{Gd{}{{Gb{{Jb{Fh}}}}}}}}}{jln}}{{{d{{Il{c}}}}e}{{`{{Gd{}{{Gb{{Jd{cFh}}}}}}}}}{jln}{{Fn{c}}}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Dn{{d{c}}{d{{Ch{Cf}}}}}}}}}}Gn}}}{jln}}``{{{d{{Il{c}}}}{d{c}}}{{Cd{Cb}}}{jln}}{{{d{{Il{c}}}}}{{h{cCb}}}{jln}}10{{{d{{Il{c}}}}}Cb{jln}}{{{d{Aj{Il{c}}}}{d{c}}Cb}An{jln}}{{{d{Aj{Il{c}}}}cCb}Dd{jln}}{{{d{{Il{c}}}}{d{Ff}}e}Fl{jln}{{Fn{c}}}}{Cb{{Il{c}}}{}}{{{d{{Il{c}}}}{d{c}}}{{Cd{{Dn{CbDd}}}}}{jln}}{{{d{Aj{Il{c}}}}{d{c}}}{{Cd{{Dn{{Jb{f}}{If{c}}}}}}}{jln}}{{{d{{Il{c}}}}}{{d{{G`{{Jd{cFh}}}}}}}{jln}}1{{{d{Aj{Il{c}}}}{d{c}}Cb}{{Cd{{Dn{{Jf{{Jb{f}}}}{If{c}}}}}}}{jln}}{{{d{Aj{Il{c}}}}{d{{h{cCb}}}}}{{If{c}}}{jln}}{{{d{{Il{c}}}}{d{c}}}{{`{{Gd{}{{Gb{{Jb{{d{Fd}}}}}}}}}}}{jln}}{{{d{{Il{c}}}}e}{{`{{Jh{}{{Gb{{Jd{c{d{Fd}}}}}}}}}}}{jln}{{Fn{c}}}}{{{d{{Il{c}}}}{d{Ff}}e}{{Dn{GhGh}}}{jln}{{Fn{c}}}}{{{d{{If{c}}}}e}Cn{lIh}Gj}{{{d{Ij}}c}CnGj}{{{d{{Il{c}}}}cCb}{{Cd{{d{Fd}}}}}{jln}}{{{d{c}}}e{}{}}0000{{{d{c}}}Gl{}}00{{{d{Ij}}}Gh}`0{c{{Cn{e}}}{}{}}000000000{{{d{{Il{c}}}}Fh}{{Cd{{Jd{c{d{Fj}}}}}}}{jln}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Jd{c{Dn{Fh{d{Fj}}}}}}}}}}Gn}}}{jln}}{{{d{{Il{c}}}}H`}{{`{{Gd{}{{Gb{{Jd{c{Dn{Fh{d{Fj}}}}}}}}}}}}}{jln}}{{{d{c}}}Hb{}}0000{{{d{{Il{c}}}}{d{c}}}{{Cd{{Bn{{Ch{Cf}}}}}}}{jln}}{{{d{Aj{Il{c}}}}cCb}Dd{jln}}`{{{d{{Il{c}}}}{d{c}}}{{`{{Gd{}{{Gb{{Jb{{d{Fd}}}}}}}}j}}}{jln}}{{{d{{Il{c}}}}}{{`{{Gd{}{{Gb{{Jd{c{d{Fd}}}}}}}}j}}}{jln}}{ce{}{}}0000``````````````{{{d{AjJj}}{d{Jl}}}{{Cn{AnJn}}}}{{{d{AjJj}}{d{K`}}Cb}{{Cn{JlKb}}}}{{{d{AjJj}}{d{K`}}CbAd}{{Cn{JlKd}}}}{{{d{AjJj}}Kf}{{Cn{JlKb}}}}{{{d{Kf}}}Ad}{{{d{c}}}{{d{e}}}{}{}}000000{{{d{Ajc}}}{{d{Aje}}}{}{}}000000{{{d{Kf}}}Kf}{{{d{Jj}}}Jj}{{{d{Jn}}}Jn}{{{d{Kh}}}Kh}{{{d{Kb}}}Kb}{{{d{Kd}}}Kd}{{{d{c}}{d{Aje}}}An{}{}}00000{{{d{AjJj}}Ad}{{Cn{JlJn}}}}{{{d{Kf}}{d{Kf}}}Dd}{{{d{Jj}}{d{Jj}}}Dd}{{{d{Jn}}{d{Jn}}}Dd}{{{d{Kh}}{d{Kh}}}Dd}{{{d{Kb}}{d{Kb}}}Dd}{{{d{Kd}}{d{Kd}}}Dd}{{Kfc}{{Cn{KfKf}}}{{Hn{}{{Gb{Ad}}}}}}{{{d{Kf}}{d{AjDh}}}Dj}{{{d{Jj}}{d{AjDh}}}Dj}{{{d{Jn}}{d{AjDh}}}Dj}0{{{d{Kh}}{d{AjDh}}}Dj}0{{{d{Kb}}{d{AjDh}}}Dj}0{{{d{Kd}}{d{AjDh}}}Dj}0{cc{}}000000{c{{Cn{Kf{Cd{Kf}}}}}{{Hn{}{{Gb{Ad}}}}}}{{{h{CbDl}}}{{Cn{JjJn}}}}{Jl{{Cn{JjJn}}}}{Dl{{Dn{JjJl}}}}{{{d{K`}}Cb}Kf}{Kf{{Cn{JjJn}}}}{{{d{Jj}}}Dl}{{{d{Kf}}Cb}{{Cd{Kf}}}}{{{d{Jj}}Cb}{{Cd{Kf}}}}{{{d{Jj}}}{{Cn{Adc}}}{}}{{{d{Kf}}}Dl}{{{d{Kf}}}Cb}`{{{d{Jj}}}Jl}{{KfAd}Kf}{{{d{AjJj}}Ad}{{Cn{JlKh}}}}{ce{}{}}0000000{Kfc{}}{{{d{Jj}}AdAd}{{Cn{{Cd{Dd}}c}}}{}}{{{d{Kf}}}Kj}{{{d{Jj}}}Kj}{AdKf}{{{d{AjKj}}}{{Cd{c}}}{}}`{{{d{Kf}}}{{Cd{Kf}}}}{{KfAd}{{Cn{KfKf}}}}{{{d{Kf}}c}{{`{{Jh{}{{Gb{Kf}}}}}}}{{Fn{Cb}}}}{{{d{Jj}}c}{{`{{Jh{}{{Gb{Kf}}}}}}}{{Fn{Cb}}}}{{{d{Jj}}}Kf}{{{d{c}}}e{}{}}00000{{{d{c}}}Gl{}}000{c{{Cn{e}}}{}{}}000000`0000000{{{d{c}}}Hb{}}000000`???????````{{{d{c}}}{{d{e}}}{}{}}000{{{d{Ajc}}}{{d{Aje}}}{}{}}000{{Kle}Kl{{Gn{}{{Gb{Fh}}}}Kn}{{Hn{}{{L`{c}}{Gb{Fh}}}}}}{{Kle}Kl{{Gn{}{{Gb{f}}}}Kn}{{Hn{}{{L`{c}}{Gb{f}}}}}}{{{Lb{c}}cg}{{Lb{c}}}{lj}{{Jh{}{{Gb{{Jb{f}}}}}}Kn}{{Hn{}{{L`{e}}}}}}``{{Kle}Kl{{Gn{}{{Gb{H`}}}}Kn}{{Hn{}{{L`{c}}{Gb{H`}}}}}}``{cc{}}000{KfKl}{Kf{{Lb{c}}}{lj}}{{Kf{d{{Il{c}}}}}{{Lb{c}}}{nlj}}``{{Klc}Kl{{Ld{{d{Fh}}}}KnLf}}{{Klc}Kl{{Ld{{d{Fd}}}}KnLf}}{{{Lb{c}}e}{{Lb{c}}}{Knlj}{{Ld{cCb{d{Fd}}}}KnLfj}}{{{Lb{c}}ce}{{Lb{c}}}{Knlj}{{Ld{Cb{d{Fd}}}}KnLf}}{{Klc}Kl{{Ld{{d{H`}}}}KnLf}}{ce{}{}}000``{{Kl{d{{Il{c}}}}e}Kl{jlnKnLf}{{Fn{c}}}}{{Kle}Kl{{Gn{}{{Gb{Fh}}}}Kn}{{Hn{}{{L`{c}}}}}}{{Kle}Kl{{Gn{}{{Gb{f}}}}Kn}{{Hn{}{{L`{c}}}}}}>{{Kle}Kl{{Gn{}{{Gb{H`}}}}Kn}{{Hn{}{{L`{c}}}}}}``{c{{Cn{e}}}{}{}}0000000`{{{d{c}}}Hb{}}0006666`````````{{{d{{Hl{c}}}}}{{d{{G`{{Dn{cH`}}}}}}}{}}{{{d{{Hl{c}}}}}{{`{{Jh{}{{Gb{{Dn{Fh{d{Fj}}}}}}}}}}}{}}{{{d{{Id{c}}}}}{{`{{Jh{}{{Gb{Cb}}}}}}}Ab}``{{{d{Aj{Id{c}}}}{Id{c}}}Anl}{{{d{Aj{Hl{c}}}}{Id{c}}}An{jl}}{{{d{Aj{Hl{c}}}}{Hl{c}}}{{Id{c}}}{jl}}{{{d{{Hl{c}}}}}{{d{{Hl{c}}}}}{}}{{{d{{Hl{c}}}}{d{e}}Adik}IjAb{{El{}{{Ej{Lh}}}}}j{{Hn{}{{Gb{{Dn{gFh}}}}}}}{{Ld{{d{g}}{d{Fd}}}{{Lj{Dd}}}}}}{{{d{Aj{Hl{c}}}}e}{{Id{c}}}{jl}{{Hn{}{{Gb{{Dn{FfDb}}}}}}}}{{{d{c}}}{{d{e}}}{}{}}000000{{{d{Ajc}}}{{d{Aje}}}{}{}}000000{{{d{{Hl{c}}}}{d{Ff}}}{{Cn{GhLl}}}{}}`{c{{Cd{Fl}}}{}}{c{{Cd{Gh}}}{}}01{{{d{{Hl{c}}}}}{{Hl{c}}}j}{{{d{{Ln{ce}}}}}{{Ln{ce}}}jj}{{{d{{M`{ce}}}}}{{M`{ce}}}jj}{{{d{{Id{c}}}}}{{Id{c}}}j}{{{d{c}}{d{Aje}}}An{}{}}000{{{d{{Ln{ce}}}}{d{{Ln{ce}}}}}C`ll}{{{d{{M`{ce}}}}{d{{M`{ce}}}}}C`ll}{{}{{Hl{c}}}{}}{{}{{Id{c}}}{}}{{{d{{Ln{ce}}}}}{{d{g}}}{}{}{}}{c{{Cn{{Id{e}}}}}D`{lIb}}{{{d{{Hl{c}}}}{d{Ff}}}{{`{{Jh{}{{Gb{{Dn{EbH`}}}}}}}}}{}}{{{d{{Hl{c}}}}{d{{Hl{c}}}}}DdDf}{{{d{{Ln{ce}}}}{d{{Ln{ce}}}}}DdDfDf}{{{d{{M`{ce}}}}{d{{M`{ce}}}}}DdDfDf}{{{d{Ll}}{d{Ll}}}Dd}{{{d{{Id{c}}}}{d{{Id{c}}}}}DdDf}{{{d{{Hl{c}}}}{d{e}}Adi}{{`{{Jh{}{{Gb{{Dn{g{Bl{c}}}}}}}}}}}Ab{{El{}{{Ej{Lh}}}}}j{{Hn{}{{Gb{{Dn{gFh}}}}}}}}0{{{d{{Hl{c}}}}}{{`{{Jh{}{{Gb{{Dn{Fh{d{Fj}}}}}}}}}}}{}}{{{d{{Hl{c}}}}{d{AjDh}}}Djn}{{{d{{Ln{ce}}}}{d{AjDh}}}Djnn}{{{d{{M`{ce}}}}{d{AjDh}}}Djnn}{{{d{Ll}}{d{AjDh}}}Dj}0{{{d{{Id{c}}}}{d{AjDh}}}Djn}{cc{}}000000{{{d{{Hl{c}}}}}{{`{{Jh{}{{Gb{{Ln{{Mb{Ff}}c}}}}}}}}}{}}{{{d{{Hl{c}}}}{d{e}}AdH`}{{Cd{{Bh{{d{c}}}}}}}Ab{{El{}{{Ej{Lh}}}}}}{{{d{{Hl{c}}}}{d{e}}AdFh}{{Cd{{Dn{{Bh{{d{c}}}}H`}}}}}Ab{{El{}{{Ej{Lh}}}}}}{{{d{{Hl{c}}}}H`}{{Cd{{Mb{Ff}}}}}{}}{{{d{{Hl{c}}}}H`}{{Cd{{Ln{{Mb{Ff}}c}}}}}{}}{{{d{{Hl{c}}}}Fh}{{Cd{{d{Fj}}}}}{}}{{{d{{Hl{c}}}}}{{Id{c}}}{jl}}{{{d{Aj{Hl{c}}}}H`c}{{Id{c}}}{jl}}{{{d{Aj{Hl{c}}}}H`Db}{{Id{c}}}{jl}}{{{d{Aj{Hl{c}}}}e}{{Id{c}}}{jl}{{Md{{Mb{Ff}}}}}}{{{d{Aj{Hl{c}}}}FhFj}{{Id{c}}}{jl}}{ce{}{}}00000000{{{d{{Hl{c}}}}}Dd{}}{{{d{{Id{c}}}}}Ddl}``{{{d{{Hl{c}}}}{d{e}}Ad}{{`{{Jh{}{{Gb{{M`{{Mb{Ff}}c}}}}}}}}}AbEl}{{{Hl{c}}g}{{Hl{e}}}{jl}{jl}{{Ld{c}{{Lj{e}}}}}}{{{Id{c}}g}{{Id{e}}}ll{{Ld{c}{{Lj{e}}}}}}{c{{Hl{e}}}{{Hn{}{{Gb{Ff}}}}}{jl}}{{{d{Aj{Mf{cg}}}}}{{Cd{i}}}{}{}{{Ld{Eb{Mb{Ff}}}{{Lj{{Cd{e}}}}}}}{}}{{{d{Aj{Mh{cg}}}}}{{Cd{i}}}{}{}{{Ld{EbH`}{{Lj{{Cd{e}}}}}}}{}}{{{d{{Hl{c}}}}Fh}{{d{{Mj{H`}}}}}{}}{{{d{{Ln{ce}}}}{d{{Ln{ce}}}}}{{Cd{C`}}}GfGf}{{{d{{M`{ce}}}}{d{{M`{ce}}}}}{{Cd{C`}}}GfGf}{{{d{{Id{c}}}}e}Cn{lIh}Gj}{{{d{c}}}e{}{}}000{{{d{c}}}Gl{}}{{{d{{Hl{c}}}}{d{e}}Adik}{{Cn{Ij}}}AbElj{{Hn{}{{Gb{{Dn{gFh}}}}}}}{{Ld{{d{g}}{d{Fd}}}{{Lj{Dd}}}}}}{{{d{{Hl{c}}}}{d{e}}Adi}{{`{{Jh{}{{Gb{{Cn{{Dn{g{Bl{c}}}}}}}}}}}}}AbElj{{Hn{}{{Gb{{Dn{gFh}}}}}}}}0{c{{Cn{e}}}{}{}}000000{{{d{{Hl{c}}}}{d{e}}AdH`}{{Cn{{Cd{{Bh{{d{c}}}}}}}}}AbEl}{{{d{{Hl{c}}}}{d{e}}AdFh}{{Cn{{Cd{{Dn{{Bh{{d{c}}}}H`}}}}}}}AbEl}2222222{{{d{{Hl{c}}}}{d{e}}Ad}{{`{{Jh{}{{Gb{{Cn{{M`{{Mb{Ff}}c}}}}}}}}}}}AbEl}``{{{d{{Hl{c}}}}H`}{{Cd{{h{Cb{d{Fj}}}}}}}{}}{{{d{{Hl{c}}}}H`}{{`{{Gd{}{{Gb{{Dn{Cb{d{{Mj{H`}}}}}}}}}}}}}{}}`{{{d{{Id{c}}}}}{{`{{Jh{}{{Gb{{Dn{Fh{d{Fj}}}}}}}}}}}{}}``{{{d{c}}}Hb{}}000000{{{d{Aj{Hl{c}}}}Db}{{Id{c}}}{jl}}{ce{}{}}000000{{{d{{Hl{c}}}}ei}{{Mf{ci}}}{jl}{{Md{{Mb{Ff}}}}}{}{{Ld{Eb{Mb{Ff}}}{{Lj{{Cd{g}}}}}}}}{{{d{{Hl{c}}}}{d{Ff}}g}{{Mh{cg}}}{}{}{{Ld{EbH`}{{Lj{{Cd{e}}}}}}}}{{{d{{Hl{c}}}}H`g}{{Mh{cg}}}{jl}{}{{Ld{EbH`}{{Lj{{Cd{e}}}}}}}}","D":"BNj","p":[[5,"SpkTxOutIndex",0,841],[1,"reference"],[5,"ScriptBuf",842],[5,"BTreeMap",843],[10,"Clone",844],[10,"Ord",845],[10,"Debug",846],[5,"DescriptorId",0,847],[10,"Anchor",0,848],[5,"BlockId",0,849],[5,"ConfirmationHeightAnchor",0,849],[5,"ConfirmationTimeHeightAnchor",0,849],[0,"mut"],[10,"Append",0,848],[1,"unit"],[5,"Hash",850],[1,"u8"],[1,"array"],[1,"slice"],[6,"ChainPosition",0,849],[6,"ConfirmationTime",0,849],[5,"FullTxOut",0,849],[5,"SpkIterator",0,851],[6,"Ordering",845],[1,"u32"],[6,"Option",852],[6,"DescriptorPublicKey",853],[6,"Descriptor",854],[10,"Borrow",855],[10,"DescriptorExt",0,847],[6,"Result",856],[10,"Deserializer",857],[1,"u64"],[1,"bool"],[10,"PartialEq",845],[5,"Formatter",846],[8,"Result",846],[5,"BlockHash",858],[1,"tuple"],[5,"Block",858],[1,"usize"],[10,"AnchorFromBlockPosition",0,848],[5,"FromSliceError",859],[1,"str"],[17,"Error"],[10,"ChainOracle",0,860],[10,"Hash",861],[10,"Hasher",861],[10,"SliceIndex",862],[5,"Script",863],[5,"Transaction",864],[5,"OutPoint",864],[5,"TxOut",864],[5,"SignedAmount",865],[10,"RangeBounds",866],[5,"BTreeSet",867],[17,"Item"],[10,"DoubleEndedIterator",868],[10,"PartialOrd",845],[5,"Amount",865],[10,"Serializer",869],[5,"String",870],[10,"ExactSizeIterator",871],[5,"Txid",864],[5,"TypeId",872],[5,"ChangeSet",274],[5,"IndexedTxGraph",274],[10,"Indexer",274],[17,"ChangeSet"],[5,"TxGraph",680],[10,"IntoIterator",873],[10,"Default",874],[10,"Deserialize",857],[5,"ChangeSet",680],[5,"ChangeSet",331,875],[10,"Serialize",869],[5,"Balance",331],[5,"KeychainTxOutIndex",331,875],[6,"InsertDescriptorError",331,875],[5,"NoSuchKeychain",331,875],[8,"Indexed",331],[8,"KeychainIndexed",331],[5,"Vec",876],[10,"Iterator",877],[5,"LocalChain",474],[8,"ChangeSet",474],[5,"MissingGenesisError",474],[5,"Header",858],[5,"CannotConnectError",474],[6,"ApplyHeaderError",474],[5,"CheckPoint",474],[5,"AlterCheckPointError",474],[5,"CheckPointIter",474],[5,"SyncRequest",616],[10,"Send",878],[17,"IntoIter"],[5,"FullScanRequest",616],[10,"FnMut",879],[10,"Sync",878],[6,"Infallible",880],[17,"Output"],[6,"CalculateFeeError",680],[5,"TxNode",680],[5,"CanonicalTx",680],[5,"Arc",881],[10,"Into",880],[5,"TxAncestors",680],[5,"TxDescendants",680],[5,"HashSet",882],[15,"Confirmed",271],[15,"Unconfirmed",271],[15,"DescriptorAlreadyAssigned",470],[15,"KeychainAlreadyAssigned",470],[5,"SyncResult",616],[5,"FullScanResult",616]],"r":[[0,848],[1,848],[2,848],[3,851],[4,849],[6,860],[7,849],[8,849],[9,849],[10,849],[13,847],[14,847],[16,849],[17,331],[18,274],[19,331],[20,851],[21,841],[22,680],[332,875],[333,875],[336,875],[339,875],[340,875]],"b":[[37,"impl-AsRef%3C%5Bu8;+%3C%24hash+as+%24crate::Hash%3E::LEN%5D%3E-for-DescriptorId"],[38,"impl-AsRef%3C%5Bu8%5D%3E-for-DescriptorId"],[121,"impl-Debug-for-DescriptorId"],[122,"impl-LowerHex-for-DescriptorId"],[123,"impl-Display-for-DescriptorId"],[124,"impl-UpperHex-for-DescriptorId"],[130,"impl-From%3C(%26u32,+%26BlockHash)%3E-for-BlockId"],[131,"impl-From%3C(u32,+BlockHash)%3E-for-BlockId"],[302,"impl-From%3CChangeSet%3CA%3E%3E-for-ChangeSet%3CA,+IA%3E"],[303,"impl-From%3CChangeSet%3CK%3E%3E-for-ChangeSet%3CA,+ChangeSet%3CK%3E%3E"],[344,"impl-Indexer-for-KeychainTxOutIndex%3CK%3E"],[345,"impl-KeychainTxOutIndex%3CK%3E"],[377,"impl-Debug-for-InsertDescriptorError%3CK%3E"],[378,"impl-Display-for-InsertDescriptorError%3CK%3E"],[380,"impl-Debug-for-NoSuchKeychain%3CK%3E"],[381,"impl-Display-for-NoSuchKeychain%3CK%3E"],[382,"impl-Display-for-Balance"],[383,"impl-Debug-for-Balance"],[525,"impl-Display-for-MissingGenesisError"],[526,"impl-Debug-for-MissingGenesisError"],[527,"impl-Debug-for-AlterCheckPointError"],[528,"impl-Display-for-AlterCheckPointError"],[529,"impl-Debug-for-CannotConnectError"],[530,"impl-Display-for-CannotConnectError"],[531,"impl-Debug-for-ApplyHeaderError"],[532,"impl-Display-for-ApplyHeaderError"],[746,"impl-Debug-for-CalculateFeeError"],[747,"impl-Display-for-CalculateFeeError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAANQBSgASAAIAFwAAABsAAAAdAAIAIwABACYAFQA9ABEAUAAGAFwAAQBfAAMAZQAEAGsAEgCAAAAAgwABAIgAAACMAAQAkgACAJYABQCeAAAAoAABAKMAAACuAAAAtwAAALwAAADAAAEAxQAGAM8ABQDYAAkA4wASAPsACAAHAQgAFwEAAB0BAAAhAQsALwEBAD8BAABCAQkAVgEAAFkBAABbARMAcAEQAIkBAgCUAQAArQEBALABBwC7AQkAyAEEANIBBADqARkABQIFAAwCCQAmAgAANAICADoCAABBAhAAUwINAGICBgBtAgcAmAIHAKECBwC3AgAAugIAAL0CDQDNAhEA4AIEAOgCBQAHAwEACgMAABEDAQAUAwcAHwMGACgDBgA4AwYAQAMGAA=="}],\ ["bdk_coin_select",{"t":"FFGGFFPIPFGPPPFGFPPSPPPPPFNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNHNNNONONNNNOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNONNOOOONNNNONOOOOONNNNONNNNNNOOOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNOOON","n":["Bnb","BnbIter","BnbLimit","BranchStrategy","CoinSelector","CoinSelectorOpt","Continue","DecideStrategy","Duration","ExcessStrategy","ExcessStrategyKind","MinAbsoluteFee","MinDrainValue","Rounds","Selection","SelectionConstraint","SelectionError","SkipBoth","SkipInclusion","TXIN_BASE_WEIGHT","TargetFee","TargetValue","ToDrain","ToFee","ToRecipient","WeightedValue","advertise_new_score","all_selected","apply_selection","backtrack","base_weight","best_score","best_strategy","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","candidate","candidates","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","coin_select_bnb","current_excess","current_weight","deselect","drain_value","drain_waste","drain_weight","effective_target","effective_value","eq","eq","excess","excess_strategies","fee","feerate","finish","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","forward","from","from","from","from","from","from","from","from","from","from","from","from","from","from","fund_outputs","hash","input_count","into","into","into","into","into","into","into","into","into","into","into","into","into_iter","into_iter","is_empty","is_segwit","is_selected","long_term_feerate","long_term_feerate","max_extra_target","min_absolute_fee","min_drain_value","new","new","new","next","opts","partial_cmp","pool","pool_pos","recipient_value","rem_abs","rem_eff","select","select_all","select_until_finished","selected","selected","selected_absolute_value","selected_count","selected_effective_value","selected_indexes","selected_waste","selected_weight","selection","spend_drain_weight","target_feerate","target_value","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unselected","unselected_indexes","value","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","waste","weight","weight","will_continue"],"q":[[0,"bdk_coin_select"],[235,"bdk_coin_select::bnb"],[236,"core::cmp"],[237,"bdk_coin_select::coin_selector"],[238,"core::iter::traits::iterator"],[239,"core::option"],[240,"core::convert"],[241,"core::result"],[242,"core::fmt"],[243,"core::time"],[244,"bitcoin::blockdata::transaction"],[245,"core::hash"],[246,"alloc::vec"],[247,"core::marker"],[248,"alloc::string"],[249,"core::any"]],"i":[0,0,0,0,0,0,41,0,22,0,0,18,18,22,0,0,0,41,41,0,18,18,11,11,11,0,2,6,7,2,16,2,7,41,2,34,22,15,16,6,17,18,7,11,12,41,2,34,22,15,16,6,17,18,7,11,12,6,6,15,16,6,17,18,7,11,12,15,16,6,17,18,7,11,12,11,0,6,6,6,12,16,16,6,15,18,11,7,7,12,12,6,15,16,6,17,17,18,18,7,11,11,12,2,41,2,34,22,22,22,15,16,6,17,18,7,11,12,16,11,15,41,2,34,22,15,16,6,17,18,7,11,12,2,34,6,15,6,16,16,16,16,16,2,15,6,34,6,11,2,2,12,2,2,6,6,6,6,7,6,6,6,6,6,6,2,16,16,16,15,16,6,17,18,7,11,12,17,18,11,41,2,34,22,15,16,6,17,18,7,11,12,41,2,34,22,15,16,6,17,18,7,11,12,41,2,34,22,15,16,6,17,18,7,11,12,6,6,15,41,2,34,22,15,16,6,17,18,7,11,12,12,15,12,41],"f":"``````````````````````````{{{f{b{d{c}}}}c}hj}{{{f{l}}}h}{{{f{n}}{f{{A`{c}}}}}{{`{{Ad{}{{Ab{{f{c}}}}}}}}}{}}{{{f{b{d{c}}}}}hj}``{{{f{n}}}{{Aj{{f{Af}}{f{Ah}}}}}}{{{f{c}}}{{f{e}}}{}{}}00000000000{{{f{bc}}}{{f{be}}}{}{}}00000000000{{{f{l}}Al}{{f{An}}}}`{{{f{An}}}An}{{{f{B`}}}B`}{{{f{l}}}l}{{{f{Bb}}}Bb}{{{f{Bd}}}Bd}{{{f{n}}}n}{{{f{Af}}}Af}{{{f{Ah}}}Ah}{{{f{c}}{f{be}}}Bf{}{}}0000000{{{f{Af}}{f{Af}}}Bh}{{cl}{{Bj{l}}}{{Bn{Bl}}}}{{{f{l}}}C`}{{{f{l}}}Cb}{{{f{bl}}Al}h}`{{{f{B`}}}C`}`3{{{f{An}}Cd}C`}{{{f{Bd}}{f{Bd}}}h}{{{f{Af}}{f{Af}}}h}```{{{f{Ah}}}Cd}{{{f{l}}}{{Cf{nBb}}}}{{{f{An}}{f{bCh}}}Cj}{{{f{B`}}{f{bCh}}}Cj}{{{f{l}}{f{bCh}}}Cj}{{{f{Bb}}{f{bCh}}}Cj}0{{{f{Bd}}{f{bCh}}}Cj}0{{{f{n}}{f{bCh}}}Cj}{{{f{Af}}{f{bCh}}}Cj}0{{{f{Ah}}{f{bCh}}}Cj}{{{f{b{d{c}}}}h}Bfj}{cc{}}00{ClBl}1{AlBl}22222222{{{f{{A`{Cn}}}}{f{Cn}}Cb}B`}{{{f{Af}}{f{bc}}}BfD`}`{ce{}{}}00000000000{{{d{c}}{f{{Db{c}}}}}{{Dd{c}}}j}1{{{f{l}}}h}`{{{f{l}}Al}h}{{{f{B`}}}Cd}````{{l{Df{{Aj{Al{f{An}}}}}}c}{{d{c}}}j}{{DhCbh}An}{{{f{{Df{An}}}}{f{B`}}}l}{{{f{b{Dd{c}}}}}{{Bj{e}}}{jDjDl}{}}`{{{f{Af}}{f{Af}}}{{Bj{Bh}}}}`````{{{f{bl}}Al}h}{{{f{bl}}}Bf}{{{f{bl}}}{{Cf{nBb}}}}{{{f{l}}}{{`{{Ad{}{{Ab{{Aj{Al{f{An}}}}}}}}}}}}`{{{f{l}}}Dh}{{{f{l}}}Al}{{{f{l}}}C`}{{{f{l}}}{{`{{Ad{}{{Ab{Al}}}}}}}}1{{{f{l}}}Cb}````{{{f{c}}}e{}{}}0000000{{{f{c}}}Dn{}}00{c{{Cf{e}}}{}{}}00000000000000000000000{{{f{c}}}E`{}}0000000000095`{ce{}{}}00000000000```{{{f{Eb}}}h}","D":"Hh","p":[[0,"mut"],[5,"Bnb",0,235],[1,"reference"],[1,"bool"],[10,"Ord",236],[5,"CoinSelector",0,237],[5,"Selection",0,237],[1,"slice"],[17,"Item"],[10,"Iterator",238],[6,"ExcessStrategyKind",0,237],[5,"ExcessStrategy",0,237],[1,"tuple"],[1,"usize"],[5,"WeightedValue",0,237],[5,"CoinSelectorOpt",0,237],[5,"SelectionError",0,237],[6,"SelectionConstraint",0,237],[1,"unit"],[6,"Ordering",236],[6,"Option",239],[6,"BnbLimit",0,235],[10,"Into",240],[1,"i64"],[1,"u32"],[1,"f32"],[6,"Result",241],[5,"Formatter",242],[8,"Result",242],[5,"Duration",243],[5,"TxOut",244],[10,"Hasher",245],[8,"DecideStrategy",0,235],[5,"BnbIter",0,235],[5,"Vec",246],[1,"u64"],[10,"Copy",247],[10,"Display",242],[5,"String",248],[5,"TypeId",249],[6,"BranchStrategy",0,235]],"r":[[0,235],[1,235],[2,235],[3,235],[4,237],[5,237],[7,235],[9,237],[10,237],[14,237],[15,237],[16,237],[25,237],[76,235]],"b":[[95,"impl-Display-for-SelectionError"],[96,"impl-Debug-for-SelectionError"],[97,"impl-Display-for-SelectionConstraint"],[98,"impl-Debug-for-SelectionConstraint"],[100,"impl-Debug-for-ExcessStrategyKind"],[101,"impl-Display-for-ExcessStrategyKind"],[107,"impl-From%3CDuration%3E-for-BnbLimit"],[109,"impl-From%3Cusize%3E-for-BnbLimit"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAKcAGAAAAAAAAgAAAAYAAAAJAAIADgADABcAAgAcAAEAIAAAACIAKgBQAAIAVgAEAFwACwBsAAAAbgAAAHcAAQCHAAEAigABAJIADQChAAAAowAAAKYAAACqADAA3AAMAOoAAQA="}],\ ["bdk_electrum",{"t":"FFFENNNNNNENNNNNNONNNNNNNNNNNNNNNNNNNNNNN","n":["BdkElectrumClient","ElectrumFullScanResult","ElectrumSyncResult","bdk_chain","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","electrum_client","fetch_tx","fmt","from","from","from","full_scan","inner","into","into","into","new","populate_tx_cache","sync","transaction_broadcast","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","with_confirmation_height_anchor","with_confirmation_height_anchor","with_confirmation_time_height_anchor","with_confirmation_time_height_anchor"],"q":[[0,"bdk_electrum"],[41,"bdk_electrum::bdk_electrum_client"],[42,"bitcoin::blockdata::transaction"],[43,"alloc::sync"],[44,"electrum_client::types"],[45,"core::result"],[46,"electrum_client::api"],[47,"core::fmt"],[48,"bdk_chain::spk_client"],[49,"core::cmp"],[50,"core::clone"],[51,"bdk_chain::tx_graph"],[52,"core::convert"],[53,"core::any"],[54,"bdk_chain::chain_data"]],"i":[0,0,0,0,16,23,3,16,23,3,0,3,3,16,23,3,3,3,16,23,3,3,3,3,3,16,23,3,16,23,3,16,23,3,16,23,3,16,23,16,23],"f":"````{{{b{c}}}{{b{e}}}{}{}}00{{{b{dc}}}{{b{de}}}{}{}}00`{{{b{{f{c}}}}h}{{A`{{l{j}}n}}}Ab}{{{b{{f{c}}}}{b{dAd}}}AfAh}{cc{}}00{{{b{{f{c}}}}{Aj{e}}AlAlAn}{{A`{{B`{e}}n}}}Ab{BbBd}}`{ce{}{}}00{c{{f{c}}}Ab}{{{b{{f{c}}}}g}BfAb{}{{Bj{{Bh{e}}}}}}{{{b{{f{c}}}}BlAlAn}{{A`{Bnn}}}Ab}{{{b{{f{c}}}}{b{j}}}{{A`{hn}}}Ab}{c{{A`{e}}}{}{}}00000{{{b{c}}}C`{}}00666{{{B`{c}}}{{Cd{cCb}}}{}}{Bn{{Cf{Cb}}}}{{{B`{c}}{b{{f{e}}}}}{{A`{{Cd{cCh}}n}}}{}Ab}{{Bn{b{{f{c}}}}}{{A`{{Cf{Ch}}n}}}Ab}","D":"Bj","p":[[1,"reference"],[0,"mut"],[5,"BdkElectrumClient",0,41],[5,"Txid",42],[5,"Transaction",42],[5,"Arc",43],[6,"Error",44],[6,"Result",45],[10,"ElectrumApi",46],[5,"Formatter",47],[8,"Result",47],[10,"Debug",47],[5,"FullScanRequest",48],[1,"usize"],[1,"bool"],[5,"ElectrumFullScanResult",0,41],[10,"Ord",49],[10,"Clone",50],[1,"unit"],[5,"TxGraph",51],[10,"AsRef",52],[5,"SyncRequest",48],[5,"ElectrumSyncResult",0,41],[5,"TypeId",53],[5,"ConfirmationHeightAnchor",54],[5,"FullScanResult",48],[5,"SyncResult",48],[5,"ConfirmationTimeHeightAnchor",54]],"r":[[0,41],[1,41],[2,41]],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABQAAwAEAAcADQAAABoACwA="}],\ ["bdk_esplora",{"t":"IKKEMMMM","n":["Error","EsploraAsyncExt","EsploraExt","esplora_client","full_scan","full_scan","sync","sync"],"q":[[0,"bdk_esplora"],[8,"bdk_esplora::blocking_ext"],[9,"bdk_chain::spk_client"],[10,"core::result"],[11,"core::cmp"],[12,"core::clone"],[13,"bdk_esplora::async_ext"],[14,"core::future::future"],[15,"alloc::boxed"],[16,"core::pin"],[17,"core::marker"]],"i":[0,0,0,0,1,10,1,10],"f":"````{{{d{b}}{f{c}}hh}{{n{{j{c}}l}}}{A`Ab}}{{{d{Ad}}{f{c}}hh}{{Aj{{Ah{Af}}}}}{A`AbAl}}{{{d{b}}Anh}{{n{B`l}}}}{{{d{Ad}}Anh}{{Aj{{Ah{Af}}}}}}","D":"A`","p":[[10,"EsploraExt",0,8],[1,"reference"],[5,"FullScanRequest",9],[1,"usize"],[5,"FullScanResult",9],[8,"Error",0,8],[6,"Result",10],[10,"Ord",11],[10,"Clone",12],[10,"EsploraAsyncExt",0,13],[10,"Future",14],[5,"Box",15],[5,"Pin",16],[10,"Send",17],[5,"SyncRequest",9],[5,"SyncResult",9]],"r":[[0,8],[1,13],[2,8]],"b":[],"c":"OjAAAAAAAAA=","e":"OjAAAAEAAAAAAAAAEAAAAAQA"}],\ @@ -10,7 +10,7 @@ var searchIndex = new Map(JSON.parse('[\ ["bdk_sqlite",{"t":"GPPFNNNNNNNNNNNNNENNNNNNNNNNOO","n":["Error","Network","Sqlite","Store","borrow","borrow","borrow_mut","borrow_mut","fmt","fmt","fmt","from","from","into","into","load_from_persistence","new","rusqlite","to_string","try_from","try_from","try_into","try_into","type_id","type_id","vzip","vzip","write_changes","expected","given"],"q":[[0,"bdk_sqlite"],[28,"bdk_sqlite::Error"],[30,"bdk_sqlite::store"],[31,"core::fmt"],[32,"core::option"],[33,"anyhow"],[34,"core::cmp"],[35,"serde::de"],[36,"serde::ser"],[37,"core::marker"],[38,"bdk_chain::tx_data_traits"],[39,"core::clone"],[40,"bdk_persist::changeset"],[41,"core::convert"],[42,"rusqlite"],[43,"rusqlite::error"],[44,"core::result"],[45,"alloc::string"],[46,"core::any"]],"i":[0,6,6,0,3,6,3,6,3,6,6,3,6,3,6,3,3,0,6,3,6,3,6,3,6,3,6,3,24,24],"f":"````{{{b{c}}}{{b{e}}}{}{}}0{{{b{dc}}}{{b{de}}}{}{}}0{{{b{{f{ce}}}}{b{dh}}}j{}{}}{{{b{l}}{b{dh}}}j}0{cc{}}0{ce{}{}}0{{{b{d{f{ce}}}}}{{A`{{n{g}}}}}{AbAdAfAh}{AjAdAfAh}{Al{B`{{An{ce}}}}{Bb{{An{ce}}}}}}{Bd{{Bh{{f{ce}}Bf}}}{AbAdAfAh}{AjAdAfAh}}`{{{b{c}}}Bj{}}{c{{Bh{e}}}{}{}}000{{{b{c}}}Bl{}}055{{{b{d{f{ce}}}}{b{g}}}{{A`{Bn}}}{AbAdAfAh}{AjAdAfAh}{Al{B`{{An{ce}}}}{Bb{{An{ce}}}}}}``","D":"Ad","p":[[1,"reference"],[0,"mut"],[5,"Store",0,30],[5,"Formatter",31],[8,"Result",31],[6,"Error",0],[6,"Option",32],[8,"Result",33],[10,"Ord",34],[10,"Deserialize",35],[10,"Serialize",36],[10,"Send",37],[10,"Anchor",38],[10,"Clone",39],[5,"CombinedChangeSet",40],[10,"From",41],[10,"Into",41],[5,"Connection",42],[6,"Error",43],[6,"Result",44],[5,"String",45],[5,"TypeId",46],[1,"unit"],[15,"Network",28]],"r":[[3,30]],"b":[[9,"impl-Display-for-Error"],[10,"impl-Debug-for-Error"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAABQAAwAFAAYAEAAAABIADAA="}],\ ["bdk_testenv",{"t":"FEEEONNEOENNNNNNNNNNNNNNNNNNN","n":["TestEnv","anyhow","bitcoincore_rpc","bitcoind","bitcoind","borrow","borrow_mut","electrsd","electrsd","electrum_client","electrum_client","from","genesis_hash","into","invalidate_blocks","make_checkpoint_tip","mine_blocks","mine_empty_block","new","reorg","reorg_empty_blocks","reset_electrsd","rpc_client","send","try_from","try_into","type_id","vzip","wait_until_electrum_sees_block"],"q":[[0,"bdk_testenv"],[29,"electrum_client::api"],[30,"bitcoin::blockdata::block"],[31,"anyhow"],[32,"bdk_chain::local_chain"],[33,"bitcoin::address"],[34,"core::option"],[35,"alloc::vec"],[36,"bitcoincore_rpc::client"],[37,"bitcoin_units::amount"],[38,"bitcoin::blockdata::transaction"],[39,"core::result"],[40,"core::any"]],"i":[0,0,0,0,3,3,3,0,3,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3],"f":"`````{{{b{c}}}{{b{e}}}{}{}}{{{b{dc}}}{{b{de}}}{}{}}```{{{b{f}}}{{b{{`{h}}}}}}{cc{}}{{{b{f}}}{{l{j}}}}{ce{}{}}{{{b{f}}n}{{l{A`}}}}{{{b{f}}}Ab}{{{b{f}}n{Af{Ad}}}{{l{{Ah{j}}}}}}{{{b{f}}}{{l{{Aj{nj}}}}}}{{}{{l{f}}}}{{{b{f}}n}{{l{{Ah{j}}}}}}{{{b{f}}n}{{l{{Ah{{Aj{nj}}}}}}}}{f{{l{f}}}}{{{b{f}}}{{b{{`{Al}}}}}}{{{b{f}}{b{{Ad{An}}}}B`}{{l{Bb}}}}{c{{Bd{e}}}{}{}}0{{{b{c}}}Bf{}}<{{{b{f}}}{{l{A`}}}}","D":"An","p":[[1,"reference"],[0,"mut"],[5,"TestEnv",0],[10,"ElectrumApi",29],[5,"BlockHash",30],[8,"Result",31],[1,"usize"],[1,"unit"],[5,"CheckPoint",32],[5,"Address",33],[6,"Option",34],[5,"Vec",35],[1,"tuple"],[10,"RpcApi",36],[6,"NetworkChecked",33],[5,"Amount",37],[5,"Txid",38],[6,"Result",39],[5,"TypeId",40]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAA4ABAAAAAAAAgAIABYAAAAZAAMA"}],\ ["bdk_tmp_plan",{"t":"FKPPPPFFGGFFPPPGPPONNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNOOONNNNNNNNNNNNNNNNNNNNOOOOOONNNNNNNNOONHNNNNOOOOOOONONNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNOOOOOOOO","n":["Assets","CanDerive","Complete","DerivationError","Incomplete","Legacy","Plan","PlanKey","PlanState","RequiredSignatures","Requirements","SatisfactionMaterial","Segwitv0","SigHashP2wpkh","SigHashTaproot","SigningError","TapKey","TapScript","asset_key","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","can_derive","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","default","default","default","default","derivation_hint","descriptor_key","ecdsa_sigs","expected_weight","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","hash160","hash160_images","hash160_preimages","hash256","hash256_images","hash256_preimages","into","into","into","into","into","into","into","into","keys","max_locktime","min_version","plan_satisfaction","required_locktime","required_sequence","requirements","requires_hash_preimages","ripemd160","ripemd160_images","ripemd160_preimages","schnorr_sigs","sha256","sha256_images","sha256_preimages","sign_with_keymap","signatures","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_complete","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","txo_age","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","witness_version","final_script_sig","final_script_witness","keys","keys","leaf_hash","merkle_root","plan_key","plan_keys"],"q":[[0,"bdk_tmp_plan"],[151,"bdk_tmp_plan::PlanState"],[153,"bdk_tmp_plan::RequiredSignatures"],[159,"miniscript::descriptor::key"],[160,"bitcoin::bip32"],[161,"core::option"],[162,"bdk_tmp_plan::requirements"],[163,"core::clone"],[164,"bdk_tmp_plan::template"],[165,"core::fmt"],[166,"bitcoin::crypto::sighash"],[167,"miniscript::descriptor"],[168,"bitcoin::blockdata::locktime::absolute"],[169,"bitcoin::blockdata::transaction"],[170,"secp256k1"],[171,"core::result"],[172,"core::borrow"],[173,"secp256k1::context"],[174,"alloc::string"],[175,"core::any"],[176,"bitcoin::blockdata::script::witness_version"]],"i":[0,0,42,10,42,9,0,0,0,0,0,0,9,10,10,0,9,9,11,42,7,9,10,11,12,13,14,42,7,9,10,11,12,13,14,3,7,9,10,11,12,13,14,7,9,10,11,12,13,14,7,9,13,14,11,11,13,12,7,9,10,10,11,12,13,14,42,7,9,10,10,10,10,11,12,13,14,14,7,13,14,7,13,42,7,9,10,11,12,13,14,14,14,12,0,12,12,12,7,14,7,13,13,14,7,13,9,7,7,9,10,11,12,13,14,10,12,42,7,9,10,11,12,13,14,42,7,9,10,11,12,13,14,14,42,7,9,10,11,12,13,14,42,7,9,10,11,12,13,14,12,45,45,46,47,48,49,49,48],"f":"```````````````````{{{b{c}}}{{b{e}}}{}{}}0000000{{{b{dc}}}{{b{de}}}{}{}}0000000{{{b{f}}{b{h}}}{{l{j}}}}{{{b{{n{c}}}}}{{n{c}}}A`}{{{b{{Ab{c}}}}}{{Ab{c}}}A`}{{{b{Ad}}}Ad}{{{b{{Af{c}}}}}{{Af{c}}}A`}{{{b{{Ah{c}}}}}{{Ah{c}}}A`}{{{b{Aj}}}Aj}{{{b{{Al{c}}}}}{{Al{c}}}A`}{{{b{c}}{b{de}}}An{}{}}000000{{}{{n{c}}}{}}{{}{{Ab{c}}}{}}{{}Aj}{{}{{Al{c}}}{}}```{{{b{{Ah{c}}}}}B`A`}{{{b{{n{c}}}}{b{dBb}}}BdBf}{{{b{{Ab{c}}}}{b{dBb}}}BdBf}{{{b{Ad}}{b{dBb}}}Bd}0{{{b{{Af{c}}}}{b{dBb}}}BdBf}{{{b{{Ah{c}}}}{b{dBb}}}BdBf}{{{b{Aj}}{b{dBb}}}Bd}{{{b{{Al{c}}}}{b{dBb}}}BdBf}{cc{}}000{BhAd}{BjAd}{BlAd}3333``````{ce{}{}}0000000``{{{b{{Ah{c}}}}}{{l{Bn}}}A`}{{{b{{C`{h}}}}{b{{Al{c}}}}}{{l{{Ah{c}}}}}{fA`}}{{{b{{Ah{c}}}}}{{l{Cb}}}A`}{{{b{{Ah{c}}}}}{{l{Cd}}}A`}{{{b{{Ah{c}}}}}{{n{c}}}A`}{{{b{{n{c}}}}}Cf{}}```````{{{b{{Ab{Ch}}}}B`{b{Cj}}{b{{Cl{c}}}}{l{Cn}}{l{D`}}{b{d{Db{e}}}}{b{dAj}}{b{{Dd{g}}}}}{{Df{CfAd}}}{{Dj{Dh}}}{{Dj{Dl}}}{DnE`}}`{{{b{c}}}e{}{}}000000{{{b{c}}}Eb{}}{{{b{{Ah{c}}}}{b{Aj}}}{{Ed{c}}}A`}{c{{Df{e}}}{}{}}000000000000000`{{{b{c}}}Ef{}}0000000<<<<<<<<{{{b{{Ah{c}}}}}{{l{Eh}}}A`}````````","D":"Fl","p":[[1,"reference"],[0,"mut"],[10,"CanDerive",0],[5,"DefiniteDescriptorKey",159],[5,"DerivationPath",160],[6,"Option",161],[5,"Requirements",0,162],[10,"Clone",163],[6,"RequiredSignatures",0,162],[6,"SigningError",0,162],[5,"PlanKey",0,164],[5,"Plan",0],[5,"SatisfactionMaterial",0],[5,"Assets",0],[1,"unit"],[1,"usize"],[5,"Formatter",165],[8,"Result",165],[10,"Debug",165],[6,"P2wpkhError",166],[6,"TaprootError",166],[6,"Error",160],[1,"u32"],[6,"Descriptor",167],[6,"LockTime",168],[5,"Sequence",169],[1,"bool"],[6,"DescriptorPublicKey",159],[8,"KeyMap",167],[6,"Prevouts",166],[6,"TapSighashType",166],[6,"EcdsaSighashType",166],[5,"SighashCache",166],[5,"Secp256k1",170],[6,"Result",171],[5,"TxOut",169],[10,"Borrow",172],[5,"Transaction",169],[10,"Signing",173],[10,"Verification",173],[5,"String",174],[6,"PlanState",0],[5,"TypeId",175],[6,"WitnessVersion",176],[15,"Complete",151],[15,"Legacy",153],[15,"Segwitv0",153],[15,"TapScript",153],[15,"TapKey",153]],"r":[[7,164],[9,162],[10,162],[15,162]],"b":[[60,"impl-Display-for-SigningError"],[61,"impl-Debug-for-SigningError"],[70,"impl-From%3CP2wpkhError%3E-for-SigningError"],[71,"impl-From%3CTaprootError%3E-for-SigningError"],[72,"impl-From%3CError%3E-for-SigningError"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAGkAEAABAAEABAABAA4AAgAUACIAOwAHAEcAAgBOAAAAUQAAAFwAAQBfAAAAYgAAAGQAAABoAAAAawAAAG0AKQCaAAEA"}],\ -["bdk_wallet",{"t":"PPEPGPFEEGEFNNDNNNNNNNNENNNNNNNNNOOCQNNNNNNNNNNQNNNNNNNNNNOOCDNONCONNNEENNNNNNNNNNNNNONNNNOHNNNNCOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMFGFPIPPPPGKGPPPPPPGGPPPPPPPFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNCNONNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNMNONONNNNNNNNONNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNONNNNNNNNNHOOOOOOOOOOPPFPKFIGGPFPFNNNNNNNNNNNNNNNNNNMNNNHNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOGPPGPPPPPPPGPPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNOOMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPPGPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOO","n":["External","Foreign","HdKeyPaths","Internal","KeychainKind","Local","LocalOutput","SignOptions","TxBuilder","Utxo","Wallet","WeightedUtxo","as_byte","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","confirmation_time","derivation_index","descriptor","descriptor","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fragment","from","from","from","from","hash","hash","into","into","into","into","is_spent","keychain","keys","miniscript","outpoint","outpoint","partial_cmp","psbt","satisfaction_weight","sequence","serialize","serialize","signer","template","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txout","txout","type_id","type_id","type_id","type_id","utxo","version","vzip","vzip","vzip","vzip","wallet","outpoint","psbt_input","sequence","Bare","Bare","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","FALSE","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Pkh","Pkh","Policy","ScriptContext","Segwitv0","Sh","Sh","Sh","Single","TRUE","TapKeyOrigins","Tr","Tr","Tr","Wpkh","Wpkh","Wpkh","Wsh","Wsh","Wsh","XPub","address","as_enum","as_enum","as_inner","as_node","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","build_template","build_template_mall","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_pk","check_pk","check_pk","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains_raw_pkh","derive","derived_descriptor","derived_descriptor","desc_type","descriptor_id","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","plan","plan_mall","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","substitute_raw_pkh","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","calc_checksum_bytes","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","MultiXPrv","MultiXPub","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","Single","Single","SinglePriv","SinglePub","SinglePubKey","SortedMultiVec","Tap","ValidNetworks","XOnly","XPrv","XPub","any_network","as_enum","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_template","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","full_derivation_paths","generate","generate_default","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_assets","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_single_keys","into_single_keys","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_multipath","is_multipath","is_segwit_v0","is_segwit_v0","is_taproot","is_taproot","is_uncompressed","is_x_only_key","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","n","name_str","new","num_der_paths","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","sanity_check","satisfy","script_size","serialize","sig_type","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public","to_string","to_string","to_string","to_string","top_level_checks","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","PsbtUtils","fee_amount","fee_rate","get_utxo_for","AddressInfo","ApplyBlockError","Balance","CannotConnect","ChangeSet","ConfirmationHeightCannotBeGreaterThanTip","Descriptor","Descriptor","Descriptor","InsertTxError","IsDust","LoadError","LoadedDescriptorDoesNotMatch","LoadedGenesisDoesNotMatch","LoadedNetworkDoesNotMatch","MissingDescriptor","MissingGenesis","MissingNetwork","NewError","NewOrLoadError","NonEmptyDatabase","NotInitialized","NotInitialized","Persist","Persist","Persist","UnexpectedConnectedToHash","Update","Wallet","add","add_signer","address","all_unbounded_spk_iters","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","checkpoints","clone","clone","clone_into","clone_into","coin_selection","commit","confirmed","default","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","eq","eq","error","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","get_descriptor_for_keychain","get_psbt_input","get_signers","get_tx","get_utxo","graph","immature","index","indexed_tx_graph","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","into","is_dust","is_mine","keychain","keychains","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load","local_chain","mark_used","network","network","new","new_no_persist","new_no_persist_with_genesis_hash","new_or_load","new_or_load_with_genesis_hash","new_with_genesis_hash","next_derivation_index","next_unused_address","peek_address","policies","public_descriptor","reveal_addresses_to","reveal_next_address","secp_ctx","sent_and_received","serialize","sign","signer","spk_index","staged","start_full_scan","start_sync_with_revealed_spks","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","connected_to_hash","expected_hash","tip_height","tx_height","expected","expected","got","got","got","keychain","BnBNoExactMatch","BnBTotalTriesExceeded","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Error","Excess","InsufficientFunds","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","available","needed","amount","change_fee","dust_threshold","fee","remaining_amount","BuildFeeBumpError","CoinSelection","Conversion","CreateTxError","Descriptor","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","IrreplaceableTransaction","LockTime","MiniscriptPsbt","MiniscriptPsbtError","MissingKeyOrigin","MissingNonWitnessUtxo","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","OutputUpdate","Persist","Policy","Psbt","RbfSequence","RbfSequenceCsv","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","UnknownUtxo","UnknownUtxo","UtxoUpdate","Version0","Version1Csv","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","csv","rbf","requested","required","required","required","FullyNodedExport","WalletExport","blockheight","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","fmt","from","from_str","into","label","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","External","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MiniscriptPsbt","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Segwitv0","SighashP2wpkh","SighashTaproot","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","TxInputsIndexError","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","remove","remove_partial_sigs","remove_taproot_extras","sign_input","sign_input","sign_input","sign_input","sign_transaction","sign_transaction","sign_with_tap_internal_key","signers","tap_leaves_options","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","is_internal_key","AddForeignUtxoError","AddUtxoError","Bip69Lexicographic","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","InvalidOutpoint","InvalidTxid","MissingUtxo","OnlyChange","Shuffle","TxBuilder","TxOrdering","UnknownUtxo","Untouched","add_data","add_foreign_utxo","add_foreign_utxo_with_sequence","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","current_height","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip","foreign_utxo","input_txid"],"q":[[0,"bdk_wallet"],[97,"bdk_wallet::Utxo"],[100,"bdk_wallet::descriptor"],[352,"bdk_wallet::descriptor::checksum"],[354,"bdk_wallet::descriptor::error"],[386,"bdk_wallet::descriptor::policy"],[533,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[536,"bdk_wallet::descriptor::policy::Satisfaction"],[547,"bdk_wallet::descriptor::policy::SatisfiableItem"],[557,"bdk_wallet::descriptor::template"],[693,"bdk_wallet::keys"],[992,"bdk_wallet::psbt"],[996,"bdk_wallet::wallet"],[1219,"bdk_wallet::wallet::ApplyBlockError"],[1221,"bdk_wallet::wallet::InsertTxError"],[1223,"bdk_wallet::wallet::NewOrLoadError"],[1229,"bdk_wallet::wallet::coin_selection"],[1321,"bdk_wallet::wallet::coin_selection::Error"],[1323,"bdk_wallet::wallet::coin_selection::Excess"],[1328,"bdk_wallet::wallet::error"],[1400,"bdk_wallet::wallet::error::CreateTxError"],[1406,"bdk_wallet::wallet::export"],[1429,"bdk_wallet::wallet::signer"],[1612,"bdk_wallet::wallet::signer::SignerContext"],[1613,"bdk_wallet::wallet::tx_builder"],[1728,"bdk_wallet::wallet::tx_builder::AddForeignUtxoError"],[1730,"bdk_wallet::types"],[1731,"core::cmp"],[1732,"core::result"],[1733,"serde::de"],[1734,"core::fmt"],[1735,"core::hash"],[1736,"bitcoin::blockdata::transaction"],[1737,"core::option"],[1738,"serde::ser"],[1739,"core::any"],[1740,"miniscript::descriptor"],[1741,"bitcoin::network"],[1742,"bitcoin::address"],[1743,"miniscript"],[1744,"miniscript::miniscript"],[1745,"miniscript::miniscript::decode"],[1746,"miniscript::miniscript::context"],[1747,"miniscript::iter::tree"],[1748,"miniscript::descriptor::key"],[1749,"alloc::vec"],[1750,"miniscript::miniscript::satisfy"],[1751,"miniscript::plan"],[1752,"bitcoin_hashes::sha256"],[1753,"miniscript::miniscript::hash256"],[1754,"bitcoin_hashes::ripemd160"],[1755,"bitcoin_hashes::hash160"],[1756,"core::clone"],[1757,"secp256k1"],[1758,"bitcoin::crypto::key"],[1759,"secp256k1::context"],[1760,"bdk_chain::descriptor_ext"],[1761,"miniscript::blanket_traits"],[1762,"bitcoin::blockdata::script::owned"],[1763,"miniscript::miniscript::analyzable"],[1764,"secp256k1::context::alloc_only"],[1765,"bitcoin::blockdata::script::borrowed"],[1766,"core::ops::range"],[1767,"core::ops::function"],[1768,"miniscript::descriptor::tr"],[1769,"miniscript::descriptor::bare"],[1770,"miniscript::descriptor::sh"],[1771,"miniscript::descriptor::segwitv0"],[1772,"miniscript::miniscript::types"],[1773,"miniscript::miniscript::types::extra_props"],[1774,"miniscript::expression"],[1775,"miniscript::miniscript::iter"],[1776,"miniscript::policy::semantic"],[1777,"miniscript::policy"],[1778,"bitcoin_units::weight"],[1779,"alloc::collections::btree::map"],[1780,"alloc::string"],[1781,"bitcoin::bip32"],[1782,"hex_conservative::error"],[1783,"base58ck::error"],[1784,"miniscript::descriptor::sortedmulti"],[1785,"core::str::traits"],[1786,"core::convert"],[1787,"core::default"],[1788,"bitcoin_units::amount"],[1789,"bitcoin_units::fee_rate"],[1790,"bdk_chain::keychain"],[1791,"alloc::sync"],[1792,"core::iter::traits::iterator"],[1793,"bitcoin::blockdata::block"],[1794,"bdk_chain::local_chain"],[1795,"bdk_chain::chain_data"],[1796,"core::iter::traits::collect"],[1797,"bdk_chain::tx_graph"],[1798,"anyhow"],[1799,"bitcoin::psbt"],[1800,"bdk_chain::spk_client"],[1801,"bitcoin::psbt::map::input"],[1802,"bdk_wallet::wallet::utils"],[1803,"core::iter::traits::double_ended"],[1804,"bdk_persist::persist"],[1805,"core::marker"],[1806,"bdk_chain::keychain::txout_index"],[1807,"bitcoin::psbt::error"],[1808,"bitcoin::crypto::sighash"],[1809,"bitcoin::blockdata::script::push_bytes::primitive"],[1810,"bitcoin::blockdata::locktime::absolute"]],"i":[1,8,0,1,0,8,0,0,0,0,0,0,1,1,0,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,7,8,1,6,6,0,0,1,6,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,1,6,7,8,6,6,0,0,8,6,1,0,7,8,1,6,0,0,1,6,7,8,1,6,7,8,1,6,7,8,8,6,1,6,7,8,7,0,1,6,7,8,0,253,253,253,94,254,24,0,0,0,0,0,0,31,0,0,33,0,0,35,94,254,24,0,0,0,94,254,24,35,31,0,94,254,24,94,254,24,94,254,24,35,24,54,55,31,31,24,24,54,55,31,24,54,55,31,31,31,31,0,33,54,55,33,55,33,33,54,55,33,54,55,33,33,54,55,33,54,55,33,54,55,0,24,54,55,31,24,54,55,31,24,54,55,31,31,24,24,24,24,24,24,31,24,31,24,54,55,31,0,24,31,31,69,24,31,24,24,24,54,55,31,31,24,31,24,24,24,24,24,24,24,54,55,31,31,31,24,31,31,31,24,31,31,31,24,24,31,31,24,24,54,55,31,24,54,55,31,31,24,93,94,24,24,31,31,31,24,31,31,33,54,55,31,24,31,24,33,54,55,24,24,24,24,24,24,24,24,24,24,24,24,24,24,31,33,31,24,31,31,24,54,55,31,33,54,55,24,24,0,31,24,31,24,31,31,24,24,31,24,31,33,54,55,31,0,24,54,55,31,24,31,24,33,33,24,31,24,54,55,31,24,54,55,31,31,24,54,55,31,24,24,54,55,31,31,0,0,74,74,0,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,121,115,115,0,122,0,0,121,120,0,121,121,115,115,115,121,122,71,115,122,122,0,0,0,71,71,120,121,121,0,0,121,121,121,120,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,71,120,121,122,73,123,71,73,123,123,120,121,122,73,123,115,120,121,122,73,123,115,115,71,120,121,122,122,73,73,123,115,71,73,120,123,121,73,120,121,122,73,123,115,71,121,122,123,73,123,73,73,120,121,122,73,123,123,120,121,122,73,123,71,115,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,255,255,255,256,257,258,257,258,257,258,257,258,257,258,259,260,261,262,263,264,264,263,265,266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,124,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,125,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,114,0,0,0,0,158,158,0,0,147,0,0,0,0,114,114,114,33,0,0,30,114,114,103,35,158,151,0,151,0,0,30,35,103,0,0,0,0,30,0,147,103,35,0,267,35,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,142,33,33,33,33,33,33,33,33,33,143,30,144,142,35,103,145,146,147,143,30,144,142,35,103,145,146,147,142,35,145,147,144,144,143,35,35,142,30,142,35,103,145,146,147,148,30,144,114,114,142,142,35,35,103,103,145,146,147,142,151,151,151,143,148,30,144,114,114,114,142,35,35,103,145,146,147,148,148,35,103,142,35,35,158,161,158,161,151,35,142,35,145,147,151,143,148,30,144,114,142,35,103,145,146,147,35,127,133,143,143,148,35,103,133,151,143,143,35,103,151,151,35,267,30,35,103,267,30,267,30,35,35,142,145,146,142,0,35,33,142,142,0,142,33,142,35,145,146,33,148,142,35,145,147,33,142,142,142,142,35,33,142,0,143,30,144,142,35,103,145,146,147,103,114,142,35,103,33,33,142,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,0,166,166,166,0,0,0,201,0,200,197,198,199,0,0,0,199,199,199,198,198,198,0,0,197,198,199,197,198,199,201,0,0,169,170,193,170,170,170,170,170,170,170,169,170,182,193,197,198,199,200,201,169,170,182,193,197,198,199,200,201,170,170,170,170,170,213,182,170,169,182,169,182,0,170,169,169,182,193,170,170,170,169,169,193,0,0,170,169,169,170,182,193,193,197,197,198,198,199,199,200,200,201,201,169,170,182,182,182,193,197,198,199,200,201,170,170,170,170,170,182,169,193,213,170,170,170,169,170,182,193,197,198,199,200,201,210,170,193,170,182,170,170,170,170,170,170,170,170,213,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,169,170,0,170,170,170,170,169,182,169,193,197,198,199,200,201,169,170,169,169,169,170,182,193,197,198,199,200,201,169,170,182,193,197,198,199,200,201,0,170,169,170,182,193,197,198,199,200,201,170,170,169,169,170,182,193,197,198,199,200,201,0,268,268,269,269,270,271,270,271,272,272,227,227,0,228,0,0,0,0,0,227,0,228,0,227,228,226,222,223,224,227,228,226,222,223,224,222,223,224,222,223,224,225,222,223,224,0,222,223,224,226,226,227,227,228,226,222,223,224,227,228,226,222,223,224,227,228,226,222,223,224,226,224,226,226,222,223,224,227,227,228,226,222,223,224,227,228,226,222,223,224,227,228,226,222,223,224,227,228,226,222,223,224,273,273,274,275,275,274,275,0,206,229,0,206,206,189,206,189,206,206,0,206,206,206,206,206,229,206,206,206,206,206,206,189,189,206,189,229,206,206,229,206,189,229,206,189,229,229,229,229,206,206,189,189,229,206,206,206,206,206,206,189,229,206,189,229,229,206,189,229,206,189,229,206,189,229,206,189,229,206,189,276,276,277,277,278,279,0,0,280,231,231,231,231,231,231,231,231,231,231,231,231,280,231,231,231,231,231,231,231,236,232,236,196,232,236,196,0,196,196,196,233,196,196,196,196,196,196,196,236,232,233,196,196,0,0,0,0,0,0,0,0,233,0,0,196,196,70,195,195,70,195,232,196,233,234,171,70,195,236,232,196,233,234,171,70,195,236,70,232,233,234,171,70,195,236,232,233,234,171,70,195,236,232,171,171,70,195,236,234,237,234,234,234,232,233,171,236,70,232,196,196,233,234,171,70,195,236,232,232,232,196,196,196,196,233,234,171,70,195,236,232,237,234,234,234,70,232,196,233,234,171,70,195,236,234,70,232,171,70,195,195,244,234,234,234,172,234,195,70,195,232,233,234,171,70,195,236,196,195,195,232,196,233,234,171,70,195,236,232,196,233,234,171,70,195,236,232,196,233,234,171,70,195,236,232,196,233,234,171,70,195,236,281,0,0,250,249,249,0,247,247,247,249,250,0,0,248,250,188,188,188,188,188,188,188,188,188,188,248,247,250,249,188,248,247,250,249,188,188,250,249,188,250,249,250,249,188,188,250,249,188,188,188,188,188,250,249,188,188,188,188,248,248,247,247,250,249,188,248,247,250,249,250,249,188,188,248,247,250,249,188,188,188,188,188,250,249,188,188,188,250,188,250,249,248,247,188,248,247,250,249,188,248,247,250,249,188,248,247,250,249,188,188,188,248,247,250,249,282,282],"f":"````````````{{{d{b}}}f}{{{d{b}}}{{d{{h{f}}}}}}`{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000`{{{d{b}}}b}{{{d{l}}}l}{{{d{n}}}n}{{{d{A`}}}A`}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{b}}{d{b}}}Ad}````{c{{Af{b}}}Ah}{c{{Af{l}}}Ah}{{{d{b}}{d{b}}}Aj}{{{d{l}}{d{l}}}Aj}{{{d{n}}{d{n}}}Aj}{{{d{A`}}{d{A`}}}Aj}{{{d{b}}{d{jAl}}}An}{{{d{l}}{d{jAl}}}An}{{{d{n}}{d{jAl}}}An}{{{d{A`}}{d{jAl}}}An}`{cc{}}000{{{d{b}}{d{jc}}}AbB`}{{{d{l}}{d{jc}}}AbB`}{ce{}{}}000````{{{d{A`}}}Bb}`{{{d{b}}{d{b}}}{{Bd{Ad}}}}``{{{d{A`}}}{{Bd{Bf}}}}{{{d{b}}c}AfBh}{{{d{l}}c}AfBh}``{{{d{c}}}e{}{}}000{c{{Af{e}}}{}{}}0000000{{{d{A`}}}{{d{Bj}}}}`{{{d{c}}}Bl{}}000`{{}{{d{Bn}}}}::::``````````````````````````````````````````{{{d{{C`{c}}}}Cb}{{Af{CdCf}}}{ChCj}}{{}Cl}0{{{d{{Cn{ce}}}}}{{d{{D`{ce}}}}}ChDb}{{{d{{d{{Cn{ce}}}}}}}{{Dd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000{{{d{{Cn{ce}}}}}{{Dn{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}0`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{Cn{cFn}}}}}{{Af{AbEh}}}Ch}2022102102{{{d{c}}}{{Af{AbEh}}}Ch}00{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{D`{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{D`{cFn}}}}}{{Af{AbEh}}}Ch}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}00`{{{d{{C`{c}}}}}{{C`{c}}}{G`Ch}}{{{d{Fl}}}Fl}{{{d{Fn}}}Fn}{{{d{{Cn{ce}}}}}{{Cn{ce}}}{G`Ch}{G`Db}}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{{C`{c}}}}{d{{C`{c}}}}}Ad{GbCh}}{{{d{Fl}}{d{Fl}}}Ad}{{{d{Fn}}{d{Fn}}}Ad}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AdChDb}{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{{C`{Df}}}}{d{{Gd{c}}}}Dh}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{Dj}}}}{d{{Gd{c}}}}}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{c}}}}}GjCh}{{{d{{C`{Df}}}}}Gl}{c{{Af{{C`{e}}}}}AhGn}{c{{Af{{Cn{eg}}}}}AhGnDb}{{{d{{C`{Df}}}}}H`}{{{d{{Cn{ce}}}}}Hb{CjCh}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}Aj{HdCh}}{{{d{Fl}}{d{Fl}}}Aj}{{{d{Fn}}{d{Fn}}}Aj}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AjChDb}`{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}`{{{d{{Cn{ce}}}}{d{Hf}}}{{Af{AbHh}}}ChDb}{{{d{Hj}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{C`{Df}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{Cn{Dfc}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}Db}{{{d{{C`{Df}}}}{d{{Gd{c}}}}{d{If}}{Ih{Dh}}}{{Af{{Bd{{Ij{Dh{C`{Gf}}}}}}Dl}}}Gh}{{{d{{C`{c}}}}{d{jAl}}}{{Af{AbIl}}}Ch}0{{{d{Fl}}{d{jAl}}}{{Af{AbIl}}}}{{{d{Fn}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{Cn{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{{C`{c}}}}e}AjCh{{J`{{d{c}}}{{In{Aj}}}}}}{{{d{{Cn{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{{{Jb{c}}}{{C`{c}}}Ch}{{{Jd{c}}}{{C`{c}}}Ch}{{{Jf{c}}}{{C`{c}}}Ch}{{{Jh{c}}}{{C`{c}}}Ch}{{{Jj{c}}}{{C`{c}}}Ch}{{{Jl{c}}}{{C`{c}}}Ch}{cc{}}000{{{D`{ce}}}{{Af{{Cn{ce}}Cf}}}ChDb}{{{D`{ce}}JnK`}{{Cn{ce}}}ChDb}{{{d{Bn}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Bn}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{Bn}}{d{Hf}}}{{Af{{Cn{ce}}Cf}}}GnDb}1{{{d{Kb}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Kb}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{{Cn{ce}}}}Kd}{{Bd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}Kd}{{Bd{c}}}ChDb}{{{d{{C`{c}}}}e}{{Af{{Ij{{Dn{{Dn{f}}}}Hb}}Cf}}}{ChCj}{{Kf{c}}}}0{{{d{{Cn{ce}}}}}AjChDb}0{{{d{{C`{Df}}}}}Aj}{{{d{{C`{c}}}}{d{je}}}Ab{KhCh}B`}{{{d{Fl}}{d{jc}}}AbB`}{{{d{Fn}}{d{jc}}}AbB`}{{{d{{Cn{ce}}}}{d{jg}}}AbChDbB`}{ce{}{}}000{{{Cn{ce}}}{{D`{ce}}}ChDb}{{{C`{Df}}}{{Af{{Dn{{C`{Df}}}}Cf}}}}{{Kj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{Kl{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}99:{{{d{{Cn{ce}}}}}{{L`{ce}}}ChDb}{{{d{{Cn{ce}}}}}{{Lb{ce}}}ChDb}{{{d{{C`{c}}}}}{{Af{{Ld{c}}Cf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{{d{{Cn{ce}}}}}{{Af{AbLf}}}ChDb}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{cFn}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{ce}}}}}{{Af{KdCf}}}ChDb}{{{d{{C`{c}}}}}{{Af{KdCf}}}Ch}1{{{d{{C`{c}}}}}{{Af{LhCf}}}Ch}{{}{{d{Bn}}}}00{{{Cn{cLj}}}{{Af{{C`{c}}Cf}}}Ch}{c{{C`{c}}}Ch}{c{{Af{{C`{c}}Cf}}}Ch}{{{Cn{cFl}}}{{Af{{C`{c}}Cf}}}Ch}{{Kd{Dn{c}}}{{Af{{C`{c}}Cf}}}Ch}{{{Jl{c}}}{{C`{c}}}Ch}{{{Jj{c}}}{{C`{c}}}Ch}4{{{Cn{cFn}}}{{Af{{C`{c}}Cf}}}Ch}3{{c{Bd{{Ll{c}}}}}{{Af{{C`{c}}Cf}}}Ch}614`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{If}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{Gd{c}}}}{d{Bn}}}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Cf}}}Mb}1{{{d{If}}{d{Hf}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}{{Bd{Ad}}}{MdCh}}{{{d{Fl}}{d{Fl}}}{{Bd{Ad}}}}{{{d{Fn}}{d{Fn}}}{{Bd{Ad}}}}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}{{Bd{Ad}}}ChDb}{{{d{c}}}KdCh}00{{{C`{Dj}}{d{c}}}{{Af{Mf{C`{Dj}}}}}{{Ed{Dj}}}}0`{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{c}}}}}{{Af{AbCf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{AbHh}}}ChDb}{{{d{{C`{c}}}}{d{jMh}}e}{{Af{AbCf}}}{ChCj}{{Kf{c}}}}{{{d{{Cn{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}0{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}{{{d{{C`{c}}}}}Hb{ChCj}}{{{d{{Cn{ce}}}}}KdChDb}{{{d{{C`{c}}}}e}AfChBh}{{{d{{Cn{ce}}}}g}AfChDbBh}{{}Mj}00{{{d{{Cn{ce}}}}{d{{M`{Fhc}}}}}{{Cn{ce}}}ChDb}`{{{d{c}}}e{}{}}000{{{d{c}}}Ml{}}0{{{d{{C`{Df}}}}{d{{M`{DfLn}}}}}Ml}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{C`{c}}}}{d{ji}}}{{Af{{Mn{g}}}}}ChCh{}{{N`{ceg}}}}{{{d{{Cn{ce}}}}{d{jk}}}{{Af{{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}0000000`{{{d{c}}}Bl{}}000={ce{}{}}000{{{d{{Cn{ce}}}}}AjChDb}{{{d{Bn}}}{{Af{MlId}}}}{{{d{Bn}}}{{Af{{Nb{f}}Id}}}}``````````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{Id}}{d{jAl}}}An}0{NdId}{NfId}{NhId}{NjId}{CfId}{NlId}{cc{}}{NnId}>{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0{{{d{c}}}Bl{}}{ce{}{}}```````````````````````````````````>>>>>>>======={{{d{O`}}}O`}{{{d{Ob}}}Ob}{{{d{Od}}}Od}{{{d{Ib}}}Ib}{{{d{Of}}}Of}{{{d{Hn}}}Hn}{{{d{c}}{d{je}}}Ab{}{}}00000``{{}Of}{{{d{O`}}{d{O`}}}Aj}{{{d{Ob}}{d{Ob}}}Aj}{{{d{Od}}{d{Od}}}Aj}{{{d{Ib}}{d{Ib}}}Aj}{{{d{Of}}{d{Of}}}Aj}{{{d{Nf}}{d{Nf}}}Aj}{{{d{O`}}{d{jAl}}}An}{{{d{Ob}}{d{jAl}}}An}{{{d{Od}}{d{jAl}}}An}{{{d{Ib}}{d{jAl}}}An}{{{d{Of}}{d{jAl}}}An}{{{d{Nf}}{d{jAl}}}An}0{{{d{Hn}}{d{jAl}}}An}{cc{}}0{AjOd}1{ObIb}2222{{{d{Ib}}{d{{M`{Ml{Dn{Kd}}}}}}}{{Af{OfNf}}}}{{{d{O`}}{d{jc}}}AbB`}{{{d{Of}}{d{jc}}}AbB`}{{{d{Ob}}}Ml}`{ce{}{}}000000{{{d{Ob}}}Aj}{{{d{Od}}}Aj}{{{d{Of}}}Aj}`{{{d{Of}}{d{Of}}}{{Bd{Ad}}}}{{{d{Ib}}}Aj}`{{{d{O`}}c}AfBh}{{{d{Ob}}c}AfBh}{{{d{Od}}c}AfBh}{{{d{Ib}}c}AfBh}{{{d{Of}}c}AfBh}`{{{d{c}}}e{}{}}00000{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0000000000000{{{d{c}}}Bl{}}000000>>>>>>>``````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{OhCb}{{Af{OjId}}}}{{{Ol{c}}Cb}{{Af{OjId}}}{{On{Fl}}}}{{{A@`{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@b{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@d{c}}Cb}{{Af{OjId}}}{{On{A@f}}}}{{{A@h{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@l{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@n{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AA`{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAb{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAd{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAf{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{{{AAh{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{cc{}}00000000000{ce{}{}}00000000000{{Oj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{c{d{{Gd{I`}}}}Cb}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Id}}}{}}00000000000{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000444444444444```````````````````````````````````````````{{}AAj}{{}Cl}{{DfDh}{{Af{DjDl}}}}{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{{d{{AAl{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}00000{{{d{c}}}{{Af{AbEh}}}Ch}{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}{{{d{{AAn{ce}}}}}{{AAn{ce}}}G`Db}{{{d{Cl}}}Cl}{{{d{AB`}}}AB`}{{{d{{AAl{ce}}}}}{{AAl{ce}}}{G`Ch}{G`Db}}{{{d{Df}}}Df}{{{d{Ln}}}Ln}{{{d{ABb}}}ABb}{{{d{ABd}}}ABd}{{{d{ABf}}}ABf}{{{d{c}}{d{je}}}Ab{}{}}00000000{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Ad{GbCh}{GbDb}}{{{d{Df}}{d{Df}}}Ad}{{{d{ABb}}{d{ABb}}}Ad}{{{d{ABf}}{d{ABf}}}Ad}`{{}AB`}{{{d{{AAn{ce}}}}}{{d{g}}}{}Db{}}{{DfDh}{{Af{DjDl}}}}{c{{Af{Df}}}Ah}{{{d{{AAl{ce}}}}}Hb{CjCh}Db}{{{d{Cl}}{d{Cl}}}Aj}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Aj{HdCh}{HdDb}}{{{d{Df}}{d{Df}}}Aj}{{{d{Ln}}{d{Ln}}}Aj}{{{d{ABb}}{d{ABb}}}Aj}{{{d{ABd}}{d{ABd}}}Aj}{{{d{ABf}}{d{ABf}}}Aj}{{{d{{ABh{c}}}}{d{jAl}}}An{ABjDb}}{{{d{Cl}}{d{jAl}}}An}{{{d{AB`}}{d{jAl}}}An}{{{d{Nd}}{d{jAl}}}An}0{{{d{{AAl{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{Df}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{Ln}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{ABb}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABd}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABf}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{AAl{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{ABl{{ABn{c}}}Db}{cc{}}{AC`{{ABn{c}}}Db}1111{CfNd}{NhNd}33{DjDf}44444{{DfAAj}{{ABh{c}}}Db}{{LnAAj}{{ABh{c}}}Db}{{{d{Bn}}}{{Af{Df}}}}{{{d{Bn}}}{{Af{Ln}}}}{{{d{Kb}}}{{Af{{AAl{ce}}Cf}}}{ACbCh}Db}{{{d{Df}}}{{Bd{ACd}}}}{{{d{Df}}}{{Dn{ACd}}}}{c{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{{}{{Af{{AAn{ADbc}}e}}}Db{}}{{ce}{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{c{{Af{{AAn{ADbe}}g}}}{}Db{}}{{{d{{ABn{c}}}}}AjDb}{{{d{Df}}}Aj}{{{d{{AAl{ce}}}}{d{jg}}}Ab{KhCh}{KhDb}B`}{{{d{Df}}{d{jc}}}AbB`}{{{d{ABb}}{d{jc}}}AbB`}{{{d{ABf}}{d{jc}}}AbB`}{ce{}{}}00000000000{DfADd}{On{{Af{{ABh{c}}Nd}}}Db}{{A@j{Bd{ADf}}ACd}{{Af{{ABh{c}}Nd}}}Db}{{{AAn{ec}}{Bd{ADf}}ACd}{{Af{{ABh{c}}Nd}}}Db{{A@j{c}}}}{{{AAn{ec}}}{{Af{{ABh{c}}Nd}}}Db{{On{c}}}}{{{ABh{c}}}{{Af{{ABh{c}}Nd}}}Db}{Df{{Af{{ABh{c}}Nd}}}Db}{Ln{{Af{{ABh{c}}Nd}}}Db}{A@j{{Af{{ABn{c}}Nd}}}Db}{{{ABn{c}}}{{Af{{ABn{c}}Nd}}}Db}{{{AAn{ec}}}{{Af{{ABn{c}}Nd}}}Db{{A@j{c}}}}{{{AAn{ce}}}c{}Db}{Df{{Dn{Df}}}}{Ln{{Dn{Ln}}}}{{{ABn{c}}Cb}{{Bd{AC`}}}Db}{{{ABn{c}}Cb{d{{Gd{e}}}}}ABlDbMb}{{{d{Df}}}Aj}{{}Aj}{{{d{Cl}}}Aj}2{{{d{Ln}}}Aj}212133{{{d{{AAl{ce}}}}}KdChDb}``{{{d{{AAl{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{}AAj}{{{d{Df}}}ADh}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}44{{{d{AAj}}{d{AAj}}}AAj}5{{}{{d{Bn}}}}{{Kd{Dn{c}}}{{Af{{AAl{ce}}Cf}}}ChDb}{{{d{Df}}}Kd}``{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{ABh{c}}AAj}{{ABh{c}}}Db}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}{{Bd{Ad}}}{MdCh}{MdDb}}{{{d{Df}}{d{Df}}}{{Bd{Ad}}}}{{{d{ABb}}{d{ABb}}}{{Bd{Ad}}}}{{{d{ABf}}{d{ABf}}}{{Bd{Ad}}}}{{{d{c}}}KdCh}{{{d{{AAl{ce}}}}}{{d{{h{c}}}}}ChDb}{{{d{{AAl{ce}}}}}{{Af{AbCf}}}ChDb}{{{d{{AAl{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}{{{d{{AAl{ce}}}}}KdChDb}{{{d{Df}}c}AfBh}{{}Mj}{{{d{{AAl{ce}}}}}{{D`{ce}}}{CjCh}Db}{{}AAj}{{{d{c}}}e{}{}}00000000{{{d{Ln}}{d{{Gd{c}}}}}{{Af{DfADj}}}Mb}{{{d{c}}}Ml{}}000{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{AAl{ce}}}}{d{jk}}}{{Af{{AAl{ge}}{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000{ce{}{}}00000000000`{{{d{ADl}}}{{Bd{ADn}}}}{{{d{ADl}}}{{Bd{AE`}}}}{{{d{ADl}}Kd}{{Bd{Bj}}}}`````````````````````````````{{AEbAEb}AEb}{{{d{jAEd}}bAEf{AEj{AEh}}}Ab}`{{{d{AEd}}}{{M`{b{`{{AEn{}{{AEl{{Ij{DhHb}}}}}}G`}}}}}}{{{d{jAEd}}{d{AF`}}Dh}{{Af{AbAFb}}}}{{{d{jAEd}}{d{AF`}}DhAFd}{{Af{AbAFf}}}}{{{d{jAEd}}c}Ab{{AFj{}{{AEl{{Ij{{d{AFh}}H`}}}}}}}}{{{d{jAEd}}c}{{Af{AbAFb}}}{{AFn{AFl}}}}{{{d{AEd}}}{{d{{AGb{AG`}}}}}}{{{d{AEd}}}AEb}{{{d{c}}}{{d{e}}}{}{}}00000000{{{d{jc}}}{{d{je}}}{}{}}00000000{{{d{jAEd}}AGd}{{Af{{AGh{AGf}}AGj}}}}{{{d{jAEd}}}{{AGh{AGf}}}}{{{d{AEd}}{d{AFh}}}{{Af{ADnAGl}}}}{{{d{AEd}}{d{AFh}}}{{Af{AE`AGl}}}}{{{d{jAEd}}{d{AFh}}}Ab}``{{{d{AEd}}}AGn}{{{d{AEb}}}AEb}{{{d{AFl}}}AFl}{{{d{c}}{d{je}}}Ab{}{}}0`{{{d{jAEd}}}{{AH`{Aj}}}}`{{}AEb}{{}AFl}{{{d{AHb}}}{{d{c}}}{}}{{{d{AEd}}b}{{Bd{Dh}}}}{{{d{AEd}}{d{If}}}{{Bd{{Ij{bDh}}}}}}{{{d{AEd}}b}Ml}{c{{Af{AEb}}}Ah}{{{d{AEb}}{d{AEb}}}Aj}{{{d{AHb}}{d{AHb}}}Aj}``{{{d{AEd}}{d{jAHd}}AHf}{{Af{AjAHh}}}}{{{d{AEb}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{AEd}}{d{jAl}}}An}{{{d{AFl}}{d{jAl}}}An}{{{d{AHb}}{d{jAl}}}An}0{{{d{AHj}}{d{jAl}}}An}0{{{d{AHl}}{d{jAl}}}An}0{{{d{AHn}}{d{jAl}}}An}0{{{d{AI`}}{d{jAl}}}An}0{{{d{AIb}}{d{jAl}}}An}0{cc{}}0{{{AId{b}}}AFl}1{AIfAFl}222222{{{d{AEd}}b}{{d{Kl}}}}{{{d{AEd}}l{Bd{AIh}}Aj}{{Af{AIjAIl}}}}{{{d{AEd}}b}{{AEj{Hl}}}}{{{d{AEd}}AGd}{{Bd{{AIn{{AEj{AFh}}AG`}}}}}}{{{d{AEd}}Bb}{{Bd{l}}}}````{{{d{jAEd}}AFd}{{Af{AjAJ`}}}}{{{d{jAEd}}AFhAJb}{{Af{AjAI`}}}}{{{d{jAEd}}BbBj}Ab}{ce{}{}}00000000{{{d{AJd}}{d{If}}}Aj}{{{d{AEd}}{d{If}}}Aj}`{{{d{AEd}}}{{`{{AEn{}{{AEl{{Ij{{d{b}}{d{Kl}}}}}}}}}}}}`{{{d{AEd}}}AJf}{{{d{AEd}}}{{`{{AEn{}{{AEl{l}}}}}}}}0{{{d{AEd}}b}{{`{{AJh{}{{AEl{AHb}}}}}}}}{c{{Af{AEdAHl}}}{{AJl{AJj}}AJnAK`}}{{{d{AEd}}}{{d{AKb}}}}{{{d{jAEd}}bDh}Aj}{{{d{AEd}}}Cb}`{{cceCb}{{Af{AEdAHj}}}Kj{{AJl{AJj}}AJnAK`}}{{ccCb}{{Af{AEdId}}}Kj}{{ccCbAKd}{{Af{AEdId}}}Kj}{{cceCb}{{Af{AEdAHn}}}Kj{{AJl{AJj}}AJnAK`}}{{cceCbAKd}{{Af{AEdAHn}}}Kj{{AJl{AJj}}AJnAK`}}{{cceCbAKd}{{Af{AEdAHj}}}Kj{{AJl{AJj}}AJnAK`}}{{{d{AEd}}b}Dh}{{{d{jAEd}}b}{{AH`{AHb}}}}{{{d{AEd}}bDh}AHb}{{{d{AEd}}b}{{Af{{Bd{Ib}}Id}}}}{{{d{AEd}}b}{{d{Kl}}}}{{{d{jAEd}}bDh}{{AH`{{`{{AEn{}{{AEl{AHb}}}}}}}}}}4{{{d{AEd}}}{{d{{Gd{I`}}}}}}{{{d{AEd}}{d{AFh}}}{{Ij{ADnADn}}}}{{{d{AEb}}c}AfBh}{{{d{AEd}}{d{jAHd}}AHf}{{Af{AjAHh}}}}`{{{d{AEd}}}{{d{{AKf{b}}}}}}{{{d{AEd}}}{{d{AJj}}}}{{{d{AEd}}}{{AKh{b}}}}{{{d{AEd}}}AKj}{{{d{c}}}e{}{}}0{{{d{c}}}Ml{}}000000{{{d{AEb}}}ADn}{{{d{AEd}}}{{`{{AEn{}{{AEl{{AIn{{AEj{AFh}}AG`}}}}}}}}}}`1{c{{Af{e}}}{}{}}00000000000000000`{{{d{AEd}}}{{d{{AGb{AG`}}}}}}{{{d{c}}}Bl{}}00000000{{{d{AEd}}b}{{`{{AEn{}{{AEl{{Ij{DhHb}}}}}}G`}}}}{{{d{jAEd}}bDh}Aj}`{ce{}{}}00000000{{c{Bd{c}}Cb{d{{Gd{I`}}}}}{{Af{MlId}}}Kj}```````````````````````{{{d{c}}}{{d{e}}}{}{}}00000{{{d{jc}}}{{d{je}}}{}{}}00000{{{d{AKl}}}AKl}{{{d{AKn}}}AKn}{{{d{AL`}}}AL`}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{ALb}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALdALf}}}}{{{d{AKl}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALdALf}}}}{{{d{AKn}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALdALf}}}}{{{d{AL`}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALdALf}}}}{{H`AE`{d{If}}}ALh}{{}AKl}{{}AKn}{{}AL`}``{{{d{ALf}}{d{jAl}}}An}0{{{d{ALh}}{d{jAl}}}An}{{{d{ALd}}{d{jAl}}}An}{{{d{AKl}}{d{jAl}}}An}{{{d{AKn}}{d{jAl}}}An}{{{d{AL`}}{d{jAl}}}An}{cc{}}00000{ce{}{}}00000{{{d{ALd}}}H`}{H`AL`}`1{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}00000000000{{{d{c}}}Bl{}}00000666666``````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00{{{d{jc}}}{{d{je}}}{}{}}00{{{d{ALj}}}ALj}{{{d{c}}{d{je}}}Ab{}{}}{{{d{ALj}}{d{jAl}}}An}0{{{d{AIl}}{d{jAl}}}An}0{{{d{AGj}}{d{jAl}}}An}0>{NfAIl}?{ALfAIl}{ALlAIl}{IdAIl}{ALjAIl}{cc{}}{ce{}{}}00{{{d{c}}}e{}{}}{{{d{c}}}Ml{}}00{c{{Af{e}}}{}{}}00000{{{d{c}}}Bl{}}00444``````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{ALn}}}{{Bd{Ml}}}}{{{d{ALn}}}Ml}{c{{Af{ALn}}}Ah}{{{d{AEd}}{d{Bn}}Aj}{{Af{ALn{d{Bn}}}}}}{{{d{ALn}}{d{jAl}}}An}0<{{{d{Bn}}}{{Af{ALnc}}}{}}<``{{{d{ALn}}c}AfBh};::9=`````````````````````````````````````{{{d{jHl}}AM`AEf{AEj{AEh}}}{{Bd{{AEj{AEh}}}}}}``{{{d{Hl}}{d{{Gd{I`}}}}}Kn}`::::::::99999999{{Kn{d{{C`{Df}}}}{d{{Gd{I`}}}}}Hl}{{{d{AM`}}}AM`}{{{d{AMb}}}AMb}{{{d{{AMd{c}}}}}{{AMd{c}}}{G`AMfABjG`}}{{{d{AEf}}}AEf}{{{d{Hl}}}Hl}{{{d{AHf}}}AHf}{{{d{AMh}}}AMh}{{{d{c}}{d{je}}}Ab{}{}}000000{{{d{AM`}}{d{AM`}}}Ad}{{{d{AEf}}{d{AEf}}}Ad}{{}AEf}{{}Hl}{{}AHf}{{}AMh}{{{d{{AMd{c}}}}}{{d{e}}}{AMfABjG`}{}}{{{d{AMj}}}{{Bd{Ln}}}}{{{d{{AMd{AMl}}}}}{{Bd{Ln}}}}{{{d{{AMd{{AMn{AC`}}}}}}}{{Bd{Ln}}}}{{{d{{AMd{{AN`{AC`}}}}}}}{{Bd{Ln}}}}{{{d{AM`}}{d{AM`}}}Aj}{{{d{AMb}}{d{AMb}}}Aj}{{{d{AEf}}{d{AEf}}}Aj}{{{d{AMh}}{d{AMh}}}Aj}{{{d{Hl}}AM`}{{Bd{{d{{AEj{AEh}}}}}}}}{{{d{AM`}}{d{jAl}}}An}{{{d{AHh}}{d{jAl}}}An}0{{{d{AMb}}{d{jAl}}}An}{{{d{{AMd{c}}}}{d{jAl}}}An{ABjAMfABjG`}}{{{d{AEf}}{d{jAl}}}An}{{{d{Hl}}{d{jAl}}}An}{{{d{AHf}}{d{jAl}}}An}{{{d{AMh}}{d{jAl}}}An}{FhAM`}{ADhAM`}{cc{}}{ANbAHh}{ANdAHh}{ANfAHh}3333333{{{d{AM`}}{d{jc}}}AbB`}{{{d{AMj}}{d{{Gd{I`}}}}}AM`}{{{d{{AMd{AMl}}}}{d{{Gd{I`}}}}}AM`}{{{d{{AMd{{AMn{AC`}}}}}}{d{{Gd{I`}}}}}AM`}{{{d{{AMd{{AN`{AC`}}}}}}{d{{Gd{I`}}}}}AM`}{{{d{Hl}}}{{Dn{{d{AM`}}}}}}{ce{}{}}0000000{{cAMb}{{AMd{c}}}{AMfABjG`}}{{}Hl}{{{d{AM`}}{d{AM`}}}{{Bd{Ad}}}}{{{d{AEf}}{d{AEf}}}{{Bd{Ad}}}}{{{d{jHl}}AM`AEf}{{Bd{{AEj{AEh}}}}}}``{{{d{ANh}}{d{jAHd}}Kd{d{AHf}}{d{{Gd{I`}}}}}{{Af{AbAHh}}}}{{{d{{AMd{{AMn{AC`}}}}}}{d{jAHd}}Kd{d{AHf}}{d{{Gd{I`}}}}}{{Af{AbAHh}}}}{{{d{{AMd{{AN`{AC`}}}}}}{d{jAHd}}Kd{d{AHf}}{d{{Gd{I`}}}}}{{Af{AbAHh}}}}{{{d{{AMd{AMl}}}}{d{jAHd}}Kd{d{AHf}}{d{{Gd{I`}}}}}{{Af{AbAHh}}}}{{{d{AEh}}{d{jAHd}}{d{AHf}}{d{{Gd{I`}}}}}{{Af{AbAHh}}}}{{{d{c}}{d{jAHd}}{d{AHf}}{d{{Gd{I`}}}}}{{Af{AbAHh}}}{}}`{{{d{Hl}}}{{Dn{{d{{AEj{AEh}}}}}}}}`{{{d{c}}}e{}{}}000000{{{d{c}}}Ml{}}``{c{{Af{e}}}{}{}}000000000000000{{{d{c}}}Bl{}}0000000{ce{}{}}0000000````````````````{{{d{j{AGh{c}}}}{d{e}}}{{d{j{AGh{c}}}}}{}{{ANl{ANj}}}}{{{d{j{AGh{c}}}}BbAIjKd}{{Af{{d{j{AGh{c}}}}ANn}}}{}}{{{d{j{AGh{c}}}}BbAIjKdBf}{{Af{{d{j{AGh{c}}}}ANn}}}{}}{{{d{j{AGh{c}}}}}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}HbADn}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}Bb}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}Bb}{{Af{{d{j{AGh{c}}}}AO`}}}{}}{{{d{j{AGh{c}}}}{d{{h{Bb}}}}}{{Af{{d{j{AGh{c}}}}AO`}}}{}}{{{d{j{AGh{c}}}}Aj}{{d{j{AGh{c}}}}}{}}{{{d{c}}}{{d{e}}}{}{}}0000{{{d{jc}}}{{d{je}}}{}{}}0000{{{d{j{AGh{c}}}}AOb}{{d{j{AGh{c}}}}}{}}{{{d{{AGh{c}}}}}{{AGh{c}}}G`}{{{d{AOd}}}AOd}{{{d{AOb}}}AOb}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{AOd}}{d{AOd}}}Ad}{{{d{AOb}}{d{AOb}}}Ad}{{{AGh{c}}e}{{AGh{e}}}{}ALb}{{{d{j{AGh{c}}}}Dh}{{d{j{AGh{c}}}}}{}}{{}AOd}{{}AOb}{{{d{j{AGh{c}}}}}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}Hb}{{d{j{AGh{c}}}}}{}}11{{{d{j{AGh{c}}}}Bf}{{d{j{AGh{c}}}}}{}}{{{d{AOd}}{d{AOd}}}Aj}{{{d{AOb}}{d{AOb}}}Aj}{{{d{j{AGh{c}}}}ADn}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}AE`}{{d{j{AGh{c}}}}}{}}{{{AGh{c}}}{{Af{AHdAIl}}}ALb}{{{d{{AGh{c}}}}{d{jAl}}}AnABj}{{{d{AO`}}{d{jAl}}}An}0{{{d{ANn}}{d{jAl}}}An}0{{{d{AOd}}{d{jAl}}}An}{{{d{AOb}}{d{jAl}}}An}{cc{}}0000{{{d{AOd}}{d{jc}}}AbB`}{{{d{AOb}}{d{jc}}}AbB`}?{ce{}{}}0000{{{d{j{AGh{c}}}}}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}AOf}{{d{j{AGh{c}}}}}{}}11{{{d{j{AGh{c}}}}AOd}{{d{j{AGh{c}}}}}{}}{{{d{AOd}}{d{AOd}}}{{Bd{Ad}}}}{{{d{AOb}}{d{AOb}}}{{Bd{Ad}}}}{{{d{j{AGh{c}}}}{M`{Ml{Dn{Kd}}}}b}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}{Dn{{Ij{HbADn}}}}}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}AIh}{{d{j{AGh{c}}}}}{}}{{{d{AOd}}{d{jAFh}}}Ab}{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}0{c{{Af{e}}}{}{}}000000000{{{d{c}}}Bl{}}0000{{{d{j{AGh{c}}}}{Dn{Bb}}}{{d{j{AGh{c}}}}}{}}{{{d{j{AGh{c}}}}AOh}{{d{j{AGh{c}}}}}{}}?????``","D":"FHj","p":[[6,"KeychainKind",0,1730],[1,"reference"],[1,"u8"],[1,"slice"],[0,"mut"],[5,"LocalOutput",0,1730],[5,"WeightedUtxo",0,1730],[6,"Utxo",0,1730],[1,"unit"],[6,"Ordering",1731],[6,"Result",1732],[10,"Deserializer",1733],[1,"bool"],[5,"Formatter",1734],[8,"Result",1734],[10,"Hasher",1735],[5,"OutPoint",1736],[6,"Option",1737],[5,"Sequence",1736],[10,"Serializer",1738],[5,"TxOut",1736],[5,"TypeId",1739],[1,"str"],[6,"Descriptor",100,1740],[6,"Network",1741],[5,"Address",1742],[6,"Error",1743],[10,"MiniscriptKey",1743],[10,"ToPublicKey",1743],[6,"ScriptContextEnum",693],[5,"Miniscript",100,1744],[6,"Terminal",1745],[10,"ScriptContext",693,1746],[6,"Tree",1747],[6,"DescriptorPublicKey",693,1748],[1,"u32"],[5,"DefiniteDescriptorKey",1748],[6,"ConversionError",1748],[5,"Vec",1749],[6,"Placeholder",1750],[5,"Satisfaction",1750],[10,"AssetProvider",1751],[17,"Key"],[6,"ScriptContextError",1746],[17,"Sha256"],[5,"Hash",1752],[17,"Hash256"],[5,"Hash",1753],[17,"Ripemd160"],[5,"Hash",1754],[17,"Hash160"],[5,"Hash",1755],[10,"ParseableKey",1745],[6,"Legacy",100,1746],[6,"Segwitv0",100,1746],[10,"Clone",1756],[10,"Ord",1731],[5,"Secp256k1",1757],[5,"PublicKey",1758],[10,"Verification",1759],[6,"DescriptorType",1740],[5,"DescriptorId",1760],[10,"FromStrKey",1761],[1,"u64"],[5,"ScriptBuf",1762],[10,"PartialEq",1731],[5,"ExtParams",1763],[6,"AnalysisError",1763],[10,"ExtractPolicy",100],[5,"SignersContainer",1429],[6,"BuildSatisfaction",386],[6,"All",1764],[5,"Policy",386],[6,"Error",354],[5,"Script",1765],[5,"Range",1766],[1,"tuple"],[5,"Error",1734],[17,"Output"],[10,"FnMut",1767],[5,"Tr",1768],[5,"Bare",1769],[5,"Sh",1770],[5,"Pkh",1769],[5,"Wsh",1771],[5,"Wpkh",1771],[5,"Type",1772],[5,"ExtData",1773],[5,"Tree",1774],[1,"usize"],[10,"Satisfier",1750],[10,"Hash",1735],[10,"IntoWalletDescriptor",100],[8,"ExtendedDescriptor",100],[8,"KeyMap",693,1740],[5,"Iter",1775],[5,"PkIter",1775],[6,"Policy",1776],[6,"LiftError",1777],[5,"Weight",1778],[6,"BareCtx",1746],[6,"TapTree",1768],[6,"DescriptorSecretKey",693,1748],[5,"BTreeMap",1779],[10,"Signing",1759],[10,"PartialOrd",1731],[5,"Plan",1751],[5,"TxIn",1736],[6,"SigType",1746],[5,"String",1780],[6,"TranslateErr",1743],[10,"Translator",1743],[1,"array"],[6,"KeyError",693],[6,"PolicyError",386],[6,"Error",1781],[6,"ParsePublicKeyError",1758],[6,"HexToBytesError",1782],[6,"Error",1783],[6,"PkOrF",386],[6,"SatisfiableItem",386],[6,"Satisfaction",386],[5,"Condition",386],[10,"DescriptorTemplate",557],[8,"DescriptorTemplateOut",557],[5,"P2Pkh",557],[10,"IntoDescriptorKey",693],[5,"P2Wpkh_P2Sh",557],[5,"P2Wpkh",557],[5,"P2TR",557],[6,"Tap",1746],[5,"Bip44",557],[10,"DerivableKey",693],[5,"Bip44Public",557],[5,"Bip49",557],[5,"Bip49Public",557],[5,"Bip84",557],[5,"Bip84Public",557],[5,"Bip86",557],[5,"Bip86Public",557],[8,"ValidNetworks",693],[5,"SortedMultiVec",693,1784],[5,"GeneratedKey",693],[5,"PrivateKeyGenerateOptions",693],[5,"SinglePub",693,1748],[5,"SinglePriv",693,1748],[6,"SinglePubKey",693,1748],[6,"DescriptorKey",693],[10,"Debug",1734],[5,"Xpub",1781],[6,"ExtendedKey",693],[5,"Xpriv",1781],[10,"FromStr",1785],[5,"DerivationPath",1781],[17,"Entropy"],[17,"Options"],[17,"Error"],[10,"GeneratableKey",693],[10,"AsMut",1786],[10,"Default",1787],[10,"GeneratableDefaultOptions",693],[5,"Assets",1751],[8,"KeySource",1781],[5,"Fingerprint",1781],[5,"DescriptorKeyParseError",1748],[10,"PsbtUtils",992],[5,"Amount",1788],[5,"FeeRate",1789],[5,"Balance",996,1790],[5,"Wallet",996],[5,"SignerOrdering",1429],[10,"TransactionSigner",1429],[5,"Arc",1791],[17,"Item"],[10,"Iterator",1792],[5,"Block",1793],[5,"CannotConnectError",1794],[5,"BlockId",1795],[6,"ApplyHeaderError",1794],[5,"Transaction",1736],[10,"IntoIterator",1796],[5,"Update",996],[10,"Into",1786],[5,"ConfirmationTimeHeightAnchor",1795],[5,"TxGraph",1797],[5,"Txid",1736],[8,"DefaultCoinSelectionAlgorithm",1229],[5,"TxBuilder",1613],[6,"BuildFeeBumpError",1328],[6,"CalculateFeeError",1797],[5,"CheckPointIter",1794],[8,"Result",1798],[5,"AddressInfo",996],[5,"Psbt",1799],[5,"SignOptions",1429],[6,"SignerError",1429],[6,"NewError",996],[6,"LoadError",996],[6,"NewOrLoadError",996],[6,"InsertTxError",996],[6,"ApplyBlockError",996],[5,"FullScanResult",1800],[5,"SyncResult",1800],[5,"PsbtSighashType",1801],[5,"Input",1801],[6,"CreateTxError",1328],[5,"CanonicalTx",1797],[5,"AlterCheckPointError",1794],[6,"ConfirmationTime",1795],[10,"IsDust",996,1802],[5,"CheckPoint",1794],[10,"DoubleEndedIterator",1803],[8,"ChangeSet",996],[10,"PersistBackend",1804],[10,"Send",1805],[10,"Sync",1805],[5,"LocalChain",1794],[5,"BlockHash",1793],[5,"KeychainTxOutIndex",1806],[5,"FullScanRequest",1800],[5,"SyncRequest",1800],[5,"LargestFirstCoinSelection",1229],[5,"OldestFirstCoinSelection",1229],[5,"BranchAndBoundCoinSelection",1229],[10,"CoinSelectionAlgorithm",1229],[5,"CoinSelectionResult",1229],[6,"Error",1229],[6,"Excess",1229],[6,"MiniscriptPsbtError",1328],[6,"Error",1807],[5,"FullyNodedExport",1406],[6,"SignerId",1429],[6,"SignerContext",1429],[5,"SignerWrapper",1429],[10,"Sized",1805],[6,"TapLeavesOptions",1429],[10,"SignerCommon",1429],[5,"PrivateKey",1758],[5,"DescriptorMultiXKey",1748],[5,"DescriptorXKey",1748],[6,"TaprootError",1808],[6,"P2wpkhError",1808],[5,"InputsIndexError",1736],[10,"InputSigner",1429],[5,"PushBytes",1809],[10,"AsRef",1786],[6,"AddForeignUtxoError",1613],[6,"AddUtxoError",1613],[6,"ChangeSpendPolicy",1613],[6,"TxOrdering",1613],[6,"LockTime",1810],[1,"i32"],[15,"Foreign",97],[8,"DerivedDescriptor",100],[15,"PsbtTimelocks",533],[15,"Complete",536],[15,"Partial",536],[15,"PartialComplete",536],[15,"Sha256Preimage",547],[15,"Hash256Preimage",547],[15,"Ripemd160Preimage",547],[15,"Hash160Preimage",547],[15,"Thresh",547],[15,"Multisig",547],[15,"AbsoluteTimelock",547],[15,"RelativeTimelock",547],[10,"ExtScriptContext",693],[15,"UnexpectedConnectedToHash",1219],[15,"ConfirmationHeightCannotBeGreaterThanTip",1221],[15,"LoadedGenesisDoesNotMatch",1223],[15,"LoadedNetworkDoesNotMatch",1223],[15,"LoadedDescriptorDoesNotMatch",1223],[15,"InsufficientFunds",1321],[15,"Change",1323],[15,"NoChange",1323],[15,"RbfSequenceCsv",1400],[15,"LockTime",1400],[15,"FeeTooLow",1400],[15,"FeeRateTooLow",1400],[8,"WalletExport",1406],[15,"Tap",1612],[15,"InvalidTxid",1728]],"r":[[2,100],[4,1730],[6,1730],[7,1429],[8,1613],[9,1730],[10,996],[11,1730],[70,996],[71,100],[104,1740],[106,1748],[113,1746],[114,1744],[119,386],[120,1746],[121,1746],[155,352],[696,1748],[697,1748],[712,1740],[722,1746],[727,1748],[728,1748],[729,1748],[730,1784],[998,1790],[1006,1802]],"b":[[193,"impl-Descriptor%3CDescriptorPublicKey%3E"],[194,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[213,"impl-Display-for-Descriptor%3CPk%3E"],[214,"impl-Debug-for-Descriptor%3CPk%3E"],[217,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[218,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[221,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[222,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[223,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[224,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[225,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[226,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[370,"impl-Debug-for-Error"],[371,"impl-Display-for-Error"],[372,"impl-From%3CKeyError%3E-for-Error"],[373,"impl-From%3CPolicyError%3E-for-Error"],[374,"impl-From%3CError%3E-for-Error"],[375,"impl-From%3CParsePublicKeyError%3E-for-Error"],[376,"impl-From%3CError%3E-for-Error"],[377,"impl-From%3CHexToBytesError%3E-for-Error"],[379,"impl-From%3CError%3E-for-Error"],[461,"impl-Display-for-PolicyError"],[462,"impl-Debug-for-PolicyError"],[811,"impl-Display-for-KeyError"],[812,"impl-Debug-for-KeyError"],[813,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[814,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[815,"impl-Debug-for-DescriptorPublicKey"],[816,"impl-Display-for-DescriptorPublicKey"],[817,"impl-Display-for-DescriptorSecretKey"],[818,"impl-Debug-for-DescriptorSecretKey"],[823,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[825,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[830,"impl-From%3CError%3E-for-KeyError"],[831,"impl-From%3CError%3E-for-KeyError"],[872,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[873,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1080,"impl-Debug-for-Balance"],[1081,"impl-Display-for-Balance"],[1084,"impl-Debug-for-AddressInfo"],[1085,"impl-Display-for-AddressInfo"],[1086,"impl-Display-for-NewError"],[1087,"impl-Debug-for-NewError"],[1088,"impl-Debug-for-LoadError"],[1089,"impl-Display-for-LoadError"],[1090,"impl-Display-for-NewOrLoadError"],[1091,"impl-Debug-for-NewOrLoadError"],[1092,"impl-Debug-for-InsertTxError"],[1093,"impl-Display-for-InsertTxError"],[1094,"impl-Debug-for-ApplyBlockError"],[1095,"impl-Display-for-ApplyBlockError"],[1098,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[1100,"impl-From%3CSyncResult%3E-for-Update"],[1270,"impl-Display-for-Error"],[1271,"impl-Debug-for-Error"],[1367,"impl-Debug-for-MiniscriptPsbtError"],[1368,"impl-Display-for-MiniscriptPsbtError"],[1369,"impl-Display-for-CreateTxError"],[1370,"impl-Debug-for-CreateTxError"],[1371,"impl-Debug-for-BuildFeeBumpError"],[1372,"impl-Display-for-BuildFeeBumpError"],[1374,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1376,"impl-From%3CError%3E-for-CreateTxError"],[1377,"impl-From%3CError%3E-for-CreateTxError"],[1378,"impl-From%3CError%3E-for-CreateTxError"],[1379,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1416,"impl-Display-for-FullyNodedExport"],[1417,"impl-Debug-for-FullyNodedExport"],[1510,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1511,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1512,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1519,"impl-Display-for-SignerError"],[1520,"impl-Debug-for-SignerError"],[1527,"impl-From%3CHash%3E-for-SignerId"],[1528,"impl-From%3CFingerprint%3E-for-SignerId"],[1530,"impl-From%3CTaprootError%3E-for-SignerError"],[1531,"impl-From%3CP2wpkhError%3E-for-SignerError"],[1532,"impl-From%3CInputsIndexError%3E-for-SignerError"],[1542,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1543,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1544,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1562,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1563,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1564,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1671,"impl-Debug-for-AddUtxoError"],[1672,"impl-Display-for-AddUtxoError"],[1673,"impl-Display-for-AddForeignUtxoError"],[1674,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAAMEAAwEPAR8DdgOABQ==","e":"OzAAAAEAAH0DfwADAAAACAABAAsAAAAOABMAJgAJADUAAQA+AAAAQQAAAEUADwBXAAMAXQADAGoAAAB4AAAAjAABAI8AAACRAAcAnAAAAJ4AAQChAAAApAABAKcAAQCrAAEArgABALEAAQC0AAsAxQADAMoAAwDTAAEA1gANAOoAAAD3AAMAAgEAAAgBAQAMAQEAEwEBACkBAwAuAQEAPAEBAD8BAQBDAQUATgEHAFcBAwBcAQMAcQEJAHwBAAB+AQQApgEZAMIBDgDTAQAA1QEAANsBAQDqAQAA7QEEAPMBIgA8AhcAVQILAHkCPADkAhcABgMVAB0DAQAgAwAAIgMWADoDAAA/AwEAQwMAAEsDAQBWAwMAZgMAAGkDBABvAwEAfwMBAIQDAACOAwAAkwMDAJwDAACgAwgAqgMDALEDLwACBAAACgQAAAwEEQAmBAMALQQCADMEAgA5BA8ASwQAAE0EAACGBAAAjQQIAJoEEQCuBAgAugQIANsEEQDuBAIA8gQCAPcEBgAOBRsAUAUNAF8FAABhBQMAaQUPAIMFAQCHBQAAiQUBAIwFAACQBQUAwAUPANEFFADnBQYA7wUKAPsFAgAFBgAABwYCABUGAQAbBgIAHwYAACMGBwAtBh8AZgYJAHEGBwB7BgEAggYBAIcGBgCTBgEAoAYBAKYGEwC8BgQA"}],\ +["bdk_wallet",{"t":"PPEPGPFEEGEFNNDNNNNNNNNENNNNNNNNNOOCQNNNNNNNNNNQNNNNNNNNNNOOCDNONCONNNEENNNNNNNNNNNNNONNNNOHNNNNCOOOPPPIGEGIKTIKRGFPPPPEKGPPPPTIPPPPPPPPPPNNNNNNNNNNNNNNNNNENNNNNNNNNNNNNMNNMNNNNNCNNNNNNNNNNNNNNNNNNNNNNNNNNCNONMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNONNNNNNNNNMNNNNCNNNNNNNNNNNMNNNCNNNNNNNNNNNNNNNNNNNONNNNNNNNNNHHPPGPPPPPPPPPPPNNNNNNNNNNNNNNNNNNPPPGPFIPPIPPPPPPPPPPPGFGPPPPPGGPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNONNONNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOFFFFFFFFKIFFFFNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNPKGGGRRKGPKKFKPPPRGIPPPPPRPFPKGPPPFFGFPIPPPHMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMMNNNNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNNNNMNNNNNNMNNNNNNNNNNNNNNNNNNNOONHNMNNHNMNNOONNNNNNMNNNNNMNHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNKMMMFGFPIPPPPGKGPPPPPPGGPPPPPPPFFNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOONNNNNCNONNNNNNNNNCCNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOONNNNNNNNNNNNMNONONNNNNNNNONNNNNNNNNNNNNNNNNCNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNCNNNNNNNNNNNNONNNNNNNNNHOOOOOOOOOOPPFPKFIGGPFPFNNNNNNNNNNNNNNNNNNMNNNHNNNOONNNNNNNNNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOGPPGPPPPPPPGPPPPPPPPPPPPPPPPPPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOFIOONNNNNNNNNNNOONNNNNNPPPPPPPKPPPPPPPPPPPPPPPPFKGGGFFFPGKPPNOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNMNNNNNNNNNNNNNNNNNOOMNNNMNONONNNNNNNNOONNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOGGPPPGPPPPPFGPPNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOO","n":["External","Foreign","HdKeyPaths","Internal","KeychainKind","Local","LocalOutput","SignOptions","TxBuilder","Utxo","Wallet","WeightedUtxo","as_byte","as_ref","bitcoin","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","chain","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","confirmation_time","derivation_index","descriptor","descriptor","deserialize","deserialize","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fragment","from","from","from","from","hash","hash","into","into","into","into","is_spent","keychain","keys","miniscript","outpoint","outpoint","partial_cmp","psbt","satisfaction_weight","sequence","serialize","serialize","signer","template","to_owned","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","txout","txout","type_id","type_id","type_id","type_id","utxo","version","vzip","vzip","vzip","vzip","wallet","outpoint","psbt_input","sequence","Bare","Bare","Bare","DerivedDescriptor","Descriptor","DescriptorError","DescriptorPublicKey","ExtendedDescriptor","ExtractPolicy","FALSE","HdKeyPaths","IntoWalletDescriptor","Key","Legacy","Miniscript","MultiXPub","Pkh","Pkh","Pkh","Policy","ScriptContext","Segwitv0","Sh","Sh","Sh","Single","TRUE","TapKeyOrigins","Tr","Tr","Tr","Wpkh","Wpkh","Wpkh","Wsh","Wsh","Wsh","XPub","address","as_enum","as_enum","as_inner","as_node","at_derivation_index","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","branches","build_template","build_template_mall","calc_checksum","check_global_consensus_validity","check_global_consensus_validity","check_global_consensus_validity","check_global_policy_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_consensus_validity","check_local_policy_validity","check_local_policy_validity","check_local_policy_validity","check_local_validity","check_pk","check_pk","check_pk","check_terminal_non_malleable","check_terminal_non_malleable","check_terminal_non_malleable","check_witness","check_witness","check_witness","checksum","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","contains_raw_pkh","derive","derived_descriptor","derived_descriptor","desc_type","descriptor_id","deserialize","deserialize","dust_value","encode","eq","eq","eq","eq","error","explicit_script","ext","ext_check","extract_policy","extract_policy","extract_policy","find_derivation_index_for_spk","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","for_each_key","from","from","from","from","from","from","from","from","from","from","from_ast","from_components_unchecked","from_str","from_str","from_str_ext","from_str_insane","from_tree","from_tree","get_nth_child","get_nth_pk","get_satisfaction","get_satisfaction_mall","has_mixed_timelocks","has_repeated_keys","has_wildcard","hash","hash","hash","hash","into","into","into","into","into_inner","into_single_descriptors","into_wallet_descriptor","into_wallet_descriptor","is_deriveable","is_multipath","is_non_malleable","iter","iter_pk","lift","lift","lift_check","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_size","max_satisfaction_weight","max_satisfaction_witness_elements","max_weight_to_satisfy","name_str","name_str","name_str","new_bare","new_pk","new_pkh","new_sh","new_sh_sortedmulti","new_sh_with_wpkh","new_sh_with_wsh","new_sh_wpkh","new_sh_wsh","new_sh_wsh_sortedmulti","new_tr","new_wpkh","new_wsh","new_wsh_sortedmulti","node","other_top_level_checks","parse","parse_descriptor","parse_insane","parse_with_ext","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pk_len","pk_len","plan","plan_mall","policy","requires_sig","sanity_check","sanity_check","satisfy","satisfy","satisfy_malleable","script_code","script_pubkey","script_size","serialize","serialize","sig_type","sig_type","sig_type","substitute_raw_pkh","template","to_owned","to_owned","to_owned","to_owned","to_string","to_string","to_string_with_secret","top_level_checks","top_level_type_check","translate_pk","translate_pk","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","ty","type_id","type_id","type_id","type_id","unsigned_script_sig","vzip","vzip","vzip","vzip","within_resource_limits","calc_checksum","calc_checksum_bytes","Base58","Bip32","Error","ExternalAndInternalAreTheSame","HardenedDerivationXpub","Hex","InvalidDescriptorCharacter","InvalidDescriptorChecksum","InvalidHdKeyPath","Key","Miniscript","MultiPath","Pk","Policy","borrow","borrow_mut","fmt","fmt","from","from","from","from","from","from","from","from","into","to_string","try_from","try_into","type_id","vzip","AbsoluteTimelock","AddOnLeaf","AddOnPartialComplete","BuildSatisfaction","Complete","Condition","ConditionMap","EcdsaSignature","Fingerprint","FoldedConditionMap","Hash160Preimage","Hash256Preimage","IncompatibleConditions","IndexOutOfRange","MixedTimelockUnits","Multisig","None","None","NotEnoughItemsSelected","Partial","PartialComplete","PkOrF","Policy","PolicyError","Psbt","PsbtTimelocks","Pubkey","RelativeTimelock","Ripemd160Preimage","Satisfaction","SatisfiableItem","SchnorrSignature","Sha256Preimage","Thresh","XOnlyPubkey","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","contribution","csv","default","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","get_condition","hash","hash","id","id","into","into","into","into","into","into","into","is_leaf","is_leaf","is_null","item","partial_cmp","requires_path","satisfaction","serialize","serialize","serialize","serialize","serialize","timelock","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","current_height","input_max_height","psbt","condition","conditions","conditions","items","items","m","m","n","n","sorted","sorted","hash","hash","hash","hash","items","keys","threshold","threshold","value","value","Bip44","Bip44Public","Bip49","Bip49Public","Bip84","Bip84Public","Bip86","Bip86Public","DescriptorTemplate","DescriptorTemplateOut","P2Pkh","P2TR","P2Wpkh","P2Wpkh_P2Sh","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","build","build","build","build","build","build","build","build","build","build","build","build","from","from","from","from","from","from","from","from","from","from","from","from","into","into","into","into","into","into","into","into","into","into","into","into","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","into_wallet_descriptor","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","Bip32","DerivableKey","DescriptorKey","DescriptorPublicKey","DescriptorSecretKey","Entropy","Error","ExtScriptContext","ExtendedKey","FullKey","GeneratableDefaultOptions","GeneratableKey","GeneratedKey","IntoDescriptorKey","InvalidChecksum","InvalidNetwork","InvalidScriptContext","Key","KeyError","KeyMap","Legacy","Message","Miniscript","MultiXPrv","MultiXPub","Options","Private","PrivateKeyGenerateOptions","Public","ScriptContext","ScriptContextEnum","Segwitv0","Single","Single","SinglePriv","SinglePub","SinglePubKey","SortedMultiVec","Tap","ValidNetworks","XOnly","XPrv","XPub","any_network","as_enum","at_derivation_index","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_template","check_global_consensus_validity","check_global_policy_validity","check_global_validity","check_local_consensus_validity","check_local_policy_validity","check_local_validity","check_pk","check_terminal_non_malleable","check_witness","clone","clone","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","cmp","cmp","compressed","default","deref","derive","deserialize","encode","eq","eq","eq","eq","eq","eq","eq","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","for_each_key","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from","from_public","from_secret","from_str","from_str","from_tree","full_derivation_path","full_derivation_paths","generate","generate_default","generate_with_entropy","generate_with_entropy_default","has_secret","has_wildcard","hash","hash","hash","hash","into","into","into","into","into","into","into","into","into","into","into","into","into_assets","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_descriptor_key","into_extended_key","into_extended_key","into_extended_key","into_key","into_single_keys","into_single_keys","into_xprv","into_xpub","is_deriveable","is_legacy","is_legacy","is_multipath","is_multipath","is_segwit_v0","is_segwit_v0","is_taproot","is_taproot","is_uncompressed","is_x_only_key","k","key","key","lift","mainnet_network","master_fingerprint","max_satisfaction_size","max_satisfaction_size","max_satisfaction_witness_elements","merge_networks","n","name_str","new","num_der_paths","origin","origin","other_top_level_checks","override_valid_networks","partial_cmp","partial_cmp","partial_cmp","partial_cmp","pk_len","pks","sanity_check","satisfy","script_size","serialize","sig_type","sorted_node","test_networks","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_public","to_string","to_string","to_string","to_string","top_level_checks","top_level_type_check","translate_pk","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","PsbtUtils","fee_amount","fee_rate","get_utxo_for","AddressInfo","ApplyBlockError","Balance","CannotConnect","ChangeSet","ConfirmationHeightCannotBeGreaterThanTip","Descriptor","Descriptor","Descriptor","InsertTxError","IsDust","LoadError","LoadedDescriptorDoesNotMatch","LoadedGenesisDoesNotMatch","LoadedNetworkDoesNotMatch","MissingDescriptor","MissingGenesis","MissingNetwork","NewError","NewOrLoadError","NonEmptyDatabase","NotInitialized","NotInitialized","Persist","Persist","Persist","UnexpectedConnectedToHash","Update","Wallet","add","add_signer","address","all_unbounded_spk_iters","apply_block","apply_block_connected_to","apply_unconfirmed_txs","apply_update","as_ref","balance","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build_fee_bump","build_tx","calculate_fee","calculate_fee_rate","cancel_tx","chain","chain","checkpoints","clone","clone","clone_into","clone_into","coin_selection","commit","confirmed","default","default","deref","derivation_index","derivation_of_spk","descriptor_checksum","deserialize","eq","eq","error","export","finalize_psbt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","get_descriptor_for_keychain","get_psbt_input","get_signers","get_tx","get_utxo","graph","immature","index","indexed_tx_graph","insert_checkpoint","insert_tx","insert_txout","into","into","into","into","into","into","into","into","into","is_dust","is_mine","keychain","keychains","last_active_indices","latest_checkpoint","list_output","list_unspent","list_unused_addresses","load","local_chain","mark_used","network","network","new","new_no_persist","new_no_persist_with_genesis_hash","new_or_load","new_or_load_with_genesis_hash","new_with_genesis_hash","next_derivation_index","next_unused_address","peek_address","policies","public_descriptor","reveal_addresses_to","reveal_next_address","secp_ctx","sent_and_received","serialize","sign","signer","spk_index","staged","start_full_scan","start_sync_with_revealed_spks","to_owned","to_owned","to_string","to_string","to_string","to_string","to_string","to_string","to_string","total","transactions","trusted_pending","trusted_spendable","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","tx_builder","tx_graph","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","unbounded_spk_iter","unmark_used","untrusted_pending","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","wallet_name_from_descriptor","connected_to_hash","expected_hash","tip_height","tx_height","expected","expected","got","got","got","keychain","BnBNoExactMatch","BnBTotalTriesExceeded","BranchAndBoundCoinSelection","Change","CoinSelectionAlgorithm","CoinSelectionResult","DefaultCoinSelectionAlgorithm","Error","Excess","InsufficientFunds","LargestFirstCoinSelection","NoChange","OldestFirstCoinSelection","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone","clone_into","clone_into","clone_into","coin_select","coin_select","coin_select","coin_select","decide_change","default","default","default","excess","fee_amount","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","into","into","into","into","into","into","local_selected_amount","new","selected","selected_amount","to_owned","to_owned","to_owned","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","available","needed","amount","change_fee","dust_threshold","fee","remaining_amount","BuildFeeBumpError","CoinSelection","Conversion","CreateTxError","Descriptor","FeeRateTooLow","FeeRateUnavailable","FeeTooLow","IrreplaceableTransaction","LockTime","MiniscriptPsbt","MiniscriptPsbtError","MissingKeyOrigin","MissingNonWitnessUtxo","NoRecipients","NoUtxosSelected","OutputBelowDustLimit","OutputUpdate","Persist","Policy","Psbt","RbfSequence","RbfSequenceCsv","SpendingPolicyRequired","TransactionConfirmed","TransactionNotFound","UnknownUtxo","UnknownUtxo","UtxoUpdate","Version0","Version1Csv","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone_into","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","into","into","into","to_owned","to_string","to_string","to_string","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","vzip","vzip","vzip","csv","rbf","requested","required","required","required","FullyNodedExport","WalletExport","blockheight","blockheight","borrow","borrow_mut","change_descriptor","descriptor","deserialize","export_wallet","fmt","fmt","from","from_str","into","label","label","serialize","to_string","try_from","try_into","type_id","vzip","All","Dummy","Exclude","External","Fingerprint","Include","InputIndexOutOfRange","InputSigner","InvalidKey","InvalidNonWitnessUtxo","InvalidSighash","Legacy","MiniscriptPsbt","MissingHdKeypath","MissingKey","MissingNonWitnessUtxo","MissingWitnessScript","MissingWitnessUtxo","NonStandardSighash","None","PkHash","Segwitv0","SighashP2wpkh","SighashTaproot","SignOptions","SignerCommon","SignerContext","SignerError","SignerId","SignerOrdering","SignerWrapper","SignersContainer","Tap","TapLeavesOptions","TransactionSigner","TxInputsIndexError","UserCanceled","add_external","allow_all_sighashes","allow_grinding","as_key_map","assume_height","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","build","clone","clone","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","cmp","default","default","default","default","deref","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","descriptor_secret_key","eq","eq","eq","eq","find","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from","from","from","from","from","hash","id","id","id","id","ids","into","into","into","into","into","into","into","into","new","new","partial_cmp","partial_cmp","remove","remove_partial_sigs","remove_taproot_extras","sign_input","sign_input","sign_input","sign_input","sign_transaction","sign_transaction","sign_with_tap_internal_key","signers","tap_leaves_options","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","trust_witness_utxo","try_finalize","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","is_internal_key","AddForeignUtxoError","AddUtxoError","Bip69Lexicographic","ChangeAllowed","ChangeForbidden","ChangeSpendPolicy","InvalidOutpoint","InvalidTxid","MissingUtxo","OnlyChange","Shuffle","TxBuilder","TxOrdering","UnknownUtxo","Untouched","add_data","add_foreign_utxo","add_foreign_utxo_with_sequence","add_global_xpubs","add_recipient","add_unspendable","add_utxo","add_utxos","allow_dust","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_policy","clone","clone","clone","clone_into","clone_into","clone_into","cmp","cmp","coin_selection","current_height","default","default","do_not_spend_change","drain_to","drain_wallet","enable_rbf","enable_rbf_with_sequence","eq","eq","fee_absolute","fee_rate","finish","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","hash","hash","include_output_redeem_witness_script","into","into","into","into","into","manually_selected_only","nlocktime","only_spend_change","only_witness_utxo","ordering","partial_cmp","partial_cmp","policy_path","set_recipients","sighash","sort_tx","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","unspendable","version","vzip","vzip","vzip","vzip","vzip","foreign_utxo","input_txid"],"q":[[0,"bdk_wallet"],[97,"bdk_wallet::Utxo"],[100,"bdk_wallet::descriptor"],[352,"bdk_wallet::descriptor::checksum"],[354,"bdk_wallet::descriptor::error"],[386,"bdk_wallet::descriptor::policy"],[533,"bdk_wallet::descriptor::policy::BuildSatisfaction"],[536,"bdk_wallet::descriptor::policy::Satisfaction"],[547,"bdk_wallet::descriptor::policy::SatisfiableItem"],[557,"bdk_wallet::descriptor::template"],[693,"bdk_wallet::keys"],[992,"bdk_wallet::psbt"],[996,"bdk_wallet::wallet"],[1219,"bdk_wallet::wallet::ApplyBlockError"],[1221,"bdk_wallet::wallet::InsertTxError"],[1223,"bdk_wallet::wallet::NewOrLoadError"],[1229,"bdk_wallet::wallet::coin_selection"],[1321,"bdk_wallet::wallet::coin_selection::Error"],[1323,"bdk_wallet::wallet::coin_selection::Excess"],[1328,"bdk_wallet::wallet::error"],[1400,"bdk_wallet::wallet::error::CreateTxError"],[1406,"bdk_wallet::wallet::export"],[1429,"bdk_wallet::wallet::signer"],[1612,"bdk_wallet::wallet::signer::SignerContext"],[1613,"bdk_wallet::wallet::tx_builder"],[1728,"bdk_wallet::wallet::tx_builder::AddForeignUtxoError"],[1730,"bdk_wallet::types"],[1731,"core::cmp"],[1732,"core::result"],[1733,"serde::de"],[1734,"core::fmt"],[1735,"core::hash"],[1736,"bitcoin::blockdata::transaction"],[1737,"core::option"],[1738,"serde::ser"],[1739,"core::any"],[1740,"miniscript::descriptor"],[1741,"bitcoin::network"],[1742,"bitcoin::address"],[1743,"miniscript"],[1744,"miniscript::miniscript"],[1745,"miniscript::miniscript::decode"],[1746,"miniscript::miniscript::context"],[1747,"miniscript::iter::tree"],[1748,"miniscript::descriptor::key"],[1749,"alloc::vec"],[1750,"miniscript::miniscript::satisfy"],[1751,"miniscript::plan"],[1752,"bitcoin_hashes::sha256"],[1753,"miniscript::miniscript::hash256"],[1754,"bitcoin_hashes::ripemd160"],[1755,"bitcoin_hashes::hash160"],[1756,"core::clone"],[1757,"secp256k1"],[1758,"bitcoin::crypto::key"],[1759,"secp256k1::context"],[1760,"bdk_chain::descriptor_ext"],[1761,"miniscript::blanket_traits"],[1762,"bitcoin::blockdata::script::owned"],[1763,"miniscript::miniscript::analyzable"],[1764,"secp256k1::context::alloc_only"],[1765,"bitcoin::blockdata::script::borrowed"],[1766,"core::ops::range"],[1767,"core::ops::function"],[1768,"miniscript::descriptor::tr"],[1769,"miniscript::descriptor::bare"],[1770,"miniscript::descriptor::sh"],[1771,"miniscript::descriptor::segwitv0"],[1772,"miniscript::miniscript::types"],[1773,"miniscript::miniscript::types::extra_props"],[1774,"miniscript::expression"],[1775,"miniscript::miniscript::iter"],[1776,"miniscript::policy::semantic"],[1777,"miniscript::policy"],[1778,"bitcoin_units::weight"],[1779,"alloc::collections::btree::map"],[1780,"alloc::string"],[1781,"bitcoin::bip32"],[1782,"hex_conservative::error"],[1783,"base58ck::error"],[1784,"miniscript::descriptor::sortedmulti"],[1785,"core::str::traits"],[1786,"core::convert"],[1787,"core::default"],[1788,"bitcoin_units::amount"],[1789,"bitcoin_units::fee_rate"],[1790,"bdk_chain::keychain"],[1791,"alloc::sync"],[1792,"core::iter::traits::iterator"],[1793,"bitcoin::blockdata::block"],[1794,"bdk_chain::local_chain"],[1795,"bdk_chain::chain_data"],[1796,"core::iter::traits::collect"],[1797,"bdk_chain::tx_graph"],[1798,"anyhow"],[1799,"bitcoin::psbt"],[1800,"bdk_chain::spk_client"],[1801,"bitcoin::psbt::map::input"],[1802,"bdk_wallet::wallet::utils"],[1803,"core::iter::traits::double_ended"],[1804,"bdk_persist::persist"],[1805,"core::marker"],[1806,"bdk_chain::keychain::txout_index"],[1807,"bitcoin::psbt::error"],[1808,"bitcoin::crypto::sighash"],[1809,"bitcoin::blockdata::script::push_bytes::primitive"],[1810,"bitcoin::blockdata::locktime::absolute"]],"i":[1,8,0,1,0,8,0,0,0,0,0,0,1,1,0,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,7,8,1,6,6,0,0,1,6,1,6,7,8,1,6,7,8,0,1,6,7,8,1,6,1,6,7,8,6,6,0,0,8,6,1,0,7,8,1,6,0,0,1,6,7,8,1,6,7,8,1,6,7,8,8,6,1,6,7,8,7,0,1,6,7,8,0,254,254,254,94,255,24,0,0,0,0,0,0,31,0,0,33,0,0,35,94,255,24,0,0,0,94,255,24,35,31,0,94,255,24,94,255,24,94,255,24,35,24,54,55,31,31,24,24,54,55,31,24,54,55,31,31,31,31,0,33,54,55,33,55,33,33,54,55,33,54,55,33,33,54,55,33,54,55,33,54,55,0,24,54,55,31,24,54,55,31,24,54,55,31,31,24,24,24,24,24,24,31,24,31,24,54,55,31,0,24,31,31,69,24,31,24,24,24,54,55,31,31,24,31,24,24,24,24,24,24,24,54,55,31,31,31,24,31,31,31,24,31,31,31,24,24,31,31,24,24,54,55,31,24,54,55,31,31,24,93,94,24,24,31,31,31,24,31,31,33,54,55,31,24,31,24,33,54,55,24,24,24,24,24,24,24,24,24,24,24,24,24,24,31,33,31,24,31,31,24,54,55,31,33,54,55,24,24,0,31,24,31,24,31,31,24,24,31,24,31,33,54,55,31,0,24,54,55,31,24,31,24,33,33,24,31,24,54,55,31,24,54,55,31,31,24,54,55,31,24,24,54,55,31,31,0,0,74,74,0,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,74,121,115,115,0,122,0,0,121,120,0,121,121,115,115,115,121,122,71,115,122,122,0,0,0,71,71,120,121,121,0,0,121,121,121,120,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,71,120,121,122,73,123,71,73,123,123,120,121,122,73,123,115,120,121,122,73,123,115,115,71,120,121,122,122,73,73,123,115,71,73,120,123,121,73,120,121,122,73,123,115,71,121,122,123,73,123,73,73,120,121,122,73,123,123,120,121,122,73,123,71,115,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,120,121,122,73,123,115,71,256,256,256,257,258,259,258,259,258,259,258,259,258,259,260,261,262,263,264,265,265,264,266,267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,124,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,125,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,126,128,129,130,132,134,135,136,137,138,139,140,114,0,0,0,0,158,158,0,0,147,0,0,0,0,114,114,114,33,0,0,30,114,114,103,35,158,151,0,151,0,0,30,35,103,0,0,0,0,30,0,147,103,35,0,268,35,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,142,33,33,33,33,33,33,33,33,33,143,30,144,142,35,103,145,146,147,143,30,144,142,35,103,145,146,147,142,35,145,147,144,144,143,35,35,142,30,142,35,103,145,146,147,148,30,144,114,114,142,142,35,35,103,103,145,146,147,142,151,151,151,143,148,30,144,114,114,114,142,35,35,103,145,146,147,148,148,35,103,142,35,35,158,161,158,161,151,35,142,35,145,147,151,143,148,30,144,114,142,35,103,145,146,147,35,127,133,143,143,148,35,103,133,151,143,143,35,103,151,151,35,268,30,35,103,268,30,268,30,35,35,142,145,146,142,0,35,33,142,142,0,142,33,142,35,145,146,33,148,142,35,145,147,33,142,142,142,142,35,33,142,0,143,30,144,142,35,103,145,146,147,103,114,142,35,103,33,33,142,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,151,143,148,30,144,114,142,35,103,145,146,147,0,166,166,166,0,0,0,202,0,201,198,199,200,0,0,0,200,200,200,199,199,199,0,0,198,199,200,198,199,200,202,0,0,169,170,194,170,170,170,170,170,170,170,169,170,183,194,198,199,200,201,202,169,170,183,194,198,199,200,201,202,170,170,170,170,170,214,183,170,169,183,169,183,0,170,169,169,183,194,170,170,170,169,169,194,0,0,170,169,169,170,183,194,194,198,198,199,199,200,200,201,201,202,202,169,170,183,183,183,194,198,199,200,201,202,170,170,170,170,170,183,169,194,214,170,170,170,169,170,183,194,198,199,200,201,202,211,170,194,170,183,170,170,170,170,170,170,170,170,214,170,170,170,170,170,170,170,170,170,170,170,170,170,170,170,169,170,0,170,170,170,170,169,183,169,194,198,199,200,201,202,169,170,169,169,169,170,183,194,198,199,200,201,202,169,170,183,194,198,199,200,201,202,0,170,169,170,183,194,198,199,200,201,202,170,170,169,169,170,183,194,198,199,200,201,202,0,269,269,270,270,271,272,271,272,273,273,228,228,0,229,0,0,0,0,0,228,0,229,0,228,229,227,223,224,225,228,229,227,223,224,225,223,224,225,223,224,225,226,223,224,225,0,223,224,225,227,227,228,228,229,227,223,224,225,228,229,227,223,224,225,228,229,227,223,224,225,227,225,227,227,223,224,225,228,228,229,227,223,224,225,228,229,227,223,224,225,228,229,227,223,224,225,228,229,227,223,224,225,274,274,275,276,276,275,276,0,207,230,0,207,207,190,207,190,207,207,0,207,207,207,207,207,230,207,207,207,207,207,207,190,190,207,190,230,207,207,230,207,190,230,207,190,230,230,230,230,207,207,190,190,230,207,207,207,207,207,207,190,230,207,190,230,230,207,190,230,207,190,230,207,190,230,207,190,230,207,190,277,277,278,278,279,280,0,0,281,232,232,232,232,232,232,232,232,232,232,232,232,281,232,232,232,232,232,232,232,237,233,237,197,233,237,197,0,197,197,197,234,197,197,197,197,197,197,197,237,233,234,197,197,0,0,0,0,0,0,0,0,234,0,0,197,197,70,196,196,70,196,233,197,234,235,171,70,196,237,233,197,234,235,171,70,196,237,70,233,234,235,171,70,196,237,233,234,235,171,70,196,237,233,171,171,70,196,237,235,238,235,235,235,233,234,171,237,70,233,197,197,234,235,171,70,196,237,233,233,233,197,197,197,197,234,235,171,70,196,237,233,238,235,235,235,70,233,197,234,235,171,70,196,237,235,70,233,171,70,196,196,245,235,235,235,172,235,196,70,196,233,234,235,171,70,196,237,197,196,196,233,197,234,235,171,70,196,237,233,197,234,235,171,70,196,237,233,197,234,235,171,70,196,237,233,197,234,235,171,70,196,237,282,0,0,251,250,250,0,248,248,248,250,251,0,0,249,251,189,189,189,189,189,189,189,189,189,189,249,248,251,250,189,249,248,251,250,189,189,251,250,189,251,250,251,250,189,189,251,250,189,189,189,189,189,251,250,189,189,189,189,249,249,248,248,251,250,189,249,248,251,250,251,250,189,189,249,248,251,250,189,189,189,189,189,251,250,189,189,189,251,189,251,250,249,248,189,249,248,251,250,189,249,248,251,250,189,249,248,251,250,189,189,189,249,248,251,250,283,283],"f":"````````````{{{d{b}}}f}{{{d{b}}}{{d{{h{f}}}}}}`{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000`{{{d{b}}}b}{{{d{l}}}l}{{{d{n}}}n}{{{d{A`}}}A`}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{b}}{d{b}}}Ad}````{c{{Af{b}}}Ah}{c{{Af{l}}}Ah}{{{d{b}}{d{b}}}Aj}{{{d{l}}{d{l}}}Aj}{{{d{n}}{d{n}}}Aj}{{{d{A`}}{d{A`}}}Aj}{{{d{b}}{d{jAl}}}An}{{{d{l}}{d{jAl}}}An}{{{d{n}}{d{jAl}}}An}{{{d{A`}}{d{jAl}}}An}`{cc{}}000{{{d{b}}{d{jc}}}AbB`}{{{d{l}}{d{jc}}}AbB`}{ce{}{}}000````{{{d{A`}}}Bb}`{{{d{b}}{d{b}}}{{Bd{Ad}}}}``{{{d{A`}}}{{Bd{Bf}}}}{{{d{b}}c}AfBh}{{{d{l}}c}AfBh}``{{{d{c}}}e{}{}}000{c{{Af{e}}}{}{}}0000000{{{d{A`}}}{{d{Bj}}}}`{{{d{c}}}Bl{}}000`{{}{{d{Bn}}}}::::``````````````````````````````````````````{{{d{{C`{c}}}}Cb}{{Af{CdCf}}}{ChCj}}{{}Cl}0{{{d{{Cn{ce}}}}}{{d{{D`{ce}}}}}ChDb}{{{d{{d{{Cn{ce}}}}}}}{{Dd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{c}}}{{d{e}}}{}{}}000{{{d{jc}}}{{d{je}}}{}{}}000{{{d{{Cn{ce}}}}}{{Dn{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}0`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{Cn{cFn}}}}}{{Af{AbEh}}}Ch}2022102102{{{d{c}}}{{Af{AbEh}}}Ch}00{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{D`{cFl}}}}}{{Af{AbEh}}}Ch}{{{d{{D`{cFn}}}}}{{Af{AbEh}}}Ch}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}00`{{{d{{C`{c}}}}}{{C`{c}}}{G`Ch}}{{{d{Fl}}}Fl}{{{d{Fn}}}Fn}{{{d{{Cn{ce}}}}}{{Cn{ce}}}{G`Ch}{G`Db}}{{{d{c}}{d{je}}}Ab{}{}}000{{{d{{C`{c}}}}{d{{C`{c}}}}}Ad{GbCh}}{{{d{Fl}}{d{Fl}}}Ad}{{{d{Fn}}{d{Fn}}}Ad}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AdChDb}{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{Df}}}}Dh}{{Af{{C`{Dj}}Dl}}}}{{{d{{C`{Df}}}}{d{{Gd{c}}}}Dh}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{Dj}}}}{d{{Gd{c}}}}}{{Af{{C`{Gf}}Dl}}}Gh}{{{d{{C`{c}}}}}GjCh}{{{d{{C`{Df}}}}}Gl}{c{{Af{{C`{e}}}}}AhGn}{c{{Af{{Cn{eg}}}}}AhGnDb}{{{d{{C`{Df}}}}}H`}{{{d{{Cn{ce}}}}}Hb{CjCh}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}Aj{HdCh}}{{{d{Fl}}{d{Fl}}}Aj}{{{d{Fn}}{d{Fn}}}Aj}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}AjChDb}`{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}`{{{d{{Cn{ce}}}}{d{Hf}}}{{Af{AbHh}}}ChDb}{{{d{Hj}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{C`{Df}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}}{{{d{{Cn{Dfc}}}}{d{Hl}}Hn{d{{Gd{I`}}}}}{{Af{{Bd{Ib}}Id}}}Db}{{{d{{C`{Df}}}}{d{{Gd{c}}}}{d{If}}{Ih{Dh}}}{{Af{{Bd{{Ij{Dh{C`{Gf}}}}}}Dl}}}Gh}{{{d{{C`{c}}}}{d{jAl}}}{{Af{AbIl}}}Ch}0{{{d{Fl}}{d{jAl}}}{{Af{AbIl}}}}{{{d{Fn}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{Cn{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{{C`{c}}}}e}AjCh{{J`{{d{c}}}{{In{Aj}}}}}}{{{d{{Cn{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{{{Jb{c}}}{{C`{c}}}Ch}{{{Jd{c}}}{{C`{c}}}Ch}{{{Jf{c}}}{{C`{c}}}Ch}{{{Jh{c}}}{{C`{c}}}Ch}{{{Jj{c}}}{{C`{c}}}Ch}{{{Jl{c}}}{{C`{c}}}Ch}{cc{}}000{{{D`{ce}}}{{Af{{Cn{ce}}Cf}}}ChDb}{{{D`{ce}}JnK`}{{Cn{ce}}}ChDb}{{{d{Bn}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Bn}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{Bn}}{d{Hf}}}{{Af{{Cn{ce}}Cf}}}GnDb}1{{{d{Kb}}}{{Af{{C`{c}}Cf}}}Gn}{{{d{Kb}}}{{Af{{Cn{ce}}Cf}}}GnDb}{{{d{{Cn{ce}}}}Kd}{{Bd{{d{{Cn{ce}}}}}}}ChDb}{{{d{{Cn{ce}}}}Kd}{{Bd{c}}}ChDb}{{{d{{C`{c}}}}e}{{Af{{Ij{{Dn{{Dn{f}}}}Hb}}Cf}}}{ChCj}{{Kf{c}}}}0{{{d{{Cn{ce}}}}}AjChDb}0{{{d{{C`{Df}}}}}Aj}{{{d{{C`{c}}}}{d{je}}}Ab{KhCh}B`}{{{d{Fl}}{d{jc}}}AbB`}{{{d{Fn}}{d{jc}}}AbB`}{{{d{{Cn{ce}}}}{d{jg}}}AbChDbB`}{ce{}{}}000{{{Cn{ce}}}{{D`{ce}}}ChDb}{{{C`{Df}}}{{Af{{Dn{{C`{Df}}}}Cf}}}}{{Kj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{Kl{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}99:{{{d{{Cn{ce}}}}}{{L`{ce}}}ChDb}{{{d{{Cn{ce}}}}}{{Lb{ce}}}ChDb}{{{d{{C`{c}}}}}{{Af{{Ld{c}}Cf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{{d{{Cn{ce}}}}}{{Af{AbLf}}}ChDb}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{Cn{cFl}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{cFn}}}}}{{Bd{Kd}}}Ch}{{{d{{Cn{ce}}}}}{{Af{KdCf}}}ChDb}{{{d{{C`{c}}}}}{{Af{KdCf}}}Ch}1{{{d{{C`{c}}}}}{{Af{LhCf}}}Ch}{{}{{d{Bn}}}}00{{{Cn{cLj}}}{{Af{{C`{c}}Cf}}}Ch}{c{{C`{c}}}Ch}{c{{Af{{C`{c}}Cf}}}Ch}{{{Cn{cFl}}}{{Af{{C`{c}}Cf}}}Ch}{{Kd{Dn{c}}}{{Af{{C`{c}}Cf}}}Ch}{{{Jl{c}}}{{C`{c}}}Ch}{{{Jj{c}}}{{C`{c}}}Ch}4{{{Cn{cFn}}}{{Af{{C`{c}}Cf}}}Ch}3{{c{Bd{{Ll{c}}}}}{{Af{{C`{c}}Cf}}}Ch}614`{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{If}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{Gd{c}}}}{d{Bn}}}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Cf}}}Mb}1{{{d{If}}{d{Hf}}}{{Af{{Cn{c}}Cf}}}Db}{{{d{{C`{c}}}}{d{{C`{c}}}}}{{Bd{Ad}}}{MdCh}}{{{d{Fl}}{d{Fl}}}{{Bd{Ad}}}}{{{d{Fn}}{d{Fn}}}{{Bd{Ad}}}}{{{d{{Cn{ce}}}}{d{{Cn{ce}}}}}{{Bd{Ad}}}ChDb}{{{d{c}}}KdCh}00{{{C`{Dj}}{d{c}}}{{Af{Mf{C`{Dj}}}}}{{Ed{Dj}}}}0`{{{d{{Cn{ce}}}}}AjChDb}{{{d{{C`{c}}}}}{{Af{AbCf}}}Ch}{{{d{{Cn{ce}}}}}{{Af{AbHh}}}ChDb}{{{d{{C`{c}}}}{d{jMh}}e}{{Af{AbCf}}}{ChCj}{{Kf{c}}}}{{{d{{Cn{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}0{{{d{{C`{c}}}}}{{Af{HbCf}}}{ChCj}}{{{d{{C`{c}}}}}Hb{ChCj}}{{{d{{Cn{ce}}}}}KdChDb}{{{d{{C`{c}}}}e}AfChBh}{{{d{{Cn{ce}}}}g}AfChDbBh}{{}Mj}00{{{d{{Cn{ce}}}}{d{{M`{Fhc}}}}}{{Cn{ce}}}ChDb}`{{{d{c}}}e{}{}}000{{{d{c}}}Ml{}}0{{{d{{C`{Df}}}}{d{{M`{DfLn}}}}}Ml}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{C`{c}}}}{d{ji}}}{{Af{{Mn{g}}}}}ChCh{}{{N`{ceg}}}}{{{d{{Cn{ce}}}}{d{jk}}}{{Af{{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}0000000`{{{d{c}}}Bl{}}000={ce{}{}}000{{{d{{Cn{ce}}}}}AjChDb}{{{d{Bn}}}{{Af{MlId}}}}{{{d{Bn}}}{{Af{{Nb{f}}Id}}}}``````````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{Id}}{d{jAl}}}An}0{NdId}{NfId}{NhId}{NjId}{CfId}{NlId}{cc{}}{NnId}>{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0{{{d{c}}}Bl{}}{ce{}{}}```````````````````````````````````>>>>>>>======={{{d{O`}}}O`}{{{d{Ob}}}Ob}{{{d{Od}}}Od}{{{d{Ib}}}Ib}{{{d{Of}}}Of}{{{d{Hn}}}Hn}{{{d{c}}{d{je}}}Ab{}{}}00000``{{}Of}{{{d{O`}}{d{O`}}}Aj}{{{d{Ob}}{d{Ob}}}Aj}{{{d{Od}}{d{Od}}}Aj}{{{d{Ib}}{d{Ib}}}Aj}{{{d{Of}}{d{Of}}}Aj}{{{d{Nf}}{d{Nf}}}Aj}{{{d{O`}}{d{jAl}}}An}{{{d{Ob}}{d{jAl}}}An}{{{d{Od}}{d{jAl}}}An}{{{d{Ib}}{d{jAl}}}An}{{{d{Of}}{d{jAl}}}An}{{{d{Nf}}{d{jAl}}}An}0{{{d{Hn}}{d{jAl}}}An}{cc{}}0{AjOd}1{ObIb}2222{{{d{Ib}}{d{{M`{Ml{Dn{Kd}}}}}}}{{Af{OfNf}}}}{{{d{O`}}{d{jc}}}AbB`}{{{d{Of}}{d{jc}}}AbB`}{{{d{Ob}}}Ml}`{ce{}{}}000000{{{d{Ob}}}Aj}{{{d{Od}}}Aj}{{{d{Of}}}Aj}`{{{d{Of}}{d{Of}}}{{Bd{Ad}}}}{{{d{Ib}}}Aj}`{{{d{O`}}c}AfBh}{{{d{Ob}}c}AfBh}{{{d{Od}}c}AfBh}{{{d{Ib}}c}AfBh}{{{d{Of}}c}AfBh}`{{{d{c}}}e{}{}}00000{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}0000000000000{{{d{c}}}Bl{}}000000>>>>>>>``````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{OhCb}{{Af{OjId}}}}{{{Ol{c}}Cb}{{Af{OjId}}}{{On{Fl}}}}{{{A@`{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@b{c}}Cb}{{Af{OjId}}}{{On{Fn}}}}{{{A@d{c}}Cb}{{Af{OjId}}}{{On{A@f}}}}{{{A@h{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@l{c}}Cb}{{Af{OjId}}}{{A@j{Fl}}}}{{{A@n{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AA`{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAb{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAd{c}}Cb}{{Af{OjId}}}{{A@j{Fn}}}}{{{AAf{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{{{AAh{c}}Cb}{{Af{OjId}}}{{A@j{A@f}}}}{cc{}}00000000000{ce{}{}}00000000000{{Oj{d{{Gd{I`}}}}Cb}{{Af{{Ij{KlKn}}Id}}}}{{c{d{{Gd{I`}}}}Cb}{{Af{{Ij{{C`{Df}}{M`{DfLn}}}}Id}}}{}}00000000000{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000444444444444```````````````````````````````````````````{{}AAj}{{}Cl}{{DfDh}{{Af{DjDl}}}}{{{d{c}}}{{d{e}}}{}{}}00000000000{{{d{jc}}}{{d{je}}}{}{}}00000000000{{{d{{AAl{ce}}}}{d{g}}}{{Eb{{E`{c}}}}}{CjCh}Db{{Ed{c}}}}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}00000{{{d{c}}}{{Af{AbEh}}}Ch}{{{d{{D`{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbEh}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{d{{h{{Dn{f}}}}}}}{{Af{AbEh}}}}{{{d{{AAn{ce}}}}}{{AAn{ce}}}G`Db}{{{d{Cl}}}Cl}{{{d{AB`}}}AB`}{{{d{{AAl{ce}}}}}{{AAl{ce}}}{G`Ch}{G`Db}}{{{d{Df}}}Df}{{{d{Ln}}}Ln}{{{d{ABb}}}ABb}{{{d{ABd}}}ABd}{{{d{ABf}}}ABf}{{{d{c}}{d{je}}}Ab{}{}}00000000{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Ad{GbCh}{GbDb}}{{{d{Df}}{d{Df}}}Ad}{{{d{ABb}}{d{ABb}}}Ad}{{{d{ABf}}{d{ABf}}}Ad}`{{}AB`}{{{d{{AAn{ce}}}}}{{d{g}}}{}Db{}}{{DfDh}{{Af{DjDl}}}}{c{{Af{Df}}}Ah}{{{d{{AAl{ce}}}}}Hb{CjCh}Db}{{{d{Cl}}{d{Cl}}}Aj}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}Aj{HdCh}{HdDb}}{{{d{Df}}{d{Df}}}Aj}{{{d{Ln}}{d{Ln}}}Aj}{{{d{ABb}}{d{ABb}}}Aj}{{{d{ABd}}{d{ABd}}}Aj}{{{d{ABf}}{d{ABf}}}Aj}{{{d{{ABh{c}}}}{d{jAl}}}An{ABjDb}}{{{d{Cl}}{d{jAl}}}An}{{{d{AB`}}{d{jAl}}}An}{{{d{Nd}}{d{jAl}}}An}0{{{d{{AAl{ce}}}}{d{jAl}}}{{Af{AbIl}}}ChDb}0{{{d{Df}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{Ln}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{ABb}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABd}}{d{jAl}}}{{Af{AbIl}}}}{{{d{ABf}}{d{jAl}}}{{Af{AbIl}}}}{{{d{{AAl{ce}}}}g}AjChDb{{J`{{d{c}}}{{In{Aj}}}}}}{ABl{{ABn{c}}}Db}{cc{}}{AC`{{ABn{c}}}Db}1111{CfNd}{NhNd}33{DjDf}44444{{DfAAj}{{ABh{c}}}Db}{{LnAAj}{{ABh{c}}}Db}{{{d{Bn}}}{{Af{Df}}}}{{{d{Bn}}}{{Af{Ln}}}}{{{d{Kb}}}{{Af{{AAl{ce}}Cf}}}{ACbCh}Db}{{{d{Df}}}{{Bd{ACd}}}}{{{d{Df}}}{{Dn{ACd}}}}{c{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{{}{{Af{{AAn{ADbc}}e}}}Db{}}{{ce}{{Af{{AAn{{ACl{}{{ACf{e}}{ACh{c}}{ACj{g}}}}i}}g}}}{}{{ACn{{h{f}}}}AD`}ABjDb}{c{{Af{{AAn{ADbe}}g}}}{}Db{}}{{{d{{ABn{c}}}}}AjDb}{{{d{Df}}}Aj}{{{d{{AAl{ce}}}}{d{jg}}}Ab{KhCh}{KhDb}B`}{{{d{Df}}{d{jc}}}AbB`}{{{d{ABb}}{d{jc}}}AbB`}{{{d{ABf}}{d{jc}}}AbB`}{ce{}{}}00000000000{DfADd}{On{{Af{{ABh{c}}Nd}}}Db}{{A@j{Bd{ADf}}ACd}{{Af{{ABh{c}}Nd}}}Db}{{{AAn{ec}}{Bd{ADf}}ACd}{{Af{{ABh{c}}Nd}}}Db{{A@j{c}}}}{{{AAn{ec}}}{{Af{{ABh{c}}Nd}}}Db{{On{c}}}}{{{ABh{c}}}{{Af{{ABh{c}}Nd}}}Db}{Df{{Af{{ABh{c}}Nd}}}Db}{Ln{{Af{{ABh{c}}Nd}}}Db}{A@j{{Af{{ABn{c}}Nd}}}Db}{{{ABn{c}}}{{Af{{ABn{c}}Nd}}}Db}{{{AAn{ec}}}{{Af{{ABn{c}}Nd}}}Db{{A@j{c}}}}{{{AAn{ce}}}c{}Db}{Df{{Dn{Df}}}}{Ln{{Dn{Ln}}}}{{{ABn{c}}Cb}{{Bd{AC`}}}Db}{{{ABn{c}}Cb{d{{Gd{e}}}}}ABlDbMb}{{{d{Df}}}Aj}{{}Aj}{{{d{Cl}}}Aj}2{{{d{Ln}}}Aj}212133{{{d{{AAl{ce}}}}}KdChDb}``{{{d{{AAl{ce}}}}}{{Af{{Ld{c}}Cf}}}ChDb}{{}AAj}{{{d{Df}}}ADh}{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Bd{Kd}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}44{{{d{AAj}}{d{AAj}}}AAj}5{{}{{d{Bn}}}}{{Kd{Dn{c}}}{{Af{{AAl{ce}}Cf}}}ChDb}{{{d{Df}}}Kd}``{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}{{{ABh{c}}AAj}{{ABh{c}}}Db}{{{d{{AAl{ce}}}}{d{{AAl{ce}}}}}{{Bd{Ad}}}{MdCh}{MdDb}}{{{d{Df}}{d{Df}}}{{Bd{Ad}}}}{{{d{ABb}}{d{ABb}}}{{Bd{Ad}}}}{{{d{ABf}}{d{ABf}}}{{Bd{Ad}}}}{{{d{c}}}KdCh}{{{d{{AAl{ce}}}}}{{d{{h{c}}}}}ChDb}{{{d{{AAl{ce}}}}}{{Af{AbCf}}}ChDb}{{{d{{AAl{ce}}}}g}{{Af{{Dn{{Dn{f}}}}Cf}}}{CjCh}Db{{Kf{c}}}}{{{d{{AAl{ce}}}}}KdChDb}{{{d{Df}}c}AfBh}{{}Mj}{{{d{{AAl{ce}}}}}{{D`{ce}}}{CjCh}Db}{{}AAj}{{{d{c}}}e{}{}}00000000{{{d{Ln}}{d{{Gd{c}}}}}{{Af{DfADj}}}Mb}{{{d{c}}}Ml{}}000{{{d{{Cn{c{Db{}{{Ef{e}}}}}}}}}{{Af{AbCf}}}Ch{{Fj{}{{Ej{El}}{En{F`}}{Fb{Fd}}{Ff{Fh}}}}ChChChCh}}0{{{d{{AAl{ce}}}}{d{jk}}}{{Af{{AAl{ge}}{Mn{i}}}}}ChDbCh{}{{N`{cgi}}}}{c{{Af{e}}}{}{}}00000000000000000000000{{{d{c}}}Bl{}}00000000000{ce{}{}}00000000000`{{{d{ADl}}}{{Bd{ADn}}}}{{{d{ADl}}}{{Bd{AE`}}}}{{{d{ADl}}Kd}{{Bd{Bj}}}}`````````````````````````````{{AEbAEb}AEb}{{{d{jAEd}}bAEf{AEj{AEh}}}Ab}`{{{d{AEd}}}{{M`{b{`{{AF`{}{{AEl{{AEn{Hb}}}}}}G`}}}}}}{{{d{jAEd}}{d{AFb}}Dh}{{Af{AbAFd}}}}{{{d{jAEd}}{d{AFb}}DhAFf}{{Af{AbAFh}}}}{{{d{jAEd}}c}Ab{{AFl{}{{AEl{{Ij{{d{AFj}}H`}}}}}}}}{{{d{jAEd}}c}{{Af{AbAFd}}}{{AG`{AFn}}}}{{{d{AEd}}}{{d{{AGd{AGb}}}}}}{{{d{AEd}}}AEb}{{{d{c}}}{{d{e}}}{}{}}00000000{{{d{jc}}}{{d{je}}}{}{}}00000000{{{d{jAEd}}AGf}{{Af{{AGj{AGh}}AGl}}}}{{{d{jAEd}}}{{AGj{AGh}}}}{{{d{AEd}}{d{AFj}}}{{Af{ADnAGn}}}}{{{d{AEd}}{d{AFj}}}{{Af{AE`AGn}}}}{{{d{jAEd}}{d{AFj}}}Ab}``{{{d{AEd}}}AH`}{{{d{AEb}}}AEb}{{{d{AFn}}}AFn}{{{d{c}}{d{je}}}Ab{}{}}0`{{{d{jAEd}}}{{AHb{Aj}}}}`{{}AEb}{{}AFn}{{{d{AHd}}}{{d{c}}}{}}{{{d{AEd}}b}{{Bd{Dh}}}}{{{d{AEd}}{d{If}}}{{Bd{{Ij{bDh}}}}}}{{{d{AEd}}b}Ml}{c{{Af{AEb}}}Ah}{{{d{AEb}}{d{AEb}}}Aj}{{{d{AHd}}{d{AHd}}}Aj}``{{{d{AEd}}{d{jAHf}}AHh}{{Af{AjAHj}}}}{{{d{AEb}}{d{jAl}}}{{Af{AbIl}}}}0{{{d{AEd}}{d{jAl}}}An}{{{d{AFn}}{d{jAl}}}An}{{{d{AHd}}{d{jAl}}}An}0{{{d{AHl}}{d{jAl}}}An}0{{{d{AHn}}{d{jAl}}}An}0{{{d{AI`}}{d{jAl}}}An}0{{{d{AIb}}{d{jAl}}}An}0{{{d{AId}}{d{jAl}}}An}0{cc{}}0{{{AIf{b}}}AFn}1{AIhAFn}222222{{{d{AEd}}b}{{d{Kl}}}}{{{d{AEd}}l{Bd{AIj}}Aj}{{Af{AIlAIn}}}}{{{d{AEd}}b}{{AEj{Hl}}}}{{{d{AEd}}AGf}{{Bd{{AJ`{{AEj{AFj}}AGb}}}}}}{{{d{AEd}}Bb}{{Bd{l}}}}````{{{d{jAEd}}AFf}{{Af{AjAJb}}}}{{{d{jAEd}}AFjAJd}{{Af{AjAIb}}}}{{{d{jAEd}}BbBj}Ab}{ce{}{}}00000000{{{d{AJf}}{d{If}}}Aj}{{{d{AEd}}{d{If}}}Aj}`{{{d{AEd}}}{{`{{AF`{}{{AEl{{Ij{{d{b}}{d{Kl}}}}}}}}}}}}`{{{d{AEd}}}AJh}{{{d{AEd}}}{{`{{AF`{}{{AEl{l}}}}}}}}0{{{d{AEd}}b}{{`{{AJj{}{{AEl{AHd}}}}}}}}{c{{Af{AEdAHn}}}{{AJn{AJl}}AK`AKb}}{{{d{AEd}}}{{d{AKd}}}}{{{d{jAEd}}bDh}Aj}{{{d{AEd}}}Cb}`{{cceCb}{{Af{AEdAHl}}}Kj{{AJn{AJl}}AK`AKb}}{{ccCb}{{Af{AEdId}}}Kj}{{ccCbAKf}{{Af{AEdId}}}Kj}{{cceCb}{{Af{AEdAI`}}}Kj{{AJn{AJl}}AK`AKb}}{{cceCbAKf}{{Af{AEdAI`}}}Kj{{AJn{AJl}}AK`AKb}}{{cceCbAKf}{{Af{AEdAHl}}}Kj{{AJn{AJl}}AK`AKb}}{{{d{AEd}}b}Dh}{{{d{jAEd}}b}{{AHb{AHd}}}}{{{d{AEd}}bDh}AHd}{{{d{AEd}}b}{{Af{{Bd{Ib}}Id}}}}{{{d{AEd}}b}{{d{Kl}}}}{{{d{jAEd}}bDh}{{AHb{{`{{AF`{}{{AEl{AHd}}}}}}}}}}4{{{d{AEd}}}{{d{{Gd{I`}}}}}}{{{d{AEd}}{d{AFj}}}{{Ij{ADnADn}}}}{{{d{AEb}}c}AfBh}{{{d{AEd}}{d{jAHf}}AHh}{{Af{AjAHj}}}}`{{{d{AEd}}}{{d{{AKh{b}}}}}}{{{d{AEd}}}{{d{AJl}}}}{{{d{AEd}}}{{AKj{b}}}}{{{d{AEd}}}AKl}{{{d{c}}}e{}{}}0{{{d{c}}}Ml{}}000000{{{d{AEb}}}ADn}{{{d{AEd}}}{{`{{AF`{}{{AEl{{AJ`{{AEj{AFj}}AGb}}}}}}}}}}`1{c{{Af{e}}}{}{}}00000000000000000`{{{d{AEd}}}{{d{{AGd{AGb}}}}}}{{{d{c}}}Bl{}}00000000{{{d{AEd}}b}{{`{{AF`{}{{AEl{{AEn{Hb}}}}}}G`}}}}{{{d{jAEd}}bDh}Aj}`{ce{}{}}00000000{{c{Bd{c}}Cb{d{{Gd{I`}}}}}{{Af{MlId}}}Kj}```````````````````````{{{d{c}}}{{d{e}}}{}{}}00000{{{d{jc}}}{{d{je}}}{}{}}00000{{{d{AKn}}}AKn}{{{d{AL`}}}AL`}{{{d{ALb}}}ALb}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{ALd}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALfALh}}}}{{{d{AKn}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALfALh}}}}{{{d{AL`}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALfALh}}}}{{{d{ALb}}{Dn{n}}{Dn{n}}AE`H`{d{If}}}{{Af{ALfALh}}}}{{H`AE`{d{If}}}ALj}{{}AKn}{{}AL`}{{}ALb}``{{{d{ALh}}{d{jAl}}}An}0{{{d{ALj}}{d{jAl}}}An}{{{d{ALf}}{d{jAl}}}An}{{{d{AKn}}{d{jAl}}}An}{{{d{AL`}}{d{jAl}}}An}{{{d{ALb}}{d{jAl}}}An}{cc{}}00000{ce{}{}}00000{{{d{ALf}}}H`}{H`ALb}`1{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}{c{{Af{e}}}{}{}}00000000000{{{d{c}}}Bl{}}00000666666``````````````````````````````````````{{{d{c}}}{{d{e}}}{}{}}00{{{d{jc}}}{{d{je}}}{}{}}00{{{d{ALl}}}ALl}{{{d{c}}{d{je}}}Ab{}{}}{{{d{ALl}}{d{jAl}}}An}0{{{d{AIn}}{d{jAl}}}An}0{{{d{AGl}}{d{jAl}}}An}0>{NfAIn}?{ALhAIn}{ALnAIn}{IdAIn}{ALlAIn}{cc{}}{ce{}{}}00{{{d{c}}}e{}{}}{{{d{c}}}Ml{}}00{c{{Af{e}}}{}{}}00000{{{d{c}}}Bl{}}00444``````````{{{d{c}}}{{d{e}}}{}{}}{{{d{jc}}}{{d{je}}}{}{}}{{{d{AM`}}}{{Bd{Ml}}}}{{{d{AM`}}}Ml}{c{{Af{AM`}}}Ah}{{{d{AEd}}{d{Bn}}Aj}{{Af{AM`{d{Bn}}}}}}{{{d{AM`}}{d{jAl}}}An}0<{{{d{Bn}}}{{Af{AM`c}}}{}}<``{{{d{AM`}}c}AfBh};::9=`````````````````````````````````````{{{d{jHl}}AMbAEf{AEj{AEh}}}{{Bd{{AEj{AEh}}}}}}``{{{d{Hl}}{d{{Gd{I`}}}}}Kn}`::::::::99999999{{Kn{d{{C`{Df}}}}{d{{Gd{I`}}}}}Hl}{{{d{AMb}}}AMb}{{{d{AMd}}}AMd}{{{d{{AMf{c}}}}}{{AMf{c}}}{G`AMhABjG`}}{{{d{AEf}}}AEf}{{{d{Hl}}}Hl}{{{d{AHh}}}AHh}{{{d{AMj}}}AMj}{{{d{c}}{d{je}}}Ab{}{}}000000{{{d{AMb}}{d{AMb}}}Ad}{{{d{AEf}}{d{AEf}}}Ad}{{}AEf}{{}Hl}{{}AHh}{{}AMj}{{{d{{AMf{c}}}}}{{d{e}}}{AMhABjG`}{}}{{{d{AMl}}}{{Bd{Ln}}}}{{{d{{AMf{AMn}}}}}{{Bd{Ln}}}}{{{d{{AMf{{AN`{AC`}}}}}}}{{Bd{Ln}}}}{{{d{{AMf{{ANb{AC`}}}}}}}{{Bd{Ln}}}}{{{d{AMb}}{d{AMb}}}Aj}{{{d{AMd}}{d{AMd}}}Aj}{{{d{AEf}}{d{AEf}}}Aj}{{{d{AMj}}{d{AMj}}}Aj}{{{d{Hl}}AMb}{{Bd{{d{{AEj{AEh}}}}}}}}{{{d{AMb}}{d{jAl}}}An}{{{d{AHj}}{d{jAl}}}An}0{{{d{AMd}}{d{jAl}}}An}{{{d{{AMf{c}}}}{d{jAl}}}An{ABjAMhABjG`}}{{{d{AEf}}{d{jAl}}}An}{{{d{Hl}}{d{jAl}}}An}{{{d{AHh}}{d{jAl}}}An}{{{d{AMj}}{d{jAl}}}An}{FhAMb}{ADhAMb}{cc{}}{ANdAHj}{ANfAHj}{ANhAHj}3333333{{{d{AMb}}{d{jc}}}AbB`}{{{d{AMl}}{d{{Gd{I`}}}}}AMb}{{{d{{AMf{AMn}}}}{d{{Gd{I`}}}}}AMb}{{{d{{AMf{{AN`{AC`}}}}}}{d{{Gd{I`}}}}}AMb}{{{d{{AMf{{ANb{AC`}}}}}}{d{{Gd{I`}}}}}AMb}{{{d{Hl}}}{{Dn{{d{AMb}}}}}}{ce{}{}}0000000{{cAMd}{{AMf{c}}}{AMhABjG`}}{{}Hl}{{{d{AMb}}{d{AMb}}}{{Bd{Ad}}}}{{{d{AEf}}{d{AEf}}}{{Bd{Ad}}}}{{{d{jHl}}AMbAEf}{{Bd{{AEj{AEh}}}}}}``{{{d{ANj}}{d{jAHf}}Kd{d{AHh}}{d{{Gd{I`}}}}}{{Af{AbAHj}}}}{{{d{{AMf{{AN`{AC`}}}}}}{d{jAHf}}Kd{d{AHh}}{d{{Gd{I`}}}}}{{Af{AbAHj}}}}{{{d{{AMf{{ANb{AC`}}}}}}{d{jAHf}}Kd{d{AHh}}{d{{Gd{I`}}}}}{{Af{AbAHj}}}}{{{d{{AMf{AMn}}}}{d{jAHf}}Kd{d{AHh}}{d{{Gd{I`}}}}}{{Af{AbAHj}}}}{{{d{AEh}}{d{jAHf}}{d{AHh}}{d{{Gd{I`}}}}}{{Af{AbAHj}}}}{{{d{c}}{d{jAHf}}{d{AHh}}{d{{Gd{I`}}}}}{{Af{AbAHj}}}{}}`{{{d{Hl}}}{{Dn{{d{{AEj{AEh}}}}}}}}`{{{d{c}}}e{}{}}000000{{{d{c}}}Ml{}}``{c{{Af{e}}}{}{}}000000000000000{{{d{c}}}Bl{}}0000000{ce{}{}}0000000````````````````{{{d{j{AGj{c}}}}{d{e}}}{{d{j{AGj{c}}}}}{}{{ANn{ANl}}}}{{{d{j{AGj{c}}}}BbAIlKd}{{Af{{d{j{AGj{c}}}}AO`}}}{}}{{{d{j{AGj{c}}}}BbAIlKdBf}{{Af{{d{j{AGj{c}}}}AO`}}}{}}{{{d{j{AGj{c}}}}}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}HbADn}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}Bb}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}Bb}{{Af{{d{j{AGj{c}}}}AOb}}}{}}{{{d{j{AGj{c}}}}{d{{h{Bb}}}}}{{Af{{d{j{AGj{c}}}}AOb}}}{}}{{{d{j{AGj{c}}}}Aj}{{d{j{AGj{c}}}}}{}}{{{d{c}}}{{d{e}}}{}{}}0000{{{d{jc}}}{{d{je}}}{}{}}0000{{{d{j{AGj{c}}}}AOd}{{d{j{AGj{c}}}}}{}}{{{d{{AGj{c}}}}}{{AGj{c}}}G`}{{{d{AOf}}}AOf}{{{d{AOd}}}AOd}{{{d{c}}{d{je}}}Ab{}{}}00{{{d{AOf}}{d{AOf}}}Ad}{{{d{AOd}}{d{AOd}}}Ad}{{{AGj{c}}e}{{AGj{e}}}{}ALd}{{{d{j{AGj{c}}}}Dh}{{d{j{AGj{c}}}}}{}}{{}AOf}{{}AOd}{{{d{j{AGj{c}}}}}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}Hb}{{d{j{AGj{c}}}}}{}}11{{{d{j{AGj{c}}}}Bf}{{d{j{AGj{c}}}}}{}}{{{d{AOf}}{d{AOf}}}Aj}{{{d{AOd}}{d{AOd}}}Aj}{{{d{j{AGj{c}}}}ADn}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}AE`}{{d{j{AGj{c}}}}}{}}{{{AGj{c}}}{{Af{AHfAIn}}}ALd}{{{d{{AGj{c}}}}{d{jAl}}}AnABj}{{{d{AOb}}{d{jAl}}}An}0{{{d{AO`}}{d{jAl}}}An}0{{{d{AOf}}{d{jAl}}}An}{{{d{AOd}}{d{jAl}}}An}{cc{}}0000{{{d{AOf}}{d{jc}}}AbB`}{{{d{AOd}}{d{jc}}}AbB`}?{ce{}{}}0000{{{d{j{AGj{c}}}}}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}AOh}{{d{j{AGj{c}}}}}{}}11{{{d{j{AGj{c}}}}AOf}{{d{j{AGj{c}}}}}{}}{{{d{AOf}}{d{AOf}}}{{Bd{Ad}}}}{{{d{AOd}}{d{AOd}}}{{Bd{Ad}}}}{{{d{j{AGj{c}}}}{M`{Ml{Dn{Kd}}}}b}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}{Dn{{Ij{HbADn}}}}}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}AIj}{{d{j{AGj{c}}}}}{}}{{{d{AOf}}{d{jAFj}}}Ab}{{{d{c}}}e{}{}}00{{{d{c}}}Ml{}}0{c{{Af{e}}}{}{}}000000000{{{d{c}}}Bl{}}0000{{{d{j{AGj{c}}}}{Dn{Bb}}}{{d{j{AGj{c}}}}}{}}{{{d{j{AGj{c}}}}AOj}{{d{j{AGj{c}}}}}{}}?????``","D":"FHj","p":[[6,"KeychainKind",0,1730],[1,"reference"],[1,"u8"],[1,"slice"],[0,"mut"],[5,"LocalOutput",0,1730],[5,"WeightedUtxo",0,1730],[6,"Utxo",0,1730],[1,"unit"],[6,"Ordering",1731],[6,"Result",1732],[10,"Deserializer",1733],[1,"bool"],[5,"Formatter",1734],[8,"Result",1734],[10,"Hasher",1735],[5,"OutPoint",1736],[6,"Option",1737],[5,"Sequence",1736],[10,"Serializer",1738],[5,"TxOut",1736],[5,"TypeId",1739],[1,"str"],[6,"Descriptor",100,1740],[6,"Network",1741],[5,"Address",1742],[6,"Error",1743],[10,"MiniscriptKey",1743],[10,"ToPublicKey",1743],[6,"ScriptContextEnum",693],[5,"Miniscript",100,1744],[6,"Terminal",1745],[10,"ScriptContext",693,1746],[6,"Tree",1747],[6,"DescriptorPublicKey",693,1748],[1,"u32"],[5,"DefiniteDescriptorKey",1748],[6,"ConversionError",1748],[5,"Vec",1749],[6,"Placeholder",1750],[5,"Satisfaction",1750],[10,"AssetProvider",1751],[17,"Key"],[6,"ScriptContextError",1746],[17,"Sha256"],[5,"Hash",1752],[17,"Hash256"],[5,"Hash",1753],[17,"Ripemd160"],[5,"Hash",1754],[17,"Hash160"],[5,"Hash",1755],[10,"ParseableKey",1745],[6,"Legacy",100,1746],[6,"Segwitv0",100,1746],[10,"Clone",1756],[10,"Ord",1731],[5,"Secp256k1",1757],[5,"PublicKey",1758],[10,"Verification",1759],[6,"DescriptorType",1740],[5,"DescriptorId",1760],[10,"FromStrKey",1761],[1,"u64"],[5,"ScriptBuf",1762],[10,"PartialEq",1731],[5,"ExtParams",1763],[6,"AnalysisError",1763],[10,"ExtractPolicy",100],[5,"SignersContainer",1429],[6,"BuildSatisfaction",386],[6,"All",1764],[5,"Policy",386],[6,"Error",354],[5,"Script",1765],[5,"Range",1766],[1,"tuple"],[5,"Error",1734],[17,"Output"],[10,"FnMut",1767],[5,"Tr",1768],[5,"Bare",1769],[5,"Sh",1770],[5,"Pkh",1769],[5,"Wsh",1771],[5,"Wpkh",1771],[5,"Type",1772],[5,"ExtData",1773],[5,"Tree",1774],[1,"usize"],[10,"Satisfier",1750],[10,"Hash",1735],[10,"IntoWalletDescriptor",100],[8,"ExtendedDescriptor",100],[8,"KeyMap",693,1740],[5,"Iter",1775],[5,"PkIter",1775],[6,"Policy",1776],[6,"LiftError",1777],[5,"Weight",1778],[6,"BareCtx",1746],[6,"TapTree",1768],[6,"DescriptorSecretKey",693,1748],[5,"BTreeMap",1779],[10,"Signing",1759],[10,"PartialOrd",1731],[5,"Plan",1751],[5,"TxIn",1736],[6,"SigType",1746],[5,"String",1780],[6,"TranslateErr",1743],[10,"Translator",1743],[1,"array"],[6,"KeyError",693],[6,"PolicyError",386],[6,"Error",1781],[6,"ParsePublicKeyError",1758],[6,"HexToBytesError",1782],[6,"Error",1783],[6,"PkOrF",386],[6,"SatisfiableItem",386],[6,"Satisfaction",386],[5,"Condition",386],[10,"DescriptorTemplate",557],[8,"DescriptorTemplateOut",557],[5,"P2Pkh",557],[10,"IntoDescriptorKey",693],[5,"P2Wpkh_P2Sh",557],[5,"P2Wpkh",557],[5,"P2TR",557],[6,"Tap",1746],[5,"Bip44",557],[10,"DerivableKey",693],[5,"Bip44Public",557],[5,"Bip49",557],[5,"Bip49Public",557],[5,"Bip84",557],[5,"Bip84Public",557],[5,"Bip86",557],[5,"Bip86Public",557],[8,"ValidNetworks",693],[5,"SortedMultiVec",693,1784],[5,"GeneratedKey",693],[5,"PrivateKeyGenerateOptions",693],[5,"SinglePub",693,1748],[5,"SinglePriv",693,1748],[6,"SinglePubKey",693,1748],[6,"DescriptorKey",693],[10,"Debug",1734],[5,"Xpub",1781],[6,"ExtendedKey",693],[5,"Xpriv",1781],[10,"FromStr",1785],[5,"DerivationPath",1781],[17,"Entropy"],[17,"Options"],[17,"Error"],[10,"GeneratableKey",693],[10,"AsMut",1786],[10,"Default",1787],[10,"GeneratableDefaultOptions",693],[5,"Assets",1751],[8,"KeySource",1781],[5,"Fingerprint",1781],[5,"DescriptorKeyParseError",1748],[10,"PsbtUtils",992],[5,"Amount",1788],[5,"FeeRate",1789],[5,"Balance",996,1790],[5,"Wallet",996],[5,"SignerOrdering",1429],[10,"TransactionSigner",1429],[5,"Arc",1791],[17,"Item"],[8,"Indexed",1790],[10,"Iterator",1792],[5,"Block",1793],[5,"CannotConnectError",1794],[5,"BlockId",1795],[6,"ApplyHeaderError",1794],[5,"Transaction",1736],[10,"IntoIterator",1796],[5,"Update",996],[10,"Into",1786],[5,"ConfirmationTimeHeightAnchor",1795],[5,"TxGraph",1797],[5,"Txid",1736],[8,"DefaultCoinSelectionAlgorithm",1229],[5,"TxBuilder",1613],[6,"BuildFeeBumpError",1328],[6,"CalculateFeeError",1797],[5,"CheckPointIter",1794],[8,"Result",1798],[5,"AddressInfo",996],[5,"Psbt",1799],[5,"SignOptions",1429],[6,"SignerError",1429],[6,"NewError",996],[6,"LoadError",996],[6,"NewOrLoadError",996],[6,"InsertTxError",996],[6,"ApplyBlockError",996],[5,"FullScanResult",1800],[5,"SyncResult",1800],[5,"PsbtSighashType",1801],[5,"Input",1801],[6,"CreateTxError",1328],[5,"CanonicalTx",1797],[5,"AlterCheckPointError",1794],[6,"ConfirmationTime",1795],[10,"IsDust",996,1802],[5,"CheckPoint",1794],[10,"DoubleEndedIterator",1803],[8,"ChangeSet",996],[10,"PersistBackend",1804],[10,"Send",1805],[10,"Sync",1805],[5,"LocalChain",1794],[5,"BlockHash",1793],[5,"KeychainTxOutIndex",1806],[5,"FullScanRequest",1800],[5,"SyncRequest",1800],[5,"LargestFirstCoinSelection",1229],[5,"OldestFirstCoinSelection",1229],[5,"BranchAndBoundCoinSelection",1229],[10,"CoinSelectionAlgorithm",1229],[5,"CoinSelectionResult",1229],[6,"Error",1229],[6,"Excess",1229],[6,"MiniscriptPsbtError",1328],[6,"Error",1807],[5,"FullyNodedExport",1406],[6,"SignerId",1429],[6,"SignerContext",1429],[5,"SignerWrapper",1429],[10,"Sized",1805],[6,"TapLeavesOptions",1429],[10,"SignerCommon",1429],[5,"PrivateKey",1758],[5,"DescriptorMultiXKey",1748],[5,"DescriptorXKey",1748],[6,"TaprootError",1808],[6,"P2wpkhError",1808],[5,"InputsIndexError",1736],[10,"InputSigner",1429],[5,"PushBytes",1809],[10,"AsRef",1786],[6,"AddForeignUtxoError",1613],[6,"AddUtxoError",1613],[6,"ChangeSpendPolicy",1613],[6,"TxOrdering",1613],[6,"LockTime",1810],[1,"i32"],[15,"Foreign",97],[8,"DerivedDescriptor",100],[15,"PsbtTimelocks",533],[15,"Complete",536],[15,"Partial",536],[15,"PartialComplete",536],[15,"Sha256Preimage",547],[15,"Hash256Preimage",547],[15,"Ripemd160Preimage",547],[15,"Hash160Preimage",547],[15,"Thresh",547],[15,"Multisig",547],[15,"AbsoluteTimelock",547],[15,"RelativeTimelock",547],[10,"ExtScriptContext",693],[15,"UnexpectedConnectedToHash",1219],[15,"ConfirmationHeightCannotBeGreaterThanTip",1221],[15,"LoadedGenesisDoesNotMatch",1223],[15,"LoadedNetworkDoesNotMatch",1223],[15,"LoadedDescriptorDoesNotMatch",1223],[15,"InsufficientFunds",1321],[15,"Change",1323],[15,"NoChange",1323],[15,"RbfSequenceCsv",1400],[15,"LockTime",1400],[15,"FeeTooLow",1400],[15,"FeeRateTooLow",1400],[8,"WalletExport",1406],[15,"Tap",1612],[15,"InvalidTxid",1728]],"r":[[2,100],[4,1730],[6,1730],[7,1429],[8,1613],[9,1730],[10,996],[11,1730],[70,996],[71,100],[104,1740],[106,1748],[113,1746],[114,1744],[119,386],[120,1746],[121,1746],[155,352],[696,1748],[697,1748],[712,1740],[722,1746],[727,1748],[728,1748],[729,1748],[730,1784],[998,1790],[1006,1802]],"b":[[193,"impl-Descriptor%3CDescriptorPublicKey%3E"],[194,"impl-Descriptor%3CDefiniteDescriptorKey%3E"],[213,"impl-Display-for-Descriptor%3CPk%3E"],[214,"impl-Debug-for-Descriptor%3CPk%3E"],[217,"impl-Debug-for-Miniscript%3CPk,+Ctx%3E"],[218,"impl-Display-for-Miniscript%3CPk,+Ctx%3E"],[221,"impl-From%3CTr%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[222,"impl-From%3CBare%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[223,"impl-From%3CSh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[224,"impl-From%3CPkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[225,"impl-From%3CWsh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[226,"impl-From%3CWpkh%3CPk%3E%3E-for-Descriptor%3CPk%3E"],[370,"impl-Debug-for-Error"],[371,"impl-Display-for-Error"],[372,"impl-From%3CKeyError%3E-for-Error"],[373,"impl-From%3CPolicyError%3E-for-Error"],[374,"impl-From%3CError%3E-for-Error"],[375,"impl-From%3CParsePublicKeyError%3E-for-Error"],[376,"impl-From%3CError%3E-for-Error"],[377,"impl-From%3CHexToBytesError%3E-for-Error"],[379,"impl-From%3CError%3E-for-Error"],[461,"impl-Display-for-PolicyError"],[462,"impl-Debug-for-PolicyError"],[811,"impl-Display-for-KeyError"],[812,"impl-Debug-for-KeyError"],[813,"impl-Display-for-SortedMultiVec%3CPk,+Ctx%3E"],[814,"impl-Debug-for-SortedMultiVec%3CPk,+Ctx%3E"],[815,"impl-Debug-for-DescriptorPublicKey"],[816,"impl-Display-for-DescriptorPublicKey"],[817,"impl-Display-for-DescriptorSecretKey"],[818,"impl-Debug-for-DescriptorSecretKey"],[823,"impl-From%3CXpub%3E-for-ExtendedKey%3CCtx%3E"],[825,"impl-From%3CXpriv%3E-for-ExtendedKey%3CCtx%3E"],[830,"impl-From%3CError%3E-for-KeyError"],[831,"impl-From%3CError%3E-for-KeyError"],[872,"impl-DerivableKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[873,"impl-IntoDescriptorKey%3CCtx%3E-for-GeneratedKey%3CK,+Ctx%3E"],[1080,"impl-Debug-for-Balance"],[1081,"impl-Display-for-Balance"],[1084,"impl-Debug-for-AddressInfo"],[1085,"impl-Display-for-AddressInfo"],[1086,"impl-Display-for-NewError"],[1087,"impl-Debug-for-NewError"],[1088,"impl-Debug-for-LoadError"],[1089,"impl-Display-for-LoadError"],[1090,"impl-Display-for-NewOrLoadError"],[1091,"impl-Debug-for-NewOrLoadError"],[1092,"impl-Debug-for-InsertTxError"],[1093,"impl-Display-for-InsertTxError"],[1094,"impl-Debug-for-ApplyBlockError"],[1095,"impl-Display-for-ApplyBlockError"],[1098,"impl-From%3CFullScanResult%3CKeychainKind%3E%3E-for-Update"],[1100,"impl-From%3CSyncResult%3E-for-Update"],[1270,"impl-Display-for-Error"],[1271,"impl-Debug-for-Error"],[1367,"impl-Debug-for-MiniscriptPsbtError"],[1368,"impl-Display-for-MiniscriptPsbtError"],[1369,"impl-Display-for-CreateTxError"],[1370,"impl-Debug-for-CreateTxError"],[1371,"impl-Debug-for-BuildFeeBumpError"],[1372,"impl-Display-for-BuildFeeBumpError"],[1374,"impl-From%3CPolicyError%3E-for-CreateTxError"],[1376,"impl-From%3CError%3E-for-CreateTxError"],[1377,"impl-From%3CError%3E-for-CreateTxError"],[1378,"impl-From%3CError%3E-for-CreateTxError"],[1379,"impl-From%3CMiniscriptPsbtError%3E-for-CreateTxError"],[1416,"impl-Display-for-FullyNodedExport"],[1417,"impl-Debug-for-FullyNodedExport"],[1510,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1511,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1512,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1519,"impl-Display-for-SignerError"],[1520,"impl-Debug-for-SignerError"],[1527,"impl-From%3CHash%3E-for-SignerId"],[1528,"impl-From%3CFingerprint%3E-for-SignerId"],[1530,"impl-From%3CTaprootError%3E-for-SignerError"],[1531,"impl-From%3CP2wpkhError%3E-for-SignerError"],[1532,"impl-From%3CInputsIndexError%3E-for-SignerError"],[1542,"impl-SignerCommon-for-SignerWrapper%3CPrivateKey%3E"],[1543,"impl-SignerCommon-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1544,"impl-SignerCommon-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1562,"impl-InputSigner-for-SignerWrapper%3CDescriptorMultiXKey%3CXpriv%3E%3E"],[1563,"impl-InputSigner-for-SignerWrapper%3CDescriptorXKey%3CXpriv%3E%3E"],[1564,"impl-InputSigner-for-SignerWrapper%3CPrivateKey%3E"],[1671,"impl-Debug-for-AddUtxoError"],[1672,"impl-Display-for-AddUtxoError"],[1673,"impl-Display-for-AddForeignUtxoError"],[1674,"impl-Debug-for-AddForeignUtxoError"]],"c":"OjAAAAEAAAAAAAUAEAAAAMEAAwEPAR8DdgOABQ==","e":"OzAAAAEAAH0DfwADAAAACAABAAsAAAAOABMAJgAJADUAAQA+AAAAQQAAAEUADwBXAAMAXQADAGoAAAB4AAAAjAABAI8AAACRAAcAnAAAAJ4AAQChAAAApAABAKcAAQCrAAEArgABALEAAQC0AAsAxQADAMoAAwDTAAEA1gANAOoAAAD3AAMAAgEAAAgBAQAMAQEAEwEBACkBAwAuAQEAPAEBAD8BAQBDAQUATgEHAFcBAwBcAQMAcQEJAHwBAAB+AQQApgEZAMIBDgDTAQAA1QEAANsBAQDqAQAA7QEEAPMBIgA8AhcAVQILAHkCPADkAhcABgMVAB0DAQAgAwAAIgMWADoDAAA/AwEAQwMAAEsDAQBWAwMAZgMAAGkDBABvAwEAfwMBAIQDAACOAwAAkwMDAJwDAACgAwgAqgMDALEDLwACBAAACgQAAAwEEQAmBAMALQQCADMEAgA5BA8ASwQAAE0EAACGBAAAjQQIAJoEEQCuBAgAugQIANsEEQDuBAIA8gQCAPcEBgAOBRsAUAUNAF8FAABhBQMAaQUPAIMFAQCHBQAAiQUBAIwFAACQBQUAwAUPANEFFADnBQYA7wUKAPsFAgAFBgAABwYCABUGAQAbBgIAHwYAACMGBwAtBh8AZgYJAHEGBwB7BgEAggYBAIcGBgCTBgEAoAYBAKYGEwC8BgQA"}],\ ["example_bitcoind_rpc_polling",{"t":"PSISSSGPSPFGSPPNNNNHNNNNNNNNNNONNNNNNNNNNNNNNHNOOOHNNNNNNNNNNNNNNNONNNOO","n":["Block","CHANNEL_BOUND","ChangeSet","DB_COMMIT_DELAY","DB_MAGIC","DB_PATH","Emission","Live","MEMPOOL_EMIT_DELAY","Mempool","RpcArgs","RpcCommands","STDOUT_PRINT_DELAY","Sync","Tip","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","await_flag","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","clone","clone","clone_into","clone_into","fallback_height","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","has_subcommand","into","into","into","main","new_client","rpc_cookie","rpc_password","rpc_user","start_ctrlc_handler","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","url","vzip","vzip","vzip","rpc_args","rpc_args"],"q":[[0,"example_bitcoind_rpc_polling"],[70,"example_bitcoind_rpc_polling::RpcCommands"],[72,"clap::builder::command"],[73,"core::sync::atomic"],[74,"core::time"],[75,"core::fmt"],[76,"clap::parser::matches::arg_matches"],[77,"clap::error"],[78,"core::result"],[79,"anyhow"],[80,"bitcoincore_rpc::client"],[81,"alloc::sync"],[82,"core::any"]],"i":[10,0,0,0,0,0,0,8,0,10,0,0,0,8,10,7,7,8,8,0,10,7,8,10,7,8,7,8,7,8,7,10,7,8,10,7,8,7,8,7,8,8,10,7,8,0,7,7,7,7,0,7,8,10,7,8,10,7,8,10,7,8,7,8,7,8,7,10,7,8,21,22],"f":"```````````````{bb}000{{{f{d}}h}j}{{{f{c}}}{{f{e}}}{}{}}00{{{f{lc}}}{{f{le}}}{}{}}00{{{f{n}}}n}{{{f{A`}}}A`}{{{f{c}}{f{le}}}Ab{}{}}0`{{{f{Ad}}{f{lAf}}}Ah}{{{f{n}}{f{lAf}}}Ah}{{{f{A`}}{f{lAf}}}Ah}{cc{}}00{{{f{Aj}}}{{An{nAl}}}}{{{f{Aj}}}{{An{A`Al}}}}{{{f{lAj}}}{{An{nAl}}}}{{{f{lAj}}}{{An{A`Al}}}}{{{f{B`}}}j}{ce{}{}}00{{}{{Bb{Ab}}}}{{{f{n}}}{{Bb{Bd}}}}```{{}{{Bf{d}}}}{{{f{c}}}e{}{}}0{c{{An{e}}}{}{}}00000{{{f{c}}}Bh{}}00{{{f{ln}}{f{Aj}}}{{An{AbAl}}}}{{{f{lA`}}{f{Aj}}}{{An{AbAl}}}}{{{f{ln}}{f{lAj}}}{{An{AbAl}}}}{{{f{lA`}}{f{lAj}}}{{An{AbAl}}}}`:::``","D":"Bb","p":[[8,"Command",72],[5,"AtomicBool",73],[1,"reference"],[5,"Duration",74],[1,"bool"],[0,"mut"],[5,"RpcArgs",0],[6,"RpcCommands",0],[1,"unit"],[6,"Emission",0],[5,"Formatter",75],[8,"Result",75],[5,"ArgMatches",76],[5,"Error",77],[6,"Result",78],[1,"str"],[8,"Result",79],[5,"Client",80],[5,"Arc",81],[5,"TypeId",82],[15,"Sync",70],[15,"Live",70]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAADcACgAAAAEAAwAAAAUAAgAKAAIADwAPACAAAgAmAAQALgABADMADwBEAAQA"}],\ ["example_cli",{"t":"PGFPPPGGFPPFPGIIPPPPPPPIPPPGEONNNNNNNNENNNNNNNNNNNNNNNNOOENNNNNNNNNNNOOHOONONNNNNNNNNNNNNNNNNNNNNNNNNNNNHNNNOOOOHONNNNNNNNNNOONHNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOO","n":["Address","AddressCmd","Args","Balance","BranchAndBound","ChainSpecific","CoinSelectionAlgo","Commands","CreateTxChange","External","Index","Init","Internal","Keychain","KeychainChangeSet","KeychainTxGraph","LargestFirst","List","List","New","NewestFirst","Next","OldestFirst","PlannedUtxo","Send","SmallestFirst","TxOut","TxOutCmd","anyhow","args","augment_args","augment_args_for_update","augment_subcommands","augment_subcommands","augment_subcommands","augment_subcommands_for_update","augment_subcommands_for_update","augment_subcommands_for_update","bdk_file_store","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","borrow_mut","change_descriptor","change_keychain","clap","clone","clone","clone","clone","clone","clone_into","clone_into","clone_into","clone_into","clone_into","cmp","command","cp_limit","create_tx","db","db_path","default","descriptor","deserialize","eq","equivalent","equivalent","fmt","fmt","fmt","fmt","fmt","fmt","fmt","from","from","from","from","from","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","from_str","handle_commands","has_subcommand","has_subcommand","has_subcommand","index","index","index","index_changeset","init","init_changeset","into","into","into","into","into","into","into","into","into_app","into_app_for_update","keymap","network","partial_cmp","planned_utxos","serialize","to_owned","to_owned","to_owned","to_owned","to_owned","to_string","to_string","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_from","try_into","try_into","try_into","try_into","try_into","try_into","try_into","try_into","type_id","type_id","type_id","type_id","type_id","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","vzip","vzip","vzip","vzip","vzip","change","addr_cmd","address","chain_specific","coin_select","txout_cmd","value","confirmed","spent","unconfirmed","unspent"],"q":[[0,"example_cli"],[176,"example_cli::AddressCmd"],[177,"example_cli::Commands"],[183,"example_cli::TxOutCmd"],[187,"clap::builder::command"],[188,"core::clone"],[189,"clap::derive"],[190,"core::cmp"],[191,"miniscript::descriptor::key"],[192,"alloc::collections::btree::map"],[193,"bitcoin::address"],[194,"bitcoin::blockdata::transaction"],[195,"core::option"],[196,"anyhow"],[197,"bdk_chain::tx_data_traits"],[198,"bdk_chain::chain_oracle"],[199,"core::result"],[200,"serde::de"],[201,"core::fmt"],[202,"clap::parser::matches::arg_matches"],[203,"clap::error"],[204,"std::sync::mutex"],[205,"bdk_persist::persist"],[206,"bitcoin::network"],[207,"core::default"],[208,"serde::ser"],[209,"core::convert"],[210,"core::ops::function"],[211,"core::marker"],[212,"bdk_tmp_plan"],[213,"alloc::vec"],[214,"alloc::string"],[215,"core::any"]],"i":[4,0,0,4,8,4,0,0,0,11,9,0,11,0,0,0,8,9,10,9,8,9,8,0,4,8,4,0,0,50,34,34,4,9,10,4,9,10,0,21,50,34,4,8,9,10,11,21,50,34,4,8,9,10,11,34,21,0,4,8,9,10,11,4,8,9,10,11,11,34,34,0,50,34,8,34,11,11,11,11,4,8,8,9,10,11,11,21,50,34,4,8,9,10,11,34,4,9,10,34,4,9,10,8,0,4,9,10,14,21,50,21,0,50,21,50,34,4,8,9,10,11,34,34,50,34,11,0,11,4,8,9,10,11,8,11,21,50,34,4,8,9,10,11,21,50,34,4,8,9,10,11,21,50,34,4,8,9,10,11,34,4,9,10,34,4,9,10,21,50,34,4,8,9,10,11,60,61,62,62,62,63,62,64,64,64,64],"f":"``````````````````````````````{bb}0000000`{{{d{c}}}{{d{e}}}{}{}}0000000{{{d{fc}}}{{d{fe}}}{}{}}0000000```{{{d{{h{ce}}}}}{{h{ce}}}{jl}{jn}}{{{d{A`}}}A`}{{{d{Ab}}}Ab}{{{d{Ad}}}Ad}{{{d{Af}}}Af}{{{d{c}}{d{fe}}}Ah{}{}}0000{{{d{Af}}{d{Af}}}Aj}``{{{d{f{Al{c}}}}{d{e}}{d{{Bb{AnB`}}}}A`BdBf}{{C`{{Bn{Bh{Bl{Bj}}}}}}}CbCd}``{{}A`}`{c{{Cf{Af}}}Ch}{{{d{Af}}{d{Af}}}Cj}{{{d{c}}{d{e}}}Cj{}{}}0{{{d{{h{ce}}}}{d{fCl}}}Cn{D`l}{D`n}}{{{d{A`}}{d{fCl}}}Cn}0{{{d{Ab}}{d{fCl}}}Cn}{{{d{Ad}}{d{fCl}}}Cn}{{{d{Af}}{d{fCl}}}Cn}0{cc{}}0000000{{{d{Db}}}{{Cf{{Dd{ce}}Df}}}ln}{{{d{Db}}}{{Cf{{h{ce}}Df}}}ln}{{{d{Db}}}{{Cf{AbDf}}}}{{{d{Db}}}{{Cf{AdDf}}}}{{{d{fDb}}}{{Cf{{Dd{ce}}Df}}}ln}{{{d{fDb}}}{{Cf{{h{ce}}Df}}}ln}{{{d{fDb}}}{{Cf{AbDf}}}}{{{d{fDb}}}{{Cf{AdDf}}}}{{{d{Dh}}}{{Cf{A`c}}}{}}{{{d{{Dj{{Al{c}}}}}}{d{{Dj{{Dl{e}}}}}}{d{{Dj{g}}}}{d{{Bb{AnB`}}}}Dnk{h{mi}}}{{C`{Ah}}}Cb{E`EbEdEf{Ej{{Eh{c}}}}}Cdn{{En{i{d{Bh}}}{{El{{C`{Ah}}}}}}}l}{{{d{Dh}}}Cj}00````{{{d{{Fb{F`}}}}{d{Dh}}}{{C`{{Fd{ceg}}}}}ln{E`EbEfEdFfFh}}`{ce{}{}}0000000{{}b}0``{{{d{Af}}{d{Af}}}{{Bl{Aj}}}}{{{d{{Al{c}}}}{d{e}}{d{{Fj{g}}}}}{{Cf{{Fn{{Fl{gc}}}}}}}CbCd{jG`}}{{{d{Af}}c}CfGb}{{{d{c}}}e{}{}}0000{{{d{c}}}Gd{}}0{c{{Cf{e}}}{}{}}000000000000000{{{d{c}}}Gf{}}0000000{{{d{f{Dd{ce}}}}{d{Db}}}{{Cf{AhDf}}}ln}{{{d{f{h{ce}}}}{d{Db}}}{{Cf{AhDf}}}ln}{{{d{fAb}}{d{Db}}}{{Cf{AhDf}}}}{{{d{fAd}}{d{Db}}}{{Cf{AhDf}}}}{{{d{f{Dd{ce}}}}{d{fDb}}}{{Cf{AhDf}}}ln}{{{d{f{h{ce}}}}{d{fDb}}}{{Cf{AhDf}}}ln}{{{d{fAb}}{d{fDb}}}{{Cf{AhDf}}}}{{{d{fAd}}{d{fDb}}}{{Cf{AhDf}}}}{ce{}{}}0000000```````````","D":"E`","p":[[8,"Command",187],[1,"reference"],[0,"mut"],[6,"Commands",0],[10,"Clone",188],[10,"Subcommand",189],[10,"Args",189],[6,"CoinSelectionAlgo",0],[6,"AddressCmd",0],[6,"TxOutCmd",0],[6,"Keychain",0],[1,"unit"],[6,"Ordering",190],[8,"KeychainTxGraph",0],[6,"DescriptorPublicKey",191],[6,"DescriptorSecretKey",191],[5,"BTreeMap",192],[5,"Address",193],[1,"u64"],[5,"Transaction",194],[5,"CreateTxChange",0],[6,"Option",195],[1,"tuple"],[8,"Result",196],[10,"Anchor",197],[10,"ChainOracle",198],[6,"Result",199],[10,"Deserializer",200],[1,"bool"],[5,"Formatter",201],[8,"Result",201],[10,"Debug",201],[5,"ArgMatches",202],[5,"Args",0],[5,"Error",203],[1,"str"],[5,"Mutex",204],[5,"Persist",205],[6,"Network",206],[10,"Default",207],[10,"Append",197],[10,"DeserializeOwned",200],[10,"Serialize",208],[8,"KeychainChangeSet",0],[10,"From",209],[17,"Output"],[10,"FnOnce",210],[1,"u8"],[1,"slice"],[5,"Init",0],[10,"Send",211],[10,"Sync",211],[5,"Assets",212],[8,"PlannedUtxo",0],[5,"Vec",213],[10,"CanDerive",212],[10,"Serializer",208],[5,"String",214],[5,"TypeId",215],[15,"List",176],[15,"Address",177],[15,"Send",177],[15,"TxOut",177],[15,"List",183]],"r":[],"b":[[81,"impl-Debug-for-CoinSelectionAlgo"],[82,"impl-Display-for-CoinSelectionAlgo"],[85,"impl-Debug-for-Keychain"],[86,"impl-Display-for-Keychain"]],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAJMAEQAAAAAAAgABAAUABQANAAQAFQAAABcAAQAaAAAAHAABAB8AKQBKAA0AYAAMAG4AAABwAAAAewABAH4AMgCyAAAAtAACAA=="}],\ ["example_electrum",{"t":"ISSFGPFPNNNNNNONNNNNNNNNNNNNNONNNNNNNNNNNNNNNNNNNHNNNNNNNNNNNNNNNNNNNNNOOOOOOOOO","n":["ChangeSet","DB_MAGIC","DB_PATH","ElectrumArgs","ElectrumCommands","Scan","ScanOptions","Sync","augment_args","augment_args","augment_args_for_update","augment_args_for_update","augment_subcommands","augment_subcommands_for_update","batch_size","borrow","borrow","borrow","borrow_mut","borrow_mut","borrow_mut","client","clone","clone","clone","clone_into","clone_into","clone_into","electrum_args","electrum_url","eq","fmt","fmt","fmt","from","from","from","from_arg_matches","from_arg_matches","from_arg_matches","from_arg_matches_mut","from_arg_matches_mut","from_arg_matches_mut","has_subcommand","into","into","into","into_app","into_app_for_update","main","to_owned","to_owned","to_owned","try_from","try_from","try_from","try_into","try_into","try_into","type_id","type_id","type_id","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches","update_from_arg_matches_mut","update_from_arg_matches_mut","update_from_arg_matches_mut","vzip","vzip","vzip","all_spks","electrum_args","electrum_args","scan_options","scan_options","stop_gap","unconfirmed","unused_spks","utxos"],"q":[[0,"example_electrum"],[71,"example_electrum::ElectrumCommands"],[80,"clap::builder::command"],[81,"bitcoin::network"],[82,"electrum_client::client"],[83,"anyhow"],[84,"core::fmt"],[85,"clap::parser::matches::arg_matches"],[86,"clap::error"],[87,"core::result"],[88,"core::any"]],"i":[0,0,0,0,0,8,0,8,4,9,4,9,8,8,9,8,4,9,8,4,9,4,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,8,4,9,9,9,0,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,8,4,9,19,20,19,20,19,20,19,19,19],"f":"````````{bb}00000`{{{d{c}}}{{d{e}}}{}{}}00{{{d{fc}}}{{d{fe}}}{}{}}00{{{d{h}}j}{{n{l}}}}{{{d{A`}}}A`}{{{d{h}}}h}{{{d{Ab}}}Ab}{{{d{c}}{d{fe}}}Ad{}{}}00{{{d{A`}}}h}`{{{d{Ab}}{d{Ab}}}Af}{{{d{A`}}{d{fAh}}}Aj}{{{d{h}}{d{fAh}}}Aj}{{{d{Ab}}{d{fAh}}}Aj}{cc{}}00{{{d{Al}}}{{B`{A`An}}}}{{{d{Al}}}{{B`{hAn}}}}{{{d{Al}}}{{B`{AbAn}}}}{{{d{fAl}}}{{B`{A`An}}}}{{{d{fAl}}}{{B`{hAn}}}}{{{d{fAl}}}{{B`{AbAn}}}}{{{d{Bb}}}Af}{ce{}{}}00{{}b}0{{}{{n{Ad}}}}{{{d{c}}}e{}{}}00{c{{B`{e}}}{}{}}00000{{{d{c}}}Bd{}}00{{{d{fA`}}{d{Al}}}{{B`{AdAn}}}}{{{d{fh}}{d{Al}}}{{B`{AdAn}}}}{{{d{fAb}}{d{Al}}}{{B`{AdAn}}}}{{{d{fA`}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fh}}{d{fAl}}}{{B`{AdAn}}}}{{{d{fAb}}{d{fAl}}}{{B`{AdAn}}}};;;`````````","D":"An","p":[[8,"Command",80],[1,"reference"],[0,"mut"],[5,"ElectrumArgs",0],[6,"Network",81],[5,"Client",82],[8,"Result",83],[6,"ElectrumCommands",0],[5,"ScanOptions",0],[1,"unit"],[1,"bool"],[5,"Formatter",84],[8,"Result",84],[5,"ArgMatches",85],[5,"Error",86],[6,"Result",87],[1,"str"],[5,"TypeId",88],[15,"Sync",71],[15,"Scan",71]],"r":[],"b":[],"c":"OjAAAAAAAAA=","e":"OzAAAAEAAEEACAAAAAUABwAAAAkABQAQAA0AHwADACYABgAwABcASQADAA=="}],\ diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js index cf0ce0c1be..e6cdf28ae9 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/search.desc/bdk_chain/bdk_chain-desc-0-.js @@ -1 +1 @@ -searchState.loadedDescShard("bdk_chain", 0, "This crate is a collection of core structures for Bitcoin …\nTrait that “anchors” blockchain data to a specific …\nAn Anchor that can be constructed from a given block, …\nTrait that makes an object appendable.\nMaximum BIP32 derivation index.\nA reference to a block in the canonical chain.\nHow many confirmations are needed f or a coinbase output …\nRepresents a service that tracks the blockchain.\nRepresents the observed position of some chain data.\nAn Anchor implementation that also records the exact …\nBlock height and timestamp at which a transaction is …\nAn Anchor implementation that also records the exact …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nA trait to extend the functionality of a miniscript …\nRepresents the ID of a descriptor, defined as the sha256 …\nError type.\nA TxOut with as much data as we can retrieve about it\nAn iterator for derived script pubkeys.\nAn index storing TxOuts that have a script pubkey that …\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nThe script pubkeys that are being tracked by the index.\nReturns the BlockId that the associated blockchain data is …\nThe anchor block.\nThe anchor block.\nAppend another object of the same type onto self.\nReturns a reference to the inner hash (sha256, sh256d …\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\nThe exact confirmation height of the transaction.\nThe confirmation height of the transaction being anchored.\nGet the upper bound of the chain data’s confirmation …\nGet the upper bound of the chain data’s confirmation …\nDetermines the upper bound of the confirmation height.\nThe confirmation time of the transaction being anchored.\nGet a reference to the internal descriptor.\nReturns the descriptor id, calculated as the sha256 of the …\nReturns the minimum value (in satoshis) at which an output …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct the anchor from a given block, block height and …\nCreates this wrapper type from the inner hash type.\nGet the best chain’s chain tip.\nThe hash of the block.\nThe height of the block.\nReturns the index associated with the script pubkey.\nContains the IndexedTxGraph and associated types. Refer to …\nAdds a script pubkey to scan for. Returns false and does …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether block of BlockId exists as an ancestor …\nReturns whether ChainPosition is confirmed or not.\nReturns whether ConfirmationTime is the confirmed variant.\nWhether the utxo is/was/will be spendable with chain tip.\nReturns whether the structure is considered empty.\nWhether the txout is considered mature.\nWhether this output is on a coinbase transaction.\nWhether any of the inputs of this transaction spend a …\nReturns whether the script pubkey at index has been used …\nModule for keychain related structures.\nThe LocalChain is a local implementation of ChainOracle.\nMarks the script pubkey at index as used even though it …\nComputes the net value transfer effect of tx on the script …\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nGet a reference to the set of indexed outpoints.\nIterates over all the outputs with script pubkeys in an …\nScans a transaction’s outputs for matching script …\nScan a single TxOut for a matching script pubkey and …\nComputes the total value transfer effect tx has on the …\nThe txid and chain position of the transaction (if any) …\nReturns the script that has been inserted at the index.\nHelper types for spk-based blockchain clients.\nReturns the inner hash (sha256, sh256d etc.).\nModule for structures that store and traverse transactions.\nReturns the txout and script pubkey index of the TxOut at …\nThe TxOut.\nIterate over all known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nConstruct an unconfirmed variant using the given last_seen …\nUndoes the effect of mark_used. Returns whether the index …\nIterates over all unused script pubkeys in an index range.\nConfirmation height.\nThe last-seen timestamp in unix seconds.\nConfirmation time in unix seconds.\nRepresents changes to an IndexedTxGraph.\nThe resultant “changeset” when new transaction data is …\nThe IndexedTxGraph combines a TxGraph and an Indexer …\nUtilities for indexing transaction data.\nBatch insert all transactions of the given block of height.\nBatch insert all transactions of the given block of height…\nApply changeset to itself.\nApplies the ChangeSet to the IndexedTxGraph.\nApply an update directly.\nBatch insert transactions, filtering out those that are …\nBatch insert unconfirmed transactions, filtering out those …\nBatch insert unconfirmed transactions.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet a reference of the internal transaction graph.\nTxGraph changeset.\nTransaction index.\nScans a transaction for relevant outpoints, which are …\nScan and index the given outpoint and txout.\nIndexer changeset.\nDetermines the ChangeSet between self and an empty Indexer.\nDetermines the ChangeSet between self and an empty …\nInsert an anchor for a given transaction.\nInsert a unix timestamp of when a transaction is seen in …\nInsert and index a transaction into the graph.\nInsert a floating txout of given outpoint.\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether the transaction should be included in …\nConstruct a new IndexedTxGraph with a given index.\nBalance, differentiated into various categories.\nRepresents updates to the derivation index of a …\nKeychainTxOutIndex controls how script pubkeys are …\nGet unbounded spk iterators for all keychains.\nAppend another ChangeSet into self.\nApplies the derivation changeset to the KeychainTxOutIndex…\nConfirmed and immediately spendable balance\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGets the descriptor associated with the keychain. Returns …\nAll coinbase outputs not yet matured\nReturns the keychain and keychain index associated with …\nReturn a reference to the internal SpkTxOutIndex.\nInsert a descriptor with a keychain associated to it.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the changeset are empty.\nReturns whether the spk under the keychain’s index has …\nIterate over all OutPoints that have TxOuts with script …\nIterate over OutPoints that have script pubkeys derived …\nReturn the map of the keychain to descriptors.\nContains the keychains that have been added and their …\nContains for each descriptor_id the last revealed index of …\nGet the last derivation index revealed for keychain. …\nGet the last derivation index that is revealed for each …\nReturns the highest derivation index of the keychain where …\nReturns the highest derivation index of each keychain that …\nGet the lookahead setting.\nStore lookahead scripts until target_index (inclusive).\nMarks the script pubkey at index as used even though the …\nComputes the net value that this transaction gives to the …\nConstruct a KeychainTxOutIndex with the given lookahead.\nGet the next derivation index for keychain. The next index …\nGets the next unused script pubkey in the keychain. I.e., …\nGet the set of indexed outpoints, corresponding to tracked …\nAttempts to reveal the next script pubkey for keychain.\nReveals script pubkeys of the keychain’s descriptor up …\nConvenience method to call Self::reveal_to_target on …\nIterate over revealed spks of the given keychain.\nIterate over revealed spks of keychains in range\nComputes the total value transfer effect tx has on the …\nReturn the script that exists under the given keychain’s …\nGet the whole balance visible to the wallet.\nUnconfirmed UTXOs generated by a wallet tx\nGet sum of trusted_pending and confirmed coins.\nReturn the TxOut of outpoint if it has been indexed, and …\nIterate over known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nGet an unbounded spk iterator over a given keychain. …\nUndoes the effect of mark_used. Returns whether the index …\nUnconfirmed UTXOs received from an external wallet\nIterate over revealed, but unused, spks of the given …\nIterate over revealed, but unused, spks of all keychains.\nRepresents a failure when trying to insert/remove a …\nThe error type for LocalChain::apply_header_connected_to.\nOccurs when the update cannot connect with the original …\nOccurs when an update does not have a common checkpoint …\nThe ChangeSet represents changes to LocalChain.\nA LocalChain checkpoint is used to find the agreement …\nIterates over checkpoints backwards.\nOccurs when connected_to block conflicts with either the …\nThis is a local implementation of ChainOracle.\nAn error which occurs when a LocalChain is constructed …\nApply the given changeset.\nUpdate the chain with a given Header connecting it with …\nUpdate the chain with a given Header at height which you …\nApplies the given update to the chain.\nGet the BlockId of the checkpoint.\nRemoves blocks from (and inclusive of) the given block_id.\nExtends the checkpoint linked list by a iterator of block …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a checkpoint from a list of BlockIds in …\nConstructs a LocalChain from a BTreeMap of height to …\nConstruct a LocalChain from an initial changeset.\nConstruct LocalChain from genesis hash.\nConstruct a checkpoint from the given header and block …\nConstruct a LocalChain from a given checkpoint tip.\nGet the genesis hash.\nGet checkpoint at height.\nGet checkpoint at given height (if it exists).\nGet the block hash of the checkpoint.\nGet the height of the checkpoint.\nThe checkpoint’s height.\nDerives an initial ChangeSet, meaning that it can be …\nInserts block_id at its height within the chain.\nInsert a BlockId.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate from this checkpoint in descending height.\nIterate over checkpoints in descending height order.\nConstruct a new base block at the front of a linked list.\nThe original checkpoint’s block hash which cannot be …\nGet the previous checkpoint in the chain\nPuts another checkpoint onto the linked list representing …\nIterate checkpoints over a height range.\nIterate checkpoints over a height range.\nGet the highest checkpoint.\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client full scan.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client sync.\nChain on additional OutPoints that will be synced against.\nChain on additional Scripts that will be synced against.\nChain on additional Scripts that will be synced against.\nA checkpoint for the current chain LocalChain::tip. The …\nA checkpoint for the current LocalChain::tip. The full …\nChain on additional Txids that will be synced against.\nThe update to apply to the receiving LocalChain.\nThe update to apply to the receiving TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new SyncRequest from a given cp tip.\nConstruct a new FullScanRequest from a given chain_tip.\nConstruct a new FullScanRequest from a given chain_tip and …\nThe update to apply to the receiving TxGraph.\nThe update to apply to the receiving LocalChain.\nAdd a closure that will be called for OutPoints previously …\nAdd a closure that will be called for Scripts previously …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for Txids previously …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nLast active indices for the corresponding keychains (K).\nTransactions with these outpoints or spent from these …\nPopulate the request with revealed script pubkeys from …\nSet the OutPoints that will be synced against.\nSet the Scripts that will be synced against.\nSet the Scripts for a given keychain.\nSet the Txids that will be synced against.\nTransactions that spend from or to these indexed script …\nIterators of script pubkeys indexed by the keychain index.\nTransactions with these txids.\nErrors returned by TxGraph::calculate_fee.\nA transaction that is included in the chain, or is still …\nThe ChangeSet represents changes to a TxGraph.\nMissing TxOut for one or more of the inputs of the tx\nWhen the transaction is invalid according to the graph it …\nAn iterator that traverses ancestors of a given root …\nAn iterator that traverses transaction descendants.\nA graph of transactions and spends.\nA transaction node in the TxGraph.\nGet all transaction anchors known by TxGraph.\nIterate over all tx outputs known by TxGraph.\nIterates over the heights of that the new transaction …\nThe blocks that the transaction is “anchored” in.\nAdded anchors.\nApplies ChangeSet to TxGraph.\nExtends this graph with another so that self becomes the …\nGet the total balance of outpoints that are in chain of …\nBatch insert unconfirmed transactions.\nCalculates the fee of a given transaction. Returns …\nHow the transaction is observed as (confirmed or …\nGiven a transaction, return an iterator of txids that …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nIterate over floating txouts known by TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nIterate over all full transactions in the graph.\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nGet a transaction by txid. This only returns Some for full …\nGet a transaction node by txid. This only returns Some for …\nObtains a single tx output (if any) at the specified …\nDetermines the ChangeSet between self and an empty TxGraph.\nInserts the given anchor into TxGraph.\nInserts the given seen_at for txid into TxGraph.\nInserts the given transaction into TxGraph.\nInserts the given TxOut at OutPoint.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nWhether the graph has any transactions or outputs in it.\nAdded last-seen unix timestamps of transactions.\nThe last-seen unix timestamp of the transaction as …\nList graph transactions that are in chain with chain_tip.\nTransform the TxGraph to have Anchors of another type.\nTransform the ChangeSet to have Anchors of another type.\nConstruct a new TxGraph from a list of transactions.\nThe transactions spending from this output.\nGet the total balance of outpoints that are in chain of …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nList graph transactions that are in chain with chain_tip.\nA partial or full representation of the transaction.\nThe transaction node (as part of the graph).\nReturns known outputs of a given txid.\nIterates over the transactions spending from txid.\nTxid of the transaction.\nIterates over all outpoints contained within ChangeSet.\nAdded txouts.\nAdded transactions.\nUpdate the last seen time for all unconfirmed transactions.\nCreates an iterator that filters and maps ancestor …\nCreates an iterator that both filters and maps conflicting …\nCreates an iterator that filters and maps descendants from …") \ No newline at end of file +searchState.loadedDescShard("bdk_chain", 0, "This crate is a collection of core structures for Bitcoin …\nTrait that “anchors” blockchain data to a specific …\nAn Anchor that can be constructed from a given block, …\nTrait that makes an object appendable.\nMaximum BIP32 derivation index.\nA reference to a block in the canonical chain.\nHow many confirmations are needed f or a coinbase output …\nRepresents a service that tracks the blockchain.\nRepresents the observed position of some chain data.\nAn Anchor implementation that also records the exact …\nBlock height and timestamp at which a transaction is …\nAn Anchor implementation that also records the exact …\nThe chain data is seen as confirmed, and in anchored by A.\nThe transaction is confirmed\nA trait to extend the functionality of a miniscript …\nRepresents the ID of a descriptor, defined as the sha256 …\nError type.\nA TxOut with as much data as we can retrieve about it\nAn iterator for derived script pubkeys.\nAn index storing TxOuts that have a script pubkey that …\nThe chain data is not confirmed and last seen in the …\nThe transaction is unconfirmed\nThe script pubkeys that are being tracked by the index.\nReturns the BlockId that the associated blockchain data is …\nThe anchor block.\nThe anchor block.\nAppend another object of the same type onto self.\nReturns a reference to the inner hash (sha256, sh256d …\nThe position of the transaction in outpoint in the overall …\nMaps a ChainPosition<&A> into a ChainPosition<A> by …\nThe exact confirmation height of the transaction.\nThe confirmation height of the transaction being anchored.\nGet the upper bound of the chain data’s confirmation …\nGet the upper bound of the chain data’s confirmation …\nDetermines the upper bound of the confirmation height.\nThe confirmation time of the transaction being anchored.\nGet a reference to the internal descriptor.\nReturns the descriptor id, calculated as the sha256 of the …\nReturns the minimum value (in satoshis) at which an output …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct the anchor from a given block, block height and …\nCreates this wrapper type from the inner hash type.\nGet the best chain’s chain tip.\nThe hash of the block.\nThe height of the block.\nReturns the index associated with the script pubkey.\nContains the IndexedTxGraph and associated types. Refer to …\nAdds a script pubkey to scan for. Returns false and does …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether block of BlockId exists as an ancestor …\nReturns whether ChainPosition is confirmed or not.\nReturns whether ConfirmationTime is the confirmed variant.\nWhether the utxo is/was/will be spendable with chain tip.\nReturns whether the structure is considered empty.\nWhether the txout is considered mature.\nWhether this output is on a coinbase transaction.\nWhether any of the inputs of this transaction spend a …\nReturns whether the script pubkey at index has been used …\nModule for keychain related structures.\nThe LocalChain is a local implementation of ChainOracle.\nMarks the script pubkey at index as used even though it …\nComputes the net value transfer effect of tx on the script …\nCreate a new script pubkey iterator from descriptor.\nCreate a new script pubkey iterator from descriptor and a …\nThe location of the TxOut.\nGet a reference to the set of indexed outpoints.\nIterates over all the outputs with script pubkeys in an …\nScans a transaction’s outputs for matching script …\nScan a single TxOut for a matching script pubkey and …\nComputes the total value transfer effect tx has on the …\nThe txid and chain position of the transaction (if any) …\nReturns the script that has been inserted at the index.\nHelper types for spk-based blockchain clients.\nReturns the inner hash (sha256, sh256d etc.).\nModule for structures that store and traverse transactions.\nReturns the txout and script pubkey index of the TxOut at …\nThe TxOut.\nIterate over all known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nConstruct an unconfirmed variant using the given last_seen …\nUndoes the effect of mark_used. Returns whether the index …\nIterates over all unused script pubkeys in an index range.\nConfirmation height.\nThe last-seen timestamp in unix seconds.\nConfirmation time in unix seconds.\nRepresents changes to an IndexedTxGraph.\nThe resultant “changeset” when new transaction data is …\nThe IndexedTxGraph combines a TxGraph and an Indexer …\nUtilities for indexing transaction data.\nBatch insert all transactions of the given block of height.\nBatch insert all transactions of the given block of height…\nApply changeset to itself.\nApplies the ChangeSet to the IndexedTxGraph.\nApply an update directly.\nBatch insert transactions, filtering out those that are …\nBatch insert unconfirmed transactions, filtering out those …\nBatch insert unconfirmed transactions.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGet a reference of the internal transaction graph.\nTxGraph changeset.\nTransaction index.\nScans a transaction for relevant outpoints, which are …\nScan and index the given outpoint and txout.\nIndexer changeset.\nDetermines the ChangeSet between self and an empty Indexer.\nDetermines the ChangeSet between self and an empty …\nInsert an anchor for a given transaction.\nInsert a unix timestamp of when a transaction is seen in …\nInsert and index a transaction into the graph.\nInsert a floating txout of given outpoint.\nCalls U::from(self).\nCalls U::from(self).\nDetermines whether the transaction should be included in …\nConstruct a new IndexedTxGraph with a given index.\nBalance, differentiated into various categories.\nRepresents updates to the derivation index of a …\nThe default lookahead for a KeychainTxOutIndex\nThe descriptor has already been assigned to a keychain so …\nA tuple of keychain index and T representing the indexed …\nError returned from KeychainTxOutIndex::insert_descriptor\nThe keychain is already assigned to a descriptor so you can…\nA tuple of keychain K, derivation index (u32) and a T …\nKeychainTxOutIndex controls how script pubkeys are …\nThe keychain doesn’t exist. Most likley hasn’t been …\nGet unbounded spk iterators for all keychains.\nMerge another ChangeSet<K> into self.\nApplies the ChangeSet<K> to the KeychainTxOutIndex<K>\nConfirmed and immediately spendable balance\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nGets the descriptor associated with the keychain. Returns …\nAll coinbase outputs not yet matured\nReturns the keychain and keychain index associated with …\nReturn a reference to the internal SpkTxOutIndex.\nInsert a descriptor with a keychain associated to it.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nReturns whether the changeset are empty.\nReturns whether the spk under the keychain’s index has …\nIterate over all OutPoints that have TxOuts with script …\nIterate over OutPoints that have script pubkeys derived …\nReturn all keychains and their corresponding descriptors.\nContains the keychains that have been added and their …\nContains for each descriptor_id the last revealed index of …\nGet the last derivation index revealed for keychain. …\nGet the last derivation index that is revealed for each …\nReturns the highest derivation index of the keychain where …\nReturns the highest derivation index of each keychain that …\nGet the lookahead setting.\nStore lookahead scripts until target_index (inclusive).\nMarks the script pubkey at index as used even though the …\nComputes the net value that this transaction gives to the …\nConstruct a KeychainTxOutIndex with the given lookahead.\nGet the next derivation index for keychain. The next index …\nGets the next unused script pubkey in the keychain. I.e., …\nGet the set of indexed outpoints, corresponding to tracked …\nAttempts to reveal the next script pubkey for keychain.\nReveals script pubkeys of the keychain’s descriptor up …\nConvenience method to call Self::reveal_to_target on …\nIterate over revealed spks of the given keychain with …\nIterate over revealed spks of keychains in range\nComputes the total value transfer effect tx has on the …\nReturn the script that exists under the given keychain’s …\nGet the whole balance visible to the wallet.\nUnconfirmed UTXOs generated by a wallet tx\nGet sum of trusted_pending and confirmed coins.\nReturn the TxOut of outpoint if it has been indexed, and …\nIterate over known txouts that spend to tracked script …\nFinds all txouts on a transaction that has previously been …\nGet an unbounded spk iterator over a given keychain. …\nUndoes the effect of mark_used. Returns whether the index …\nUnconfirmed UTXOs received from an external wallet\nIterate over revealed, but unused, spks of the given …\nIterate over revealed, but unused, spks of all keychains.\nThe descriptor you have attempted to reassign\nThe keychain that the descriptor is already assigned to\nThe descriptor that the keychain is already assigned to\nThe keychain that you have attempted to reassign\nRepresents a failure when trying to insert/remove a …\nThe error type for LocalChain::apply_header_connected_to.\nOccurs when the update cannot connect with the original …\nOccurs when an update does not have a common checkpoint …\nThe ChangeSet represents changes to LocalChain.\nA LocalChain checkpoint is used to find the agreement …\nIterates over checkpoints backwards.\nOccurs when connected_to block conflicts with either the …\nThis is a local implementation of ChainOracle.\nAn error which occurs when a LocalChain is constructed …\nApply the given changeset.\nUpdate the chain with a given Header connecting it with …\nUpdate the chain with a given Header at height which you …\nApplies the given update to the chain.\nGet the BlockId of the checkpoint.\nRemoves blocks from (and inclusive of) the given block_id.\nExtends the checkpoint linked list by a iterator of block …\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a checkpoint from a list of BlockIds in …\nConstructs a LocalChain from a BTreeMap of height to …\nConstruct a LocalChain from an initial changeset.\nConstruct LocalChain from genesis hash.\nConstruct a checkpoint from the given header and block …\nConstruct a LocalChain from a given checkpoint tip.\nGet the genesis hash.\nGet checkpoint at height.\nGet checkpoint at given height (if it exists).\nGet the block hash of the checkpoint.\nGet the height of the checkpoint.\nThe checkpoint’s height.\nDerives an initial ChangeSet, meaning that it can be …\nInserts block_id at its height within the chain.\nInsert a BlockId.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nIterate from this checkpoint in descending height.\nIterate over checkpoints in descending height order.\nConstruct a new base block at the front of a linked list.\nThe original checkpoint’s block hash which cannot be …\nGet the previous checkpoint in the chain\nPuts another checkpoint onto the linked list representing …\nIterate checkpoints over a height range.\nIterate checkpoints over a height range.\nGet the highest checkpoint.\nThe suggested checkpoint to include to connect the two …\nThe attempted update to the original_block hash.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client full scan.\nData required to perform a spk-based blockchain client …\nData returned from a spk-based blockchain client sync.\nChain on additional OutPoints that will be synced against.\nChain on additional Scripts that will be synced against.\nChain on additional Scripts that will be synced against.\nA checkpoint for the current chain LocalChain::tip. The …\nA checkpoint for the current LocalChain::tip. The full …\nChain on additional Txids that will be synced against.\nThe update to apply to the receiving LocalChain.\nThe update to apply to the receiving TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nConstruct a new SyncRequest from a given cp tip.\nConstruct a new FullScanRequest from a given chain_tip.\nConstruct a new FullScanRequest from a given chain_tip and …\nThe update to apply to the receiving TxGraph.\nThe update to apply to the receiving LocalChain.\nAdd a closure that will be called for OutPoints previously …\nAdd a closure that will be called for Scripts previously …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for every Script …\nAdd a closure that will be called for Txids previously …\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nLast active indices for the corresponding keychains (K).\nTransactions with these outpoints or spent from these …\nPopulate the request with revealed script pubkeys from …\nSet the OutPoints that will be synced against.\nSet the Scripts that will be synced against.\nSet the Scripts for a given keychain.\nSet the Txids that will be synced against.\nTransactions that spend from or to these indexed script …\nIterators of script pubkeys indexed by the keychain index.\nTransactions with these txids.\nErrors returned by TxGraph::calculate_fee.\nA transaction that is included in the chain, or is still …\nThe ChangeSet represents changes to a TxGraph.\nMissing TxOut for one or more of the inputs of the tx\nWhen the transaction is invalid according to the graph it …\nAn iterator that traverses ancestors of a given root …\nAn iterator that traverses transaction descendants.\nA graph of transactions and spends.\nA transaction node in the TxGraph.\nGet all transaction anchors known by TxGraph.\nIterate over all tx outputs known by TxGraph.\nIterates over the heights of that the new transaction …\nThe blocks that the transaction is “anchored” in.\nAdded anchors.\nApplies ChangeSet to TxGraph.\nExtends this graph with another so that self becomes the …\nGet the total balance of outpoints that are in chain of …\nBatch insert unconfirmed transactions.\nCalculates the fee of a given transaction. Returns …\nHow the transaction is observed as (confirmed or …\nGiven a transaction, return an iterator of txids that …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nIterate over floating txouts known by TxGraph.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nReturns the argument unchanged.\nIterate over all full transactions in the graph.\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nGet a transaction by txid. This only returns Some for full …\nGet a transaction node by txid. This only returns Some for …\nObtains a single tx output (if any) at the specified …\nDetermines the ChangeSet between self and an empty TxGraph.\nInserts the given anchor into TxGraph.\nInserts the given seen_at for txid into TxGraph.\nInserts the given transaction into TxGraph.\nInserts the given TxOut at OutPoint.\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nCalls U::from(self).\nWhether the graph has any transactions or outputs in it.\nAdded last-seen unix timestamps of transactions.\nThe last-seen unix timestamp of the transaction as …\nList graph transactions that are in chain with chain_tip.\nTransform the TxGraph to have Anchors of another type.\nTransform the ChangeSet to have Anchors of another type.\nConstruct a new TxGraph from a list of transactions.\nThe transactions spending from this output.\nGet the total balance of outpoints that are in chain of …\nGet a filtered list of outputs from the given outpoints …\nGet a filtered list of unspent outputs (UTXOs) from the …\nGet the position of the transaction in chain with tip …\nGet the txid of the spending transaction and where the …\nList graph transactions that are in chain with chain_tip.\nA partial or full representation of the transaction.\nThe transaction node (as part of the graph).\nReturns known outputs of a given txid.\nIterates over the transactions spending from txid.\nTxid of the transaction.\nIterates over all outpoints contained within ChangeSet.\nAdded txouts.\nAdded transactions.\nUpdate the last seen time for all unconfirmed transactions.\nCreates an iterator that filters and maps ancestor …\nCreates an iterator that both filters and maps conflicting …\nCreates an iterator that filters and maps descendants from …") \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html index 7bc85dbfb0..06f5d9d5e4 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain.rs.html @@ -71,6 +71,11 @@ 71 72 73 +74 +75 +76 +77 +78

      //! Module for keychain related structures.
       //!
       //! A keychain here is a set of application-defined indexes for a miniscript descriptor where we can
      @@ -85,7 +90,7 @@
       
       #[cfg(feature = "miniscript")]
       mod txout_index;
      -use bitcoin::Amount;
      +use bitcoin::{Amount, ScriptBuf};
       #[cfg(feature = "miniscript")]
       pub use txout_index::*;
       
      @@ -122,6 +127,11 @@
           }
       }
       
      +/// A tuple of keychain index and `T` representing the indexed value.
      +pub type Indexed<T> = (u32, T);
      +/// A tuple of keychain `K`, derivation index (`u32`) and a `T` associated with them.
      +pub type KeychainIndexed<K, T> = ((K, u32), T);
      +
       impl core::fmt::Display for Balance {
           fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
               write!(
      diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html
      index 57bbfb1acc..5b2880638f 100644
      --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html
      +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/keychain/txout_index.rs.html
      @@ -937,38 +937,6 @@
       937
       938
       939
      -940
      -941
      -942
      -943
      -944
      -945
      -946
      -947
      -948
      -949
      -950
      -951
      -952
      -953
      -954
      -955
      -956
      -957
      -958
      -959
      -960
      -961
      -962
      -963
      -964
      -965
      -966
      -967
      -968
      -969
      -970
      -971
       
      use crate::{
           collections::*,
           indexed_tx_graph::Indexer,
      @@ -976,88 +944,18 @@
           spk_iter::BIP32_MAX_INDEX,
           DescriptorExt, DescriptorId, SpkIterator, SpkTxOutIndex,
       };
      -use bitcoin::{hashes::Hash, Amount, OutPoint, Script, SignedAmount, Transaction, TxOut, Txid};
      +use alloc::{borrow::ToOwned, vec::Vec};
      +use bitcoin::{Amount, OutPoint, Script, SignedAmount, Transaction, TxOut, Txid};
       use core::{
           fmt::Debug,
           ops::{Bound, RangeBounds},
       };
       
      +use super::*;
       use crate::Append;
       
      -/// Represents updates to the derivation index of a [`KeychainTxOutIndex`].
      -/// It maps each keychain `K` to a descriptor and its last revealed index.
      -///
      -/// It can be applied to [`KeychainTxOutIndex`] with [`apply_changeset`]. [`ChangeSet] are
      -/// monotone in that they will never decrease the revealed derivation index.
      -///
      -/// [`KeychainTxOutIndex`]: crate::keychain::KeychainTxOutIndex
      -/// [`apply_changeset`]: crate::keychain::KeychainTxOutIndex::apply_changeset
      -#[derive(Clone, Debug, PartialEq)]
      -#[cfg_attr(
      -    feature = "serde",
      -    derive(serde::Deserialize, serde::Serialize),
      -    serde(
      -        crate = "serde_crate",
      -        bound(
      -            deserialize = "K: Ord + serde::Deserialize<'de>",
      -            serialize = "K: Ord + serde::Serialize"
      -        )
      -    )
      -)]
      -#[must_use]
      -pub struct ChangeSet<K> {
      -    /// Contains the keychains that have been added and their respective descriptor
      -    pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
      -    /// Contains for each descriptor_id the last revealed index of derivation
      -    pub last_revealed: BTreeMap<DescriptorId, u32>,
      -}
      -
      -impl<K: Ord> Append for ChangeSet<K> {
      -    /// Append another [`ChangeSet`] into self.
      -    ///
      -    /// For each keychain in `keychains_added` in the given [`ChangeSet`]:
      -    /// If the keychain already exist with a different descriptor, we overwrite the old descriptor.
      -    ///
      -    /// For each `last_revealed` in the given [`ChangeSet`]:
      -    /// If the keychain already exists, increase the index when the other's index > self's index.
      -    fn append(&mut self, other: Self) {
      -        // We use `extend` instead of `BTreeMap::append` due to performance issues with `append`.
      -        // Refer to https://github.com/rust-lang/rust/issues/34666#issuecomment-675658420
      -        self.keychains_added.extend(other.keychains_added);
      -
      -        // for `last_revealed`, entries of `other` will take precedence ONLY if it is greater than
      -        // what was originally in `self`.
      -        for (desc_id, index) in other.last_revealed {
      -            use crate::collections::btree_map::Entry;
      -            match self.last_revealed.entry(desc_id) {
      -                Entry::Vacant(entry) => {
      -                    entry.insert(index);
      -                }
      -                Entry::Occupied(mut entry) => {
      -                    if *entry.get() < index {
      -                        entry.insert(index);
      -                    }
      -                }
      -            }
      -        }
      -    }
      -
      -    /// Returns whether the changeset are empty.
      -    fn is_empty(&self) -> bool {
      -        self.last_revealed.is_empty() && self.keychains_added.is_empty()
      -    }
      -}
      -
      -impl<K> Default for ChangeSet<K> {
      -    fn default() -> Self {
      -        Self {
      -            last_revealed: BTreeMap::default(),
      -            keychains_added: BTreeMap::default(),
      -        }
      -    }
      -}
      -
      -const DEFAULT_LOOKAHEAD: u32 = 25;
      +/// The default lookahead for a [`KeychainTxOutIndex`]
      +pub const DEFAULT_LOOKAHEAD: u32 = 25;
       
       /// [`KeychainTxOutIndex`] controls how script pubkeys are revealed for multiple keychains, and
       /// indexes [`TxOut`]s with them.
      @@ -1066,6 +964,14 @@
       /// are identified using the `K` generic. Script pubkeys are identified by the keychain that they
       /// are derived from `K`, as well as the derivation index `u32`.
       ///
      +/// There is a strict 1-to-1 relationship between descriptors and keychains. Each keychain has one
      +/// and only one descriptor and each descriptor has one and only one keychain. The
      +/// [`insert_descriptor`] method will return an error if you try and violate this invariant. This
      +/// rule is a proxy for a stronger rule: no two descriptors should produce the same script pubkey.
      +/// Having two descriptors produce the same script pubkey should cause whichever keychain derives
      +/// the script pubkey first to be the effective owner of it but you should not rely on this
      +/// behaviour. ⚠ It is up you, the developer, not to violate this invariant.
      +///
       /// # Revealed script pubkeys
       ///
       /// Tracking how script pubkeys are revealed is useful for collecting chain data. For example, if
      @@ -1083,23 +989,25 @@
       /// above the last revealed index. These additionally-derived script pubkeys are called the
       /// lookahead.
       ///
      -/// The [`KeychainTxOutIndex`] is constructed with the `lookahead` and cannot be altered. The
      -/// default `lookahead` count is 1000. Use [`new`] to set a custom `lookahead`.
      +/// The [`KeychainTxOutIndex`] is constructed with the `lookahead` and cannot be altered. See
      +/// [`DEFAULT_LOOKAHEAD`] for the value used in the `Default` implementation. Use [`new`] to set a
      +/// custom `lookahead`.
       ///
       /// # Unbounded script pubkey iterator
       ///
       /// For script-pubkey-based chain sources (such as Electrum/Esplora), an initial scan is best done
       /// by iterating though derived script pubkeys one by one and requesting transaction histories for
       /// each script pubkey. We will stop after x-number of script pubkeys have empty histories. An
      -/// unbounded script pubkey iterator is useful to pass to such a chain source.
      +/// unbounded script pubkey iterator is useful to pass to such a chain source because it doesn't
      +/// require holding a reference to the index.
       ///
       /// Call [`unbounded_spk_iter`] to get an unbounded script pubkey iterator for a given keychain.
       /// Call [`all_unbounded_spk_iters`] to get unbounded script pubkey iterators for all keychains.
       ///
       /// # Change sets
       ///
      -/// Methods that can update the last revealed index or add keychains will return [`super::ChangeSet`] to report
      -/// these changes. This can be persisted for future recovery.
      +/// Methods that can update the last revealed index or add keychains will return [`ChangeSet`] to report
      +/// these changes. This should be persisted for future recovery.
       ///
       /// ## Synopsis
       ///
      @@ -1124,77 +1032,38 @@
       /// # let (external_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/0/*)").unwrap();
       /// # let (internal_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/*)").unwrap();
       /// # let (descriptor_42, _) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/2/*)").unwrap();
      -/// let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor);
      -/// let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor);
      -/// let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42);
      +/// let _ = txout_index.insert_descriptor(MyKeychain::External, external_descriptor)?;
      +/// let _ = txout_index.insert_descriptor(MyKeychain::Internal, internal_descriptor)?;
      +/// let _ = txout_index.insert_descriptor(MyKeychain::MyAppUser { user_id: 42 }, descriptor_42)?;
       ///
       /// let new_spk_for_user = txout_index.reveal_next_spk(&MyKeychain::MyAppUser{ user_id: 42 });
      +/// # Ok::<_, bdk_chain::keychain::InsertDescriptorError<_>>(())
       /// ```
       ///
      -/// # Non-recommend keychain to descriptor assignments
      -///
      -/// A keychain (`K`) is used to identify a descriptor. However, the following keychain to descriptor
      -/// arrangements result in behavior that is harder to reason about and is not recommended.
      -///
      -/// ## Multiple keychains identifying the same descriptor
      -///
      -/// Although a single keychain variant can only identify a single descriptor, multiple keychain
      -/// variants can identify the same descriptor.
      -///
      -/// If multiple keychains identify the same descriptor:
      -/// 1. Methods that take in a keychain (such as [`reveal_next_spk`]) will work normally when any
      -/// keychain (that identifies that descriptor) is passed in.
      -/// 2. Methods that return data which associates with a descriptor (such as [`outpoints`],
      -/// [`txouts`], [`unused_spks`], etc.) the method will return the highest-ranked keychain variant
      -/// that identifies the descriptor. Rank is determined by the [`Ord`] implementation of the keychain
      -/// type.
      -///
      -/// This arrangement is not recommended since some methods will return a single keychain variant
      -/// even though multiple keychain variants identify the same descriptor.
      -///
      -/// ## Reassigning the descriptor of a single keychain
      -///
      -/// Descriptors added to [`KeychainTxOutIndex`] are never removed. However, a keychain that
      -/// identifies a descriptor can be reassigned to identify a different descriptor. This may result in
      -/// a situation where a descriptor has no associated keychain(s), and relevant [`TxOut`]s,
      -/// [`OutPoint`]s and [`Script`]s (of that descriptor) will not be return by [`KeychainTxOutIndex`].
      -/// Therefore, reassigning the descriptor of a single keychain is not recommended.
      -///
       /// [`Ord`]: core::cmp::Ord
       /// [`SpkTxOutIndex`]: crate::spk_txout_index::SpkTxOutIndex
       /// [`Descriptor`]: crate::miniscript::Descriptor
      -/// [`reveal_to_target`]: KeychainTxOutIndex::reveal_to_target
      -/// [`reveal_next_spk`]: KeychainTxOutIndex::reveal_next_spk
      -/// [`revealed_keychain_spks`]: KeychainTxOutIndex::revealed_keychain_spks
      -/// [`revealed_spks`]: KeychainTxOutIndex::revealed_spks
      -/// [`index_tx`]: KeychainTxOutIndex::index_tx
      -/// [`index_txout`]: KeychainTxOutIndex::index_txout
      -/// [`new`]: KeychainTxOutIndex::new
      -/// [`unbounded_spk_iter`]: KeychainTxOutIndex::unbounded_spk_iter
      -/// [`all_unbounded_spk_iters`]: KeychainTxOutIndex::all_unbounded_spk_iters
      -/// [`outpoints`]: KeychainTxOutIndex::outpoints
      -/// [`txouts`]: KeychainTxOutIndex::txouts
      -/// [`unused_spks`]: KeychainTxOutIndex::unused_spks
      +/// [`reveal_to_target`]: Self::reveal_to_target
      +/// [`reveal_next_spk`]: Self::reveal_next_spk
      +/// [`revealed_keychain_spks`]: Self::revealed_keychain_spks
      +/// [`revealed_spks`]: Self::revealed_spks
      +/// [`index_tx`]: Self::index_tx
      +/// [`index_txout`]: Self::index_txout
      +/// [`new`]: Self::new
      +/// [`unbounded_spk_iter`]: Self::unbounded_spk_iter
      +/// [`all_unbounded_spk_iters`]: Self::all_unbounded_spk_iters
      +/// [`outpoints`]: Self::outpoints
      +/// [`txouts`]: Self::txouts
      +/// [`unused_spks`]: Self::unused_spks
      +/// [`insert_descriptor`]: Self::insert_descriptor
       #[derive(Clone, Debug)]
       pub struct KeychainTxOutIndex<K> {
      -    inner: SpkTxOutIndex<(DescriptorId, u32)>,
      -    // keychain -> (descriptor, descriptor id) map
      -    keychains_to_descriptors: BTreeMap<K, (DescriptorId, Descriptor<DescriptorPublicKey>)>,
      -    // descriptor id -> keychain set
      -    // Because different keychains can have the same descriptor, we rank keychains by `Ord` so that
      -    // that the first keychain variant (according to `Ord`) has the highest rank. When associated
      -    // data (such as spks, outpoints) are returned with a keychain, we return the highest-ranked
      -    // keychain with it.
      -    descriptor_ids_to_keychain_set: HashMap<DescriptorId, BTreeSet<K>>,
      -    // descriptor_id -> descriptor map
      -    // This is a "monotone" map, meaning that its size keeps growing, i.e., we never delete
      -    // descriptors from it. This is useful for revealing spks for descriptors that don't have
      -    // keychains associated.
      -    descriptor_ids_to_descriptors: BTreeMap<DescriptorId, Descriptor<DescriptorPublicKey>>,
      -    // last revealed indexes
      -    last_revealed: BTreeMap<DescriptorId, u32>,
      -    // lookahead settings for each keychain
      -    lookahead: u32,
      +    inner: SpkTxOutIndex<(K, u32)>,
      +    keychain_to_descriptor_id: BTreeMap<K, DescriptorId>,
      +    descriptor_id_to_keychain: HashMap<DescriptorId, K>,
      +    descriptors: HashMap<DescriptorId, Descriptor<DescriptorPublicKey>>,
      +    last_revealed: HashMap<DescriptorId, u32>,
      +    lookahead: u32,
       }
       
       impl<K> Default for KeychainTxOutIndex<K> {
      @@ -1204,36 +1073,40 @@
       }
       
       impl<K: Clone + Ord + Debug> Indexer for KeychainTxOutIndex<K> {
      -    type ChangeSet = super::ChangeSet<K>;
      +    type ChangeSet = ChangeSet<K>;
       
           fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet {
      -        match self.inner.scan_txout(outpoint, txout).cloned() {
      -            Some((descriptor_id, index)) => {
      -                // We want to reveal spks for descriptors that aren't tracked by any keychain, and
      -                // so we call reveal with descriptor_id
      -                let (_, changeset) = self.reveal_to_target_with_id(descriptor_id, index)
      -                    .expect("descriptors are added in a monotone manner, there cannot be a descriptor id with no corresponding descriptor");
      -                changeset
      +        let mut changeset = ChangeSet::default();
      +        if let Some((keychain, index)) = self.inner.scan_txout(outpoint, txout).cloned() {
      +            let did = self
      +                .keychain_to_descriptor_id
      +                .get(&keychain)
      +                .expect("invariant");
      +            if self.last_revealed.get(did) < Some(&index) {
      +                self.last_revealed.insert(*did, index);
      +                changeset.last_revealed.insert(*did, index);
      +                self.replenish_inner_index(*did, &keychain, self.lookahead);
                   }
      -            None => super::ChangeSet::default(),
               }
      +        changeset
           }
       
           fn index_tx(&mut self, tx: &bitcoin::Transaction) -> Self::ChangeSet {
      -        let mut changeset = super::ChangeSet::<K>::default();
      +        let mut changeset = ChangeSet::<K>::default();
      +        let txid = tx.compute_txid();
               for (op, txout) in tx.output.iter().enumerate() {
      -            changeset.append(self.index_txout(OutPoint::new(tx.compute_txid(), op as u32), txout));
      +            changeset.append(self.index_txout(OutPoint::new(txid, op as u32), txout));
               }
               changeset
           }
       
           fn initial_changeset(&self) -> Self::ChangeSet {
      -        super::ChangeSet {
      +        ChangeSet {
                   keychains_added: self
                       .keychains()
                       .map(|(k, v)| (k.clone(), v.clone()))
                       .collect(),
      -            last_revealed: self.last_revealed.clone(),
      +            last_revealed: self.last_revealed.clone().into_iter().collect(),
               }
           }
       
      @@ -1260,10 +1133,10 @@
           pub fn new(lookahead: u32) -> Self {
               Self {
                   inner: SpkTxOutIndex::default(),
      -            keychains_to_descriptors: BTreeMap::new(),
      -            descriptor_ids_to_keychain_set: HashMap::new(),
      -            descriptor_ids_to_descriptors: BTreeMap::new(),
      -            last_revealed: BTreeMap::new(),
      +            keychain_to_descriptor_id: Default::default(),
      +            descriptors: Default::default(),
      +            descriptor_id_to_keychain: Default::default(),
      +            last_revealed: Default::default(),
                   lookahead,
               }
           }
      @@ -1271,50 +1144,37 @@
       
       /// Methods that are *re-exposed* from the internal [`SpkTxOutIndex`].
       impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
      -    /// Get the highest-ranked keychain that is currently associated with the given `desc_id`.
      -    fn keychain_of_desc_id(&self, desc_id: &DescriptorId) -> Option<&K> {
      -        let keychains = self.descriptor_ids_to_keychain_set.get(desc_id)?;
      -        keychains.iter().next()
      -    }
      -
           /// Return a reference to the internal [`SpkTxOutIndex`].
           ///
           /// **WARNING:** The internal index will contain lookahead spks. Refer to
           /// [struct-level docs](KeychainTxOutIndex) for more about `lookahead`.
      -    pub fn inner(&self) -> &SpkTxOutIndex<(DescriptorId, u32)> {
      +    pub fn inner(&self) -> &SpkTxOutIndex<(K, u32)> {
               &self.inner
           }
       
           /// Get the set of indexed outpoints, corresponding to tracked keychains.
      -    pub fn outpoints(&self) -> impl DoubleEndedIterator<Item = ((K, u32), OutPoint)> + '_ {
      -        self.inner
      -            .outpoints()
      -            .iter()
      -            .filter_map(|((desc_id, index), op)| {
      -                let keychain = self.keychain_of_desc_id(desc_id)?;
      -                Some(((keychain.clone(), *index), *op))
      -            })
      +    pub fn outpoints(&self) -> &BTreeSet<KeychainIndexed<K, OutPoint>> {
      +        self.inner.outpoints()
           }
       
           /// Iterate over known txouts that spend to tracked script pubkeys.
      -    pub fn txouts(&self) -> impl DoubleEndedIterator<Item = (K, u32, OutPoint, &TxOut)> + '_ {
      -        self.inner.txouts().filter_map(|((desc_id, i), op, txo)| {
      -            let keychain = self.keychain_of_desc_id(desc_id)?;
      -            Some((keychain.clone(), *i, op, txo))
      -        })
      +    pub fn txouts(
      +        &self,
      +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> + ExactSizeIterator
      +    {
      +        self.inner
      +            .txouts()
      +            .map(|(index, op, txout)| (index.clone(), (op, txout)))
           }
       
           /// Finds all txouts on a transaction that has previously been scanned and indexed.
           pub fn txouts_in_tx(
               &self,
               txid: Txid,
      -    ) -> impl DoubleEndedIterator<Item = (K, u32, OutPoint, &TxOut)> {
      +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, (OutPoint, &TxOut)>> {
               self.inner
                   .txouts_in_tx(txid)
      -            .filter_map(|((desc_id, i), op, txo)| {
      -                let keychain = self.keychain_of_desc_id(desc_id)?;
      -                Some((keychain.clone(), *i, op, txo))
      -            })
      +            .map(|(index, op, txout)| (index.clone(), (op, txout)))
           }
       
           /// Return the [`TxOut`] of `outpoint` if it has been indexed, and if it corresponds to a
      @@ -1323,27 +1183,24 @@
           /// The associated keychain and keychain index of the txout's spk is also returned.
           ///
           /// This calls [`SpkTxOutIndex::txout`] internally.
      -    pub fn txout(&self, outpoint: OutPoint) -> Option<(K, u32, &TxOut)> {
      -        let ((descriptor_id, index), txo) = self.inner.txout(outpoint)?;
      -        let keychain = self.keychain_of_desc_id(descriptor_id)?;
      -        Some((keychain.clone(), *index, txo))
      +    pub fn txout(&self, outpoint: OutPoint) -> Option<KeychainIndexed<K, &TxOut>> {
      +        self.inner
      +            .txout(outpoint)
      +            .map(|(index, txout)| (index.clone(), txout))
           }
       
           /// Return the script that exists under the given `keychain`'s `index`.
           ///
           /// This calls [`SpkTxOutIndex::spk_at_index`] internally.
           pub fn spk_at_index(&self, keychain: K, index: u32) -> Option<&Script> {
      -        let descriptor_id = self.keychains_to_descriptors.get(&keychain)?.0;
      -        self.inner.spk_at_index(&(descriptor_id, index))
      +        self.inner.spk_at_index(&(keychain.clone(), index))
           }
       
           /// Returns the keychain and keychain index associated with the spk.
           ///
           /// This calls [`SpkTxOutIndex::index_of_spk`] internally.
      -    pub fn index_of_spk(&self, script: &Script) -> Option<(K, u32)> {
      -        let (desc_id, last_index) = self.inner.index_of_spk(script)?;
      -        let keychain = self.keychain_of_desc_id(desc_id)?;
      -        Some((keychain.clone(), *last_index))
      +    pub fn index_of_spk(&self, script: &Script) -> Option<&(K, u32)> {
      +        self.inner.index_of_spk(script)
           }
       
           /// Returns whether the spk under the `keychain`'s `index` has been used.
      @@ -1353,11 +1210,7 @@
           ///
           /// This calls [`SpkTxOutIndex::is_used`] internally.
           pub fn is_used(&self, keychain: K, index: u32) -> bool {
      -        let descriptor_id = self.keychains_to_descriptors.get(&keychain).map(|k| k.0);
      -        match descriptor_id {
      -            Some(descriptor_id) => self.inner.is_used(&(descriptor_id, index)),
      -            None => false,
      -        }
      +        self.inner.is_used(&(keychain, index))
           }
       
           /// Marks the script pubkey at `index` as used even though the tracker hasn't seen an output
      @@ -1377,11 +1230,7 @@
           ///
           /// [`unmark_used`]: Self::unmark_used
           pub fn mark_used(&mut self, keychain: K, index: u32) -> bool {
      -        let descriptor_id = self.keychains_to_descriptors.get(&keychain).map(|k| k.0);
      -        match descriptor_id {
      -            Some(descriptor_id) => self.inner.mark_used(&(descriptor_id, index)),
      -            None => false,
      -        }
      +        self.inner.mark_used(&(keychain, index))
           }
       
           /// Undoes the effect of [`mark_used`]. Returns whether the `index` is inserted back into
      @@ -1394,11 +1243,7 @@
           ///
           /// [`mark_used`]: Self::mark_used
           pub fn unmark_used(&mut self, keychain: K, index: u32) -> bool {
      -        let descriptor_id = self.keychains_to_descriptors.get(&keychain).map(|k| k.0);
      -        match descriptor_id {
      -            Some(descriptor_id) => self.inner.unmark_used(&(descriptor_id, index)),
      -            None => false,
      -        }
      +        self.inner.unmark_used(&(keychain, index))
           }
       
           /// Computes the total value transfer effect `tx` has on the script pubkeys belonging to the
      @@ -1428,71 +1273,72 @@
       }
       
       impl<K: Clone + Ord + Debug> KeychainTxOutIndex<K> {
      -    /// Return the map of the keychain to descriptors.
      +    /// Return all keychains and their corresponding descriptors.
           pub fn keychains(
               &self,
           ) -> impl DoubleEndedIterator<Item = (&K, &Descriptor<DescriptorPublicKey>)> + ExactSizeIterator + '_
           {
      -        self.keychains_to_descriptors
      +        self.keychain_to_descriptor_id
                   .iter()
      -            .map(|(k, (_, d))| (k, d))
      +            .map(|(k, did)| (k, self.descriptors.get(did).expect("invariant")))
           }
       
           /// Insert a descriptor with a keychain associated to it.
           ///
      -    /// Adding a descriptor means you will be able to derive new script pubkeys under it
      -    /// and the txout index will discover transaction outputs with those script pubkeys.
      +    /// Adding a descriptor means you will be able to derive new script pubkeys under it and the
      +    /// txout index will discover transaction outputs with those script pubkeys (once they've been
      +    /// derived and added to the index).
           ///
      -    /// When trying to add a keychain that already existed under a different descriptor, or a descriptor
      -    /// that already existed with a different keychain, the old keychain (or descriptor) will be
      -    /// overwritten.
      +    /// keychain <-> descriptor is a one-to-one mapping that cannot be changed. Attempting to do so
      +    /// will return a [`InsertDescriptorError<K>`].
           pub fn insert_descriptor(
               &mut self,
               keychain: K,
               descriptor: Descriptor<DescriptorPublicKey>,
      -    ) -> super::ChangeSet<K> {
      -        let mut changeset = super::ChangeSet::<K>::default();
      -        let desc_id = descriptor.descriptor_id();
      -
      -        let old_desc = self
      -            .keychains_to_descriptors
      -            .insert(keychain.clone(), (desc_id, descriptor.clone()));
      -
      -        if let Some((old_desc_id, _)) = old_desc {
      -            // nothing needs to be done if caller reinsterted the same descriptor under the same
      -            // keychain
      -            if old_desc_id == desc_id {
      -                return changeset;
      +    ) -> Result<ChangeSet<K>, InsertDescriptorError<K>> {
      +        let mut changeset = ChangeSet::<K>::default();
      +        let did = descriptor.descriptor_id();
      +        if !self.keychain_to_descriptor_id.contains_key(&keychain)
      +            && !self.descriptor_id_to_keychain.contains_key(&did)
      +        {
      +            self.descriptors.insert(did, descriptor.clone());
      +            self.keychain_to_descriptor_id.insert(keychain.clone(), did);
      +            self.descriptor_id_to_keychain.insert(did, keychain.clone());
      +            self.replenish_inner_index(did, &keychain, self.lookahead);
      +            changeset
      +                .keychains_added
      +                .insert(keychain.clone(), descriptor);
      +        } else {
      +            if let Some(existing_desc_id) = self.keychain_to_descriptor_id.get(&keychain) {
      +                let descriptor = self.descriptors.get(existing_desc_id).expect("invariant");
      +                if *existing_desc_id != did {
      +                    return Err(InsertDescriptorError::KeychainAlreadyAssigned {
      +                        existing_assignment: descriptor.clone(),
      +                        keychain,
      +                    });
      +                }
                   }
      -            // we should remove old descriptor that is associated with this keychain as the index
      -            // is designed to track one descriptor per keychain (however different keychains can
      -            // share the same descriptor)
      -            let _is_keychain_removed = self
      -                .descriptor_ids_to_keychain_set
      -                .get_mut(&old_desc_id)
      -                .expect("we must have already inserted this descriptor")
      -                .remove(&keychain);
      -            debug_assert!(_is_keychain_removed);
      -        }
       
      -        self.descriptor_ids_to_keychain_set
      -            .entry(desc_id)
      -            .or_default()
      -            .insert(keychain.clone());
      -        self.descriptor_ids_to_descriptors
      -            .insert(desc_id, descriptor.clone());
      -        self.replenish_lookahead(&keychain, self.lookahead);
      +            if let Some(existing_keychain) = self.descriptor_id_to_keychain.get(&did) {
      +                let descriptor = self.descriptors.get(&did).expect("invariant").clone();
       
      -        changeset
      -            .keychains_added
      -            .insert(keychain.clone(), descriptor);
      -        changeset
      +                if *existing_keychain != keychain {
      +                    return Err(InsertDescriptorError::DescriptorAlreadyAssigned {
      +                        existing_assignment: existing_keychain.clone(),
      +                        descriptor,
      +                    });
      +                }
      +            }
      +        }
      +
      +        Ok(changeset)
           }
       
           /// Gets the descriptor associated with the keychain. Returns `None` if the keychain doesn't
           /// have a descriptor associated with it.
           pub fn get_descriptor(&self, keychain: &K) -> Option<&Descriptor<DescriptorPublicKey>> {
      -        self.keychains_to_descriptors.get(keychain).map(|(_, d)| d)
      +        let did = self.keychain_to_descriptor_id.get(keychain)?;
      +        self.descriptors.get(did)
           }
       
           /// Get the lookahead setting.
      @@ -1514,35 +1360,41 @@
                       .filter(|&index| index > 0);
       
                   if let Some(temp_lookahead) = temp_lookahead {
      -                self.replenish_lookahead(keychain, temp_lookahead);
      +                self.replenish_inner_index_keychain(keychain, temp_lookahead);
                   }
               }
           }
       
      -    fn replenish_lookahead(&mut self, keychain: &K, lookahead: u32) {
      -        let descriptor_opt = self.keychains_to_descriptors.get(keychain).cloned();
      -        if let Some((descriptor_id, descriptor)) = descriptor_opt {
      -            let next_store_index = self.next_store_index(descriptor_id);
      -            let next_reveal_index = self.last_revealed.get(&descriptor_id).map_or(0, |v| *v + 1);
      +    fn replenish_inner_index_did(&mut self, did: DescriptorId, lookahead: u32) {
      +        if let Some(keychain) = self.descriptor_id_to_keychain.get(&did).cloned() {
      +            self.replenish_inner_index(did, &keychain, lookahead);
      +        }
      +    }
       
      -            for (new_index, new_spk) in SpkIterator::new_with_range(
      -                descriptor,
      -                next_store_index..next_reveal_index + lookahead,
      -            ) {
      -                let _inserted = self.inner.insert_spk((descriptor_id, new_index), new_spk);
      -                debug_assert!(_inserted, "replenish lookahead: must not have existing spk: keychain={:?}, lookahead={}, next_store_index={}, next_reveal_index={}", keychain, lookahead, next_store_index, next_reveal_index);
      -            }
      +    fn replenish_inner_index_keychain(&mut self, keychain: &K, lookahead: u32) {
      +        if let Some(did) = self.keychain_to_descriptor_id.get(keychain) {
      +            self.replenish_inner_index(*did, keychain, lookahead);
               }
           }
       
      -    fn next_store_index(&self, descriptor_id: DescriptorId) -> u32 {
      -        self.inner()
      +    /// Syncs the state of the inner spk index after changes to a keychain
      +    fn replenish_inner_index(&mut self, did: DescriptorId, keychain: &K, lookahead: u32) {
      +        let descriptor = self.descriptors.get(&did).expect("invariant");
      +        let next_store_index = self
      +            .inner
                   .all_spks()
      -            // This range is keeping only the spks with descriptor_id equal to
      -            // `descriptor_id`. We don't use filter here as range is more optimized.
      -            .range((descriptor_id, u32::MIN)..(descriptor_id, u32::MAX))
      +            .range(&(keychain.clone(), u32::MIN)..=&(keychain.clone(), u32::MAX))
                   .last()
      -            .map_or(0, |((_, index), _)| *index + 1)
      +            .map_or(0, |((_, index), _)| *index + 1);
      +        let next_reveal_index = self.last_revealed.get(&did).map_or(0, |v| *v + 1);
      +        for (new_index, new_spk) in
      +            SpkIterator::new_with_range(descriptor, next_store_index..next_reveal_index + lookahead)
      +        {
      +            let _inserted = self
      +                .inner
      +                .insert_spk((keychain.clone(), new_index), new_spk);
      +            debug_assert!(_inserted, "replenish lookahead: must not have existing spk: keychain={:?}, lookahead={}, next_store_index={}, next_reveal_index={}", keychain, lookahead, next_store_index, next_reveal_index);
      +        }
           }
       
           /// Get an unbounded spk iterator over a given `keychain`. Returns `None` if the provided
      @@ -1551,7 +1403,7 @@
               &self,
               keychain: &K,
           ) -> Option<SpkIterator<Descriptor<DescriptorPublicKey>>> {
      -        let descriptor = self.keychains_to_descriptors.get(keychain)?.1.clone();
      +        let descriptor = self.get_descriptor(keychain)?.clone();
               Some(SpkIterator::new(descriptor))
           }
       
      @@ -1559,9 +1411,14 @@
           pub fn all_unbounded_spk_iters(
               &self,
           ) -> BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>> {
      -        self.keychains_to_descriptors
      +        self.keychain_to_descriptor_id
                   .iter()
      -            .map(|(k, (_, descriptor))| (k.clone(), SpkIterator::new(descriptor.clone())))
      +            .map(|(k, did)| {
      +                (
      +                    k.clone(),
      +                    SpkIterator::new(self.descriptors.get(did).expect("invariant").clone()),
      +                )
      +            })
                   .collect()
           }
       
      @@ -1569,44 +1426,63 @@
           pub fn revealed_spks(
               &self,
               range: impl RangeBounds<K>,
      -    ) -> impl DoubleEndedIterator<Item = (&K, u32, &Script)> + Clone {
      -        self.keychains_to_descriptors
      -            .range(range)
      -            .flat_map(|(_, (descriptor_id, _))| {
      -                let start = Bound::Included((*descriptor_id, u32::MIN));
      -                let end = match self.last_revealed.get(descriptor_id) {
      -                    Some(last_revealed) => Bound::Included((*descriptor_id, *last_revealed)),
      -                    None => Bound::Excluded((*descriptor_id, u32::MIN)),
      -                };
      -
      -                self.inner
      -                    .all_spks()
      -                    .range((start, end))
      -                    .map(|((descriptor_id, i), spk)| {
      -                        (
      -                            self.keychain_of_desc_id(descriptor_id)
      -                                .expect("must have keychain"),
      -                            *i,
      -                            spk.as_script(),
      -                        )
      -                    })
      -            })
      +    ) -> impl Iterator<Item = KeychainIndexed<K, &Script>> {
      +        let start = range.start_bound();
      +        let end = range.end_bound();
      +        let mut iter_last_revealed = self
      +            .keychain_to_descriptor_id
      +            .range((start, end))
      +            .map(|(k, did)| (k, self.last_revealed.get(did).cloned()));
      +        let mut iter_spks = self
      +            .inner
      +            .all_spks()
      +            .range(self.map_to_inner_bounds((start, end)));
      +        let mut current_keychain = iter_last_revealed.next();
      +        // The reason we need a tricky algorithm is because of the "lookahead" feature which means
      +        // that some of the spks in the SpkTxoutIndex will not have been revealed yet. So we need to
      +        // filter out those spks that are above the last_revealed for that keychain. To do this we
      +        // iterate through the last_revealed for each keychain and the spks for each keychain in
      +        // tandem. This minimizes BTreeMap queries.
      +        core::iter::from_fn(move || loop {
      +            let ((keychain, index), spk) = iter_spks.next()?;
      +            // We need to find the last revealed that matches the current spk we are considering so
      +            // we skip ahead.
      +            while current_keychain?.0 < keychain {
      +                current_keychain = iter_last_revealed.next();
      +            }
      +            let (current_keychain, last_revealed) = current_keychain?;
      +
      +            if current_keychain == keychain && Some(*index) <= last_revealed {
      +                break Some(((keychain.clone(), *index), spk.as_script()));
      +            }
      +        })
           }
       
      -    /// Iterate over revealed spks of the given `keychain`.
      +    /// Iterate over revealed spks of the given `keychain` with ascending indices.
      +    ///
      +    /// This is a double ended iterator so you can easily reverse it to get an iterator where
      +    /// the script pubkeys that were most recently revealed are first.
           pub fn revealed_keychain_spks<'a>(
               &'a self,
               keychain: &'a K,
      -    ) -> impl DoubleEndedIterator<Item = (u32, &Script)> + 'a {
      -        self.revealed_spks(keychain..=keychain)
      -            .map(|(_, i, spk)| (i, spk))
      +    ) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + 'a {
      +        let end = self
      +            .last_revealed_index(keychain)
      +            .map(|v| v + 1)
      +            .unwrap_or(0);
      +        self.inner
      +            .all_spks()
      +            .range((keychain.clone(), 0)..(keychain.clone(), end))
      +            .map(|((_, index), spk)| (*index, spk.as_script()))
           }
       
           /// Iterate over revealed, but unused, spks of all keychains.
      -    pub fn unused_spks(&self) -> impl DoubleEndedIterator<Item = (K, u32, &Script)> + Clone {
      -        self.keychains_to_descriptors.keys().flat_map(|keychain| {
      +    pub fn unused_spks(
      +        &self,
      +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, &Script>> + Clone {
      +        self.keychain_to_descriptor_id.keys().flat_map(|keychain| {
                   self.unused_keychain_spks(keychain)
      -                .map(|(i, spk)| (keychain.clone(), i, spk))
      +                .map(|(i, spk)| ((keychain.clone(), i), spk))
               })
           }
       
      @@ -1615,18 +1491,14 @@
           pub fn unused_keychain_spks(
               &self,
               keychain: &K,
      -    ) -> impl DoubleEndedIterator<Item = (u32, &Script)> + Clone {
      -        let desc_id = self
      -            .keychains_to_descriptors
      -            .get(keychain)
      -            .map(|(desc_id, _)| *desc_id)
      -            // We use a dummy desc id if we can't find the real one in our map. In this way,
      -            // if this method was to be called with a non-existent keychain, we would return an
      -            // empty iterator
      -            .unwrap_or_else(|| DescriptorId::from_byte_array([0; 32]));
      -        let next_i = self.last_revealed.get(&desc_id).map_or(0, |&i| i + 1);
      +    ) -> impl DoubleEndedIterator<Item = Indexed<&Script>> + Clone {
      +        let end = match self.keychain_to_descriptor_id.get(keychain) {
      +            Some(did) => self.last_revealed.get(did).map(|v| *v + 1).unwrap_or(0),
      +            None => 0,
      +        };
      +
               self.inner
      -            .unused_spks((desc_id, u32::MIN)..(desc_id, next_i))
      +            .unused_spks((keychain.clone(), 0)..(keychain.clone(), end))
                   .map(|((_, i), spk)| (*i, spk))
           }
       
      @@ -1643,8 +1515,9 @@
           ///
           /// Returns None if the provided `keychain` doesn't exist.
           pub fn next_index(&self, keychain: &K) -> Option<(u32, bool)> {
      -        let (descriptor_id, descriptor) = self.keychains_to_descriptors.get(keychain)?;
      -        let last_index = self.last_revealed.get(descriptor_id).cloned();
      +        let did = self.keychain_to_descriptor_id.get(keychain)?;
      +        let last_index = self.last_revealed.get(did).cloned();
      +        let descriptor = self.descriptors.get(did).expect("invariant");
       
               // we can only get the next index if the wildcard exists.
               let has_wildcard = descriptor.has_wildcard();
      @@ -1671,7 +1544,7 @@
               self.last_revealed
                   .iter()
                   .filter_map(|(desc_id, index)| {
      -                let keychain = self.keychain_of_desc_id(desc_id)?;
      +                let keychain = self.descriptor_id_to_keychain.get(desc_id)?;
                       Some((keychain.clone(), *index))
                   })
                   .collect()
      @@ -1680,91 +1553,21 @@
           /// Get the last derivation index revealed for `keychain`. Returns None if the keychain doesn't
           /// exist, or if the keychain doesn't have any revealed scripts.
           pub fn last_revealed_index(&self, keychain: &K) -> Option<u32> {
      -        let descriptor_id = self.keychains_to_descriptors.get(keychain)?.0;
      -        self.last_revealed.get(&descriptor_id).cloned()
      +        let descriptor_id = self.keychain_to_descriptor_id.get(keychain)?;
      +        self.last_revealed.get(descriptor_id).cloned()
           }
       
           /// Convenience method to call [`Self::reveal_to_target`] on multiple keychains.
      -    pub fn reveal_to_target_multi(
      -        &mut self,
      -        keychains: &BTreeMap<K, u32>,
      -    ) -> (
      -        BTreeMap<K, SpkIterator<Descriptor<DescriptorPublicKey>>>,
      -        super::ChangeSet<K>,
      -    ) {
      -        let mut changeset = super::ChangeSet::default();
      -        let mut spks = BTreeMap::new();
      +    pub fn reveal_to_target_multi(&mut self, keychains: &BTreeMap<K, u32>) -> ChangeSet<K> {
      +        let mut changeset = ChangeSet::default();
       
               for (keychain, &index) in keychains {
      -            if let Some((new_spks, new_changeset)) = self.reveal_to_target(keychain, index) {
      -                if !new_changeset.is_empty() {
      -                    spks.insert(keychain.clone(), new_spks);
      -                    changeset.append(new_changeset.clone());
      -                }
      +            if let Some((_, new_changeset)) = self.reveal_to_target(keychain, index) {
      +                changeset.append(new_changeset);
                   }
               }
       
      -        (spks, changeset)
      -    }
      -
      -    /// Convenience method to call `reveal_to_target` with a descriptor_id instead of a keychain.
      -    /// This is useful for revealing spks of descriptors for which we don't have a keychain
      -    /// tracked.
      -    /// Refer to the `reveal_to_target` documentation for more.
      -    ///
      -    /// Returns None if the provided `descriptor_id` doesn't correspond to a tracked descriptor.
      -    fn reveal_to_target_with_id(
      -        &mut self,
      -        descriptor_id: DescriptorId,
      -        target_index: u32,
      -    ) -> Option<(
      -        SpkIterator<Descriptor<DescriptorPublicKey>>,
      -        super::ChangeSet<K>,
      -    )> {
      -        let descriptor = self
      -            .descriptor_ids_to_descriptors
      -            .get(&descriptor_id)?
      -            .clone();
      -        let has_wildcard = descriptor.has_wildcard();
      -
      -        let target_index = if has_wildcard { target_index } else { 0 };
      -        let next_reveal_index = self
      -            .last_revealed
      -            .get(&descriptor_id)
      -            .map_or(0, |index| *index + 1);
      -
      -        debug_assert!(next_reveal_index + self.lookahead >= self.next_store_index(descriptor_id));
      -
      -        // If the target_index is already revealed, we are done
      -        if next_reveal_index > target_index {
      -            return Some((
      -                SpkIterator::new_with_range(descriptor, next_reveal_index..next_reveal_index),
      -                super::ChangeSet::default(),
      -            ));
      -        }
      -
      -        // We range over the indexes that are not stored and insert their spks in the index.
      -        // Indexes from next_reveal_index to next_reveal_index + lookahead are already stored (due
      -        // to lookahead), so we only range from next_reveal_index + lookahead to target + lookahead
      -        let range = next_reveal_index + self.lookahead..=target_index + self.lookahead;
      -        for (new_index, new_spk) in SpkIterator::new_with_range(descriptor.clone(), range) {
      -            let _inserted = self.inner.insert_spk((descriptor_id, new_index), new_spk);
      -            debug_assert!(_inserted, "must not have existing spk");
      -            debug_assert!(
      -                has_wildcard || new_index == 0,
      -                "non-wildcard descriptors must not iterate past index 0"
      -            );
      -        }
      -
      -        let _old_index = self.last_revealed.insert(descriptor_id, target_index);
      -        debug_assert!(_old_index < Some(target_index));
      -        Some((
      -            SpkIterator::new_with_range(descriptor, next_reveal_index..target_index + 1),
      -            super::ChangeSet {
      -                keychains_added: BTreeMap::new(),
      -                last_revealed: core::iter::once((descriptor_id, target_index)).collect(),
      -            },
      -        ))
      +        changeset
           }
       
           /// Reveals script pubkeys of the `keychain`'s descriptor **up to and including** the
      @@ -1774,50 +1577,62 @@
           /// the `target_index` is in the hardened index range), this method will make a best-effort and
           /// reveal up to the last possible index.
           ///
      -    /// This returns an iterator of newly revealed indices (alongside their scripts) and a
      -    /// [`super::ChangeSet`], which reports updates to the latest revealed index. If no new script
      +    /// This returns list of newly revealed indices (alongside their scripts) and a
      +    /// [`ChangeSet`], which reports updates to the latest revealed index. If no new script
           /// pubkeys are revealed, then both of these will be empty.
           ///
           /// Returns None if the provided `keychain` doesn't exist.
      +    #[must_use]
           pub fn reveal_to_target(
               &mut self,
               keychain: &K,
               target_index: u32,
      -    ) -> Option<(
      -        SpkIterator<Descriptor<DescriptorPublicKey>>,
      -        super::ChangeSet<K>,
      -    )> {
      -        let descriptor_id = self.keychains_to_descriptors.get(keychain)?.0;
      -        self.reveal_to_target_with_id(descriptor_id, target_index)
      +    ) -> Option<(Vec<Indexed<ScriptBuf>>, ChangeSet<K>)> {
      +        let mut changeset = ChangeSet::default();
      +        let mut spks: Vec<Indexed<ScriptBuf>> = vec![];
      +        while let Some((i, new)) = self.next_index(keychain) {
      +            if !new || i > target_index {
      +                break;
      +            }
      +            match self.reveal_next_spk(keychain) {
      +                Some(((i, spk), change)) => {
      +                    spks.push((i, spk));
      +                    changeset.append(change);
      +                }
      +                None => break,
      +            }
      +        }
      +
      +        Some((spks, changeset))
           }
       
           /// Attempts to reveal the next script pubkey for `keychain`.
           ///
           /// Returns the derivation index of the revealed script pubkey, the revealed script pubkey and a
      -    /// [`super::ChangeSet`] which represents changes in the last revealed index (if any).
      +    /// [`ChangeSet`] which represents changes in the last revealed index (if any).
           /// Returns None if the provided keychain doesn't exist.
           ///
           /// When a new script cannot be revealed, we return the last revealed script and an empty
      -    /// [`super::ChangeSet`]. There are two scenarios when a new script pubkey cannot be derived:
      +    /// [`ChangeSet`]. There are two scenarios when a new script pubkey cannot be derived:
           ///
           ///  1. The descriptor has no wildcard and already has one script revealed.
           ///  2. The descriptor has already revealed scripts up to the numeric bound.
           ///  3. There is no descriptor associated with the given keychain.
      -    pub fn reveal_next_spk(
      -        &mut self,
      -        keychain: &K,
      -    ) -> Option<((u32, &Script), super::ChangeSet<K>)> {
      -        let descriptor_id = self.keychains_to_descriptors.get(keychain)?.0;
      -        let (next_index, _) = self.next_index(keychain).expect("We know keychain exists");
      -        let changeset = self
      -            .reveal_to_target(keychain, next_index)
      -            .expect("We know keychain exists")
      -            .1;
      +    pub fn reveal_next_spk(&mut self, keychain: &K) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)> {
      +        let (next_index, new) = self.next_index(keychain)?;
      +        let mut changeset = ChangeSet::default();
      +
      +        if new {
      +            let did = self.keychain_to_descriptor_id.get(keychain)?;
      +            self.last_revealed.insert(*did, next_index);
      +            changeset.last_revealed.insert(*did, next_index);
      +            self.replenish_inner_index(*did, keychain, self.lookahead);
      +        }
               let script = self
                   .inner
      -            .spk_at_index(&(descriptor_id, next_index))
      -            .expect("script must already be stored");
      -        Some(((next_index, script), changeset))
      +            .spk_at_index(&(keychain.clone(), next_index))
      +            .expect("we just inserted it");
      +        Some(((next_index, script.into()), changeset))
           }
       
           /// Gets the next unused script pubkey in the keychain. I.e., the script pubkey with the lowest
      @@ -1829,23 +1644,17 @@
           /// has used all scripts up to the derivation bounds, then the last derived script pubkey will be
           /// returned.
           ///
      -    /// Returns None if the provided keychain doesn't exist.
      -    pub fn next_unused_spk(
      -        &mut self,
      -        keychain: &K,
      -    ) -> Option<((u32, &Script), super::ChangeSet<K>)> {
      -        let need_new = self.unused_keychain_spks(keychain).next().is_none();
      -        // this rather strange branch is needed because of some lifetime issues
      -        if need_new {
      -            self.reveal_next_spk(keychain)
      -        } else {
      -            Some((
      -                self.unused_keychain_spks(keychain)
      -                    .next()
      -                    .expect("we already know next exists"),
      -                super::ChangeSet::default(),
      -            ))
      -        }
      +    /// Returns `None` if there are no script pubkeys that have been used and no new script pubkey
      +    /// could be revealed (see [`reveal_next_spk`] for when this happens).
      +    ///
      +    /// [`reveal_next_spk`]: Self::reveal_next_spk
      +    pub fn next_unused_spk(&mut self, keychain: &K) -> Option<(Indexed<ScriptBuf>, ChangeSet<K>)> {
      +        let next_unused = self
      +            .unused_keychain_spks(keychain)
      +            .next()
      +            .map(|(i, spk)| ((i, spk.to_owned()), ChangeSet::default()));
      +
      +        next_unused.or_else(|| self.reveal_next_spk(keychain))
           }
       
           /// Iterate over all [`OutPoint`]s that have `TxOut`s with script pubkeys derived from
      @@ -1853,45 +1662,30 @@
           pub fn keychain_outpoints<'a>(
               &'a self,
               keychain: &'a K,
      -    ) -> impl DoubleEndedIterator<Item = (u32, OutPoint)> + 'a {
      +    ) -> impl DoubleEndedIterator<Item = Indexed<OutPoint>> + 'a {
               self.keychain_outpoints_in_range(keychain..=keychain)
      -            .map(move |(_, i, op)| (i, op))
      +            .map(|((_, i), op)| (i, op))
           }
       
           /// Iterate over [`OutPoint`]s that have script pubkeys derived from keychains in `range`.
           pub fn keychain_outpoints_in_range<'a>(
               &'a self,
               range: impl RangeBounds<K> + 'a,
      -    ) -> impl DoubleEndedIterator<Item = (&'a K, u32, OutPoint)> + 'a {
      -        let bounds = self.map_to_inner_bounds(range);
      +    ) -> impl DoubleEndedIterator<Item = KeychainIndexed<K, OutPoint>> + 'a {
               self.inner
      -            .outputs_in_range(bounds)
      -            .map(move |((desc_id, i), op)| {
      -                let keychain = self
      -                    .keychain_of_desc_id(desc_id)
      -                    .expect("keychain must exist");
      -                (keychain, *i, op)
      -            })
      +            .outputs_in_range(self.map_to_inner_bounds(range))
      +            .map(|((k, i), op)| ((k.clone(), *i), op))
           }
       
      -    fn map_to_inner_bounds(
      -        &self,
      -        bound: impl RangeBounds<K>,
      -    ) -> impl RangeBounds<(DescriptorId, u32)> {
      -        let get_desc_id = |keychain| {
      -            self.keychains_to_descriptors
      -                .get(keychain)
      -                .map(|(desc_id, _)| *desc_id)
      -                .unwrap_or_else(|| DescriptorId::from_byte_array([0; 32]))
      -        };
      +    fn map_to_inner_bounds(&self, bound: impl RangeBounds<K>) -> impl RangeBounds<(K, u32)> {
               let start = match bound.start_bound() {
      -            Bound::Included(keychain) => Bound::Included((get_desc_id(keychain), u32::MIN)),
      -            Bound::Excluded(keychain) => Bound::Excluded((get_desc_id(keychain), u32::MAX)),
      +            Bound::Included(keychain) => Bound::Included((keychain.clone(), u32::MIN)),
      +            Bound::Excluded(keychain) => Bound::Excluded((keychain.clone(), u32::MAX)),
                   Bound::Unbounded => Bound::Unbounded,
               };
               let end = match bound.end_bound() {
      -            Bound::Included(keychain) => Bound::Included((get_desc_id(keychain), u32::MAX)),
      -            Bound::Excluded(keychain) => Bound::Excluded((get_desc_id(keychain), u32::MIN)),
      +            Bound::Included(keychain) => Bound::Included((keychain.clone(), u32::MAX)),
      +            Bound::Excluded(keychain) => Bound::Excluded((keychain.clone(), u32::MIN)),
                   Bound::Unbounded => Bound::Unbounded,
               };
       
      @@ -1907,7 +1701,7 @@
           /// Returns the highest derivation index of each keychain that [`KeychainTxOutIndex`] has found
           /// a [`TxOut`] with it's script pubkey.
           pub fn last_used_indices(&self) -> BTreeMap<K, u32> {
      -        self.keychains_to_descriptors
      +        self.keychain_to_descriptor_id
                   .iter()
                   .filter_map(|(keychain, _)| {
                       self.last_used_index(keychain)
      @@ -1916,28 +1710,170 @@
                   .collect()
           }
       
      -    /// Applies the derivation changeset to the [`KeychainTxOutIndex`], as specified in the
      -    /// [`ChangeSet::append`] documentation:
      -    /// - Extends the number of derived scripts per keychain
      -    /// - Adds new descriptors introduced
      -    /// - If a descriptor is introduced for a keychain that already had a descriptor, overwrites
      -    /// the old descriptor
      -    pub fn apply_changeset(&mut self, changeset: super::ChangeSet<K>) {
      +    /// Applies the `ChangeSet<K>` to the [`KeychainTxOutIndex<K>`]
      +    ///
      +    /// Keychains added by the `keychains_added` field of `ChangeSet<K>` respect the one-to-one
      +    /// keychain <-> descriptor invariant by silently ignoring attempts to violate it (but will
      +    /// panic if `debug_assertions` are enabled).
      +    pub fn apply_changeset(&mut self, changeset: ChangeSet<K>) {
               let ChangeSet {
                   keychains_added,
                   last_revealed,
               } = changeset;
               for (keychain, descriptor) in keychains_added {
      -            let _ = self.insert_descriptor(keychain, descriptor);
      +            let _ignore_invariant_violation = self.insert_descriptor(keychain, descriptor);
               }
      -        let last_revealed = last_revealed
      -            .into_iter()
      -            .filter_map(|(desc_id, index)| {
      -                let keychain = self.keychain_of_desc_id(&desc_id)?;
      -                Some((keychain.clone(), index))
      -            })
      -            .collect();
      -        let _ = self.reveal_to_target_multi(&last_revealed);
      +
      +        for (&desc_id, &index) in &last_revealed {
      +            let v = self.last_revealed.entry(desc_id).or_default();
      +            *v = index.max(*v);
      +        }
      +
      +        for did in last_revealed.keys() {
      +            self.replenish_inner_index_did(*did, self.lookahead);
      +        }
      +    }
      +}
      +
      +#[derive(Clone, Debug, PartialEq)]
      +/// Error returned from [`KeychainTxOutIndex::insert_descriptor`]
      +pub enum InsertDescriptorError<K> {
      +    /// The descriptor has already been assigned to a keychain so you can't assign it to another
      +    DescriptorAlreadyAssigned {
      +        /// The descriptor you have attempted to reassign
      +        descriptor: Descriptor<DescriptorPublicKey>,
      +        /// The keychain that the descriptor is already assigned to
      +        existing_assignment: K,
      +    },
      +    /// The keychain is already assigned to a descriptor so you can't reassign it
      +    KeychainAlreadyAssigned {
      +        /// The keychain that you have attempted to reassign
      +        keychain: K,
      +        /// The descriptor that the keychain is already assigned to
      +        existing_assignment: Descriptor<DescriptorPublicKey>,
      +    },
      +}
      +
      +impl<K: core::fmt::Debug> core::fmt::Display for InsertDescriptorError<K> {
      +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
      +        match self {
      +            InsertDescriptorError::DescriptorAlreadyAssigned {
      +                existing_assignment: existing,
      +                descriptor,
      +            } => {
      +                write!(
      +                    f,
      +                    "attempt to re-assign descriptor {descriptor:?} already assigned to {existing:?}"
      +                )
      +            }
      +            InsertDescriptorError::KeychainAlreadyAssigned {
      +                existing_assignment: existing,
      +                keychain,
      +            } => {
      +                write!(
      +                    f,
      +                    "attempt to re-assign keychain {keychain:?} already assigned to {existing:?}"
      +                )
      +            }
      +        }
      +    }
      +}
      +
      +#[cfg(feature = "std")]
      +impl<K: core::fmt::Debug> std::error::Error for InsertDescriptorError<K> {}
      +
      +/// Represents updates to the derivation index of a [`KeychainTxOutIndex`].
      +/// It maps each keychain `K` to a descriptor and its last revealed index.
      +///
      +/// It can be applied to [`KeychainTxOutIndex`] with [`apply_changeset`].
      +///
      +/// The `last_revealed` field is monotone in that [`append`] will never decrease it.
      +/// `keychains_added` is *not* monotone, once it is set any attempt to change it is subject to the
      +/// same *one-to-one* keychain <-> descriptor mapping invariant as [`KeychainTxOutIndex`] itself.
      +///
      +/// [`KeychainTxOutIndex`]: crate::keychain::KeychainTxOutIndex
      +/// [`apply_changeset`]: crate::keychain::KeychainTxOutIndex::apply_changeset
      +/// [`append`]: Self::append
      +#[derive(Clone, Debug, PartialEq)]
      +#[cfg_attr(
      +    feature = "serde",
      +    derive(serde::Deserialize, serde::Serialize),
      +    serde(
      +        crate = "serde_crate",
      +        bound(
      +            deserialize = "K: Ord + serde::Deserialize<'de>",
      +            serialize = "K: Ord + serde::Serialize"
      +        )
      +    )
      +)]
      +#[must_use]
      +pub struct ChangeSet<K> {
      +    /// Contains the keychains that have been added and their respective descriptor
      +    pub keychains_added: BTreeMap<K, Descriptor<DescriptorPublicKey>>,
      +    /// Contains for each descriptor_id the last revealed index of derivation
      +    pub last_revealed: BTreeMap<DescriptorId, u32>,
      +}
      +
      +impl<K: Ord> Append for ChangeSet<K> {
      +    /// Merge another [`ChangeSet<K>`] into self.
      +    ///
      +    /// For the `keychains_added` field this method respects the invariants of
      +    /// [`insert_descriptor`]. `last_revealed` always becomes the larger of the two.
      +    ///
      +    /// [`insert_descriptor`]: KeychainTxOutIndex::insert_descriptor
      +    fn append(&mut self, other: Self) {
      +        for (new_keychain, new_descriptor) in other.keychains_added {
      +            // enforce 1-to-1 invariance
      +            if !self.keychains_added.contains_key(&new_keychain)
      +                // FIXME: very inefficient
      +                && self
      +                    .keychains_added
      +                    .values()
      +                    .all(|descriptor| descriptor != &new_descriptor)
      +            {
      +                self.keychains_added.insert(new_keychain, new_descriptor);
      +            }
      +        }
      +
      +        // for `last_revealed`, entries of `other` will take precedence ONLY if it is greater than
      +        // what was originally in `self`.
      +        for (desc_id, index) in other.last_revealed {
      +            use crate::collections::btree_map::Entry;
      +            match self.last_revealed.entry(desc_id) {
      +                Entry::Vacant(entry) => {
      +                    entry.insert(index);
      +                }
      +                Entry::Occupied(mut entry) => {
      +                    if *entry.get() < index {
      +                        entry.insert(index);
      +                    }
      +                }
      +            }
      +        }
      +    }
      +
      +    /// Returns whether the changeset are empty.
      +    fn is_empty(&self) -> bool {
      +        self.last_revealed.is_empty() && self.keychains_added.is_empty()
      +    }
      +}
      +
      +impl<K> Default for ChangeSet<K> {
      +    fn default() -> Self {
      +        Self {
      +            last_revealed: BTreeMap::default(),
      +            keychains_added: BTreeMap::default(),
      +        }
      +    }
      +}
      +
      +#[derive(Clone, Debug, Eq, PartialEq)]
      +/// The keychain doesn't exist. Most likley hasn't been inserted with [`KeychainTxOutIndex::insert_descriptor`].
      +pub struct NoSuchKeychain<K>(K);
      +
      +impl<K: Debug> core::fmt::Display for NoSuchKeychain<K> {
      +    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
      +        write!(f, "no such keychain {:?} exists", &self.0)
           }
       }
       

      \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html index 4e559488b5..166f1b5c10 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/lib.rs.html @@ -95,6 +95,7 @@ 95 96 97 +98
      //! This crate is a collection of core structures for [Bitcoin Dev Kit].
       //!
       //! The goal of this crate is to give wallets the mechanisms needed to:
      @@ -125,6 +126,7 @@
       pub mod indexed_tx_graph;
       pub use indexed_tx_graph::IndexedTxGraph;
       pub mod keychain;
      +pub use keychain::{Indexed, KeychainIndexed};
       pub mod local_chain;
       mod tx_data_traits;
       pub mod tx_graph;
      diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html
      index 754934a2d9..e535161658 100644
      --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html
      +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_client.rs.html
      @@ -385,10 +385,12 @@
       385
       386
       387
      +388
       
    //! Helper types for spk-based blockchain clients.
     
     use crate::{
    -    collections::BTreeMap, local_chain::CheckPoint, ConfirmationTimeHeightAnchor, TxGraph,
    +    collections::BTreeMap, keychain::Indexed, local_chain::CheckPoint,
    +    ConfirmationTimeHeightAnchor, TxGraph,
     };
     use alloc::{boxed::Box, vec::Vec};
     use bitcoin::{OutPoint, Script, ScriptBuf, Txid};
    @@ -553,7 +555,7 @@
             self.chain_spks(
                 index
                     .revealed_spks(spk_range)
    -                .map(|(_, _, spk)| spk.to_owned())
    +                .map(|(_, spk)| spk.to_owned())
                     .collect::<Vec<_>>(),
             )
         }
    @@ -582,7 +584,7 @@
         /// [`LocalChain::tip`]: crate::local_chain::LocalChain::tip
         pub chain_tip: CheckPoint,
         /// Iterators of script pubkeys indexed by the keychain index.
    -    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = (u32, ScriptBuf)> + Send>>,
    +    pub spks_by_keychain: BTreeMap<K, Box<dyn Iterator<Item = Indexed<ScriptBuf>> + Send>>,
     }
     
     impl<K: Ord + Clone> FullScanRequest<K> {
    @@ -625,7 +627,7 @@
         pub fn set_spks_for_keychain(
             mut self,
             keychain: K,
    -        spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static>,
    +        spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static>,
         ) -> Self {
             self.spks_by_keychain
                 .insert(keychain, Box::new(spks.into_iter()));
    @@ -639,7 +641,7 @@
         pub fn chain_spks_for_keychain(
             mut self,
             keychain: K,
    -        spks: impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send + 'static>,
    +        spks: impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send + 'static>,
         ) -> Self {
             match self.spks_by_keychain.remove(&keychain) {
                 // clippy here suggests to remove `into_iter` from `spks.into_iter()`, but doing so
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html
    index 491aad8f58..7584951c30 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_iter.rs.html
    @@ -265,8 +265,14 @@
     265
     266
     267
    +268
    +269
    +270
    +271
    +272
     
    use crate::{
         bitcoin::{secp256k1::Secp256k1, ScriptBuf},
    +    keychain::Indexed,
         miniscript::{Descriptor, DescriptorPublicKey},
     };
     use core::{borrow::Borrow, ops::Bound, ops::RangeBounds};
    @@ -364,7 +370,7 @@
     where
         D: Borrow<Descriptor<DescriptorPublicKey>>,
     {
    -    type Item = (u32, ScriptBuf);
    +    type Item = Indexed<ScriptBuf>;
     
         fn next(&mut self) -> Option<Self::Item> {
             // For non-wildcard descriptors, we expect the first element to be Some((0, spk)), then None after.
    @@ -425,8 +431,12 @@
             let (external_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/0/*)").unwrap();
             let (internal_descriptor,_) = Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, "tr([73c5da0a/86'/0'/0']xprv9xgqHN7yz9MwCkxsBPN5qetuNdQSUttZNKw1dcYTV4mkaAFiBVGQziHs3NRSWMkCzvgjEe3n9xV8oYywvM8at9yRqyaZVz6TYYhX98VjsUk/1/*)").unwrap();
     
    -        let _ = txout_index.insert_descriptor(TestKeychain::External, external_descriptor.clone());
    -        let _ = txout_index.insert_descriptor(TestKeychain::Internal, internal_descriptor.clone());
    +        let _ = txout_index
    +            .insert_descriptor(TestKeychain::External, external_descriptor.clone())
    +            .unwrap();
    +        let _ = txout_index
    +            .insert_descriptor(TestKeychain::Internal, internal_descriptor.clone())
    +            .unwrap();
     
             (txout_index, external_descriptor, internal_descriptor)
         }
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html
    index 7869f2354e..f0f493f0d1 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_chain/spk_txout_index.rs.html
    @@ -384,7 +384,7 @@
         }
     }
     
    -impl<I: Clone + Ord> Indexer for SpkTxOutIndex<I> {
    +impl<I: Clone + Ord + core::fmt::Debug> Indexer for SpkTxOutIndex<I> {
         type ChangeSet = ();
     
         fn index_txout(&mut self, outpoint: OutPoint, txout: &TxOut) -> Self::ChangeSet {
    @@ -408,7 +408,7 @@
         }
     }
     
    -impl<I: Clone + Ord> SpkTxOutIndex<I> {
    +impl<I: Clone + Ord + core::fmt::Debug> SpkTxOutIndex<I> {
         /// Scans a transaction's outputs for matching script pubkeys.
         ///
         /// Typically, this is used in two situations:
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html
    index 38baa80197..7516b889a3 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/async_ext.rs.html
    @@ -592,13 +592,13 @@
     
     use async_trait::async_trait;
     use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult};
    -use bdk_chain::Anchor;
     use bdk_chain::{
         bitcoin::{BlockHash, OutPoint, ScriptBuf, TxOut, Txid},
         collections::BTreeMap,
         local_chain::CheckPoint,
         BlockId, ConfirmationTimeHeightAnchor, TxGraph,
     };
    +use bdk_chain::{Anchor, Indexed};
     use esplora_client::{Amount, TxStatus};
     use futures::{stream::FuturesOrdered, TryStreamExt};
     
    @@ -826,7 +826,7 @@
         client: &esplora_client::AsyncClient,
         keychain_spks: BTreeMap<
             K,
    -        impl IntoIterator<IntoIter = impl Iterator<Item = (u32, ScriptBuf)> + Send> + Send,
    +        impl IntoIterator<IntoIter = impl Iterator<Item = Indexed<ScriptBuf>> + Send> + Send,
         >,
         stop_gap: usize,
         parallel_requests: usize,
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html
    index 6da4a77492..f5c655ed8f 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_esplora/blocking_ext.rs.html
    @@ -790,12 +790,12 @@
     
     use bdk_chain::collections::BTreeMap;
     use bdk_chain::spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult};
    -use bdk_chain::Anchor;
     use bdk_chain::{
         bitcoin::{Amount, BlockHash, OutPoint, ScriptBuf, TxOut, Txid},
         local_chain::CheckPoint,
         BlockId, ConfirmationTimeHeightAnchor, TxGraph,
     };
    +use bdk_chain::{Anchor, Indexed};
     use esplora_client::TxStatus;
     
     use crate::anchor_from_status;
    @@ -1003,7 +1003,7 @@
     /// [`KeychainTxOutIndex`](bdk_chain::keychain::KeychainTxOutIndex).
     fn full_scan_for_index_and_graph_blocking<K: Ord + Clone>(
         client: &esplora_client::BlockingClient,
    -    keychain_spks: BTreeMap<K, impl IntoIterator<Item = (u32, ScriptBuf)>>,
    +    keychain_spks: BTreeMap<K, impl IntoIterator<Item = Indexed<ScriptBuf>>>,
         stop_gap: usize,
         parallel_requests: usize,
     ) -> Result<(TxGraph<ConfirmationTimeHeightAnchor>, BTreeMap<K, u32>), Error> {
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/descriptor/error.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/descriptor/error.rs.html
    index d34b64b023..a91b6a2cd5 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/descriptor/error.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/descriptor/error.rs.html
    @@ -125,7 +125,6 @@
     125
     126
     127
    -128
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -151,7 +150,6 @@
         HardenedDerivationXpub,
         /// The descriptor contains multipath keys
         MultiPath,
    -
         /// Error thrown while working with [`keys`](crate::keys)
         Key(crate::keys::KeyError),
         /// Error while extracting and manipulating policies
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html
    index 60fd767cc7..e482c5642e 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/bdk_wallet/wallet/mod.rs.html
    @@ -2598,6 +2598,17 @@
     2598
     2599
     2600
    +2601
    +2602
    +2603
    +2604
    +2605
    +2606
    +2607
    +2608
    +2609
    +2610
    +2611
     
    // Bitcoin Dev Kit
     // Written in 2020 by Alekos Filini <alekos.filini@gmail.com>
     //
    @@ -2629,7 +2640,7 @@
         spk_client::{FullScanRequest, FullScanResult, SyncRequest, SyncResult},
         tx_graph::{CanonicalTx, TxGraph},
         Append, BlockId, ChainPosition, ConfirmationTime, ConfirmationTimeHeightAnchor, FullTxOut,
    -    IndexedTxGraph,
    +    Indexed, IndexedTxGraph,
     };
     use bdk_persist::{Persist, PersistBackend};
     use bitcoin::secp256k1::{All, Secp256k1};
    @@ -3352,7 +3363,8 @@
     
             Ok(AddressInfo {
                 index,
    -            address: Address::from_script(spk, self.network).expect("must have address form"),
    +            address: Address::from_script(spk.as_script(), self.network)
    +                .expect("must have address form"),
                 keychain,
             })
         }
    @@ -3372,7 +3384,7 @@
             keychain: KeychainKind,
             index: u32,
         ) -> anyhow::Result<impl Iterator<Item = AddressInfo> + '_> {
    -        let (spk_iter, index_changeset) = self
    +        let (spks, index_changeset) = self
                 .indexed_graph
                 .index
                 .reveal_to_target(&keychain, index)
    @@ -3381,7 +3393,7 @@
             self.persist
                 .stage_and_commit(indexed_tx_graph::ChangeSet::from(index_changeset).into())?;
     
    -        Ok(spk_iter.map(move |(index, spk)| AddressInfo {
    +        Ok(spks.into_iter().map(move |(index, spk)| AddressInfo {
                 index,
                 address: Address::from_script(&spk, self.network).expect("must have address form"),
                 keychain,
    @@ -3409,7 +3421,8 @@
     
             Ok(AddressInfo {
                 index,
    -            address: Address::from_script(spk, self.network).expect("must have address form"),
    +            address: Address::from_script(spk.as_script(), self.network)
    +                .expect("must have address form"),
                 keychain,
             })
         }
    @@ -3461,7 +3474,7 @@
         ///
         /// Will only return `Some(_)` if the wallet has given out the spk.
         pub fn derivation_of_spk(&self, spk: &Script) -> Option<(KeychainKind, u32)> {
    -        self.indexed_graph.index.index_of_spk(spk)
    +        self.indexed_graph.index.index_of_spk(spk).cloned()
         }
     
         /// Return the list of unspent outputs of this wallet
    @@ -3471,7 +3484,7 @@
                 .filter_chain_unspents(
                     &self.chain,
                     self.chain.tip().block_id(),
    -                self.indexed_graph.index.outpoints(),
    +                self.indexed_graph.index.outpoints().iter().cloned(),
                 )
                 .map(|((k, i), full_txo)| new_local_utxo(k, i, full_txo))
         }
    @@ -3485,7 +3498,7 @@
                 .filter_chain_txouts(
                     &self.chain,
                     self.chain.tip().block_id(),
    -                self.indexed_graph.index.outpoints(),
    +                self.indexed_graph.index.outpoints().iter().cloned(),
                 )
                 .map(|((k, i), full_txo)| new_local_utxo(k, i, full_txo))
         }
    @@ -3510,7 +3523,7 @@
         /// script pubkeys the wallet is storing internally).
         pub fn all_unbounded_spk_iters(
             &self,
    -    ) -> BTreeMap<KeychainKind, impl Iterator<Item = (u32, ScriptBuf)> + Clone> {
    +    ) -> BTreeMap<KeychainKind, impl Iterator<Item = Indexed<ScriptBuf>> + Clone> {
             self.indexed_graph.index.all_unbounded_spk_iters()
         }
     
    @@ -3522,7 +3535,7 @@
         pub fn unbounded_spk_iter(
             &self,
             keychain: KeychainKind,
    -    ) -> impl Iterator<Item = (u32, ScriptBuf)> + Clone {
    +    ) -> impl Iterator<Item = Indexed<ScriptBuf>> + Clone {
             self.indexed_graph
                 .index
                 .unbounded_spk_iter(&keychain)
    @@ -3532,7 +3545,7 @@
         /// Returns the utxo owned by this wallet corresponding to `outpoint` if it exists in the
         /// wallet's database.
         pub fn get_utxo(&self, op: OutPoint) -> Option<LocalOutput> {
    -        let (keychain, index, _) = self.indexed_graph.index.txout(op)?;
    +        let ((keychain, index), _) = self.indexed_graph.index.txout(op)?;
             self.indexed_graph
                 .graph()
                 .filter_chain_unspents(
    @@ -3807,7 +3820,7 @@
             self.indexed_graph.graph().balance(
                 &self.chain,
                 self.chain.tip().block_id(),
    -            self.indexed_graph.index.outpoints(),
    +            self.indexed_graph.index.outpoints().iter().cloned(),
                 |&(k, _), _| k == KeychainKind::Internal,
             )
         }
    @@ -4111,7 +4124,6 @@
                         .index
                         .next_unused_spk(&change_keychain)
                         .expect("keychain must exist");
    -                let spk = spk.into();
                     self.indexed_graph.index.mark_used(change_keychain, index);
                     self.persist
                         .stage(ChangeSet::from(indexed_tx_graph::ChangeSet::from(
    @@ -4299,7 +4311,7 @@
                         .into();
     
                     let weighted_utxo = match txout_index.index_of_spk(&txout.script_pubkey) {
    -                    Some((keychain, derivation_index)) => {
    +                    Some(&(keychain, derivation_index)) => {
                             let satisfaction_weight = self
                                 .get_descriptor_for_keychain(keychain)
                                 .max_weight_to_satisfy()
    @@ -4344,7 +4356,7 @@
                 for (index, txout) in tx.output.iter().enumerate() {
                     let change_keychain = KeychainKind::Internal;
                     match txout_index.index_of_spk(&txout.script_pubkey) {
    -                    Some((keychain, _)) if keychain == change_keychain => {
    +                    Some((keychain, _)) if *keychain == change_keychain => {
                             change_index = Some(index)
                         }
                         _ => {}
    @@ -4615,13 +4627,13 @@
                 if let Some((keychain, index)) = txout_index.index_of_spk(&txout.script_pubkey) {
                     // NOTE: unmark_used will **not** make something unused if it has actually been used
                     // by a tx in the tracker. It only removes the superficial marking.
    -                txout_index.unmark_used(keychain, index);
    +                txout_index.unmark_used(*keychain, *index);
                 }
             }
         }
     
         fn get_descriptor_for_txout(&self, txout: &TxOut) -> Option<DerivedDescriptor> {
    -        let (keychain, child) = self
    +        let &(keychain, child) = self
                 .indexed_graph
                 .index
                 .index_of_spk(&txout.script_pubkey)?;
    @@ -4837,7 +4849,7 @@
         ) -> Result<psbt::Input, CreateTxError> {
             // Try to find the prev_script in our db to figure out if this is internal or external,
             // and the derivation index
    -        let (keychain, child) = self
    +        let &(keychain, child) = self
                 .indexed_graph
                 .index
                 .index_of_spk(&utxo.txout.script_pubkey)
    @@ -4885,7 +4897,7 @@
     
             // Try to figure out the keychain and derivation for every input and output
             for (is_input, index, out) in utxos.into_iter() {
    -            if let Some((keychain, child)) =
    +            if let Some(&(keychain, child)) =
                     self.indexed_graph.index.index_of_spk(&out.script_pubkey)
                 {
                     let desc = self.get_descriptor_for_keychain(keychain);
    @@ -4931,7 +4943,7 @@
                 None => ChangeSet::default(),
             };
     
    -        let (_, index_changeset) = self
    +        let index_changeset = self
                 .indexed_graph
                 .index
                 .reveal_to_target_multi(&update.last_active_indices);
    @@ -5136,17 +5148,27 @@
     ) -> Result<(Arc<SignersContainer>, Arc<SignersContainer>), DescriptorError> {
         let descriptor = into_wallet_descriptor_checked(descriptor, secp, network)?;
         let change_descriptor = into_wallet_descriptor_checked(change_descriptor, secp, network)?;
    -    if descriptor.0 == change_descriptor.0 {
    -        return Err(DescriptorError::ExternalAndInternalAreTheSame);
    -    }
    -
         let (descriptor, keymap) = descriptor;
         let signers = Arc::new(SignersContainer::build(keymap, &descriptor, secp));
    -    let _ = index.insert_descriptor(KeychainKind::External, descriptor);
    +    let _ = index
    +        .insert_descriptor(KeychainKind::External, descriptor)
    +        .expect("this is the first descriptor we're inserting");
     
         let (descriptor, keymap) = change_descriptor;
         let change_signers = Arc::new(SignersContainer::build(keymap, &descriptor, secp));
    -    let _ = index.insert_descriptor(KeychainKind::Internal, descriptor);
    +    let _ = index
    +        .insert_descriptor(KeychainKind::Internal, descriptor)
    +        .map_err(|e| {
    +            use bdk_chain::keychain::InsertDescriptorError;
    +            match e {
    +                InsertDescriptorError::DescriptorAlreadyAssigned { .. } => {
    +                    crate::descriptor::error::Error::ExternalAndInternalAreTheSame
    +                }
    +                InsertDescriptorError::KeychainAlreadyAssigned { .. } => {
    +                    unreachable!("this is the first time we're assigning internal")
    +                }
    +            }
    +        })?;
     
         Ok((signers, change_signers))
     }
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html
    index bd917525dc..8adbc39aa3 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_bitcoind_rpc_polling/main.rs.html
    @@ -595,7 +595,7 @@
                             graph.graph().balance(
                                 &*chain,
                                 synced_to.block_id(),
    -                            graph.index.outpoints(),
    +                            graph.index.outpoints().iter().cloned(),
                                 |(k, _), _| k == &Keychain::Internal,
                             )
                         };
    @@ -719,7 +719,7 @@
                             graph.graph().balance(
                                 &*chain,
                                 synced_to.block_id(),
    -                            graph.index.outpoints(),
    +                            graph.index.outpoints().iter().cloned(),
                                 |(k, _), _| k == &Keychain::Internal,
                             )
                         };
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html
    index 5043c503e8..71f3a8521b 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_cli/lib.rs.html
    @@ -734,9 +734,6 @@
     734
     735
     736
    -737
    -738
    -739
     
    pub use anyhow;
     use anyhow::Context;
     use bdk_coin_select::{coin_select_bnb, CoinSelector, CoinSelectorOpt, WeightedValue};
    @@ -1004,9 +1001,6 @@
             .expect("Must exist");
         changeset.append(change_changeset);
     
    -    // Clone to drop the immutable reference.
    -    let change_script = change_script.into();
    -
         let change_plan = bdk_tmp_plan::plan_satisfaction(
             &graph
                 .index
    @@ -1166,7 +1160,7 @@
         let outpoints = graph.index.outpoints();
         graph
             .graph()
    -        .try_filter_chain_unspents(chain, chain_tip, outpoints)
    +        .try_filter_chain_unspents(chain, chain_tip, outpoints.iter().cloned())
             .filter_map(|r| -> Option<Result<PlannedUtxo<K, A>, _>> {
                 let (k, i, full_txo) = match r {
                     Err(err) => return Some(Err(err)),
    @@ -1220,8 +1214,8 @@
                             local_chain::ChangeSet::default(),
                             indexed_tx_graph::ChangeSet::from(index_changeset),
                         )))?;
    -                    let addr =
    -                        Address::from_script(spk, network).context("failed to derive address")?;
    +                    let addr = Address::from_script(spk.as_script(), network)
    +                        .context("failed to derive address")?;
                         println!("[address @ {}] {}", spk_i, addr);
                         Ok(())
                     }
    @@ -1266,7 +1260,7 @@
                 let balance = graph.graph().try_balance(
                     chain,
                     chain.get_chain_tip()?,
    -                graph.index.outpoints(),
    +                graph.index.outpoints().iter().cloned(),
                     |(k, _), _| k == &Keychain::Internal,
                 )?;
     
    @@ -1307,7 +1301,7 @@
                     } => {
                         let txouts = graph
                             .graph()
    -                        .try_filter_chain_txouts(chain, chain_tip, outpoints)
    +                        .try_filter_chain_txouts(chain, chain_tip, outpoints.iter().cloned())
                             .filter(|r| match r {
                                 Ok((_, full_txo)) => match (spent, unspent) {
                                     (true, false) => full_txo.spent_by.is_some(),
    @@ -1448,7 +1442,7 @@
         // them in the index here. However, the keymap is not stored in the database.
         let (descriptor, mut keymap) =
             Descriptor::<DescriptorPublicKey>::parse_descriptor(&secp, &args.descriptor)?;
    -    let _ = index.insert_descriptor(Keychain::External, descriptor);
    +    let _ = index.insert_descriptor(Keychain::External, descriptor)?;
     
         if let Some((internal_descriptor, internal_keymap)) = args
             .change_descriptor
    @@ -1457,7 +1451,7 @@
             .transpose()?
         {
             keymap.extend(internal_keymap);
    -        let _ = index.insert_descriptor(Keychain::Internal, internal_descriptor);
    +        let _ = index.insert_descriptor(Keychain::Internal, internal_descriptor)?;
         }
     
         let mut db_backend = match Store::<C>::open_or_create_new(db_magic, &args.db_path) {
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html
    index 2c9fbba4f0..18a9a0b9fa 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_electrum/main.rs.html
    @@ -351,6 +351,10 @@
     351
     352
     353
    +354
    +355
    +356
    +357
     
    use std::{
         io::{self, Write},
         sync::Mutex,
    @@ -581,9 +585,9 @@
                     let all_spks = graph
                         .index
                         .revealed_spks(..)
    -                    .map(|(k, i, spk)| (k.to_owned(), i, spk.to_owned()))
    +                    .map(|(index, spk)| (index, spk.to_owned()))
                         .collect::<Vec<_>>();
    -                request = request.chain_spks(all_spks.into_iter().map(|(k, spk_i, spk)| {
    +                request = request.chain_spks(all_spks.into_iter().map(|((k, spk_i), spk)| {
                         eprint!("Scanning {}: {}", k, spk_i);
                         spk
                     }));
    @@ -592,10 +596,10 @@
                     let unused_spks = graph
                         .index
                         .unused_spks()
    -                    .map(|(k, i, spk)| (k, i, spk.to_owned()))
    +                    .map(|(index, spk)| (index, spk.to_owned()))
                         .collect::<Vec<_>>();
                     request =
    -                    request.chain_spks(unused_spks.into_iter().map(move |(k, spk_i, spk)| {
    +                    request.chain_spks(unused_spks.into_iter().map(move |((k, spk_i), spk)| {
                             eprint!(
                                 "Checking if address {} {}:{} has been used",
                                 Address::from_script(&spk, args.network).unwrap(),
    @@ -611,7 +615,11 @@
     
                     let utxos = graph
                         .graph()
    -                    .filter_chain_unspents(&*chain, chain_tip.block_id(), init_outpoints)
    +                    .filter_chain_unspents(
    +                        &*chain,
    +                        chain_tip.block_id(),
    +                        init_outpoints.iter().cloned(),
    +                    )
                         .map(|(_, utxo)| utxo)
                         .collect::<Vec<_>>();
                     request = request.chain_outpoints(utxos.into_iter().map(|utxo| {
    @@ -691,7 +699,7 @@
             let mut indexed_tx_graph_changeset =
                 indexed_tx_graph::ChangeSet::<ConfirmationHeightAnchor, _>::default();
             if let Some(keychain_update) = keychain_update {
    -            let (_, keychain_changeset) = graph.index.reveal_to_target_multi(&keychain_update);
    +            let keychain_changeset = graph.index.reveal_to_target_multi(&keychain_update);
                 indexed_tx_graph_changeset.append(keychain_changeset.into());
             }
             indexed_tx_graph_changeset.append(graph.apply_update(graph_update));
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html
    index 8c7cc986f1..7123c3c136 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/src/example_esplora/main.rs.html
    @@ -361,6 +361,10 @@
     361
     362
     363
    +364
    +365
    +366
    +367
     
    use std::{
         collections::BTreeSet,
         io::{self, Write},
    @@ -567,7 +571,7 @@
                 // addresses derived so we need to derive up to last active addresses the scan found
                 // before adding the transactions.
                 (chain.apply_update(update.chain_update)?, {
    -                let (_, index_changeset) = graph
    +                let index_changeset = graph
                         .index
                         .reveal_to_target_multi(&update.last_active_indices);
                     let mut indexed_tx_graph_changeset = graph.apply_update(update.graph_update);
    @@ -608,7 +612,7 @@
                         let all_spks = graph
                             .index
                             .revealed_spks(..)
    -                        .map(|(k, i, spk)| (k.to_owned(), i, spk.to_owned()))
    +                        .map(|((k, i), spk)| (k, i, spk.to_owned()))
                             .collect::<Vec<_>>();
                         request = request.chain_spks(all_spks.into_iter().map(|(k, i, spk)| {
                             eprint!("scanning {}:{}", k, i);
    @@ -621,10 +625,10 @@
                         let unused_spks = graph
                             .index
                             .unused_spks()
    -                        .map(|(k, i, spk)| (k, i, spk.to_owned()))
    +                        .map(|(index, spk)| (index, spk.to_owned()))
                             .collect::<Vec<_>>();
                         request =
    -                        request.chain_spks(unused_spks.into_iter().map(move |(k, i, spk)| {
    +                        request.chain_spks(unused_spks.into_iter().map(move |((k, i), spk)| {
                                 eprint!(
                                     "Checking if address {} {}:{} has been used",
                                     Address::from_script(&spk, args.network).unwrap(),
    @@ -643,7 +647,11 @@
                         let init_outpoints = graph.index.outpoints();
                         let utxos = graph
                             .graph()
    -                        .filter_chain_unspents(&*chain, local_tip.block_id(), init_outpoints)
    +                        .filter_chain_unspents(
    +                            &*chain,
    +                            local_tip.block_id(),
    +                            init_outpoints.iter().cloned(),
    +                        )
                             .map(|(_, utxo)| utxo)
                             .collect::<Vec<_>>();
                         request = request.chain_outpoints(
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Append.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Append.js
    index f233683400..07fbb5e61e 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Append.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_chain/tx_data_traits/trait.Append.js
    @@ -1,4 +1,4 @@
     (function() {var implementors = {
     "bdk_chain":[],
    -"bdk_persist":[["impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>"]]
    +"bdk_persist":[["impl<K: Ord, A: Anchor> Append for CombinedChangeSet<K, A>"]]
     };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})()
    \ No newline at end of file
    diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_persist/persist/trait.PersistBackend.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_persist/persist/trait.PersistBackend.js
    index 52fe17caf5..cccad41209 100644
    --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_persist/persist/trait.PersistBackend.js
    +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/bdk_persist/persist/trait.PersistBackend.js
    @@ -1,5 +1,5 @@
     (function() {var implementors = {
    -"bdk_file_store":[["impl<C> PersistBackend<C> for Store<C>
    where\n C: Append + Serialize + DeserializeOwned + Send + Sync,
    "]], +"bdk_file_store":[["impl<C> PersistBackend<C> for Store<C>"]], "bdk_persist":[], -"bdk_sqlite":[["impl<K, A, C> PersistBackend<C> for Store<K, A>
    where\n K: Ord + for<'de> Deserialize<'de> + Serialize + Send,\n A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,\n C: Clone + From<CombinedChangeSet<K, A>> + Into<CombinedChangeSet<K, A>>,
    "]] +"bdk_sqlite":[["impl<K, A, C> PersistBackend<C> for Store<K, A>
    where\n K: Ord + for<'de> Deserialize<'de> + Serialize + Send,\n A: Anchor + for<'de> Deserialize<'de> + Serialize + Send,\n C: Clone + From<CombinedChangeSet<K, A>> + Into<CombinedChangeSet<K, A>>,
    "]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js index 63ca09f61c..bec1ab5391 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/clone/trait.Clone.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Clone for ConfirmationTime"],["impl Clone for ApplyHeaderError"],["impl Clone for Balance"],["impl Clone for AlterCheckPointError"],["impl Clone for CannotConnectError"],["impl Clone for CheckPoint"],["impl Clone for LocalChain"],["impl Clone for MissingGenesisError"],["impl Clone for BlockId"],["impl Clone for ConfirmationHeightAnchor"],["impl Clone for ConfirmationTimeHeightAnchor"],["impl Clone for DescriptorId"],["impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>"],["impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>"],["impl<A: Clone> Clone for ChainPosition<A>"],["impl<A: Clone> Clone for FullTxOut<A>"],["impl<A: Clone> Clone for ChangeSet<A>"],["impl<A: Clone> Clone for TxGraph<A>"],["impl<A: Clone, IA: Clone> Clone for ChangeSet<A, IA>"],["impl<D: Clone> Clone for SpkIterator<D>"],["impl<I: Clone> Clone for SpkTxOutIndex<I>"],["impl<K: Clone> Clone for ChangeSet<K>"],["impl<K: Clone> Clone for KeychainTxOutIndex<K>"]], +"bdk_chain":[["impl Clone for ConfirmationTime"],["impl Clone for ApplyHeaderError"],["impl Clone for Balance"],["impl Clone for AlterCheckPointError"],["impl Clone for CannotConnectError"],["impl Clone for CheckPoint"],["impl Clone for LocalChain"],["impl Clone for MissingGenesisError"],["impl Clone for BlockId"],["impl Clone for ConfirmationHeightAnchor"],["impl Clone for ConfirmationTimeHeightAnchor"],["impl Clone for DescriptorId"],["impl<'a, T: Clone, A: Clone> Clone for CanonicalTx<'a, T, A>"],["impl<'a, T: Clone, A: Clone> Clone for TxNode<'a, T, A>"],["impl<A: Clone> Clone for ChainPosition<A>"],["impl<A: Clone> Clone for FullTxOut<A>"],["impl<A: Clone> Clone for ChangeSet<A>"],["impl<A: Clone> Clone for TxGraph<A>"],["impl<A: Clone, IA: Clone> Clone for ChangeSet<A, IA>"],["impl<D: Clone> Clone for SpkIterator<D>"],["impl<I: Clone> Clone for SpkTxOutIndex<I>"],["impl<K: Clone> Clone for InsertDescriptorError<K>"],["impl<K: Clone> Clone for ChangeSet<K>"],["impl<K: Clone> Clone for KeychainTxOutIndex<K>"],["impl<K: Clone> Clone for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl Clone for ExcessStrategyKind"],["impl Clone for SelectionConstraint"],["impl Clone for CoinSelectorOpt"],["impl Clone for ExcessStrategy"],["impl Clone for Selection"],["impl Clone for SelectionError"],["impl Clone for WeightedValue"],["impl<'a> Clone for CoinSelector<'a>"]], "bdk_persist":[["impl<K: Clone, A: Clone> Clone for CombinedChangeSet<K, A>"]], "bdk_tmp_plan":[["impl Clone for SigningError"],["impl Clone for SatisfactionMaterial"],["impl<AK: Clone> Clone for Plan<AK>"],["impl<Ak: Clone> Clone for RequiredSignatures<Ak>"],["impl<Ak: Clone> Clone for PlanKey<Ak>"],["impl<Ak: Clone> Clone for Requirements<Ak>"],["impl<K: Clone> Clone for Assets<K>"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js index 53b5dffb5f..8134cd02ff 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.Eq.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Eq for ConfirmationTime"],["impl Eq for CalculateFeeError"],["impl Eq for Balance"],["impl Eq for BlockId"],["impl Eq for ConfirmationHeightAnchor"],["impl Eq for ConfirmationTimeHeightAnchor"],["impl Eq for DescriptorId"],["impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>"],["impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>"],["impl<A: Eq> Eq for ChainPosition<A>"],["impl<A: Eq> Eq for FullTxOut<A>"]], +"bdk_chain":[["impl Eq for ConfirmationTime"],["impl Eq for CalculateFeeError"],["impl Eq for Balance"],["impl Eq for BlockId"],["impl Eq for ConfirmationHeightAnchor"],["impl Eq for ConfirmationTimeHeightAnchor"],["impl Eq for DescriptorId"],["impl<'a, T: Eq, A: Eq> Eq for CanonicalTx<'a, T, A>"],["impl<'a, T: Eq, A: Eq> Eq for TxNode<'a, T, A>"],["impl<A: Eq> Eq for ChainPosition<A>"],["impl<A: Eq> Eq for FullTxOut<A>"],["impl<K: Eq> Eq for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl Eq for ExcessStrategyKind"],["impl Eq for SelectionConstraint"]], "bdk_wallet":[["impl Eq for PkOrF"],["impl Eq for PolicyError"],["impl Eq for Satisfaction"],["impl Eq for SatisfiableItem"],["impl Eq for KeychainKind"],["impl Eq for Utxo"],["impl Eq for ScriptContextEnum"],["impl Eq for SignerContext"],["impl Eq for SignerId"],["impl Eq for TapLeavesOptions"],["impl Eq for ChangeSpendPolicy"],["impl Eq for TxOrdering"],["impl Eq for Condition"],["impl Eq for Policy"],["impl Eq for LocalOutput"],["impl Eq for WeightedUtxo"],["impl Eq for SignerOrdering"],["impl Eq for AddressInfo"]], "example_cli":[["impl Eq for Keychain"]] diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js index f19cf22bc4..147e590700 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/cmp/trait.PartialEq.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl PartialEq for ConfirmationTime"],["impl PartialEq for ApplyHeaderError"],["impl PartialEq for CalculateFeeError"],["impl PartialEq for Balance"],["impl PartialEq for AlterCheckPointError"],["impl PartialEq for CannotConnectError"],["impl PartialEq for CheckPoint"],["impl PartialEq for LocalChain"],["impl PartialEq for MissingGenesisError"],["impl PartialEq for BlockId"],["impl PartialEq for ConfirmationHeightAnchor"],["impl PartialEq for ConfirmationTimeHeightAnchor"],["impl PartialEq for DescriptorId"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for TxNode<'a, T, A>"],["impl<A: PartialEq> PartialEq for ChainPosition<A>"],["impl<A: PartialEq> PartialEq for FullTxOut<A>"],["impl<A: PartialEq> PartialEq for ChangeSet<A>"],["impl<A: PartialEq> PartialEq for TxGraph<A>"],["impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>"],["impl<K: PartialEq> PartialEq for ChangeSet<K>"]], +"bdk_chain":[["impl PartialEq for ConfirmationTime"],["impl PartialEq for ApplyHeaderError"],["impl PartialEq for CalculateFeeError"],["impl PartialEq for Balance"],["impl PartialEq for AlterCheckPointError"],["impl PartialEq for CannotConnectError"],["impl PartialEq for CheckPoint"],["impl PartialEq for LocalChain"],["impl PartialEq for MissingGenesisError"],["impl PartialEq for BlockId"],["impl PartialEq for ConfirmationHeightAnchor"],["impl PartialEq for ConfirmationTimeHeightAnchor"],["impl PartialEq for DescriptorId"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T: PartialEq, A: PartialEq> PartialEq for TxNode<'a, T, A>"],["impl<A: PartialEq> PartialEq for ChainPosition<A>"],["impl<A: PartialEq> PartialEq for FullTxOut<A>"],["impl<A: PartialEq> PartialEq for ChangeSet<A>"],["impl<A: PartialEq> PartialEq for TxGraph<A>"],["impl<A: PartialEq, IA: PartialEq> PartialEq for ChangeSet<A, IA>"],["impl<K: PartialEq> PartialEq for InsertDescriptorError<K>"],["impl<K: PartialEq> PartialEq for ChangeSet<K>"],["impl<K: PartialEq> PartialEq for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl PartialEq for ExcessStrategyKind"],["impl PartialEq for SelectionConstraint"]], "bdk_persist":[["impl<K: PartialEq, A: PartialEq> PartialEq for CombinedChangeSet<K, A>"]], "bdk_wallet":[["impl PartialEq for PkOrF"],["impl PartialEq for PolicyError"],["impl PartialEq for Satisfaction"],["impl PartialEq for SatisfiableItem"],["impl PartialEq for KeychainKind"],["impl PartialEq for Utxo"],["impl PartialEq for ScriptContextEnum"],["impl PartialEq for SignerContext"],["impl PartialEq for SignerId"],["impl PartialEq for TapLeavesOptions"],["impl PartialEq for ChangeSpendPolicy"],["impl PartialEq for TxOrdering"],["impl PartialEq for Condition"],["impl PartialEq for Policy"],["impl PartialEq for LocalOutput"],["impl PartialEq for WeightedUtxo"],["impl PartialEq for SignerOrdering"],["impl PartialEq for AddressInfo"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js index 74f23a71da..dbd166d78e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.AsRef.js @@ -1,4 +1,4 @@ (function() {var implementors = { "bdk_chain":[["impl AsRef<[u8; 32]> for DescriptorId"],["impl AsRef<[u8]> for DescriptorId"],["impl<A> AsRef<TxGraph<A>> for TxGraph<A>"],["impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>"]], -"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]] +"bdk_wallet":[["impl AsRef<TxGraph<ConfirmationTimeHeightAnchor>> for Wallet"],["impl AsRef<[u8]> for KeychainKind"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js index 53151dcc28..ffa9a2c80c 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/convert/trait.From.js @@ -2,8 +2,8 @@ "bdk_chain":[["impl From<(&u32, &BlockHash)> for BlockId"],["impl From<(u32, BlockHash)> for BlockId"],["impl From<ChainPosition<ConfirmationTimeHeightAnchor>> for ConfirmationTime"],["impl From<BlockId> for (u32, BlockHash)"],["impl From<DescriptorId> for Hash"],["impl From<Hash> for DescriptorId"],["impl<A, IA: Default> From<ChangeSet<A>> for ChangeSet<A, IA>"],["impl<A, K> From<ChangeSet<K>> for ChangeSet<A, ChangeSet<K>>"]], "bdk_coin_select":[["impl From<usize> for BnbLimit"],["impl From<Duration> for BnbLimit"]], "bdk_file_store":[["impl From<Error> for FileError"],["impl From<Error> for IterError"]], -"bdk_persist":[["impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>"],["impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>"]], +"bdk_persist":[["impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>"],["impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>"]], "bdk_tmp_plan":[["impl From<Error> for SigningError"],["impl From<P2wpkhError> for SigningError"],["impl From<TaprootError> for SigningError"]], -"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<KeyError> for Error"],["impl From<Error> for CreateTxError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<bool> for Satisfaction"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Error> for CreateTxError"],["impl From<Fingerprint> for SignerId"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<Hash> for SignerId"],["impl From<HexToBytesError> for Error"],["impl From<InputsIndexError> for SignerError"],["impl From<P2wpkhError> for SignerError"],["impl From<ParsePublicKeyError> for Error"],["impl From<SyncResult> for Update"],["impl From<TaprootError> for SignerError"],["impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>"]], +"bdk_wallet":[["impl From<Error> for CreateTxError"],["impl From<PolicyError> for Error"],["impl From<PolicyError> for CreateTxError"],["impl From<SatisfiableItem> for Policy"],["impl From<KeyError> for Error"],["impl From<Error> for CreateTxError"],["impl From<MiniscriptPsbtError> for CreateTxError"],["impl From<bool> for Satisfaction"],["impl From<FullScanResult<KeychainKind>> for Update"],["impl From<SyncResult> for Update"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for Error"],["impl From<Error> for KeyError"],["impl From<Error> for KeyError"],["impl From<Error> for CreateTxError"],["impl From<Fingerprint> for SignerId"],["impl From<Hash> for SignerId"],["impl From<HexToBytesError> for Error"],["impl From<InputsIndexError> for SignerError"],["impl From<P2wpkhError> for SignerError"],["impl From<ParsePublicKeyError> for Error"],["impl From<TaprootError> for SignerError"],["impl<Ctx: ScriptContext> From<Xpriv> for ExtendedKey<Ctx>"],["impl<Ctx: ScriptContext> From<Xpub> for ExtendedKey<Ctx>"]], "example_bitcoind_rpc_polling":[["impl From<RpcArgs> for Auth"]] };if (window.register_implementors) {window.register_implementors(implementors);} else {window.pending_implementors = implementors;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js index 3767f03388..b4b077aba8 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/error/trait.Error.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Error for ApplyHeaderError"],["impl Error for CalculateFeeError"],["impl Error for AlterCheckPointError"],["impl Error for CannotConnectError"],["impl Error for MissingGenesisError"]], +"bdk_chain":[["impl Error for ApplyHeaderError"],["impl Error for CalculateFeeError"],["impl Error for AlterCheckPointError"],["impl Error for CannotConnectError"],["impl Error for MissingGenesisError"],["impl<K: Debug> Error for InsertDescriptorError<K>"]], "bdk_coin_select":[["impl Error for SelectionError"]], "bdk_file_store":[["impl Error for FileError"],["impl Error for IterError"],["impl<C: Debug> Error for AggregateChangesetsError<C>"]], "bdk_sqlite":[["impl Error for Error"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js index 4b3d2287c1..4e2755905a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Debug.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<B: Debug> Debug for BlockEvent<B>"]], -"bdk_chain":[["impl Debug for ConfirmationTime"],["impl Debug for ApplyHeaderError"],["impl Debug for CalculateFeeError"],["impl Debug for Balance"],["impl Debug for AlterCheckPointError"],["impl Debug for CannotConnectError"],["impl Debug for CheckPoint"],["impl Debug for LocalChain"],["impl Debug for MissingGenesisError"],["impl Debug for BlockId"],["impl Debug for ConfirmationHeightAnchor"],["impl Debug for ConfirmationTimeHeightAnchor"],["impl Debug for DescriptorId"],["impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>"],["impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl<A: Debug> Debug for FullTxOut<A>"],["impl<A: Debug> Debug for ChangeSet<A>"],["impl<A: Debug> Debug for TxGraph<A>"],["impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>"],["impl<A: Debug, IA: Debug> Debug for ChangeSet<A, IA>"],["impl<I: Debug> Debug for SpkTxOutIndex<I>"],["impl<K: Debug> Debug for ChangeSet<K>"],["impl<K: Debug> Debug for KeychainTxOutIndex<K>"]], +"bdk_chain":[["impl Debug for ConfirmationTime"],["impl Debug for ApplyHeaderError"],["impl Debug for CalculateFeeError"],["impl Debug for Balance"],["impl Debug for AlterCheckPointError"],["impl Debug for CannotConnectError"],["impl Debug for CheckPoint"],["impl Debug for LocalChain"],["impl Debug for MissingGenesisError"],["impl Debug for BlockId"],["impl Debug for ConfirmationHeightAnchor"],["impl Debug for ConfirmationTimeHeightAnchor"],["impl Debug for DescriptorId"],["impl<'a, T: Debug, A: Debug> Debug for CanonicalTx<'a, T, A>"],["impl<'a, T: Debug, A: Debug> Debug for TxNode<'a, T, A>"],["impl<A: Debug> Debug for ChainPosition<A>"],["impl<A: Debug> Debug for FullTxOut<A>"],["impl<A: Debug> Debug for ChangeSet<A>"],["impl<A: Debug> Debug for TxGraph<A>"],["impl<A: Debug, I: Debug> Debug for IndexedTxGraph<A, I>"],["impl<A: Debug, IA: Debug> Debug for ChangeSet<A, IA>"],["impl<I: Debug> Debug for SpkTxOutIndex<I>"],["impl<K: Debug> Debug for InsertDescriptorError<K>"],["impl<K: Debug> Debug for ChangeSet<K>"],["impl<K: Debug> Debug for KeychainTxOutIndex<K>"],["impl<K: Debug> Debug for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl Debug for ExcessStrategyKind"],["impl Debug for SelectionConstraint"],["impl Debug for CoinSelectorOpt"],["impl Debug for ExcessStrategy"],["impl Debug for Selection"],["impl Debug for SelectionError"],["impl Debug for WeightedValue"],["impl<'a> Debug for CoinSelector<'a>"]], "bdk_electrum":[["impl<E: Debug> Debug for BdkElectrumClient<E>"]], "bdk_file_store":[["impl Debug for FileError"],["impl Debug for IterError"],["impl<C> Debug for Store<C>
    where\n C: Sync + Send + Debug,
    "],["impl<C: Debug> Debug for AggregateChangesetsError<C>"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js index 82aafac8c4..edae6eed43 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/fmt/trait.Display.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl Display for ApplyHeaderError"],["impl Display for CalculateFeeError"],["impl Display for Balance"],["impl Display for AlterCheckPointError"],["impl Display for CannotConnectError"],["impl Display for MissingGenesisError"],["impl Display for DescriptorId"]], +"bdk_chain":[["impl Display for ApplyHeaderError"],["impl Display for CalculateFeeError"],["impl Display for Balance"],["impl Display for AlterCheckPointError"],["impl Display for CannotConnectError"],["impl Display for MissingGenesisError"],["impl Display for DescriptorId"],["impl<K: Debug> Display for InsertDescriptorError<K>"],["impl<K: Debug> Display for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl Display for ExcessStrategyKind"],["impl Display for SelectionConstraint"],["impl Display for SelectionError"]], "bdk_file_store":[["impl Display for FileError"],["impl Display for IterError"],["impl<C> Display for AggregateChangesetsError<C>"]], "bdk_sqlite":[["impl Display for Error"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js index 1e469f9a03..0056774fbb 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Freeze.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Freeze for Emitter<'c, C>",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Freeze for BlockEvent<B>
    where\n B: Freeze,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Freeze for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Freeze for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Freeze for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Freeze for TxAncestors<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Freeze for ChainPosition<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Freeze for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Freeze for FullTxOut<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Freeze for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>
    where\n I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for ChangeSet<A, IA>
    where\n IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Freeze for SpkIterator<D>
    where\n D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Freeze for ChangeSet<K>",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Freeze for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]]], +"bdk_chain":[["impl Freeze for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Freeze for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Freeze for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Freeze for Balance",1,["bdk_chain::keychain::Balance"]],["impl Freeze for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Freeze for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Freeze for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Freeze for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Freeze for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Freeze for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Freeze for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Freeze for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Freeze for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Freeze for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Freeze for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Freeze for CanonicalTx<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Freeze for TxNode<'a, T, A>
    where\n T: Freeze,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Freeze for TxAncestors<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Freeze for TxDescendants<'g, A, F>
    where\n F: Freeze,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Freeze for ChainPosition<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Freeze for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Freeze for FullTxOut<A>
    where\n A: Freeze,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Freeze for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Freeze for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Freeze for IndexedTxGraph<A, I>
    where\n I: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Freeze for ChangeSet<A, IA>
    where\n IA: Freeze,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Freeze for SpkIterator<D>
    where\n D: Freeze,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Freeze for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !Freeze for InsertDescriptorError<K>",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Freeze for ChangeSet<K>",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Freeze for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Freeze for NoSuchKeychain<K>
    where\n K: Freeze,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K> Freeze for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Freeze for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]]], "bdk_coin_select":[["impl Freeze for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Freeze for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Freeze for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Freeze for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Freeze for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Freeze for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Freeze for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Freeze for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Freeze for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Freeze for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> Freeze for BnbIter<'c, 'f, S>
    where\n S: Freeze,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Freeze for Bnb<'c, S>
    where\n S: Freeze,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Freeze for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> !Freeze for BdkElectrumClient<E>",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Freeze for ElectrumFullScanResult<K>",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Freeze for FileError",1,["bdk_file_store::FileError"]],["impl Freeze for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Freeze for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Freeze for AggregateChangesetsError<C>
    where\n C: Freeze,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Freeze for Store<C>",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js index 8ce2dc9c7c..4d03041d57 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Send.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Send for Emitter<'c, C>
    where\n C: Sync,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Send for BlockEvent<B>
    where\n B: Send,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Send for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Send for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Send for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Send for TxNode<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Send for TxAncestors<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Send for ChainPosition<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Send for SyncResult<A>
    where\n A: Send,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Send for FullTxOut<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Send for ChangeSet<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Send for TxGraph<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Send for IndexedTxGraph<A, I>
    where\n I: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for ChangeSet<A, IA>
    where\n IA: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Send for SpkIterator<D>
    where\n D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Send for SpkTxOutIndex<I>
    where\n I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Send for ChangeSet<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Send for KeychainTxOutIndex<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for FullScanRequest<K>
    where\n K: Send,
    ",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Send for FullScanResult<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], +"bdk_chain":[["impl Send for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Send for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Send for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Send for Balance",1,["bdk_chain::keychain::Balance"]],["impl Send for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Send for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Send for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Send for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Send for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Send for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Send for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Send for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Send for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Send for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Send for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Send for CanonicalTx<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Send for TxNode<'a, T, A>
    where\n T: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Send for TxAncestors<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Send for TxDescendants<'g, A, F>
    where\n F: Send,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Send for ChainPosition<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Send for SyncResult<A>
    where\n A: Send,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Send for FullTxOut<A>
    where\n A: Send,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Send for ChangeSet<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Send for TxGraph<A>
    where\n A: Send,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Send for IndexedTxGraph<A, I>
    where\n I: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Send for ChangeSet<A, IA>
    where\n IA: Send,\n A: Send,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Send for SpkIterator<D>
    where\n D: Send,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Send for SpkTxOutIndex<I>
    where\n I: Send,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Send for InsertDescriptorError<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Send for ChangeSet<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Send for KeychainTxOutIndex<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Send for NoSuchKeychain<K>
    where\n K: Send,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K> Send for FullScanRequest<K>
    where\n K: Send,
    ",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Send for FullScanResult<K, A>
    where\n K: Send,\n A: Send,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], "bdk_coin_select":[["impl Send for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Send for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Send for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Send for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Send for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Send for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Send for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Send for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Send for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Send for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !Send for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Send for Bnb<'c, S>
    where\n S: Send,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Send for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> Send for BdkElectrumClient<E>
    where\n E: Send,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Send for ElectrumFullScanResult<K>
    where\n K: Send,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Send for FileError",1,["bdk_file_store::FileError"]],["impl Send for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Send for EntryIter<'t, T>
    where\n T: Send,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Send for AggregateChangesetsError<C>
    where\n C: Send,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Send for Store<C>",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js index 61e7b5c59d..0a9ed01375 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.StructuralPartialEq.js @@ -1,5 +1,5 @@ (function() {var implementors = { -"bdk_chain":[["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for ApplyHeaderError"],["impl StructuralPartialEq for CalculateFeeError"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for AlterCheckPointError"],["impl StructuralPartialEq for CannotConnectError"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for MissingGenesisError"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationHeightAnchor"],["impl StructuralPartialEq for ConfirmationTimeHeightAnchor"],["impl StructuralPartialEq for DescriptorId"],["impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>"],["impl<A> StructuralPartialEq for ChainPosition<A>"],["impl<A> StructuralPartialEq for FullTxOut<A>"],["impl<A> StructuralPartialEq for ChangeSet<A>"],["impl<A> StructuralPartialEq for TxGraph<A>"],["impl<A, IA> StructuralPartialEq for ChangeSet<A, IA>"],["impl<K> StructuralPartialEq for ChangeSet<K>"]], +"bdk_chain":[["impl StructuralPartialEq for ConfirmationTime"],["impl StructuralPartialEq for ApplyHeaderError"],["impl StructuralPartialEq for CalculateFeeError"],["impl StructuralPartialEq for Balance"],["impl StructuralPartialEq for AlterCheckPointError"],["impl StructuralPartialEq for CannotConnectError"],["impl StructuralPartialEq for LocalChain"],["impl StructuralPartialEq for MissingGenesisError"],["impl StructuralPartialEq for BlockId"],["impl StructuralPartialEq for ConfirmationHeightAnchor"],["impl StructuralPartialEq for ConfirmationTimeHeightAnchor"],["impl StructuralPartialEq for DescriptorId"],["impl<'a, T, A> StructuralPartialEq for CanonicalTx<'a, T, A>"],["impl<'a, T, A> StructuralPartialEq for TxNode<'a, T, A>"],["impl<A> StructuralPartialEq for ChainPosition<A>"],["impl<A> StructuralPartialEq for FullTxOut<A>"],["impl<A> StructuralPartialEq for ChangeSet<A>"],["impl<A> StructuralPartialEq for TxGraph<A>"],["impl<A, IA> StructuralPartialEq for ChangeSet<A, IA>"],["impl<K> StructuralPartialEq for InsertDescriptorError<K>"],["impl<K> StructuralPartialEq for ChangeSet<K>"],["impl<K> StructuralPartialEq for NoSuchKeychain<K>"]], "bdk_coin_select":[["impl StructuralPartialEq for ExcessStrategyKind"],["impl StructuralPartialEq for SelectionConstraint"]], "bdk_persist":[["impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>"]], "bdk_wallet":[["impl StructuralPartialEq for PkOrF"],["impl StructuralPartialEq for PolicyError"],["impl StructuralPartialEq for Satisfaction"],["impl StructuralPartialEq for SatisfiableItem"],["impl StructuralPartialEq for KeychainKind"],["impl StructuralPartialEq for Utxo"],["impl StructuralPartialEq for ScriptContextEnum"],["impl StructuralPartialEq for SignerContext"],["impl StructuralPartialEq for SignerId"],["impl StructuralPartialEq for TapLeavesOptions"],["impl StructuralPartialEq for ChangeSpendPolicy"],["impl StructuralPartialEq for TxOrdering"],["impl StructuralPartialEq for Condition"],["impl StructuralPartialEq for Policy"],["impl StructuralPartialEq for LocalOutput"],["impl StructuralPartialEq for WeightedUtxo"],["impl StructuralPartialEq for SignerOrdering"],["impl StructuralPartialEq for AddressInfo"]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js index c9f6219943..521a4ded86 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Sync.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Sync for Emitter<'c, C>
    where\n C: Sync,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Sync for BlockEvent<B>
    where\n B: Sync,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl !Sync for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Sync for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Sync for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Sync for TxAncestors<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Sync for ChainPosition<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Sync for SyncResult<A>
    where\n A: Sync,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Sync for FullTxOut<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Sync for ChangeSet<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Sync for TxGraph<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Sync for IndexedTxGraph<A, I>
    where\n I: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for ChangeSet<A, IA>
    where\n IA: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Sync for SpkIterator<D>
    where\n D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Sync for SpkTxOutIndex<I>
    where\n I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !Sync for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Sync for ChangeSet<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Sync for KeychainTxOutIndex<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K, A> Sync for FullScanResult<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], +"bdk_chain":[["impl !Sync for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Sync for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Sync for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Sync for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Sync for Balance",1,["bdk_chain::keychain::Balance"]],["impl Sync for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Sync for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Sync for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Sync for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Sync for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Sync for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Sync for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Sync for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Sync for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Sync for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Sync for CanonicalTx<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Sync for TxNode<'a, T, A>
    where\n T: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Sync for TxAncestors<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Sync for TxDescendants<'g, A, F>
    where\n F: Sync,\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Sync for ChainPosition<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Sync for SyncResult<A>
    where\n A: Sync,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Sync for FullTxOut<A>
    where\n A: Sync,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Sync for ChangeSet<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Sync for TxGraph<A>
    where\n A: Sync,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Sync for IndexedTxGraph<A, I>
    where\n I: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Sync for ChangeSet<A, IA>
    where\n IA: Sync,\n A: Sync,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Sync for SpkIterator<D>
    where\n D: Sync,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Sync for SpkTxOutIndex<I>
    where\n I: Sync,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !Sync for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> Sync for InsertDescriptorError<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Sync for ChangeSet<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Sync for KeychainTxOutIndex<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Sync for NoSuchKeychain<K>
    where\n K: Sync,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K, A> Sync for FullScanResult<K, A>
    where\n K: Sync,\n A: Sync,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], "bdk_coin_select":[["impl Sync for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Sync for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Sync for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Sync for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Sync for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Sync for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Sync for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Sync for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Sync for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Sync for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !Sync for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Sync for Bnb<'c, S>
    where\n S: Sync,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Sync for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> Sync for BdkElectrumClient<E>
    where\n E: Sync,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Sync for ElectrumFullScanResult<K>
    where\n K: Sync,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Sync for FileError",1,["bdk_file_store::FileError"]],["impl Sync for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Sync for EntryIter<'t, T>
    where\n T: Sync,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Sync for AggregateChangesetsError<C>
    where\n C: Sync,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Sync for Store<C>",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js index a8fd731794..82027a823d 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/marker/trait.Unpin.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> Unpin for Emitter<'c, C>",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> Unpin for BlockEvent<B>
    where\n B: Unpin,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Unpin for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Unpin for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Unpin for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Unpin for TxAncestors<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Unpin for ChainPosition<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Unpin for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Unpin for FullTxOut<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Unpin for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>
    where\n I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for ChangeSet<A, IA>
    where\n IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Unpin for SpkIterator<D>
    where\n D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Unpin for SpkTxOutIndex<I>
    where\n I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Unpin for ChangeSet<K>",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Unpin for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Unpin for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]]], +"bdk_chain":[["impl Unpin for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl Unpin for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl Unpin for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl Unpin for Balance",1,["bdk_chain::keychain::Balance"]],["impl Unpin for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl Unpin for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl Unpin for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl Unpin for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl Unpin for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl Unpin for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl Unpin for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl Unpin for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl Unpin for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl Unpin for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl Unpin for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> Unpin for CanonicalTx<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> Unpin for TxNode<'a, T, A>
    where\n T: Unpin,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> Unpin for TxAncestors<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> Unpin for TxDescendants<'g, A, F>
    where\n F: Unpin,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> Unpin for ChainPosition<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> Unpin for SyncResult<A>",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> Unpin for FullTxOut<A>
    where\n A: Unpin,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> Unpin for ChangeSet<A>",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> Unpin for TxGraph<A>",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> Unpin for IndexedTxGraph<A, I>
    where\n I: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> Unpin for ChangeSet<A, IA>
    where\n IA: Unpin,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> Unpin for SpkIterator<D>
    where\n D: Unpin,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> Unpin for SpkTxOutIndex<I>
    where\n I: Unpin,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> Unpin for InsertDescriptorError<K>
    where\n K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> Unpin for ChangeSet<K>",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> Unpin for KeychainTxOutIndex<K>
    where\n K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> Unpin for NoSuchKeychain<K>
    where\n K: Unpin,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K> Unpin for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K, A> Unpin for FullScanResult<K, A>",1,["bdk_chain::spk_client::FullScanResult"]]], "bdk_coin_select":[["impl Unpin for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl Unpin for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl Unpin for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl Unpin for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl Unpin for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl Unpin for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl Unpin for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl Unpin for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl Unpin for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> Unpin for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> Unpin for BnbIter<'c, 'f, S>
    where\n S: Unpin,
    ",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> Unpin for Bnb<'c, S>
    where\n S: Unpin,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl Unpin for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> Unpin for BdkElectrumClient<E>
    where\n E: Unpin,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> Unpin for ElectrumFullScanResult<K>",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl Unpin for FileError",1,["bdk_file_store::FileError"]],["impl Unpin for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> Unpin for EntryIter<'t, T>
    where\n T: Unpin,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> Unpin for AggregateChangesetsError<C>
    where\n C: Unpin,
    ",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> Unpin for Store<C>
    where\n C: Unpin,
    ",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js index 4587f9ffa8..ce12b1e2e5 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> RefUnwindSafe for Emitter<'c, C>
    where\n C: RefUnwindSafe,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> RefUnwindSafe for BlockEvent<B>
    where\n B: RefUnwindSafe,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl !RefUnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl RefUnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl RefUnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> RefUnwindSafe for TxAncestors<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> RefUnwindSafe for ChainPosition<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> RefUnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> RefUnwindSafe for FullTxOut<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> RefUnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> RefUnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>
    where\n I: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for ChangeSet<A, IA>
    where\n IA: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> RefUnwindSafe for SpkIterator<D>
    where\n D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> RefUnwindSafe for SpkTxOutIndex<I>
    where\n I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !RefUnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> RefUnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], +"bdk_chain":[["impl !RefUnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl RefUnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl RefUnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl RefUnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl RefUnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl RefUnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl RefUnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl RefUnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl RefUnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl RefUnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl RefUnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl RefUnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl RefUnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl RefUnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl RefUnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> RefUnwindSafe for CanonicalTx<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> RefUnwindSafe for TxNode<'a, T, A>
    where\n T: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> RefUnwindSafe for TxAncestors<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> RefUnwindSafe for TxDescendants<'g, A, F>
    where\n F: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> RefUnwindSafe for ChainPosition<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> RefUnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> RefUnwindSafe for FullTxOut<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> RefUnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> RefUnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> RefUnwindSafe for IndexedTxGraph<A, I>
    where\n I: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> RefUnwindSafe for ChangeSet<A, IA>
    where\n IA: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> RefUnwindSafe for SpkIterator<D>
    where\n D: RefUnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> RefUnwindSafe for SpkTxOutIndex<I>
    where\n I: RefUnwindSafe,
    ",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !RefUnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> RefUnwindSafe for InsertDescriptorError<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> RefUnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> RefUnwindSafe for KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> RefUnwindSafe for NoSuchKeychain<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K, A> RefUnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], "bdk_coin_select":[["impl RefUnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl RefUnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl RefUnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl RefUnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl RefUnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl RefUnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl RefUnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl RefUnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl RefUnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> RefUnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !RefUnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> RefUnwindSafe for Bnb<'c, S>
    where\n S: RefUnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl RefUnwindSafe for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> RefUnwindSafe for BdkElectrumClient<E>
    where\n E: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> RefUnwindSafe for ElectrumFullScanResult<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl !RefUnwindSafe for FileError",1,["bdk_file_store::FileError"]],["impl !RefUnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> RefUnwindSafe for EntryIter<'t, T>
    where\n T: RefUnwindSafe,
    ",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> !RefUnwindSafe for AggregateChangesetsError<C>",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> RefUnwindSafe for Store<C>
    where\n C: RefUnwindSafe,
    ",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js index 44202e5958..3b5f4dbc53 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js @@ -1,6 +1,6 @@ (function() {var implementors = { "bdk_bitcoind_rpc":[["impl<'c, C> UnwindSafe for Emitter<'c, C>
    where\n C: RefUnwindSafe,
    ",1,["bdk_bitcoind_rpc::Emitter"]],["impl<B> UnwindSafe for BlockEvent<B>
    where\n B: UnwindSafe,
    ",1,["bdk_bitcoind_rpc::BlockEvent"]]], -"bdk_chain":[["impl !UnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl UnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl UnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> UnwindSafe for TxAncestors<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> UnwindSafe for ChainPosition<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> UnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> UnwindSafe for FullTxOut<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> UnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> UnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>
    where\n I: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for ChangeSet<A, IA>
    where\n IA: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> UnwindSafe for SpkIterator<D>
    where\n D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> UnwindSafe for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !UnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> UnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K, A> UnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], +"bdk_chain":[["impl !UnwindSafe for SyncRequest",1,["bdk_chain::spk_client::SyncRequest"]],["impl UnwindSafe for ConfirmationTime",1,["bdk_chain::chain_data::ConfirmationTime"]],["impl UnwindSafe for ApplyHeaderError",1,["bdk_chain::local_chain::ApplyHeaderError"]],["impl UnwindSafe for CalculateFeeError",1,["bdk_chain::tx_graph::CalculateFeeError"]],["impl UnwindSafe for Balance",1,["bdk_chain::keychain::Balance"]],["impl UnwindSafe for AlterCheckPointError",1,["bdk_chain::local_chain::AlterCheckPointError"]],["impl UnwindSafe for CannotConnectError",1,["bdk_chain::local_chain::CannotConnectError"]],["impl UnwindSafe for CheckPoint",1,["bdk_chain::local_chain::CheckPoint"]],["impl UnwindSafe for CheckPointIter",1,["bdk_chain::local_chain::CheckPointIter"]],["impl UnwindSafe for LocalChain",1,["bdk_chain::local_chain::LocalChain"]],["impl UnwindSafe for MissingGenesisError",1,["bdk_chain::local_chain::MissingGenesisError"]],["impl UnwindSafe for BlockId",1,["bdk_chain::chain_data::BlockId"]],["impl UnwindSafe for ConfirmationHeightAnchor",1,["bdk_chain::chain_data::ConfirmationHeightAnchor"]],["impl UnwindSafe for ConfirmationTimeHeightAnchor",1,["bdk_chain::chain_data::ConfirmationTimeHeightAnchor"]],["impl UnwindSafe for DescriptorId",1,["bdk_chain::descriptor_ext::DescriptorId"]],["impl<'a, T, A> UnwindSafe for CanonicalTx<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::CanonicalTx"]],["impl<'a, T, A> UnwindSafe for TxNode<'a, T, A>
    where\n T: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxNode"]],["impl<'g, A, F> UnwindSafe for TxAncestors<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxAncestors"]],["impl<'g, A, F> UnwindSafe for TxDescendants<'g, A, F>
    where\n F: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxDescendants"]],["impl<A> UnwindSafe for ChainPosition<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::ChainPosition"]],["impl<A> UnwindSafe for SyncResult<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::SyncResult"]],["impl<A> UnwindSafe for FullTxOut<A>
    where\n A: UnwindSafe,
    ",1,["bdk_chain::chain_data::FullTxOut"]],["impl<A> UnwindSafe for ChangeSet<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::ChangeSet"]],["impl<A> UnwindSafe for TxGraph<A>
    where\n A: RefUnwindSafe,
    ",1,["bdk_chain::tx_graph::TxGraph"]],["impl<A, I> UnwindSafe for IndexedTxGraph<A, I>
    where\n I: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::IndexedTxGraph"]],["impl<A, IA> UnwindSafe for ChangeSet<A, IA>
    where\n IA: UnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::indexed_tx_graph::ChangeSet"]],["impl<D> UnwindSafe for SpkIterator<D>
    where\n D: UnwindSafe,
    ",1,["bdk_chain::spk_iter::SpkIterator"]],["impl<I> UnwindSafe for SpkTxOutIndex<I>",1,["bdk_chain::spk_txout_index::SpkTxOutIndex"]],["impl<K> !UnwindSafe for FullScanRequest<K>",1,["bdk_chain::spk_client::FullScanRequest"]],["impl<K> UnwindSafe for InsertDescriptorError<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::InsertDescriptorError"]],["impl<K> UnwindSafe for ChangeSet<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::ChangeSet"]],["impl<K> UnwindSafe for KeychainTxOutIndex<K>",1,["bdk_chain::keychain::txout_index::KeychainTxOutIndex"]],["impl<K> UnwindSafe for NoSuchKeychain<K>
    where\n K: UnwindSafe,
    ",1,["bdk_chain::keychain::txout_index::NoSuchKeychain"]],["impl<K, A> UnwindSafe for FullScanResult<K, A>
    where\n K: RefUnwindSafe,\n A: RefUnwindSafe,
    ",1,["bdk_chain::spk_client::FullScanResult"]]], "bdk_coin_select":[["impl UnwindSafe for BnbLimit",1,["bdk_coin_select::bnb::BnbLimit"]],["impl UnwindSafe for BranchStrategy",1,["bdk_coin_select::bnb::BranchStrategy"]],["impl UnwindSafe for ExcessStrategyKind",1,["bdk_coin_select::coin_selector::ExcessStrategyKind"]],["impl UnwindSafe for SelectionConstraint",1,["bdk_coin_select::coin_selector::SelectionConstraint"]],["impl UnwindSafe for CoinSelectorOpt",1,["bdk_coin_select::coin_selector::CoinSelectorOpt"]],["impl UnwindSafe for ExcessStrategy",1,["bdk_coin_select::coin_selector::ExcessStrategy"]],["impl UnwindSafe for Selection",1,["bdk_coin_select::coin_selector::Selection"]],["impl UnwindSafe for SelectionError",1,["bdk_coin_select::coin_selector::SelectionError"]],["impl UnwindSafe for WeightedValue",1,["bdk_coin_select::coin_selector::WeightedValue"]],["impl<'a> UnwindSafe for CoinSelector<'a>",1,["bdk_coin_select::coin_selector::CoinSelector"]],["impl<'c, 'f, S> !UnwindSafe for BnbIter<'c, 'f, S>",1,["bdk_coin_select::bnb::BnbIter"]],["impl<'c, S> UnwindSafe for Bnb<'c, S>
    where\n S: UnwindSafe,
    ",1,["bdk_coin_select::bnb::Bnb"]]], "bdk_electrum":[["impl UnwindSafe for ElectrumSyncResult",1,["bdk_electrum::bdk_electrum_client::ElectrumSyncResult"]],["impl<E> UnwindSafe for BdkElectrumClient<E>
    where\n E: UnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::BdkElectrumClient"]],["impl<K> UnwindSafe for ElectrumFullScanResult<K>
    where\n K: RefUnwindSafe,
    ",1,["bdk_electrum::bdk_electrum_client::ElectrumFullScanResult"]]], "bdk_file_store":[["impl !UnwindSafe for FileError",1,["bdk_file_store::FileError"]],["impl !UnwindSafe for IterError",1,["bdk_file_store::entry_iter::IterError"]],["impl<'t, T> !UnwindSafe for EntryIter<'t, T>",1,["bdk_file_store::entry_iter::EntryIter"]],["impl<C> !UnwindSafe for AggregateChangesetsError<C>",1,["bdk_file_store::store::AggregateChangesetsError"]],["impl<C> UnwindSafe for Store<C>
    where\n C: UnwindSafe,
    ",1,["bdk_file_store::store::Store"]]], diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js index 744de6a43b..a357d1a064 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/alloc/collections/btree/map/struct.BTreeMap.js @@ -1,4 +1,4 @@ (function() {var type_impls = { "bdk_chain":[["
    source§

    impl<K: Ord, V> Append for BTreeMap<K, V>

    source§

    fn append(&mut self, other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    ","Append","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V> ⓘ

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V> ⓘ

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V> ⓘ

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V> ⓘ

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V> ⓘ

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V> ⓘ
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V> ⓘ
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A> ⓘ
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A> ⓘ

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A> ⓘ

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_chain::local_chain::ChangeSet"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_chain::local_chain::ChangeSet"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_chain::local_chain::ChangeSet"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A> ⓘ

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_chain::local_chain::ChangeSet"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_chain::local_chain::ChangeSet"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_chain::local_chain::ChangeSet"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_chain::local_chain::ChangeSet"]], -"bdk_wallet":[["
    §

    impl<K, V> Append for BTreeMap<K, V>
    where\n K: Ord,

    §

    fn append(&mut self, other: BTreeMap<K, V>)

    Append another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    ","Append","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl IntoAssets for BTreeMap<DescriptorPublicKey, DescriptorSecretKey>

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    ","IntoAssets","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"]] +"bdk_wallet":[["
    source§

    impl<K, V> Append for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn append(&mut self, other: BTreeMap<K, V>)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    ","Append","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> BTreeMap<K, V>

    1.0.0 (const: 1.66.0) · source

    pub const fn new() -> BTreeMap<K, V>

    Makes a new, empty BTreeMap.

    \n

    Does not allocate anything on its own.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn iter(&self) -> Iter<'_, K, V>

    Gets an iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"c\");\nmap.insert(2, \"b\");\nmap.insert(1, \"a\");\n\nfor (key, value) in map.iter() {\n    println!(\"{key}: {value}\");\n}\n\nlet (first_key, first_value) = map.iter().next().unwrap();\nassert_eq!((*first_key, *first_value), (1, \"a\"));
    \n
    1.0.0 · source

    pub fn iter_mut(&mut self) -> IterMut<'_, K, V>

    Gets a mutable iterator over the entries of the map, sorted by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::from([\n   (\"a\", 1),\n   (\"b\", 2),\n   (\"c\", 3),\n]);\n\n// add 10 to the value if the key isn't \"a\"\nfor (key, value) in map.iter_mut() {\n    if key != &\"a\" {\n        *value += 10;\n    }\n}
    \n
    1.0.0 · source

    pub fn keys(&self) -> Keys<'_, K, V>

    Gets an iterator over the keys of the map, in sorted order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<_> = a.keys().cloned().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.0.0 · source

    pub fn values(&self) -> Values<'_, K, V>

    Gets an iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.values().cloned().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    1.10.0 · source

    pub fn values_mut(&mut self) -> ValuesMut<'_, K, V>

    Gets a mutable iterator over the values of the map, in order by key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, String::from(\"hello\"));\na.insert(2, String::from(\"goodbye\"));\n\nfor value in a.values_mut() {\n    value.push_str(\"!\");\n}\n\nlet values: Vec<String> = a.values().cloned().collect();\nassert_eq!(values, [String::from(\"hello!\"),\n                    String::from(\"goodbye!\")]);
    \n
    1.0.0 (const: unstable) · source

    pub fn len(&self) -> usize

    Returns the number of elements in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert_eq!(a.len(), 0);\na.insert(1, \"a\");\nassert_eq!(a.len(), 1);
    \n
    1.0.0 (const: unstable) · source

    pub fn is_empty(&self) -> bool

    Returns true if the map contains no elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\nassert!(a.is_empty());\na.insert(1, \"a\");\nassert!(!a.is_empty());
    \n
    source

    pub fn lower_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.lower_bound(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &\"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &\"b\")));\n\nlet cursor = map.lower_bound(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.lower_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &\"a\")));
    \n
    source

    pub fn lower_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap before the smallest key\ngreater than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap before the smallest key greater than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap before the smallest key greater than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap before the smallest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.lower_bound_mut(Bound::Included(&2));\nassert_eq!(cursor.peek_prev(), Some((&1, &mut \"a\")));\nassert_eq!(cursor.peek_next(), Some((&2, &mut \"b\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Excluded(&2));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.lower_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), None);\nassert_eq!(cursor.peek_next(), Some((&1, &mut \"a\")));
    \n
    source

    pub fn upper_bound<Q>(&self, bound: Bound<&Q>) -> Cursor<'_, K, V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a Cursor pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet cursor = map.upper_bound(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &\"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &\"d\")));\n\nlet cursor = map.upper_bound(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &\"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &\"c\")));\n\nlet cursor = map.upper_bound(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &\"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    source

    pub fn upper_bound_mut<Q>(&mut self, bound: Bound<&Q>) -> CursorMut<'_, K, V, A>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    🔬This is a nightly-only experimental API. (btree_cursors)

    Returns a CursorMut pointing at the gap after the greatest key\nsmaller than the given bound.

    \n

    Passing Bound::Included(x) will return a cursor pointing to the\ngap after the greatest key smaller than or equal to x.

    \n

    Passing Bound::Excluded(x) will return a cursor pointing to the\ngap after the greatest key smaller than x.

    \n

    Passing Bound::Unbounded will return a cursor pointing to the\ngap after the greatest key in the map.

    \n
    §Examples
    \n
    #![feature(btree_cursors)]\n\nuse std::collections::BTreeMap;\nuse std::ops::Bound;\n\nlet mut map = BTreeMap::from([\n    (1, \"a\"),\n    (2, \"b\"),\n    (3, \"c\"),\n    (4, \"d\"),\n]);\n\nlet mut cursor = map.upper_bound_mut(Bound::Included(&3));\nassert_eq!(cursor.peek_prev(), Some((&3, &mut \"c\")));\nassert_eq!(cursor.peek_next(), Some((&4, &mut \"d\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Excluded(&3));\nassert_eq!(cursor.peek_prev(), Some((&2, &mut \"b\")));\nassert_eq!(cursor.peek_next(), Some((&3, &mut \"c\")));\n\nlet mut cursor = map.upper_bound_mut(Bound::Unbounded);\nassert_eq!(cursor.peek_prev(), Some((&4, &mut \"d\")));\nassert_eq!(cursor.peek_next(), None);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn clear(&mut self)

    Clears the map, removing all elements.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.clear();\nassert!(a.is_empty());
    \n
    source

    pub const fn new_in(alloc: A) -> BTreeMap<K, V, A>

    🔬This is a nightly-only experimental API. (btreemap_alloc)

    Makes a new empty BTreeMap with a reasonable choice for B.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::alloc::Global;\n\nlet mut map = BTreeMap::new_in(Global);\n\n// entries can now be inserted into the empty map\nmap.insert(1, \"a\");
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V, A> BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    1.0.0 · source

    pub fn get<Q>(&self, key: &Q) -> Option<&V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get(&1), Some(&\"a\"));\nassert_eq!(map.get(&2), None);
    \n
    1.40.0 · source

    pub fn get_key_value<Q>(&self, k: &Q) -> Option<(&K, &V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns the key-value pair corresponding to the supplied key.

    \n

    The supplied key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.get_key_value(&1), Some((&1, &\"a\")));\nassert_eq!(map.get_key_value(&2), None);
    \n
    1.66.0 · source

    pub fn first_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the first key-value pair in the map.\nThe key in this pair is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.first_key_value(), None);\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.first_key_value(), Some((&1, &\"b\")));
    \n
    1.66.0 · source

    pub fn first_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the first entry in the map for in-place manipulation.\nThe key of this entry is the minimum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.first_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"first\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"first\");\nassert_eq!(*map.get(&2).unwrap(), \"b\");
    \n
    1.66.0 · source

    pub fn pop_first(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the first element in the map.\nThe key of this element is the minimum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in ascending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_first() {\n    assert!(map.iter().all(|(k, _v)| *k > key));\n}\nassert!(map.is_empty());
    \n
    1.66.0 · source

    pub fn last_key_value(&self) -> Option<(&K, &V)>
    where\n K: Ord,

    Returns the last key-value pair in the map.\nThe key in this pair is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"b\");\nmap.insert(2, \"a\");\nassert_eq!(map.last_key_value(), Some((&2, &\"a\")));
    \n
    1.66.0 · source

    pub fn last_entry(&mut self) -> Option<OccupiedEntry<'_, K, V, A>>
    where\n K: Ord,

    Returns the last entry in the map for in-place manipulation.\nThe key of this entry is the maximum key in the map.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nif let Some(mut entry) = map.last_entry() {\n    if *entry.key() > 0 {\n        entry.insert(\"last\");\n    }\n}\nassert_eq!(*map.get(&1).unwrap(), \"a\");\nassert_eq!(*map.get(&2).unwrap(), \"last\");
    \n
    1.66.0 · source

    pub fn pop_last(&mut self) -> Option<(K, V)>
    where\n K: Ord,

    Removes and returns the last element in the map.\nThe key of this element is the maximum key that was in the map.

    \n
    §Examples
    \n

    Draining elements in descending order, while keeping a usable map each iteration.

    \n\n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nmap.insert(2, \"b\");\nwhile let Some((key, _val)) = map.pop_last() {\n    assert!(map.iter().all(|(k, _v)| *k < key));\n}\nassert!(map.is_empty());
    \n
    1.0.0 · source

    pub fn contains_key<Q>(&self, key: &Q) -> bool
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns true if the map contains a value for the specified key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.contains_key(&1), true);\nassert_eq!(map.contains_key(&2), false);
    \n
    1.0.0 · source

    pub fn get_mut<Q>(&mut self, key: &Q) -> Option<&mut V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Returns a mutable reference to the value corresponding to the key.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nif let Some(x) = map.get_mut(&1) {\n    *x = \"b\";\n}\nassert_eq!(map[&1], \"b\");
    \n
    1.0.0 · source

    pub fn insert(&mut self, key: K, value: V) -> Option<V>
    where\n K: Ord,

    Inserts a key-value pair into the map.

    \n

    If the map did not have this key present, None is returned.

    \n

    If the map did have this key present, the value is updated, and the old\nvalue is returned. The key is not updated, though; this matters for\ntypes that can be == without being identical. See the module-level\ndocumentation for more.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.insert(37, \"a\"), None);\nassert_eq!(map.is_empty(), false);\n\nmap.insert(37, \"b\");\nassert_eq!(map.insert(37, \"c\"), Some(\"b\"));\nassert_eq!(map[&37], \"c\");
    \n
    source

    pub fn try_insert(\n &mut self,\n key: K,\n value: V\n) -> Result<&mut V, OccupiedError<'_, K, V, A>>
    where\n K: Ord,

    🔬This is a nightly-only experimental API. (map_try_insert)

    Tries to insert a key-value pair into the map, and returns\na mutable reference to the value in the entry.

    \n

    If the map already had this key present, nothing is updated, and\nan error containing the occupied entry and the value is returned.

    \n
    §Examples
    \n
    #![feature(map_try_insert)]\n\nuse std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nassert_eq!(map.try_insert(37, \"a\").unwrap(), &\"a\");\n\nlet err = map.try_insert(37, \"b\").unwrap_err();\nassert_eq!(err.entry.key(), &37);\nassert_eq!(err.entry.get(), &\"a\");\nassert_eq!(err.value, \"b\");
    \n
    1.0.0 · source

    pub fn remove<Q>(&mut self, key: &Q) -> Option<V>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the value at the key if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove(&1), Some(\"a\"));\nassert_eq!(map.remove(&1), None);
    \n
    1.45.0 · source

    pub fn remove_entry<Q>(&mut self, key: &Q) -> Option<(K, V)>
    where\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    Removes a key from the map, returning the stored key and value if the key\nwas previously in the map.

    \n

    The key may be any borrowed form of the map’s key type, but the ordering\non the borrowed form must match the ordering on the key type.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map = BTreeMap::new();\nmap.insert(1, \"a\");\nassert_eq!(map.remove_entry(&1), Some((1, \"a\")));\nassert_eq!(map.remove_entry(&1), None);
    \n
    1.53.0 · source

    pub fn retain<F>(&mut self, f: F)
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    Retains only the elements specified by the predicate.

    \n

    In other words, remove all pairs (k, v) for which f(&k, &mut v) returns false.\nThe elements are visited in ascending key order.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x*10)).collect();\n// Keep only the elements with even-numbered keys.\nmap.retain(|&k, _| k % 2 == 0);\nassert!(map.into_iter().eq(vec![(0, 0), (2, 20), (4, 40), (6, 60)]));
    \n
    1.11.0 · source

    pub fn append(&mut self, other: &mut BTreeMap<K, V, A>)
    where\n K: Ord,\n A: Clone,

    Moves all elements from other into self, leaving other empty.

    \n

    If a key from other is already present in self, the respective\nvalue from self will be overwritten with the respective value from other.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\"); // Note: Key (3) also present in b.\n\nlet mut b = BTreeMap::new();\nb.insert(3, \"d\"); // Note: Key (3) also present in a.\nb.insert(4, \"e\");\nb.insert(5, \"f\");\n\na.append(&mut b);\n\nassert_eq!(a.len(), 5);\nassert_eq!(b.len(), 0);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\nassert_eq!(a[&3], \"d\"); // Note: \"c\" has been overwritten.\nassert_eq!(a[&4], \"e\");\nassert_eq!(a[&5], \"f\");
    \n
    1.17.0 · source

    pub fn range<T, R>(&self, range: R) -> Range<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\nuse std::ops::Bound::Included;\n\nlet mut map = BTreeMap::new();\nmap.insert(3, \"a\");\nmap.insert(5, \"b\");\nmap.insert(8, \"c\");\nfor (&key, &value) in map.range((Included(&4), Included(&8))) {\n    println!(\"{key}: {value}\");\n}\nassert_eq!(Some((&5, &\"b\")), map.range(4..).next());
    \n
    1.17.0 · source

    pub fn range_mut<T, R>(&mut self, range: R) -> RangeMut<'_, K, V>
    where\n T: Ord + ?Sized,\n K: Borrow<T> + Ord,\n R: RangeBounds<T>,

    Constructs a mutable double-ended iterator over a sub-range of elements in the map.\nThe simplest way is to use the range syntax min..max, thus range(min..max) will\nyield elements from min (inclusive) to max (exclusive).\nThe range may also be entered as (Bound<T>, Bound<T>), so for example\nrange((Excluded(4), Included(10))) will yield a left-exclusive, right-inclusive\nrange from 4 to 10.

    \n
    §Panics
    \n

    Panics if range start > end.\nPanics if range start == end and both bounds are Excluded.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut map: BTreeMap<&str, i32> =\n    [(\"Alice\", 0), (\"Bob\", 0), (\"Carol\", 0), (\"Cheryl\", 0)].into();\nfor (_, balance) in map.range_mut(\"B\"..\"Cheryl\") {\n    *balance += 100;\n}\nfor (name, balance) in &map {\n    println!(\"{name} => {balance}\");\n}
    \n
    1.0.0 · source

    pub fn entry(&mut self, key: K) -> Entry<'_, K, V, A>
    where\n K: Ord,

    Gets the given key’s corresponding entry in the map for in-place manipulation.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut count: BTreeMap<&str, usize> = BTreeMap::new();\n\n// count the number of occurrences of letters in the vec\nfor x in [\"a\", \"b\", \"a\", \"c\", \"a\", \"b\"] {\n    count.entry(x).and_modify(|curr| *curr += 1).or_insert(1);\n}\n\nassert_eq!(count[\"a\"], 3);\nassert_eq!(count[\"b\"], 2);\nassert_eq!(count[\"c\"], 1);
    \n
    1.11.0 · source

    pub fn split_off<Q>(&mut self, key: &Q) -> BTreeMap<K, V, A>
    where\n Q: Ord + ?Sized,\n K: Borrow<Q> + Ord,\n A: Clone,

    Splits the collection into two at the given key. Returns everything after the given key,\nincluding the key.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"a\");\na.insert(2, \"b\");\na.insert(3, \"c\");\na.insert(17, \"d\");\na.insert(41, \"e\");\n\nlet b = a.split_off(&3);\n\nassert_eq!(a.len(), 2);\nassert_eq!(b.len(), 3);\n\nassert_eq!(a[&1], \"a\");\nassert_eq!(a[&2], \"b\");\n\nassert_eq!(b[&3], \"c\");\nassert_eq!(b[&17], \"d\");\nassert_eq!(b[&41], \"e\");
    \n
    source

    pub fn extract_if<F>(&mut self, pred: F) -> ExtractIf<'_, K, V, F, A>
    where\n K: Ord,\n F: FnMut(&K, &mut V) -> bool,

    🔬This is a nightly-only experimental API. (btree_extract_if)

    Creates an iterator that visits all elements (key-value pairs) in\nascending key order and uses a closure to determine if an element should\nbe removed. If the closure returns true, the element is removed from\nthe map and yielded. If the closure returns false, or panics, the\nelement remains in the map and will not be yielded.

    \n

    The iterator also lets you mutate the value of each element in the\nclosure, regardless of whether you choose to keep or remove it.

    \n

    If the returned ExtractIf is not exhausted, e.g. because it is dropped without iterating\nor the iteration short-circuits, then the remaining elements will be retained.\nUse retain with a negated predicate if you do not need the returned iterator.

    \n
    §Examples
    \n

    Splitting a map into even and odd keys, reusing the original map:

    \n\n
    #![feature(btree_extract_if)]\nuse std::collections::BTreeMap;\n\nlet mut map: BTreeMap<i32, i32> = (0..8).map(|x| (x, x)).collect();\nlet evens: BTreeMap<_, _> = map.extract_if(|k, _v| k % 2 == 0).collect();\nlet odds = map;\nassert_eq!(evens.keys().copied().collect::<Vec<_>>(), [0, 2, 4, 6]);\nassert_eq!(odds.keys().copied().collect::<Vec<_>>(), [1, 3, 5, 7]);
    \n
    1.54.0 · source

    pub fn into_keys(self) -> IntoKeys<K, V, A>

    Creates a consuming iterator visiting all the keys, in sorted order.\nThe map cannot be used after calling this.\nThe iterator element type is K.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(2, \"b\");\na.insert(1, \"a\");\n\nlet keys: Vec<i32> = a.into_keys().collect();\nassert_eq!(keys, [1, 2]);
    \n
    1.54.0 · source

    pub fn into_values(self) -> IntoValues<K, V, A>

    Creates a consuming iterator visiting all the values, in order by key.\nThe map cannot be used after calling this.\nThe iterator element type is V.

    \n
    §Examples
    \n
    use std::collections::BTreeMap;\n\nlet mut a = BTreeMap::new();\na.insert(1, \"hello\");\na.insert(2, \"goodbye\");\n\nlet values: Vec<&str> = a.into_values().collect();\nassert_eq!(values, [\"hello\", \"goodbye\"]);
    \n
    ",0,"bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Clone for BTreeMap<K, V, A>
    where\n K: Clone,\n V: Clone,\n A: Allocator + Clone,

    source§

    fn clone(&self) -> BTreeMap<K, V, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Debug for BTreeMap<K, V, A>
    where\n K: Debug,\n V: Debug,\n A: Allocator + Clone,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> Default for BTreeMap<K, V>

    source§

    fn default() -> BTreeMap<K, V>

    Creates an empty BTreeMap.

    \n
    ","Default","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V> Deserialize<'de> for BTreeMap<K, V>
    where\n K: Deserialize<'de> + Ord,\n V: Deserialize<'de>,

    source§

    fn deserialize<D>(\n deserializer: D\n) -> Result<BTreeMap<K, V>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.7.0 · source§

    impl<K, V, A> Drop for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn drop(&mut self)

    Executes the destructor for this type. Read more
    ","Drop","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.2.0 · source§

    impl<'a, K, V, A> Extend<(&'a K, &'a V)> for BTreeMap<K, V, A>
    where\n K: Ord + Copy,\n V: Copy,\n A: Allocator + Clone,

    source§

    fn extend<I>(&mut self, iter: I)
    where\n I: IntoIterator<Item = (&'a K, &'a V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (&'a K, &'a V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(&'a K, &'a V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Extend<(K, V)> for BTreeMap<K, V, A>
    where\n K: Ord,\n A: Allocator + Clone,

    source§

    fn extend<T>(&mut self, iter: T)
    where\n T: IntoIterator<Item = (K, V)>,

    Extends a collection with the contents of an iterator. Read more
    source§

    fn extend_one(&mut self, _: (K, V))

    🔬This is a nightly-only experimental API. (extend_one)
    Extends a collection with exactly one element.
    source§

    fn extend_reserve(&mut self, additional: usize)

    🔬This is a nightly-only experimental API. (extend_one)
    Reserves capacity in a collection for the given number of additional elements. Read more
    ","Extend<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.56.0 · source§

    impl<K, V, const N: usize> From<[(K, V); N]> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from(arr: [(K, V); N]) -> BTreeMap<K, V>

    Converts a [(K, V); N] into a BTreeMap<(K, V)>.

    \n\n
    use std::collections::BTreeMap;\n\nlet map1 = BTreeMap::from([(1, 2), (3, 4)]);\nlet map2: BTreeMap<_, _> = [(1, 2), (3, 4)].into();\nassert_eq!(map1, map2);
    \n
    ","From<[(K, V); N]>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V> FromIterator<(K, V)> for BTreeMap<K, V>
    where\n K: Ord,

    source§

    fn from_iter<T>(iter: T) -> BTreeMap<K, V>
    where\n T: IntoIterator<Item = (K, V)>,

    Creates a value from an iterator. Read more
    ","FromIterator<(K, V)>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Hash for BTreeMap<K, V, A>
    where\n K: Hash,\n V: Hash,\n A: Allocator + Clone,

    source§

    fn hash<H>(&self, state: &mut H)
    where\n H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, Q, V, A> Index<&Q> for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,\n K: Borrow<Q> + Ord,\n Q: Ord + ?Sized,

    source§

    fn index(&self, key: &Q) -> &V

    Returns a reference to the value corresponding to the supplied key.

    \n
    §Panics
    \n

    Panics if the key is not present in the BTreeMap.

    \n
    §

    type Output = V

    The returned type after indexing.
    ","Index<&Q>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    §

    impl IntoAssets for BTreeMap<DescriptorPublicKey, DescriptorSecretKey>

    §

    fn into_assets(self) -> Assets

    Convert self into a Assets struct
    ","IntoAssets","bdk_wallet::keys::KeyMap"],["
    source§

    impl<'de, K, V, E> IntoDeserializer<'de, E> for BTreeMap<K, V>
    where\n K: IntoDeserializer<'de, E> + Eq + Ord,\n V: IntoDeserializer<'de, E>,\n E: Error,

    §

    type Deserializer = MapDeserializer<'de, <BTreeMap<K, V> as IntoIterator>::IntoIter, E>

    The type of the deserializer being converted into.
    source§

    fn into_deserializer(\n self\n) -> <BTreeMap<K, V> as IntoDeserializer<'de, E>>::Deserializer

    Convert this value into a deserializer.
    ","IntoDeserializer<'de, E>","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> IntoIterator for BTreeMap<K, V, A>
    where\n A: Allocator + Clone,

    source§

    fn into_iter(self) -> IntoIter<K, V, A>

    Gets an owning iterator over the entries of the map, sorted by key.

    \n
    §

    type Item = (K, V)

    The type of the elements being iterated over.
    §

    type IntoIter = IntoIter<K, V, A>

    Which kind of iterator are we turning this into?
    ","IntoIterator","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Ord for BTreeMap<K, V, A>
    where\n K: Ord,\n V: Ord,\n A: Allocator + Clone,

    source§

    fn cmp(&self, other: &BTreeMap<K, V, A>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialEq for BTreeMap<K, V, A>
    where\n K: PartialEq,\n V: PartialEq,\n A: Allocator + Clone,

    source§

    fn eq(&self, other: &BTreeMap<K, V, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> PartialOrd for BTreeMap<K, V, A>
    where\n K: PartialOrd,\n V: PartialOrd,\n A: Allocator + Clone,

    source§

    fn partial_cmp(&self, other: &BTreeMap<K, V, A>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    source§

    impl<K, V> Serialize for BTreeMap<K, V>
    where\n K: Serialize,\n V: Serialize,

    source§

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.0.0 · source§

    impl<K, V, A> Eq for BTreeMap<K, V, A>
    where\n K: Eq,\n V: Eq,\n A: Allocator + Clone,

    ","Eq","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"],["
    1.64.0 · source§

    impl<K, V, A> UnwindSafe for BTreeMap<K, V, A>

    ","UnwindSafe","bdk_wallet::descriptor::policy::ConditionMap","bdk_wallet::descriptor::policy::FoldedConditionMap","bdk_wallet::descriptor::HdKeyPaths","bdk_wallet::descriptor::TapKeyOrigins","bdk_wallet::keys::KeyMap"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js index 206b3dc046..1f89605c1b 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_chain/indexed_tx_graph/struct.IndexedTxGraph.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"example_cli":[["
    §

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    §

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    ","AsRef>","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> Debug for IndexedTxGraph<A, I>
    where\n A: Debug,\n I: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> Default for IndexedTxGraph<A, I>
    where\n I: Default,

    §

    fn default() -> IndexedTxGraph<A, I>

    Returns the “default value” for a type. Read more
    ","Default","example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>

    pub fn new(index: I) -> IndexedTxGraph<A, I>

    Construct a new [IndexedTxGraph] with a given index.

    \n

    pub fn graph(&self) -> &TxGraph<A>

    Get a reference of the internal transaction graph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor + AnchorFromBlockPosition,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Append,

    Methods are available if the anchor (A) implements [AnchorFromBlockPosition].

    \n

    pub fn apply_block_relevant(\n &mut self,\n block: &Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height, filtering out those that are\nirrelevant.

    \n

    Each inserted transaction’s anchor will be constructed from\n[AnchorFromBlockPosition::from_block_position].

    \n

    Relevancy is determined by the internal [Indexer::is_tx_relevant] implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    pub fn apply_block(\n &mut self,\n block: Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height.

    \n

    Each inserted transaction’s anchor will be constructed from\n[AnchorFromBlockPosition::from_block_position].

    \n

    To only insert relevant transactions, use apply_block_relevant instead.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,

    pub fn apply_changeset(\n &mut self,\n changeset: ChangeSet<A, <I as Indexer>::ChangeSet>\n)

    Applies the [ChangeSet] to the [IndexedTxGraph].

    \n

    pub fn initial_changeset(&self) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Determines the [ChangeSet] between self and an empty [IndexedTxGraph].

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    §

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Append,

    pub fn apply_update(\n &mut self,\n update: TxGraph<A>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply an update directly.

    \n

    update is a [TxGraph<A>] and the resultant changes is returned as [ChangeSet].

    \n

    pub fn insert_txout(\n &mut self,\n outpoint: OutPoint,\n txout: TxOut\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a floating txout of given outpoint.

    \n

    pub fn insert_tx(\n &mut self,\n tx: Transaction\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert and index a transaction into the graph.

    \n

    pub fn insert_anchor(\n &mut self,\n txid: Txid,\n anchor: A\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert an anchor for a given transaction.

    \n

    pub fn insert_seen_at(\n &mut self,\n txid: Txid,\n seen_at: u64\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a unix timestamp of when a transaction is seen in the mempool.

    \n

    This is used for transaction conflict resolution in [TxGraph] where the transaction with\nthe later last-seen is prioritized.

    \n

    pub fn batch_insert_relevant<'t>(\n &mut self,\n txs: impl IntoIterator<Item = (&'t Transaction, impl IntoIterator<Item = A>)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the [Indexer::is_tx_relevant] implementation of I. Irrelevant\ntransactions in txs will be ignored. txs do not need to be in topological order.

    \n

    pub fn batch_insert_relevant_unconfirmed<'t>(\n &mut self,\n unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the internal [Indexer::is_tx_relevant] implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in [TxGraph] (refer to [TxGraph::insert_seen_at] for details).

    \n

    pub fn batch_insert_unconfirmed(\n &mut self,\n txs: impl IntoIterator<Item = (Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in [TxGraph] (refer to [TxGraph::insert_seen_at] for details).

    \n

    To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

    \n
    ",0,"example_cli::KeychainTxGraph"]] +"example_cli":[["
    source§

    impl<A, I> AsRef<TxGraph<A>> for IndexedTxGraph<A, I>

    source§

    fn as_ref(&self) -> &TxGraph<A>

    Converts this type into a shared reference of the (usually inferred) input type.
    ","AsRef>","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> Debug for IndexedTxGraph<A, I>
    where\n A: Debug,\n I: Debug,

    source§

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> Default for IndexedTxGraph<A, I>
    where\n I: Default,

    source§

    fn default() -> IndexedTxGraph<A, I>

    Returns the “default value” for a type. Read more
    ","Default","example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>

    Methods are available if the anchor (A) implements AnchorFromBlockPosition.

    \n
    source

    pub fn apply_block_relevant(\n &mut self,\n block: &Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height, filtering out those that are\nirrelevant.

    \n

    Each inserted transaction’s anchor will be constructed from\nAnchorFromBlockPosition::from_block_position.

    \n

    Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n
    source

    pub fn apply_block(\n &mut self,\n block: Block,\n height: u32\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert all transactions of the given block of height.

    \n

    Each inserted transaction’s anchor will be constructed from\nAnchorFromBlockPosition::from_block_position.

    \n

    To only insert relevant transactions, use apply_block_relevant instead.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>

    source

    pub fn new(index: I) -> IndexedTxGraph<A, I>

    Construct a new IndexedTxGraph with a given index.

    \n
    source

    pub fn graph(&self) -> &TxGraph<A>

    Get a reference of the internal transaction graph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,

    source

    pub fn apply_changeset(\n &mut self,\n changeset: ChangeSet<A, <I as Indexer>::ChangeSet>\n)

    Applies the ChangeSet to the IndexedTxGraph.

    \n
    source

    pub fn initial_changeset(&self) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Determines the ChangeSet between self and an empty IndexedTxGraph.

    \n
    ",0,"example_cli::KeychainTxGraph"],["
    source§

    impl<A, I> IndexedTxGraph<A, I>
    where\n A: Anchor,\n I: Indexer,\n <I as Indexer>::ChangeSet: Default + Append,

    source

    pub fn apply_update(\n &mut self,\n update: TxGraph<A>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Apply an update directly.

    \n

    update is a TxGraph<A> and the resultant changes is returned as ChangeSet.

    \n
    source

    pub fn insert_txout(\n &mut self,\n outpoint: OutPoint,\n txout: TxOut\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a floating txout of given outpoint.

    \n
    source

    pub fn insert_tx(\n &mut self,\n tx: Transaction\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert and index a transaction into the graph.

    \n
    source

    pub fn insert_anchor(\n &mut self,\n txid: Txid,\n anchor: A\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert an anchor for a given transaction.

    \n
    source

    pub fn insert_seen_at(\n &mut self,\n txid: Txid,\n seen_at: u64\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Insert a unix timestamp of when a transaction is seen in the mempool.

    \n

    This is used for transaction conflict resolution in TxGraph where the transaction with\nthe later last-seen is prioritized.

    \n
    source

    pub fn batch_insert_relevant<'t>(\n &mut self,\n txs: impl IntoIterator<Item = (&'t Transaction, impl IntoIterator<Item = A>)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the Indexer::is_tx_relevant implementation of I. Irrelevant\ntransactions in txs will be ignored. txs do not need to be in topological order.

    \n
    source

    pub fn batch_insert_relevant_unconfirmed<'t>(\n &mut self,\n unconfirmed_txs: impl IntoIterator<Item = (&'t Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions, filtering out those that are irrelevant.

    \n

    Relevancy is determined by the internal Indexer::is_tx_relevant implementation of I.\nIrrelevant transactions in txs will be ignored.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

    \n
    source

    pub fn batch_insert_unconfirmed(\n &mut self,\n txs: impl IntoIterator<Item = (Transaction, u64)>\n) -> ChangeSet<A, <I as Indexer>::ChangeSet>

    Batch insert unconfirmed transactions.

    \n

    Items of txs are tuples containing the transaction and a last seen timestamp. The\nlast seen communicates when the transaction is last seen in the mempool which is used for\nconflict-resolution in TxGraph (refer to TxGraph::insert_seen_at for details).

    \n

    To filter out irrelevant transactions, use batch_insert_relevant_unconfirmed instead.

    \n
    ",0,"example_cli::KeychainTxGraph"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_persist/changeset/struct.CombinedChangeSet.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_persist/changeset/struct.CombinedChangeSet.js index e222d60526..78a4f46972 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_persist/changeset/struct.CombinedChangeSet.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_persist/changeset/struct.CombinedChangeSet.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    §

    impl<K, A> Append for CombinedChangeSet<K, A>
    where\n K: Ord,\n A: Anchor,

    §

    fn append(&mut self, other: CombinedChangeSet<K, A>)

    Append another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    ","Append","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Clone for CombinedChangeSet<K, A>
    where\n K: Clone,\n A: Clone,

    §

    fn clone(&self) -> CombinedChangeSet<K, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Debug for CombinedChangeSet<K, A>
    where\n K: Debug,\n A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Default for CombinedChangeSet<K, A>

    §

    fn default() -> CombinedChangeSet<K, A>

    Returns the “default value” for a type. Read more
    ","Default","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where\n A: Ord + Deserialize<'de>,\n K: Ord + Deserialize<'de>,

    §

    fn deserialize<__D>(\n __deserializer: __D\n) -> Result<CombinedChangeSet<K, A>, <__D as Deserializer<'de>>::Error>
    where\n __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

    §

    fn from(chain: BTreeMap<u32, Option<BlockHash>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

    §

    fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> PartialEq for CombinedChangeSet<K, A>
    where\n K: PartialEq,\n A: PartialEq,

    §

    fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Serialize for CombinedChangeSet<K, A>
    where\n A: Ord + Serialize,\n K: Ord + Serialize,

    §

    fn serialize<__S>(\n &self,\n __serializer: __S\n) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where\n __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>

    ","StructuralPartialEq","bdk_wallet::wallet::ChangeSet"]] +"bdk_wallet":[["
    §

    impl<K, A> Append for CombinedChangeSet<K, A>
    where\n K: Ord,\n A: Anchor,

    §

    fn append(&mut self, other: CombinedChangeSet<K, A>)

    Append another object of the same type onto self.
    §

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    ","Append","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Clone for CombinedChangeSet<K, A>
    where\n K: Clone,\n A: Clone,

    §

    fn clone(&self) -> CombinedChangeSet<K, A>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Debug for CombinedChangeSet<K, A>
    where\n K: Debug,\n A: Debug,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Default for CombinedChangeSet<K, A>

    §

    fn default() -> CombinedChangeSet<K, A>

    Returns the “default value” for a type. Read more
    ","Default","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<'de, K, A> Deserialize<'de> for CombinedChangeSet<K, A>
    where\n A: Ord + Deserialize<'de>,\n K: Ord + Deserialize<'de>,

    §

    fn deserialize<__D>(\n __deserializer: __D\n) -> Result<CombinedChangeSet<K, A>, <__D as Deserializer<'de>>::Error>
    where\n __D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<BTreeMap<u32, Option<BlockHash>>> for CombinedChangeSet<K, A>

    §

    fn from(chain: BTreeMap<u32, Option<BlockHash>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> From<ChangeSet<A, ChangeSet<K>>> for CombinedChangeSet<K, A>

    §

    fn from(indexed_tx_graph: ChangeSet<A, ChangeSet<K>>) -> CombinedChangeSet<K, A>

    Converts to this type from the input type.
    ","From>>","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> PartialEq for CombinedChangeSet<K, A>
    where\n K: PartialEq,\n A: PartialEq,

    §

    fn eq(&self, other: &CombinedChangeSet<K, A>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> Serialize for CombinedChangeSet<K, A>
    where\n A: Ord + Serialize,\n K: Ord + Serialize,

    §

    fn serialize<__S>(\n &self,\n __serializer: __S\n) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>
    where\n __S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::wallet::ChangeSet"],["
    §

    impl<K, A> StructuralPartialEq for CombinedChangeSet<K, A>

    ","StructuralPartialEq","bdk_wallet::wallet::ChangeSet"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js index a405cef60f..b21ee66a3e 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/bdk_wallet/descriptor/enum.Descriptor.js @@ -1,3 +1,3 @@ (function() {var type_impls = { -"bdk_wallet":[["
    §

    impl<Pk> Clone for Descriptor<Pk>
    where\n Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Debug for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n
    §Examples
    \n
    use miniscript::descriptor::{Descriptor, DescriptorPublicKey};\nuse miniscript::bitcoin::secp256k1;\nuse std::str::FromStr;\n\n// test from bip 86\nlet secp = secp256k1::Secp256k1::verification_only();\nlet descriptor = Descriptor::<DescriptorPublicKey>::from_str(\"tr(xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\")\n    .expect(\"Valid ranged descriptor\");\nlet result = descriptor.at_derivation_index(0).unwrap().derived_descriptor(&secp).expect(\"Non-hardened derivation\");\nassert_eq!(result.to_string(), \"tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym\");
    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn plan<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a non-malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n

    pub fn plan_mall<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DescriptorPublicKey>

    pub fn is_deriveable(&self) -> bool

    👎Deprecated: use has_wildcards instead

    Whether or not the descriptor has any wildcards

    \n

    pub fn has_wildcard(&self) -> bool

    Whether or not the descriptor has any wildcards i.e. /*.

    \n

    pub fn at_derivation_index(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    Replaces all wildcards (i.e. /*) in the descriptor with a particular derivation index,\nturning it into a definite descriptor.

    \n
    §Errors
    \n
      \n
    • If index ≥ 2^31
    • \n
    \n

    pub fn derive(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    👎Deprecated: use at_derivation_index instead

    Deprecated name for Self::at_derivation_index.

    \n

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>,\n index: u32\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n

    This is a shorthand for:

    \n\n
        .expect(\"Valid ranged descriptor\");\nlet derived_descriptor = descriptor.at_derivation_index(index).unwrap().derived_descriptor(&secp).unwrap();
    \n

    and is only here really here for backwards compatbility.\nSee at_derivation_index and [derived_descriptor] for more documentation.

    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n

    pub fn parse_descriptor<C>(\n secp: &Secp256k1<C>,\n s: &str\n) -> Result<(Descriptor<DescriptorPublicKey>, BTreeMap<DescriptorPublicKey, DescriptorSecretKey>), Error>
    where\n C: Signing,

    Parse a descriptor that may contain secret keys

    \n

    Internally turns every secret key found into the corresponding public key and then returns a\na descriptor that only contains public keys and a map to lookup the secret key given a public key.

    \n

    pub fn to_string_with_secret(\n &self,\n key_map: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>\n) -> String

    Serialize a descriptor to string with its secret keys

    \n

    pub fn find_derivation_index_for_spk<C>(\n &self,\n secp: &Secp256k1<C>,\n script_pubkey: &Script,\n range: Range<u32>\n) -> Result<Option<(u32, Descriptor<PublicKey>)>, ConversionError>
    where\n C: Verification,

    Utility method for deriving the descriptor at each index in a range to find one matching\nscript_pubkey.

    \n

    If it finds a match then it returns the index it was derived at and the concrete\ndescriptor at that index. If the descriptor is non-derivable then it will simply check the\nscript pubkey against the descriptor and return it if it matches (in this case the index\nreturned will be meaningless).

    \n

    pub fn is_multipath(&self) -> bool

    Whether this descriptor contains a key that has multiple derivation paths.

    \n

    pub fn into_single_descriptors(\n self\n) -> Result<Vec<Descriptor<DescriptorPublicKey>>, Error>

    Get as many descriptors as different paths in this descriptor.

    \n

    For multipath descriptors it will return as many descriptors as there is\n“parallel” paths. For regular descriptors it will just return itself.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey + ToPublicKey,

    pub fn address(&self, network: Network) -> Result<Address, Error>

    Computes the Bitcoin address of the descriptor, if one exists

    \n

    Some descriptors like pk() don’t have an address.

    \n
    §Errors
    \n

    For raw/bare descriptors that don’t have an address.

    \n

    pub fn script_pubkey(&self) -> ScriptBuf

    Computes the scriptpubkey of the descriptor.

    \n

    pub fn unsigned_script_sig(&self) -> ScriptBuf

    Computes the scriptSig that will be in place for an unsigned input\nspending an output with this descriptor. For pre-segwit descriptors,\nwhich use the scriptSig for signatures, this returns the empty script.

    \n

    This is used in Segwit transactions to produce an unsigned transaction\nwhose txid will not change during signing (since only the witness data\nwill change).

    \n

    pub fn explicit_script(&self) -> Result<ScriptBuf, Error>

    Computes the the underlying script before any hashing is done. For\nBare, Pkh and Wpkh this is the scriptPubkey; for ShWpkh and Sh\nthis is the redeemScript; for the others it is the witness script.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn script_code(&self) -> Result<ScriptBuf, Error>

    Computes the scriptCode of a transaction output.

    \n

    The scriptCode is the Script of the previous transaction output being\nserialized in the sighash when evaluating a CHECKSIG & co. OP code.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn get_satisfaction<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn get_satisfaction_mall<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns a possilbly mallable satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn satisfy<S>(&self, txin: &mut TxIn, satisfier: S) -> Result<(), Error>
    where\n S: Satisfier<Pk>,

    Attempts to produce a non-malleable satisfying witness and scriptSig to spend an\noutput controlled by the given descriptor; add the data to a given\nTxIn output.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    pub fn new_pk(pk: Pk) -> Descriptor<Pk>

    Create a new pk descriptor

    \n

    pub fn new_pkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new PkH descriptor

    \n

    pub fn new_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new Wpkh descriptor\nWill return Err if uncompressed key is used

    \n

    pub fn new_sh_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wpkh from Pk.\nErrors when uncompressed keys are supplied

    \n

    pub fn new_sh(ms: Miniscript<Pk, Legacy>) -> Result<Descriptor<Pk>, Error>

    Create a new sh for a given redeem script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new wsh descriptor from witness script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_sh_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh descriptor with witness script\nErrors when miniscript exceeds resource limits under wsh context\nor does not type check at the top level

    \n

    pub fn new_bare(ms: Miniscript<Pk, BareCtx>) -> Result<Descriptor<Pk>, Error>

    Create a new bare descriptor from witness script\nErrors when miniscript exceeds resource limits under bare context\nor does not type check at the top level

    \n

    pub fn new_sh_with_wpkh(wpkh: Wpkh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wpkh descriptor

    \n

    pub fn new_sh_with_wsh(wsh: Wsh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wsh descriptor

    \n

    pub fn new_sh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh sortedmulti descriptor with threshold k\nand Vec of pks.\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_sh_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh sortedmulti descriptor from threshold\nk and Vec of pks\nErrors when miniscript exceeds resource limits under segwit context

    \n

    pub fn new_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new wsh sorted multi descriptor\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_tr(\n key: Pk,\n script: Option<TapTree<Pk>>\n) -> Result<Descriptor<Pk>, Error>

    Create new tr descriptor\nErrors when miniscript exceeds resource limits under Tap context

    \n

    pub fn desc_type(&self) -> DescriptorType

    Get the [DescriptorType] of Descriptor

    \n

    pub fn sanity_check(&self) -> Result<(), Error>

    Checks whether the descriptor is safe.

    \n

    Checks whether all the spend paths in the descriptor are possible on the\nbitcoin network under the current standardness and consensus rules. Also\nchecks whether the descriptor requires signatures on all spend paths and\nwhether the script is malleable.

    \n

    In general, all the guarantees of miniscript hold only for safe scripts.\nThe signer may not be able to find satisfactions even if one exists.

    \n

    pub fn max_weight_to_satisfy(&self) -> Result<Weight, Error>

    Computes an upper bound on the difference between a non-satisfied\nTxIn’s segwit_weight and a satisfied TxIn’s segwit_weight

    \n

    Since this method uses segwit_weight instead of legacy_weight,\nif you want to include only legacy inputs in your transaction,\nyou should remove 1WU from each input’s max_weight_to_satisfy\nfor a more accurate estimate.

    \n

    In other words, for segwit inputs or legacy inputs included in\nsegwit transactions, the following will hold for each input if\nthat input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].segwit_weight() - TxIn::default().segwit_weight()\n    );\n}
    \n

    Instead, for legacy transactions, the following will hold for each input\nif that input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].legacy_weight() - TxIn::default().legacy_weight()\n    );\n}
    \n

    Assumes all ECDSA signatures are 73 bytes, including push opcode and\nsighash suffix.\nAssumes all Schnorr signatures are 66 bytes, including push opcode and\nsighash suffix.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n

    pub fn max_satisfaction_weight(&self) -> Result<usize, Error>

    👎Deprecated since 10.0.0: Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476.

    Computes an upper bound on the weight of a satisfying witness to the\ntransaction.

    \n

    Assumes all ec-signatures are 73 bytes, including push opcode and\nsighash suffix. Includes the weight of the VarInts encoding the\nscriptSig and witness stack length.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    §

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable.\nPanics if the descriptor wildcard is hardened.
    §

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor id, calculated as the sha256 of the descriptor, checksum not\nincluded.
    ","DescriptorExt","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<Descriptor<Pk>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Display for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Display","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl ExtractPolicy for Descriptor<DescriptorPublicKey>

    source§

    fn extract_policy(\n &self,\n signers: &SignersContainer,\n build_sat: BuildSatisfaction<'_>,\n secp: &Secp256k1<All>\n) -> Result<Option<Policy>, Error>

    Extract the spending policy
    ","ExtractPolicy","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> ForEachKey<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn for_each_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for every key
    §

    fn for_any_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,\n Pk: 'a,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for any key
    ","ForEachKey","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    ","FromStr","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    \n
    ","FromTree","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Hash for Descriptor<Pk>
    where\n Pk: Hash + MiniscriptKey,

    §

    fn hash<__H>(&self, state: &mut __H)
    where\n __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Liftable<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn lift(&self) -> Result<Policy<Pk>, Error>

    Converts this object into an abstract policy.
    ","Liftable","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Ord for Descriptor<Pk>
    where\n Pk: Ord + MiniscriptKey,

    §

    fn cmp(&self, other: &Descriptor<Pk>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialEq for Descriptor<Pk>
    where\n Pk: PartialEq + MiniscriptKey,

    §

    fn eq(&self, other: &Descriptor<Pk>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialOrd for Descriptor<Pk>
    where\n Pk: PartialOrd + MiniscriptKey,

    §

    fn partial_cmp(&self, other: &Descriptor<Pk>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<'de, Pk> Serialize for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<P, Q> TranslatePk<P, Q> for Descriptor<P>
    where\n P: MiniscriptKey,\n Q: MiniscriptKey,

    §

    fn translate_pk<T, E>(\n &self,\n t: &mut T\n) -> Result<<Descriptor<P> as TranslatePk<P, Q>>::Output, TranslateErr<E>>
    where\n T: Translator<P, Q, E>,

    Converts a descriptor using abstract keys to one using specific keys.

    \n
    §

    type Output = Descriptor<Q>

    The associated output type. This must be Self<Q>.
    ","TranslatePk","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Eq for Descriptor<Pk>
    where\n Pk: Eq + MiniscriptKey,

    ","Eq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> StructuralPartialEq for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    ","StructuralPartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"]] +"bdk_wallet":[["
    §

    impl<Pk> Clone for Descriptor<Pk>
    where\n Pk: Clone + MiniscriptKey,

    §

    fn clone(&self) -> Descriptor<Pk>

    Returns a copy of the value. Read more
    1.0.0 · source§

    fn clone_from(&mut self, source: &Self)

    Performs copy-assignment from source. Read more
    ","Clone","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Debug for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Debug","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n
    §Examples
    \n
    use miniscript::descriptor::{Descriptor, DescriptorPublicKey};\nuse miniscript::bitcoin::secp256k1;\nuse std::str::FromStr;\n\n// test from bip 86\nlet secp = secp256k1::Secp256k1::verification_only();\nlet descriptor = Descriptor::<DescriptorPublicKey>::from_str(\"tr(xpub6BgBgsespWvERF3LHQu6CnqdvfEvtMcQjYrcRzx53QJjSxarj2afYWcLteoGVky7D3UKDP9QyrLprQ3VCECoY49yfdDEHGCtMMj92pReUsQ/0/*)\")\n    .expect(\"Valid ranged descriptor\");\nlet result = descriptor.at_derivation_index(0).unwrap().derived_descriptor(&secp).expect(\"Non-hardened derivation\");\nassert_eq!(result.to_string(), \"tr(03cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115)#6qm9h8ym\");
    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DefiniteDescriptorKey>

    pub fn plan<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a non-malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n

    pub fn plan_mall<P>(\n self,\n provider: &P\n) -> Result<Plan, Descriptor<DefiniteDescriptorKey>>
    where\n P: AssetProvider<DefiniteDescriptorKey>,

    Returns a plan if the provided assets are sufficient to produce a malleable satisfaction

    \n

    If the assets aren’t sufficient for generating a Plan, the descriptor is returned

    \n
    ",0,"bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl Descriptor<DescriptorPublicKey>

    pub fn is_deriveable(&self) -> bool

    👎Deprecated: use has_wildcards instead

    Whether or not the descriptor has any wildcards

    \n

    pub fn has_wildcard(&self) -> bool

    Whether or not the descriptor has any wildcards i.e. /*.

    \n

    pub fn at_derivation_index(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    Replaces all wildcards (i.e. /*) in the descriptor with a particular derivation index,\nturning it into a definite descriptor.

    \n
    §Errors
    \n
      \n
    • If index ≥ 2^31
    • \n
    \n

    pub fn derive(\n &self,\n index: u32\n) -> Result<Descriptor<DefiniteDescriptorKey>, ConversionError>

    👎Deprecated: use at_derivation_index instead

    Deprecated name for Self::at_derivation_index.

    \n

    pub fn derived_descriptor<C>(\n &self,\n secp: &Secp256k1<C>,\n index: u32\n) -> Result<Descriptor<PublicKey>, ConversionError>
    where\n C: Verification,

    Convert all the public keys in the descriptor to [bitcoin::PublicKey] by deriving them or\notherwise converting them. All [bitcoin::secp256k1::XOnlyPublicKey]s are converted to by adding a\ndefault(0x02) y-coordinate.

    \n

    This is a shorthand for:

    \n\n
        .expect(\"Valid ranged descriptor\");\nlet derived_descriptor = descriptor.at_derivation_index(index).unwrap().derived_descriptor(&secp).unwrap();
    \n

    and is only here really here for backwards compatbility.\nSee at_derivation_index and [derived_descriptor] for more documentation.

    \n
    §Errors
    \n

    This function will return an error if hardened derivation is attempted.

    \n

    pub fn parse_descriptor<C>(\n secp: &Secp256k1<C>,\n s: &str\n) -> Result<(Descriptor<DescriptorPublicKey>, BTreeMap<DescriptorPublicKey, DescriptorSecretKey>), Error>
    where\n C: Signing,

    Parse a descriptor that may contain secret keys

    \n

    Internally turns every secret key found into the corresponding public key and then returns a\na descriptor that only contains public keys and a map to lookup the secret key given a public key.

    \n

    pub fn to_string_with_secret(\n &self,\n key_map: &BTreeMap<DescriptorPublicKey, DescriptorSecretKey>\n) -> String

    Serialize a descriptor to string with its secret keys

    \n

    pub fn find_derivation_index_for_spk<C>(\n &self,\n secp: &Secp256k1<C>,\n script_pubkey: &Script,\n range: Range<u32>\n) -> Result<Option<(u32, Descriptor<PublicKey>)>, ConversionError>
    where\n C: Verification,

    Utility method for deriving the descriptor at each index in a range to find one matching\nscript_pubkey.

    \n

    If it finds a match then it returns the index it was derived at and the concrete\ndescriptor at that index. If the descriptor is non-derivable then it will simply check the\nscript pubkey against the descriptor and return it if it matches (in this case the index\nreturned will be meaningless).

    \n

    pub fn is_multipath(&self) -> bool

    Whether this descriptor contains a key that has multiple derivation paths.

    \n

    pub fn into_single_descriptors(\n self\n) -> Result<Vec<Descriptor<DescriptorPublicKey>>, Error>

    Get as many descriptors as different paths in this descriptor.

    \n

    For multipath descriptors it will return as many descriptors as there is\n“parallel” paths. For regular descriptors it will just return itself.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey + ToPublicKey,

    pub fn address(&self, network: Network) -> Result<Address, Error>

    Computes the Bitcoin address of the descriptor, if one exists

    \n

    Some descriptors like pk() don’t have an address.

    \n
    §Errors
    \n

    For raw/bare descriptors that don’t have an address.

    \n

    pub fn script_pubkey(&self) -> ScriptBuf

    Computes the scriptpubkey of the descriptor.

    \n

    pub fn unsigned_script_sig(&self) -> ScriptBuf

    Computes the scriptSig that will be in place for an unsigned input\nspending an output with this descriptor. For pre-segwit descriptors,\nwhich use the scriptSig for signatures, this returns the empty script.

    \n

    This is used in Segwit transactions to produce an unsigned transaction\nwhose txid will not change during signing (since only the witness data\nwill change).

    \n

    pub fn explicit_script(&self) -> Result<ScriptBuf, Error>

    Computes the the underlying script before any hashing is done. For\nBare, Pkh and Wpkh this is the scriptPubkey; for ShWpkh and Sh\nthis is the redeemScript; for the others it is the witness script.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn script_code(&self) -> Result<ScriptBuf, Error>

    Computes the scriptCode of a transaction output.

    \n

    The scriptCode is the Script of the previous transaction output being\nserialized in the sighash when evaluating a CHECKSIG & co. OP code.

    \n
    §Errors
    \n

    If the descriptor is a taproot descriptor.

    \n

    pub fn get_satisfaction<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn get_satisfaction_mall<S>(\n &self,\n satisfier: S\n) -> Result<(Vec<Vec<u8>>, ScriptBuf), Error>
    where\n S: Satisfier<Pk>,

    Returns a possilbly mallable satisfying non-malleable witness and scriptSig to spend an\noutput controlled by the given descriptor if it possible to\nconstruct one using the satisfier S.

    \n

    pub fn satisfy<S>(&self, txin: &mut TxIn, satisfier: S) -> Result<(), Error>
    where\n S: Satisfier<Pk>,

    Attempts to produce a non-malleable satisfying witness and scriptSig to spend an\noutput controlled by the given descriptor; add the data to a given\nTxIn output.

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    pub fn new_pk(pk: Pk) -> Descriptor<Pk>

    Create a new pk descriptor

    \n

    pub fn new_pkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new PkH descriptor

    \n

    pub fn new_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new Wpkh descriptor\nWill return Err if uncompressed key is used

    \n

    pub fn new_sh_wpkh(pk: Pk) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wpkh from Pk.\nErrors when uncompressed keys are supplied

    \n

    pub fn new_sh(ms: Miniscript<Pk, Legacy>) -> Result<Descriptor<Pk>, Error>

    Create a new sh for a given redeem script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new wsh descriptor from witness script\nErrors when miniscript exceeds resource limits under p2sh context\nor does not type check at the top level

    \n

    pub fn new_sh_wsh(ms: Miniscript<Pk, Segwitv0>) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh descriptor with witness script\nErrors when miniscript exceeds resource limits under wsh context\nor does not type check at the top level

    \n

    pub fn new_bare(ms: Miniscript<Pk, BareCtx>) -> Result<Descriptor<Pk>, Error>

    Create a new bare descriptor from witness script\nErrors when miniscript exceeds resource limits under bare context\nor does not type check at the top level

    \n

    pub fn new_sh_with_wpkh(wpkh: Wpkh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wpkh descriptor

    \n

    pub fn new_sh_with_wsh(wsh: Wsh<Pk>) -> Descriptor<Pk>

    Create a new sh wrapper for the given wsh descriptor

    \n

    pub fn new_sh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh sortedmulti descriptor with threshold k\nand Vec of pks.\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_sh_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new sh wrapped wsh sortedmulti descriptor from threshold\nk and Vec of pks\nErrors when miniscript exceeds resource limits under segwit context

    \n

    pub fn new_wsh_sortedmulti(\n k: usize,\n pks: Vec<Pk>\n) -> Result<Descriptor<Pk>, Error>

    Create a new wsh sorted multi descriptor\nErrors when miniscript exceeds resource limits under p2sh context

    \n

    pub fn new_tr(\n key: Pk,\n script: Option<TapTree<Pk>>\n) -> Result<Descriptor<Pk>, Error>

    Create new tr descriptor\nErrors when miniscript exceeds resource limits under Tap context

    \n

    pub fn desc_type(&self) -> DescriptorType

    Get the [DescriptorType] of Descriptor

    \n

    pub fn sanity_check(&self) -> Result<(), Error>

    Checks whether the descriptor is safe.

    \n

    Checks whether all the spend paths in the descriptor are possible on the\nbitcoin network under the current standardness and consensus rules. Also\nchecks whether the descriptor requires signatures on all spend paths and\nwhether the script is malleable.

    \n

    In general, all the guarantees of miniscript hold only for safe scripts.\nThe signer may not be able to find satisfactions even if one exists.

    \n

    pub fn max_weight_to_satisfy(&self) -> Result<Weight, Error>

    Computes an upper bound on the difference between a non-satisfied\nTxIn’s segwit_weight and a satisfied TxIn’s segwit_weight

    \n

    Since this method uses segwit_weight instead of legacy_weight,\nif you want to include only legacy inputs in your transaction,\nyou should remove 1WU from each input’s max_weight_to_satisfy\nfor a more accurate estimate.

    \n

    In other words, for segwit inputs or legacy inputs included in\nsegwit transactions, the following will hold for each input if\nthat input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].segwit_weight() - TxIn::default().segwit_weight()\n    );\n}
    \n

    Instead, for legacy transactions, the following will hold for each input\nif that input was satisfied with the largest possible witness:

    \n\n
    ⓘ
    for i in 0..transaction.input.len() {\n    assert_eq!(\n        descriptor_for_input[i].max_weight_to_satisfy(),\n        transaction.input[i].legacy_weight() - TxIn::default().legacy_weight()\n    );\n}
    \n

    Assumes all ECDSA signatures are 73 bytes, including push opcode and\nsighash suffix.\nAssumes all Schnorr signatures are 66 bytes, including push opcode and\nsighash suffix.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n

    pub fn max_satisfaction_weight(&self) -> Result<usize, Error>

    👎Deprecated since 10.0.0: Use max_weight_to_satisfy instead. The method to count bytes was redesigned and the results will differ from max_weight_to_satisfy. For more details check rust-bitcoin/rust-miniscript#476.

    Computes an upper bound on the weight of a satisfying witness to the\ntransaction.

    \n

    Assumes all ec-signatures are 73 bytes, including push opcode and\nsighash suffix. Includes the weight of the VarInts encoding the\nscriptSig and witness stack length.

    \n
    §Errors
    \n

    When the descriptor is impossible to safisfy (ex: sh(OP_FALSE)).

    \n
    ",0,"bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl DescriptorExt for Descriptor<DescriptorPublicKey>

    source§

    fn dust_value(&self) -> u64

    Returns the minimum value (in satoshis) at which an output is broadcastable.\nPanics if the descriptor wildcard is hardened.
    source§

    fn descriptor_id(&self) -> DescriptorId

    Returns the descriptor id, calculated as the sha256 of the descriptor, checksum not\nincluded.
    ","DescriptorExt","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<'de, Pk> Deserialize<'de> for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn deserialize<D>(\n deserializer: D\n) -> Result<Descriptor<Pk>, <D as Deserializer<'de>>::Error>
    where\n D: Deserializer<'de>,

    Deserialize this value from the given Serde deserializer. Read more
    ","Deserialize<'de>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Display for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

    Formats the value using the given formatter. Read more
    ","Display","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    source§

    impl ExtractPolicy for Descriptor<DescriptorPublicKey>

    source§

    fn extract_policy(\n &self,\n signers: &SignersContainer,\n build_sat: BuildSatisfaction<'_>,\n secp: &Secp256k1<All>\n) -> Result<Option<Policy>, Error>

    Extract the spending policy
    ","ExtractPolicy","bdk_wallet::descriptor::ExtendedDescriptor"],["
    §

    impl<Pk> ForEachKey<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn for_each_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for every key
    §

    fn for_any_key<'a, F>(&'a self, pred: F) -> bool
    where\n F: FnMut(&'a Pk) -> bool,\n Pk: 'a,

    Run a predicate on every key in the descriptor, returning whether\nthe predicate returned true for any key
    ","ForEachKey","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Bare<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Bare<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Pkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Pkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Sh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Sh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Tr<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Tr<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wpkh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wpkh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> From<Wsh<Pk>> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn from(inner: Wsh<Pk>) -> Descriptor<Pk>

    Converts to this type from the input type.
    ","From>","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromStr for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    type Err = Error

    The associated error which can be returned from parsing.
    §

    fn from_str(s: &str) -> Result<Descriptor<Pk>, Error>

    Parses a string s to return a value of this type. Read more
    ","FromStr","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> FromTree for Descriptor<Pk>
    where\n Pk: FromStrKey,

    §

    fn from_tree(top: &Tree<'_>) -> Result<Descriptor<Pk>, Error>

    Parse an expression tree into a descriptor.

    \n
    ","FromTree","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Hash for Descriptor<Pk>
    where\n Pk: Hash + MiniscriptKey,

    §

    fn hash<__H>(&self, state: &mut __H)
    where\n __H: Hasher,

    Feeds this value into the given Hasher. Read more
    1.3.0 · source§

    fn hash_slice<H>(data: &[Self], state: &mut H)
    where\n H: Hasher,\n Self: Sized,

    Feeds a slice of this type into the given Hasher. Read more
    ","Hash","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Liftable<Pk> for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn lift(&self) -> Result<Policy<Pk>, Error>

    Converts this object into an abstract policy.
    ","Liftable","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Ord for Descriptor<Pk>
    where\n Pk: Ord + MiniscriptKey,

    §

    fn cmp(&self, other: &Descriptor<Pk>) -> Ordering

    This method returns an Ordering between self and other. Read more
    1.21.0 · source§

    fn max(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the maximum of two values. Read more
    1.21.0 · source§

    fn min(self, other: Self) -> Self
    where\n Self: Sized,

    Compares and returns the minimum of two values. Read more
    1.50.0 · source§

    fn clamp(self, min: Self, max: Self) -> Self
    where\n Self: Sized + PartialOrd,

    Restrict a value to a certain interval. Read more
    ","Ord","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialEq for Descriptor<Pk>
    where\n Pk: PartialEq + MiniscriptKey,

    §

    fn eq(&self, other: &Descriptor<Pk>) -> bool

    This method tests for self and other values to be equal, and is used\nby ==.
    1.0.0 · source§

    fn ne(&self, other: &Rhs) -> bool

    This method tests for !=. The default implementation is almost always\nsufficient, and should not be overridden without very good reason.
    ","PartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> PartialOrd for Descriptor<Pk>
    where\n Pk: PartialOrd + MiniscriptKey,

    §

    fn partial_cmp(&self, other: &Descriptor<Pk>) -> Option<Ordering>

    This method returns an ordering between self and other values if one exists. Read more
    1.0.0 · source§

    fn lt(&self, other: &Rhs) -> bool

    This method tests less than (for self and other) and is used by the < operator. Read more
    1.0.0 · source§

    fn le(&self, other: &Rhs) -> bool

    This method tests less than or equal to (for self and other) and is used by the <=\noperator. Read more
    1.0.0 · source§

    fn gt(&self, other: &Rhs) -> bool

    This method tests greater than (for self and other) and is used by the > operator. Read more
    1.0.0 · source§

    fn ge(&self, other: &Rhs) -> bool

    This method tests greater than or equal to (for self and other) and is used by the >=\noperator. Read more
    ","PartialOrd","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<'de, Pk> Serialize for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    §

    fn serialize<S>(\n &self,\n serializer: S\n) -> Result<<S as Serializer>::Ok, <S as Serializer>::Error>
    where\n S: Serializer,

    Serialize this value into the given Serde serializer. Read more
    ","Serialize","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<P, Q> TranslatePk<P, Q> for Descriptor<P>
    where\n P: MiniscriptKey,\n Q: MiniscriptKey,

    §

    fn translate_pk<T, E>(\n &self,\n t: &mut T\n) -> Result<<Descriptor<P> as TranslatePk<P, Q>>::Output, TranslateErr<E>>
    where\n T: Translator<P, Q, E>,

    Converts a descriptor using abstract keys to one using specific keys.

    \n
    §

    type Output = Descriptor<Q>

    The associated output type. This must be Self<Q>.
    ","TranslatePk","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> Eq for Descriptor<Pk>
    where\n Pk: Eq + MiniscriptKey,

    ","Eq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"],["
    §

    impl<Pk> StructuralPartialEq for Descriptor<Pk>
    where\n Pk: MiniscriptKey,

    ","StructuralPartialEq","bdk_wallet::descriptor::ExtendedDescriptor","bdk_wallet::descriptor::DerivedDescriptor"]] };if (window.register_type_impls) {window.register_type_impls(type_impls);} else {window.pending_type_impls = type_impls;}})() \ No newline at end of file diff --git a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js index 4e383dc59d..fc0cdb936a 100644 --- a/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js +++ b/docs/.vuepress/public/docs-rs/bdk/nightly/latest/type.impl/std/primitive.tuple.js @@ -1,4 +1,5 @@ (function() {var type_impls = { +"bdk_chain":[["
    source§

    impl<T0, T1> Append for (T0, T1)
    where\n T0: Append,\n T1: Append,

    source§

    fn append(&mut self, _other: Self)

    Append another object of the same type onto self.
    source§

    fn is_empty(&self) -> bool

    Returns whether the structure is considered empty.
    ","Append","bdk_chain::keychain::Indexed","bdk_chain::keychain::KeychainIndexed"],["
    source§

    impl From<BlockId> for (u32, BlockHash)

    source§

    fn from(block_id: BlockId) -> Self

    Converts to this type from the input type.
    ","From","bdk_chain::keychain::Indexed"]], "bdk_wallet":[], "example_bitcoind_rpc_polling":[], "example_cli":[],