WalletProtobufSerializer.smali

.class public Lorg/bitcoinj/wallet/WalletProtobufSerializer;
.super Ljava/lang/Object;
.source "WalletProtobufSerializer.java"


# static fields
.field public static final CURRENT_WALLET_VERSION:I

.field private static final WALLET_SIZE_LIMIT:I = 0x20000000

.field private static final log:Lorg/slf4j/Logger;


# instance fields
.field private final factory:Lorg/bitcoinj/wallet/WalletProtobufSerializer$WalletFactory;

.field private keyChainFactory:Lorg/bitcoinj/wallet/KeyChainFactory;

.field private requireMandatoryExtensions:Z

.field protected txMap:Ljava/util/Map;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/Map",
            "<",
            "Lcom/google/protobuf/ByteString;",
            "Lorg/bitcoinj/core/Transaction;",
            ">;"
        }
    .end annotation
.end field


# direct methods
.method static constructor <clinit>()V
    .registers 1

    .prologue
    .line 72
    const-class v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;

    invoke-static {v0}, Lorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger;

    move-result-object v0

    sput-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    .line 74
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$Wallet;->getDefaultInstance()Lorg/bitcoinj/wallet/Protos$Wallet;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Wallet;->getVersion()I

    move-result v0

    sput v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->CURRENT_WALLET_VERSION:I

    return-void
.end method

.method public constructor <init>()V
    .registers 2

    .prologue
    .line 90
    new-instance v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer$1;

    invoke-direct {v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer$1;-><init>()V

    invoke-direct {p0, v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;-><init>(Lorg/bitcoinj/wallet/WalletProtobufSerializer$WalletFactory;)V

    .line 96
    return-void
.end method

.method public constructor <init>(Lorg/bitcoinj/wallet/WalletProtobufSerializer$WalletFactory;)V
    .registers 3

    .prologue
    .line 98
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 80
    const/4 v0, 0x1

    iput-boolean v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->requireMandatoryExtensions:Z

    .line 99
    new-instance v0, Ljava/util/HashMap;

    invoke-direct {v0}, Ljava/util/HashMap;-><init>()V

    iput-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    .line 100
    iput-object p1, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->factory:Lorg/bitcoinj/wallet/WalletProtobufSerializer$WalletFactory;

    .line 101
    new-instance v0, Lorg/bitcoinj/wallet/DefaultKeyChainFactory;

    invoke-direct {v0}, Lorg/bitcoinj/wallet/DefaultKeyChainFactory;-><init>()V

    iput-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->keyChainFactory:Lorg/bitcoinj/wallet/KeyChainFactory;

    .line 102
    return-void
.end method

.method public static byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;
    .registers 2

    .prologue
    .line 376
    invoke-virtual {p0}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v0

    invoke-static {v0}, Lorg/bitcoinj/core/Sha256Hash;->wrap([B)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    return-object v0
.end method

.method private connectTransactionOutputs(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/Protos$Transaction;)Lorg/bitcoinj/wallet/WalletTransaction;
    .registers 11

    .prologue
    const/4 v5, 0x0

    .line 678
    iget-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    invoke-virtual {p2}, Lorg/bitcoinj/wallet/Protos$Transaction;->getHash()Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/Transaction;

    .line 680
    sget-object v1, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$wallet$Protos$Transaction$Pool:[I

    invoke-virtual {p2}, Lorg/bitcoinj/wallet/Protos$Transaction;->getPool()Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    move-result-object v2

    invoke-virtual {v2}, Lorg/bitcoinj/wallet/Protos$Transaction$Pool;->ordinal()I

    move-result v2

    aget v1, v1, v2

    packed-switch v1, :pswitch_data_c0

    .line 694
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Unknown transaction pool: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p2}, Lorg/bitcoinj/wallet/Protos$Transaction;->getPool()Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 681
    :pswitch_35
    sget-object v1, Lorg/bitcoinj/wallet/WalletTransaction$Pool;->DEAD:Lorg/bitcoinj/wallet/WalletTransaction$Pool;

    move-object v3, v1

    :goto_38
    move v4, v5

    .line 696
    :goto_39
    invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getOutputs()Ljava/util/List;

    move-result-object v1

    invoke-interface {v1}, Ljava/util/List;->size()I

    move-result v1

    if-ge v4, v1, :cond_a9

    .line 697
    invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getOutputs()Ljava/util/List;

    move-result-object v1

    invoke-interface {v1, v4}, Ljava/util/List;->get(I)Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lorg/bitcoinj/core/TransactionOutput;

    .line 698
    invoke-virtual {p2, v4}, Lorg/bitcoinj/wallet/Protos$Transaction;->getTransactionOutput(I)Lorg/bitcoinj/wallet/Protos$TransactionOutput;

    move-result-object v6

    .line 699
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionOutput;->hasSpentByTransactionHash()Z

    move-result v2

    if-eqz v2, :cond_a5

    .line 700
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionOutput;->getSpentByTransactionHash()Lcom/google/protobuf/ByteString;

    move-result-object v7

    .line 701
    iget-object v2, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    invoke-interface {v2, v7}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lorg/bitcoinj/core/Transaction;

    .line 702
    if-nez v2, :cond_93

    .line 703
    new-instance v1, Lorg/bitcoinj/wallet/UnreadableWalletException;

    sget-object v2, Ljava/util/Locale;->US:Ljava/util/Locale;

    const-string v3, "Could not connect %s to %s"

    const/4 v4, 0x2

    new-array v4, v4, [Ljava/lang/Object;

    .line 704
    invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getHashAsString()Ljava/lang/String;

    move-result-object v0

    aput-object v0, v4, v5

    const/4 v0, 0x1

    invoke-static {v7}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v5

    aput-object v5, v4, v0

    .line 703
    invoke-static {v2, v3, v4}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v0

    invoke-direct {v1, v0}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v1

    .line 682
    :pswitch_83
    sget-object v1, Lorg/bitcoinj/wallet/WalletTransaction$Pool;->PENDING:Lorg/bitcoinj/wallet/WalletTransaction$Pool;

    move-object v3, v1

    goto :goto_38

    .line 683
    :pswitch_87
    sget-object v1, Lorg/bitcoinj/wallet/WalletTransaction$Pool;->SPENT:Lorg/bitcoinj/wallet/WalletTransaction$Pool;

    move-object v3, v1

    goto :goto_38

    .line 684
    :pswitch_8b
    sget-object v1, Lorg/bitcoinj/wallet/WalletTransaction$Pool;->UNSPENT:Lorg/bitcoinj/wallet/WalletTransaction$Pool;

    move-object v3, v1

    goto :goto_38

    .line 691
    :pswitch_8f
    sget-object v1, Lorg/bitcoinj/wallet/WalletTransaction$Pool;->PENDING:Lorg/bitcoinj/wallet/WalletTransaction$Pool;

    move-object v3, v1

    .line 692
    goto :goto_38

    .line 706
    :cond_93
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionOutput;->getSpentByTransactionIndex()I

    move-result v6

    .line 707
    int-to-long v6, v6

    invoke-virtual {v2, v6, v7}, Lorg/bitcoinj/core/Transaction;->getInput(J)Lorg/bitcoinj/core/TransactionInput;

    move-result-object v2

    invoke-static {v2}, Lcom/google/common/base/n;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v2

    check-cast v2, Lorg/bitcoinj/core/TransactionInput;

    .line 708
    invoke-virtual {v2, v1}, Lorg/bitcoinj/core/TransactionInput;->connect(Lorg/bitcoinj/core/TransactionOutput;)V

    .line 696
    :cond_a5
    add-int/lit8 v1, v4, 0x1

    move v4, v1

    goto :goto_39

    .line 712
    :cond_a9
    invoke-virtual {p2}, Lorg/bitcoinj/wallet/Protos$Transaction;->hasConfidence()Z

    move-result v1

    if-eqz v1, :cond_ba

    .line 713
    invoke-virtual {p2}, Lorg/bitcoinj/wallet/Protos$Transaction;->getConfidence()Lorg/bitcoinj/wallet/Protos$TransactionConfidence;

    move-result-object v1

    .line 714
    invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getConfidence()Lorg/bitcoinj/core/TransactionConfidence;

    move-result-object v2

    .line 715
    invoke-direct {p0, p1, v0, v1, v2}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->readConfidence(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/wallet/Protos$TransactionConfidence;Lorg/bitcoinj/core/TransactionConfidence;)V

    .line 718
    :cond_ba
    new-instance v1, Lorg/bitcoinj/wallet/WalletTransaction;

    invoke-direct {v1, v3, v0}, Lorg/bitcoinj/wallet/WalletTransaction;-><init>(Lorg/bitcoinj/wallet/WalletTransaction$Pool;Lorg/bitcoinj/core/Transaction;)V

    return-object v1

    .line 680
    :pswitch_data_c0
    .packed-switch 0x1
        :pswitch_35
        :pswitch_83
        :pswitch_87
        :pswitch_8b
        :pswitch_8f
        :pswitch_8f
    .end packed-switch
.end method

.method private static getProtoPool(Lorg/bitcoinj/wallet/WalletTransaction;)Lorg/bitcoinj/wallet/Protos$Transaction$Pool;
    .registers 3

    .prologue
    .line 319
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$wallet$WalletTransaction$Pool:[I

    invoke-virtual {p0}, Lorg/bitcoinj/wallet/WalletTransaction;->getPool()Lorg/bitcoinj/wallet/WalletTransaction$Pool;

    move-result-object v1

    invoke-virtual {v1}, Lorg/bitcoinj/wallet/WalletTransaction$Pool;->ordinal()I

    move-result v1

    aget v0, v0, v1

    packed-switch v0, :pswitch_data_24

    .line 325
    new-instance v0, Ljava/lang/RuntimeException;

    const-string v1, "Unreachable"

    invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 320
    :pswitch_17
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Pool;->UNSPENT:Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    .line 323
    :goto_19
    return-object v0

    .line 321
    :pswitch_1a
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Pool;->SPENT:Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    goto :goto_19

    .line 322
    :pswitch_1d
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Pool;->DEAD:Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    goto :goto_19

    .line 323
    :pswitch_20
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Pool;->PENDING:Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    goto :goto_19

    .line 319
    nop

    :pswitch_data_24
    .packed-switch 0x1
        :pswitch_17
        :pswitch_1a
        :pswitch_1d
        :pswitch_20
    .end packed-switch
.end method

.method public static hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;
    .registers 2

    .prologue
    .line 372
    invoke-virtual {p0}, Lorg/bitcoinj/core/Sha256Hash;->getBytes()[B

    move-result-object v0

    invoke-static {v0}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v0

    return-object v0
.end method

.method public static isWallet(Ljava/io/InputStream;)Z
    .registers 5

    .prologue
    const/4 v1, 0x1

    const/4 v0, 0x0

    .line 803
    :try_start_2
    invoke-static {p0}, Lcom/google/protobuf/CodedInputStream;->g(Ljava/io/InputStream;)Lcom/google/protobuf/CodedInputStream;

    move-result-object v2

    .line 804
    invoke-virtual {v2}, Lcom/google/protobuf/CodedInputStream;->AG()I

    move-result v3

    .line 2067
    ushr-int/lit8 v3, v3, 0x3

    .line 806
    if-eq v3, v1, :cond_f

    .line 811
    :cond_e
    :goto_e
    return v0

    .line 808
    :cond_f
    invoke-virtual {v2}, Lcom/google/protobuf/CodedInputStream;->readString()Ljava/lang/String;

    move-result-object v2

    .line 809
    invoke-static {v2}, Lorg/bitcoinj/core/NetworkParameters;->fromID(Ljava/lang/String;)Lorg/bitcoinj/core/NetworkParameters;
    :try_end_16
    .catch Ljava/io/IOException; {:try_start_2 .. :try_end_16} :catch_1b

    move-result-object v2

    if-eqz v2, :cond_e

    move v0, v1

    goto :goto_e

    .line 811
    :catch_1b
    move-exception v1

    goto :goto_e
.end method

.method private loadExtensions(Lorg/bitcoinj/wallet/Wallet;[Lorg/bitcoinj/wallet/WalletExtension;Lorg/bitcoinj/wallet/Protos$Wallet;)V
    .registers 11

    .prologue
    .line 560
    new-instance v2, Ljava/util/HashMap;

    invoke-direct {v2}, Ljava/util/HashMap;-><init>()V

    .line 561
    array-length v1, p2

    const/4 v0, 0x0

    :goto_7
    if-ge v0, v1, :cond_15

    aget-object v3, p2, v0

    .line 562
    invoke-interface {v3}, Lorg/bitcoinj/wallet/WalletExtension;->getWalletExtensionID()Ljava/lang/String;

    move-result-object v4

    invoke-interface {v2, v4, v3}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 561
    add-int/lit8 v0, v0, 0x1

    goto :goto_7

    .line 565
    :cond_15
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getExtensions()Ljava/util/Map;

    move-result-object v0

    invoke-interface {v2, v0}, Ljava/util/Map;->putAll(Ljava/util/Map;)V

    .line 566
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getExtensionList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :cond_24
    :goto_24
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_9e

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    move-object v1, v0

    check-cast v1, Lorg/bitcoinj/wallet/Protos$Extension;

    .line 567
    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$Extension;->getId()Ljava/lang/String;

    move-result-object v4

    .line 568
    invoke-interface {v2, v4}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/WalletExtension;

    .line 569
    if-nez v0, :cond_64

    .line 570
    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$Extension;->getMandatory()Z

    move-result v0

    if-eqz v0, :cond_24

    .line 571
    iget-boolean v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->requireMandatoryExtensions:Z

    if-eqz v0, :cond_5c

    .line 572
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Unknown mandatory extension in wallet: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 574
    :cond_5c
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Unknown extension in wallet {}, ignoring"

    invoke-interface {v0, v1, v4}, Lorg/slf4j/Logger;->error(Ljava/lang/String;Ljava/lang/Object;)V

    goto :goto_24

    .line 577
    :cond_64
    sget-object v5, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v6, "Loading wallet extension {}"

    invoke-interface {v5, v6, v4}, Lorg/slf4j/Logger;->info(Ljava/lang/String;Ljava/lang/Object;)V

    .line 579
    :try_start_6b
    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$Extension;->getData()Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-virtual {v5}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v5

    invoke-virtual {p1, v0, v5}, Lorg/bitcoinj/wallet/Wallet;->deserializeExtension(Lorg/bitcoinj/wallet/WalletExtension;[B)V
    :try_end_76
    .catch Ljava/lang/Exception; {:try_start_6b .. :try_end_76} :catch_77

    goto :goto_24

    .line 581
    :catch_77
    move-exception v0

    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$Extension;->getMandatory()Z

    move-result v0

    if-eqz v0, :cond_24

    iget-boolean v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->requireMandatoryExtensions:Z

    if-eqz v0, :cond_24

    .line 582
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Error whilst reading mandatory extension {}, failing to read wallet"

    invoke-interface {v0, v1, v4}, Lorg/slf4j/Logger;->error(Ljava/lang/String;Ljava/lang/Object;)V

    .line 583
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Could not parse mandatory extension in wallet: "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v1, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 588
    :cond_9e
    return-void
.end method

.method private static makeTxProto(Lorg/bitcoinj/wallet/WalletTransaction;)Lorg/bitcoinj/wallet/Protos$Transaction;
    .registers 9

    .prologue
    .line 232
    invoke-virtual {p0}, Lorg/bitcoinj/wallet/WalletTransaction;->getTransaction()Lorg/bitcoinj/core/Transaction;

    move-result-object v2

    .line 233
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$Transaction;->newBuilder()Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    move-result-object v3

    .line 235
    invoke-static {p0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->getProtoPool(Lorg/bitcoinj/wallet/WalletTransaction;)Lorg/bitcoinj/wallet/Protos$Transaction$Pool;

    move-result-object v0

    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setPool(Lorg/bitcoinj/wallet/Protos$Transaction$Pool;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    move-result-object v0

    .line 236
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v1

    invoke-static {v1}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-virtual {v0, v1}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    move-result-object v0

    .line 237
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getVersion()J

    move-result-wide v4

    long-to-int v1, v4

    invoke-virtual {v0, v1}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setVersion(I)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 239
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getUpdateTime()Ljava/util/Date;

    move-result-object v0

    if-eqz v0, :cond_35

    .line 240
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getUpdateTime()Ljava/util/Date;

    move-result-object v0

    invoke-virtual {v0}, Ljava/util/Date;->getTime()J

    move-result-wide v0

    invoke-virtual {v3, v0, v1}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setUpdatedAt(J)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 243
    :cond_35
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getLockTime()J

    move-result-wide v0

    const-wide/16 v4, 0x0

    cmp-long v0, v0, v4

    if-lez v0, :cond_47

    .line 244
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getLockTime()J

    move-result-wide v0

    long-to-int v0, v0

    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setLockTime(I)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 248
    :cond_47
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getInputs()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_4f
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_a9

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/TransactionInput;

    .line 249
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->newBuilder()Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;

    move-result-object v4

    .line 250
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getScriptBytes()[B

    move-result-object v5

    invoke-static {v5}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-virtual {v4, v5}, Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;->setScriptBytes(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;

    move-result-object v4

    .line 251
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getOutpoint()Lorg/bitcoinj/core/TransactionOutPoint;

    move-result-object v5

    invoke-virtual {v5}, Lorg/bitcoinj/core/TransactionOutPoint;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v5

    invoke-static {v5}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-virtual {v4, v5}, Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;->setTransactionOutPointHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;

    move-result-object v4

    .line 252
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getOutpoint()Lorg/bitcoinj/core/TransactionOutPoint;

    move-result-object v5

    invoke-virtual {v5}, Lorg/bitcoinj/core/TransactionOutPoint;->getIndex()J

    move-result-wide v6

    long-to-int v5, v6

    invoke-virtual {v4, v5}, Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;->setTransactionOutPointIndex(I)Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;

    move-result-object v4

    .line 253
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->hasSequence()Z

    move-result v5

    if-eqz v5, :cond_96

    .line 254
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getSequenceNumber()J

    move-result-wide v6

    long-to-int v5, v6

    invoke-virtual {v4, v5}, Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;->setSequence(I)Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;

    .line 255
    :cond_96
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getValue()Lorg/bitcoinj/core/Coin;

    move-result-object v5

    if-eqz v5, :cond_a5

    .line 256
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getValue()Lorg/bitcoinj/core/Coin;

    move-result-object v0

    iget-wide v6, v0, Lorg/bitcoinj/core/Coin;->value:J

    invoke-virtual {v4, v6, v7}, Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;->setValue(J)Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;

    .line 257
    :cond_a5
    invoke-virtual {v3, v4}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->addTransactionInput(Lorg/bitcoinj/wallet/Protos$TransactionInput$Builder;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    goto :goto_4f

    .line 261
    :cond_a9
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getOutputs()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_b1
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_100

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/TransactionOutput;

    .line 262
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$TransactionOutput;->newBuilder()Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;

    move-result-object v4

    .line 263
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionOutput;->getScriptBytes()[B

    move-result-object v5

    invoke-static {v5}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-virtual {v4, v5}, Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;->setScriptBytes(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;

    move-result-object v4

    .line 264
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionOutput;->getValue()Lorg/bitcoinj/core/Coin;

    move-result-object v5

    iget-wide v6, v5, Lorg/bitcoinj/core/Coin;->value:J

    invoke-virtual {v4, v6, v7}, Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;->setValue(J)Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;

    move-result-object v4

    .line 265
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionOutput;->getSpentBy()Lorg/bitcoinj/core/TransactionInput;

    move-result-object v0

    .line 266
    if-eqz v0, :cond_fc

    .line 267
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getParentTransaction()Lorg/bitcoinj/core/Transaction;

    move-result-object v5

    invoke-virtual {v5}, Lorg/bitcoinj/core/Transaction;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v5

    .line 268
    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionInput;->getParentTransaction()Lorg/bitcoinj/core/Transaction;

    move-result-object v6

    invoke-virtual {v6}, Lorg/bitcoinj/core/Transaction;->getInputs()Ljava/util/List;

    move-result-object v6

    invoke-interface {v6, v0}, Ljava/util/List;->indexOf(Ljava/lang/Object;)I

    move-result v0

    .line 269
    invoke-static {v5}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-virtual {v4, v5}, Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;->setSpentByTransactionHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;

    move-result-object v5

    .line 270
    invoke-virtual {v5, v0}, Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;->setSpentByTransactionIndex(I)Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;

    .line 272
    :cond_fc
    invoke-virtual {v3, v4}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->addTransactionOutput(Lorg/bitcoinj/wallet/Protos$TransactionOutput$Builder;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    goto :goto_b1

    .line 276
    :cond_100
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getAppearsInHashes()Ljava/util/Map;

    move-result-object v0

    .line 277
    if-eqz v0, :cond_135

    .line 278
    invoke-interface {v0}, Ljava/util/Map;->entrySet()Ljava/util/Set;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object v4

    :goto_10e
    invoke-interface {v4}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_135

    invoke-interface {v4}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/util/Map$Entry;

    .line 279
    invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lorg/bitcoinj/core/Sha256Hash;

    invoke-static {v1}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-virtual {v3, v1}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->addBlockHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 280
    invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/lang/Integer;

    invoke-virtual {v0}, Ljava/lang/Integer;->intValue()I

    move-result v0

    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->addBlockRelativityOffsets(I)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    goto :goto_10e

    .line 284
    :cond_135
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->hasConfidence()Z

    move-result v0

    if-eqz v0, :cond_146

    .line 285
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getConfidence()Lorg/bitcoinj/core/TransactionConfidence;

    move-result-object v0

    .line 286
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->newBuilder()Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    move-result-object v1

    .line 287
    invoke-static {v3, v0, v1}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->writeConfidence(Lorg/bitcoinj/wallet/Protos$Transaction$Builder;Lorg/bitcoinj/core/TransactionConfidence;Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;)V

    .line 291
    :cond_146
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$core$Transaction$Purpose:[I

    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getPurpose()Lorg/bitcoinj/core/Transaction$Purpose;

    move-result-object v1

    invoke-virtual {v1}, Lorg/bitcoinj/core/Transaction$Purpose;->ordinal()I

    move-result v1

    aget v0, v0, v1

    packed-switch v0, :pswitch_data_1ac

    .line 300
    new-instance v0, Ljava/lang/RuntimeException;

    const-string v1, "New tx purpose serialization not implemented."

    invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 292
    :pswitch_15d
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->UNKNOWN:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    .line 302
    :goto_15f
    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setPurpose(Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 304
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getExchangeRate()Lorg/bitcoinj/utils/ExchangeRate;

    move-result-object v0

    .line 305
    if-eqz v0, :cond_187

    .line 306
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$ExchangeRate;->newBuilder()Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;

    move-result-object v1

    iget-object v4, v0, Lorg/bitcoinj/utils/ExchangeRate;->coin:Lorg/bitcoinj/core/Coin;

    iget-wide v4, v4, Lorg/bitcoinj/core/Coin;->value:J

    .line 307
    invoke-virtual {v1, v4, v5}, Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;->setCoinValue(J)Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;

    move-result-object v1

    iget-object v4, v0, Lorg/bitcoinj/utils/ExchangeRate;->fiat:Lorg/bitcoinj/utils/Fiat;

    iget-wide v4, v4, Lorg/bitcoinj/utils/Fiat;->value:J

    invoke-virtual {v1, v4, v5}, Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;->setFiatValue(J)Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;

    move-result-object v1

    iget-object v0, v0, Lorg/bitcoinj/utils/ExchangeRate;->fiat:Lorg/bitcoinj/utils/Fiat;

    iget-object v0, v0, Lorg/bitcoinj/utils/Fiat;->currencyCode:Ljava/lang/String;

    .line 308
    invoke-virtual {v1, v0}, Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;->setFiatCurrencyCode(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;

    move-result-object v0

    .line 309
    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setExchangeRate(Lorg/bitcoinj/wallet/Protos$ExchangeRate$Builder;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 312
    :cond_187
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getMemo()Ljava/lang/String;

    move-result-object v0

    if-eqz v0, :cond_194

    .line 313
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getMemo()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setMemo(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 315
    :cond_194
    invoke-virtual {v3}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->build()Lorg/bitcoinj/wallet/Protos$Transaction;

    move-result-object v0

    return-object v0

    .line 293
    :pswitch_199
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->USER_PAYMENT:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    goto :goto_15f

    .line 294
    :pswitch_19c
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->KEY_ROTATION:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    goto :goto_15f

    .line 295
    :pswitch_19f
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->ASSURANCE_CONTRACT_CLAIM:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    goto :goto_15f

    .line 296
    :pswitch_1a2
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->ASSURANCE_CONTRACT_PLEDGE:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    goto :goto_15f

    .line 297
    :pswitch_1a5
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->ASSURANCE_CONTRACT_STUB:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    goto :goto_15f

    .line 298
    :pswitch_1a8
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->RAISE_FEE:Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    goto :goto_15f

    .line 291
    nop

    :pswitch_data_1ac
    .packed-switch 0x1
        :pswitch_15d
        :pswitch_199
        :pswitch_19c
        :pswitch_19f
        :pswitch_1a2
        :pswitch_1a5
        :pswitch_1a8
    .end packed-switch
.end method

.method public static parseToProto(Ljava/io/InputStream;)Lorg/bitcoinj/wallet/Protos$Wallet;
    .registers 3

    .prologue
    .line 596
    invoke-static {p0}, Lcom/google/protobuf/CodedInputStream;->g(Ljava/io/InputStream;)Lcom/google/protobuf/CodedInputStream;

    move-result-object v0

    .line 1953
    const/high16 v1, 0x20000000

    iput v1, v0, Lcom/google/protobuf/CodedInputStream;->bim:I

    .line 598
    invoke-static {v0}, Lorg/bitcoinj/wallet/Protos$Wallet;->parseFrom(Lcom/google/protobuf/CodedInputStream;)Lorg/bitcoinj/wallet/Protos$Wallet;

    move-result-object v0

    return-object v0
.end method

.method private static populateExtensions(Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/wallet/Protos$Wallet$Builder;)V
    .registers 6

    .prologue
    .line 222
    invoke-virtual {p0}, Lorg/bitcoinj/wallet/Wallet;->getExtensions()Ljava/util/Map;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/Map;->values()Ljava/util/Collection;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/Collection;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_c
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_39

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/WalletExtension;

    .line 223
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$Extension;->newBuilder()Lorg/bitcoinj/wallet/Protos$Extension$Builder;

    move-result-object v2

    .line 224
    invoke-interface {v0}, Lorg/bitcoinj/wallet/WalletExtension;->getWalletExtensionID()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v2, v3}, Lorg/bitcoinj/wallet/Protos$Extension$Builder;->setId(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$Extension$Builder;

    .line 225
    invoke-interface {v0}, Lorg/bitcoinj/wallet/WalletExtension;->isWalletExtensionMandatory()Z

    move-result v3

    invoke-virtual {v2, v3}, Lorg/bitcoinj/wallet/Protos$Extension$Builder;->setMandatory(Z)Lorg/bitcoinj/wallet/Protos$Extension$Builder;

    .line 226
    invoke-interface {v0}, Lorg/bitcoinj/wallet/WalletExtension;->serializeWalletExtension()[B

    move-result-object v0

    invoke-static {v0}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Extension$Builder;->setData(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$Extension$Builder;

    .line 227
    invoke-virtual {p1, v2}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->addExtension(Lorg/bitcoinj/wallet/Protos$Extension$Builder;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    goto :goto_c

    .line 229
    :cond_39
    return-void
.end method

.method private readConfidence(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/wallet/Protos$TransactionConfidence;Lorg/bitcoinj/core/TransactionConfidence;)V
    .registers 10

    .prologue
    .line 726
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->hasType()Z

    move-result v0

    if-nez v0, :cond_12

    .line 727
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Unknown confidence type for tx {}"

    invoke-virtual {p2}, Lorg/bitcoinj/core/Transaction;->getHashAsString()Ljava/lang/String;

    move-result-object v2

    invoke-interface {v0, v1, v2}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V

    .line 792
    :goto_11
    return-void

    .line 731
    :cond_12
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$wallet$Protos$TransactionConfidence$Type:[I

    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getType()Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Type;

    move-result-object v1

    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Type;->ordinal()I

    move-result v1

    aget v0, v0, v1

    packed-switch v0, :pswitch_data_126

    .line 741
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->UNKNOWN:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    .line 743
    :goto_23
    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setConfidenceType(Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;)V

    .line 744
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->hasAppearedAtHeight()Z

    move-result v0

    if-eqz v0, :cond_56

    .line 745
    invoke-virtual {p4}, Lorg/bitcoinj/core/TransactionConfidence;->getConfidenceType()Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    move-result-object v0

    sget-object v1, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->BUILDING:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    if-eq v0, v1, :cond_4f

    .line 746
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Have appearedAtHeight but not BUILDING for tx {}"

    invoke-virtual {p2}, Lorg/bitcoinj/core/Transaction;->getHashAsString()Ljava/lang/String;

    move-result-object v2

    invoke-interface {v0, v1, v2}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V

    goto :goto_11

    .line 732
    :pswitch_40
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->BUILDING:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    goto :goto_23

    .line 733
    :pswitch_43
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->DEAD:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    goto :goto_23

    .line 735
    :pswitch_46
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->PENDING:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    goto :goto_23

    .line 736
    :pswitch_49
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->PENDING:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    goto :goto_23

    .line 737
    :pswitch_4c
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->IN_CONFLICT:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    goto :goto_23

    .line 749
    :cond_4f
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getAppearedAtHeight()I

    move-result v0

    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setAppearedAtChainHeight(I)V

    .line 751
    :cond_56
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->hasDepth()Z

    move-result v0

    if-eqz v0, :cond_77

    .line 752
    invoke-virtual {p4}, Lorg/bitcoinj/core/TransactionConfidence;->getConfidenceType()Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    move-result-object v0

    sget-object v1, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->BUILDING:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    if-eq v0, v1, :cond_70

    .line 753
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Have depth but not BUILDING for tx {}"

    invoke-virtual {p2}, Lorg/bitcoinj/core/Transaction;->getHashAsString()Ljava/lang/String;

    move-result-object v2

    invoke-interface {v0, v1, v2}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V

    goto :goto_11

    .line 756
    :cond_70
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getDepth()I

    move-result v0

    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setDepthInBlocks(I)V

    .line 758
    :cond_77
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->hasOverridingTransaction()Z

    move-result v0

    if-eqz v0, :cond_af

    .line 759
    invoke-virtual {p4}, Lorg/bitcoinj/core/TransactionConfidence;->getConfidenceType()Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    move-result-object v0

    sget-object v1, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->DEAD:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    if-eq v0, v1, :cond_91

    .line 760
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Have overridingTransaction but not OVERRIDDEN for tx {}"

    invoke-virtual {p2}, Lorg/bitcoinj/core/Transaction;->getHashAsString()Ljava/lang/String;

    move-result-object v2

    invoke-interface {v0, v1, v2}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V

    goto :goto_11

    .line 763
    :cond_91
    iget-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    .line 764
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getOverridingTransaction()Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-interface {v0, v1}, Ljava/util/Map;->get(Ljava/lang/Object;)Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/Transaction;

    .line 765
    if-nez v0, :cond_ac

    .line 766
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->log:Lorg/slf4j/Logger;

    const-string v1, "Have overridingTransaction that is not in wallet for tx {}"

    invoke-virtual {p2}, Lorg/bitcoinj/core/Transaction;->getHashAsString()Ljava/lang/String;

    move-result-object v2

    invoke-interface {v0, v1, v2}, Lorg/slf4j/Logger;->warn(Ljava/lang/String;Ljava/lang/Object;)V

    goto/16 :goto_11

    .line 769
    :cond_ac
    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setOverridingTransaction(Lorg/bitcoinj/core/Transaction;)V

    .line 771
    :cond_af
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getBroadcastByList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_b7
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_f0

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$PeerAddress;

    .line 774
    :try_start_c3
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$PeerAddress;->getIpAddress()Lcom/google/protobuf/ByteString;

    move-result-object v2

    invoke-virtual {v2}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v2

    invoke-static {v2}, Ljava/net/InetAddress;->getByAddress([B)Ljava/net/InetAddress;
    :try_end_ce
    .catch Ljava/net/UnknownHostException; {:try_start_c3 .. :try_end_ce} :catch_e7

    move-result-object v2

    .line 778
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$PeerAddress;->getPort()I

    move-result v3

    .line 779
    new-instance v4, Lorg/bitcoinj/core/PeerAddress;

    invoke-direct {v4, p1, v2, v3}, Lorg/bitcoinj/core/PeerAddress;-><init>(Lorg/bitcoinj/core/NetworkParameters;Ljava/net/InetAddress;I)V

    .line 780
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$PeerAddress;->getServices()J

    move-result-wide v2

    invoke-static {v2, v3}, Ljava/math/BigInteger;->valueOf(J)Ljava/math/BigInteger;

    move-result-object v0

    invoke-virtual {v4, v0}, Lorg/bitcoinj/core/PeerAddress;->setServices(Ljava/math/BigInteger;)V

    .line 781
    invoke-virtual {p4, v4}, Lorg/bitcoinj/core/TransactionConfidence;->markBroadcastBy(Lorg/bitcoinj/core/PeerAddress;)Z

    goto :goto_b7

    .line 775
    :catch_e7
    move-exception v0

    .line 776
    new-instance v1, Lorg/bitcoinj/wallet/UnreadableWalletException;

    const-string v2, "Peer IP address does not have the right length"

    invoke-direct {v1, v2, v0}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v1

    .line 783
    :cond_f0
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->hasLastBroadcastedAt()Z

    move-result v0

    if-eqz v0, :cond_102

    .line 784
    new-instance v0, Ljava/util/Date;

    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getLastBroadcastedAt()J

    move-result-wide v2

    invoke-direct {v0, v2, v3}, Ljava/util/Date;-><init>(J)V

    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setLastBroadcastedAt(Ljava/util/Date;)V

    .line 785
    :cond_102
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$wallet$Protos$TransactionConfidence$Source:[I

    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence;->getSource()Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;

    move-result-object v1

    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;->ordinal()I

    move-result v1

    aget v0, v0, v1

    packed-switch v0, :pswitch_data_134

    .line 790
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$Source;->UNKNOWN:Lorg/bitcoinj/core/TransactionConfidence$Source;

    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setSource(Lorg/bitcoinj/core/TransactionConfidence$Source;)V

    goto/16 :goto_11

    .line 786
    :pswitch_118
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$Source;->SELF:Lorg/bitcoinj/core/TransactionConfidence$Source;

    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setSource(Lorg/bitcoinj/core/TransactionConfidence$Source;)V

    goto/16 :goto_11

    .line 787
    :pswitch_11f
    sget-object v0, Lorg/bitcoinj/core/TransactionConfidence$Source;->NETWORK:Lorg/bitcoinj/core/TransactionConfidence$Source;

    invoke-virtual {p4, v0}, Lorg/bitcoinj/core/TransactionConfidence;->setSource(Lorg/bitcoinj/core/TransactionConfidence$Source;)V

    goto/16 :goto_11

    .line 731
    :pswitch_data_126
    .packed-switch 0x1
        :pswitch_40
        :pswitch_43
        :pswitch_46
        :pswitch_49
        :pswitch_4c
    .end packed-switch

    .line 785
    :pswitch_data_134
    .packed-switch 0x1
        :pswitch_118
        :pswitch_11f
    .end packed-switch
.end method

.method private readTransaction(Lorg/bitcoinj/wallet/Protos$Transaction;Lorg/bitcoinj/core/NetworkParameters;)V
    .registers 15

    .prologue
    const-wide v10, 0xffffffffL

    const/4 v7, 0x0

    .line 602
    new-instance v2, Lorg/bitcoinj/core/Transaction;

    invoke-direct {v2, p2}, Lorg/bitcoinj/core/Transaction;-><init>(Lorg/bitcoinj/core/NetworkParameters;)V

    .line 604
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getVersion()I

    move-result v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setVersion(I)V

    .line 606
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->hasUpdatedAt()Z

    move-result v0

    if-eqz v0, :cond_24

    .line 607
    new-instance v0, Ljava/util/Date;

    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getUpdatedAt()J

    move-result-wide v4

    invoke-direct {v0, v4, v5}, Ljava/util/Date;-><init>(J)V

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setUpdateTime(Ljava/util/Date;)V

    .line 610
    :cond_24
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getTransactionOutputList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_2c
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_51

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$TransactionOutput;

    .line 611
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$TransactionOutput;->getValue()J

    move-result-wide v4

    invoke-static {v4, v5}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;

    move-result-object v3

    .line 612
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$TransactionOutput;->getScriptBytes()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v0}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v0

    .line 613
    new-instance v4, Lorg/bitcoinj/core/TransactionOutput;

    invoke-direct {v4, p2, v2, v3, v0}, Lorg/bitcoinj/core/TransactionOutput;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/core/Transaction;Lorg/bitcoinj/core/Coin;[B)V

    .line 614
    invoke-virtual {v2, v4}, Lorg/bitcoinj/core/Transaction;->addOutput(Lorg/bitcoinj/core/TransactionOutput;)Lorg/bitcoinj/core/TransactionOutput;

    goto :goto_2c

    .line 617
    :cond_51
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getTransactionInputList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v8

    :goto_59
    invoke-interface {v8}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_aa

    invoke-interface {v8}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    move-object v6, v0

    check-cast v6, Lorg/bitcoinj/wallet/Protos$TransactionInput;

    .line 618
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->getScriptBytes()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v0}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v3

    .line 619
    new-instance v4, Lorg/bitcoinj/core/TransactionOutPoint;

    .line 620
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->getTransactionOutPointIndex()I

    move-result v0

    int-to-long v0, v0

    and-long/2addr v0, v10

    .line 621
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->getTransactionOutPointHash()Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-static {v5}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v5

    invoke-direct {v4, p2, v0, v1, v5}, Lorg/bitcoinj/core/TransactionOutPoint;-><init>(Lorg/bitcoinj/core/NetworkParameters;JLorg/bitcoinj/core/Sha256Hash;)V

    .line 623
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->hasValue()Z

    move-result v0

    if-eqz v0, :cond_a8

    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->getValue()J

    move-result-wide v0

    invoke-static {v0, v1}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;

    move-result-object v5

    .line 624
    :goto_8f
    new-instance v0, Lorg/bitcoinj/core/TransactionInput;

    move-object v1, p2

    invoke-direct/range {v0 .. v5}, Lorg/bitcoinj/core/TransactionInput;-><init>(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/core/Transaction;[BLorg/bitcoinj/core/TransactionOutPoint;Lorg/bitcoinj/core/Coin;)V

    .line 625
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->hasSequence()Z

    move-result v1

    if-eqz v1, :cond_a4

    .line 626
    invoke-virtual {v6}, Lorg/bitcoinj/wallet/Protos$TransactionInput;->getSequence()I

    move-result v1

    int-to-long v4, v1

    and-long/2addr v4, v10

    invoke-virtual {v0, v4, v5}, Lorg/bitcoinj/core/TransactionInput;->setSequenceNumber(J)V

    .line 627
    :cond_a4
    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->addInput(Lorg/bitcoinj/core/TransactionInput;)Lorg/bitcoinj/core/TransactionInput;

    goto :goto_59

    .line 623
    :cond_a8
    const/4 v5, 0x0

    goto :goto_8f

    :cond_aa
    move v0, v7

    .line 630
    :goto_ab
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getBlockHashCount()I

    move-result v1

    if-ge v0, v1, :cond_c9

    .line 631
    invoke-virtual {p1, v0}, Lorg/bitcoinj/wallet/Protos$Transaction;->getBlockHash(I)Lcom/google/protobuf/ByteString;

    move-result-object v3

    .line 633
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getBlockRelativityOffsetsCount()I

    move-result v1

    if-lez v1, :cond_1b8

    .line 634
    invoke-virtual {p1, v0}, Lorg/bitcoinj/wallet/Protos$Transaction;->getBlockRelativityOffsets(I)I

    move-result v1

    .line 635
    :goto_bf
    invoke-static {v3}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v3

    invoke-virtual {v2, v3, v1}, Lorg/bitcoinj/core/Transaction;->addBlockAppearance(Lorg/bitcoinj/core/Sha256Hash;I)V

    .line 630
    add-int/lit8 v0, v0, 0x1

    goto :goto_ab

    .line 638
    :cond_c9
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->hasLockTime()Z

    move-result v0

    if-eqz v0, :cond_d8

    .line 639
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getLockTime()I

    move-result v0

    int-to-long v0, v0

    and-long/2addr v0, v10

    invoke-virtual {v2, v0, v1}, Lorg/bitcoinj/core/Transaction;->setLockTime(J)V

    .line 642
    :cond_d8
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->hasPurpose()Z

    move-result v0

    if-eqz v0, :cond_17e

    .line 643
    sget-object v0, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$wallet$Protos$Transaction$Purpose:[I

    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getPurpose()Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;

    move-result-object v1

    invoke-virtual {v1}, Lorg/bitcoinj/wallet/Protos$Transaction$Purpose;->ordinal()I

    move-result v1

    aget v0, v0, v1

    packed-switch v0, :pswitch_data_1bc

    .line 651
    new-instance v0, Ljava/lang/RuntimeException;

    const-string v1, "New purpose serialization not implemented"

    invoke-direct {v0, v1}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 644
    :pswitch_f5
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->UNKNOWN:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    .line 658
    :goto_fa
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->hasExchangeRate()Z

    move-result v0

    if-eqz v0, :cond_120

    .line 659
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getExchangeRate()Lorg/bitcoinj/wallet/Protos$ExchangeRate;

    move-result-object v0

    .line 660
    new-instance v1, Lorg/bitcoinj/utils/ExchangeRate;

    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$ExchangeRate;->getCoinValue()J

    move-result-wide v4

    invoke-static {v4, v5}, Lorg/bitcoinj/core/Coin;->valueOf(J)Lorg/bitcoinj/core/Coin;

    move-result-object v3

    .line 661
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$ExchangeRate;->getFiatCurrencyCode()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$ExchangeRate;->getFiatValue()J

    move-result-wide v8

    .line 660
    invoke-static {v4, v8, v9}, Lorg/bitcoinj/utils/Fiat;->valueOf(Ljava/lang/String;J)Lorg/bitcoinj/utils/Fiat;

    move-result-object v0

    invoke-direct {v1, v3, v0}, Lorg/bitcoinj/utils/ExchangeRate;-><init>(Lorg/bitcoinj/core/Coin;Lorg/bitcoinj/utils/Fiat;)V

    invoke-virtual {v2, v1}, Lorg/bitcoinj/core/Transaction;->setExchangeRate(Lorg/bitcoinj/utils/ExchangeRate;)V

    .line 664
    :cond_120
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->hasMemo()Z

    move-result v0

    if-eqz v0, :cond_12d

    .line 665
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getMemo()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setMemo(Ljava/lang/String;)V

    .line 668
    :cond_12d
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getHash()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-static {v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    .line 669
    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v1

    invoke-virtual {v1, v0}, Lorg/bitcoinj/core/Sha256Hash;->equals(Ljava/lang/Object;)Z

    move-result v1

    if-nez v1, :cond_185

    .line 670
    new-instance v1, Lorg/bitcoinj/wallet/UnreadableWalletException;

    sget-object v3, Ljava/util/Locale;->US:Ljava/util/Locale;

    const-string v4, "Transaction did not deserialize completely: %s vs %s"

    const/4 v5, 0x2

    new-array v5, v5, [Ljava/lang/Object;

    invoke-virtual {v2}, Lorg/bitcoinj/core/Transaction;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v2

    aput-object v2, v5, v7

    const/4 v2, 0x1

    aput-object v0, v5, v2

    invoke-static {v3, v4, v5}, Ljava/lang/String;->format(Ljava/util/Locale;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;

    move-result-object v0

    invoke-direct {v1, v0}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v1

    .line 645
    :pswitch_159
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->USER_PAYMENT:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto :goto_fa

    .line 646
    :pswitch_15f
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->KEY_ROTATION:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto :goto_fa

    .line 647
    :pswitch_165
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->ASSURANCE_CONTRACT_CLAIM:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto :goto_fa

    .line 648
    :pswitch_16b
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->ASSURANCE_CONTRACT_PLEDGE:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto :goto_fa

    .line 649
    :pswitch_171
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->ASSURANCE_CONTRACT_STUB:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto :goto_fa

    .line 650
    :pswitch_177
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->RAISE_FEE:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto/16 :goto_fa

    .line 655
    :cond_17e
    sget-object v0, Lorg/bitcoinj/core/Transaction$Purpose;->USER_PAYMENT:Lorg/bitcoinj/core/Transaction$Purpose;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/core/Transaction;->setPurpose(Lorg/bitcoinj/core/Transaction$Purpose;)V

    goto/16 :goto_fa

    .line 671
    :cond_185
    iget-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getHash()Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-interface {v0, v1}, Ljava/util/Map;->containsKey(Ljava/lang/Object;)Z

    move-result v0

    if-eqz v0, :cond_1ae

    .line 672
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException;

    new-instance v1, Ljava/lang/StringBuilder;

    const-string v2, "Wallet contained duplicate transaction "

    invoke-direct {v1, v2}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getHash()Lcom/google/protobuf/ByteString;

    move-result-object v2

    invoke-static {v2}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 673
    :cond_1ae
    iget-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Protos$Transaction;->getHash()Lcom/google/protobuf/ByteString;

    move-result-object v1

    invoke-interface {v0, v1, v2}, Ljava/util/Map;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

    .line 674
    return-void

    :cond_1b8
    move v1, v7

    goto/16 :goto_bf

    .line 643
    nop

    :pswitch_data_1bc
    .packed-switch 0x1
        :pswitch_f5
        :pswitch_159
        :pswitch_15f
        :pswitch_165
        :pswitch_16b
        :pswitch_171
        :pswitch_177
    .end packed-switch
.end method

.method private static writeConfidence(Lorg/bitcoinj/wallet/Protos$Transaction$Builder;Lorg/bitcoinj/core/TransactionConfidence;Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;)V
    .registers 9

    .prologue
    .line 332
    monitor-enter p1

    .line 333
    :try_start_1
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getConfidenceType()Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->getValue()I

    move-result v0

    invoke-static {v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Type;->valueOf(I)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Type;

    move-result-object v0

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setType(Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Type;)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    .line 334
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getConfidenceType()Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    move-result-object v0

    sget-object v1, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->BUILDING:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    if-ne v0, v1, :cond_26

    .line 335
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getAppearedAtChainHeight()I

    move-result v0

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setAppearedAtHeight(I)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    .line 336
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getDepthInBlocks()I

    move-result v0

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setDepth(I)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    .line 338
    :cond_26
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getConfidenceType()Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    move-result-object v0

    sget-object v1, Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;->DEAD:Lorg/bitcoinj/core/TransactionConfidence$ConfidenceType;

    if-ne v0, v1, :cond_43

    .line 341
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getOverridingTransaction()Lorg/bitcoinj/core/Transaction;

    move-result-object v0

    if-eqz v0, :cond_43

    .line 342
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getOverridingTransaction()Lorg/bitcoinj/core/Transaction;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/core/Transaction;->getHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    .line 343
    invoke-static {v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setOverridingTransaction(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    .line 346
    :cond_43
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getSource()Lorg/bitcoinj/core/TransactionConfidence$Source;

    move-result-object v0

    .line 347
    sget-object v1, Lorg/bitcoinj/wallet/WalletProtobufSerializer$2;->$SwitchMap$org$bitcoinj$core$TransactionConfidence$Source:[I

    invoke-virtual {v0}, Lorg/bitcoinj/core/TransactionConfidence$Source;->ordinal()I

    move-result v0

    aget v0, v1, v0

    packed-switch v0, :pswitch_data_bc

    .line 353
    sget-object v0, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;->SOURCE_UNKNOWN:Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setSource(Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    .line 355
    :goto_57
    monitor-exit p1
    :try_end_58
    .catchall {:try_start_1 .. :try_end_58} :catchall_a2

    .line 357
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getBroadcastBy()Ljava/util/Set;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_60
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_ab

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/core/PeerAddress;

    .line 358
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$PeerAddress;->newBuilder()Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;

    move-result-object v2

    .line 359
    invoke-virtual {v0}, Lorg/bitcoinj/core/PeerAddress;->getAddr()Ljava/net/InetAddress;

    move-result-object v3

    invoke-virtual {v3}, Ljava/net/InetAddress;->getAddress()[B

    move-result-object v3

    invoke-static {v3}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v3

    invoke-virtual {v2, v3}, Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;->setIpAddress(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;

    move-result-object v2

    .line 360
    invoke-virtual {v0}, Lorg/bitcoinj/core/PeerAddress;->getPort()I

    move-result v3

    invoke-virtual {v2, v3}, Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;->setPort(I)Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;

    move-result-object v2

    .line 361
    invoke-virtual {v0}, Lorg/bitcoinj/core/PeerAddress;->getServices()Ljava/math/BigInteger;

    move-result-object v0

    invoke-virtual {v0}, Ljava/math/BigInteger;->longValue()J

    move-result-wide v4

    invoke-virtual {v2, v4, v5}, Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;->setServices(J)Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;

    move-result-object v0

    .line 362
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$PeerAddress$Builder;->build()Lorg/bitcoinj/wallet/Protos$PeerAddress;

    move-result-object v0

    .line 363
    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->addBroadcastBy(Lorg/bitcoinj/wallet/Protos$PeerAddress;)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    goto :goto_60

    .line 348
    :pswitch_9c
    :try_start_9c
    sget-object v0, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;->SOURCE_SELF:Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setSource(Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    goto :goto_57

    .line 355
    :catchall_a2
    move-exception v0

    monitor-exit p1
    :try_end_a4
    .catchall {:try_start_9c .. :try_end_a4} :catchall_a2

    throw v0

    .line 349
    :pswitch_a5
    :try_start_a5
    sget-object v0, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;->SOURCE_NETWORK:Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;

    invoke-virtual {p2, v0}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setSource(Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Source;)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;
    :try_end_aa
    .catchall {:try_start_a5 .. :try_end_aa} :catchall_a2

    goto :goto_57

    .line 365
    :cond_ab
    invoke-virtual {p1}, Lorg/bitcoinj/core/TransactionConfidence;->getLastBroadcastedAt()Ljava/util/Date;

    move-result-object v0

    .line 366
    if-eqz v0, :cond_b8

    .line 367
    invoke-virtual {v0}, Ljava/util/Date;->getTime()J

    move-result-wide v0

    invoke-virtual {p2, v0, v1}, Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;->setLastBroadcastedAt(J)Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;

    .line 368
    :cond_b8
    invoke-virtual {p0, p2}, Lorg/bitcoinj/wallet/Protos$Transaction$Builder;->setConfidence(Lorg/bitcoinj/wallet/Protos$TransactionConfidence$Builder;)Lorg/bitcoinj/wallet/Protos$Transaction$Builder;

    .line 369
    return-void

    .line 347
    :pswitch_data_bc
    .packed-switch 0x1
        :pswitch_9c
        :pswitch_a5
    .end packed-switch
.end method


# virtual methods
.method public readWallet(Ljava/io/InputStream;Z[Lorg/bitcoinj/wallet/WalletExtension;)Lorg/bitcoinj/wallet/Wallet;
    .registers 8

    .prologue
    .line 412
    :try_start_0
    invoke-static {p1}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->parseToProto(Ljava/io/InputStream;)Lorg/bitcoinj/wallet/Protos$Wallet;

    move-result-object v0

    .line 413
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Wallet;->getNetworkIdentifier()Ljava/lang/String;

    move-result-object v1

    .line 414
    invoke-static {v1}, Lorg/bitcoinj/core/NetworkParameters;->fromID(Ljava/lang/String;)Lorg/bitcoinj/core/NetworkParameters;

    move-result-object v2

    .line 415
    if-nez v2, :cond_2c

    .line 416
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException;

    new-instance v2, Ljava/lang/StringBuilder;

    const-string v3, "Unknown network parameters ID "

    invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-virtual {v2, v1}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v0
    :try_end_23
    .catch Ljava/io/IOException; {:try_start_0 .. :try_end_23} :catch_23
    .catch Ljava/lang/IllegalStateException; {:try_start_0 .. :try_end_23} :catch_31
    .catch Ljava/lang/IllegalArgumentException; {:try_start_0 .. :try_end_23} :catch_3a

    .line 418
    :catch_23
    move-exception v0

    .line 419
    new-instance v1, Lorg/bitcoinj/wallet/UnreadableWalletException;

    const-string v2, "Could not parse input stream to protobuf"

    invoke-direct {v1, v2, v0}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v1

    .line 417
    :cond_2c
    :try_start_2c
    invoke-virtual {p0, v2, p3, v0, p2}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->readWallet(Lorg/bitcoinj/core/NetworkParameters;[Lorg/bitcoinj/wallet/WalletExtension;Lorg/bitcoinj/wallet/Protos$Wallet;Z)Lorg/bitcoinj/wallet/Wallet;
    :try_end_2f
    .catch Ljava/io/IOException; {:try_start_2c .. :try_end_2f} :catch_23
    .catch Ljava/lang/IllegalStateException; {:try_start_2c .. :try_end_2f} :catch_31
    .catch Ljava/lang/IllegalArgumentException; {:try_start_2c .. :try_end_2f} :catch_3a

    move-result-object v0

    return-object v0

    .line 420
    :catch_31
    move-exception v0

    .line 421
    new-instance v1, Lorg/bitcoinj/wallet/UnreadableWalletException;

    const-string v2, "Could not parse input stream to protobuf"

    invoke-direct {v1, v2, v0}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v1

    .line 422
    :catch_3a
    move-exception v0

    .line 423
    new-instance v1, Lorg/bitcoinj/wallet/UnreadableWalletException;

    const-string v2, "Could not parse input stream to protobuf"

    invoke-direct {v1, v2, v0}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v1
.end method

.method public varargs readWallet(Ljava/io/InputStream;[Lorg/bitcoinj/wallet/WalletExtension;)Lorg/bitcoinj/wallet/Wallet;
    .registers 4

    .prologue
    .line 391
    const/4 v0, 0x0

    invoke-virtual {p0, p1, v0, p2}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->readWallet(Ljava/io/InputStream;Z[Lorg/bitcoinj/wallet/WalletExtension;)Lorg/bitcoinj/wallet/Wallet;

    move-result-object v0

    return-object v0
.end method

.method public readWallet(Lorg/bitcoinj/core/NetworkParameters;[Lorg/bitcoinj/wallet/WalletExtension;Lorg/bitcoinj/wallet/Protos$Wallet;)Lorg/bitcoinj/wallet/Wallet;
    .registers 5

    .prologue
    .line 440
    const/4 v0, 0x0

    invoke-virtual {p0, p1, p2, p3, v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->readWallet(Lorg/bitcoinj/core/NetworkParameters;[Lorg/bitcoinj/wallet/WalletExtension;Lorg/bitcoinj/wallet/Protos$Wallet;Z)Lorg/bitcoinj/wallet/Wallet;

    move-result-object v0

    return-object v0
.end method

.method public readWallet(Lorg/bitcoinj/core/NetworkParameters;[Lorg/bitcoinj/wallet/WalletExtension;Lorg/bitcoinj/wallet/Protos$Wallet;Z)Lorg/bitcoinj/wallet/Wallet;
    .registers 15

    .prologue
    .line 461
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getVersion()I

    move-result v0

    sget v1, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->CURRENT_WALLET_VERSION:I

    if-le v0, v1, :cond_e

    .line 462
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException$FutureVersion;

    invoke-direct {v0}, Lorg/bitcoinj/wallet/UnreadableWalletException$FutureVersion;-><init>()V

    throw v0

    .line 463
    :cond_e
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getNetworkIdentifier()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {p1}, Lorg/bitcoinj/core/NetworkParameters;->getId()Ljava/lang/String;

    move-result-object v1

    invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z

    move-result v0

    if-nez v0, :cond_22

    .line 464
    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException$WrongNetwork;

    invoke-direct {v0}, Lorg/bitcoinj/wallet/UnreadableWalletException$WrongNetwork;-><init>()V

    throw v0

    .line 468
    :cond_22
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->hasEncryptionParameters()Z

    move-result v0

    if-eqz v0, :cond_7b

    .line 469
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getEncryptionParameters()Lorg/bitcoinj/wallet/Protos$ScryptParameters;

    move-result-object v0

    .line 470
    new-instance v1, Lorg/bitcoinj/crypto/KeyCrypterScrypt;

    invoke-direct {v1, v0}, Lorg/bitcoinj/crypto/KeyCrypterScrypt;-><init>(Lorg/bitcoinj/wallet/Protos$ScryptParameters;)V

    .line 471
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getKeyList()Ljava/util/List;

    move-result-object v0

    iget-object v2, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->keyChainFactory:Lorg/bitcoinj/wallet/KeyChainFactory;

    invoke-static {p1, v0, v1, v2}, Lorg/bitcoinj/wallet/KeyChainGroup;->fromProtobufEncrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/crypto/KeyCrypter;Lorg/bitcoinj/wallet/KeyChainFactory;)Lorg/bitcoinj/wallet/KeyChainGroup;

    move-result-object v0

    .line 475
    :goto_3b
    iget-object v1, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->factory:Lorg/bitcoinj/wallet/WalletProtobufSerializer$WalletFactory;

    invoke-interface {v1, p1, v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer$WalletFactory;->create(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/KeyChainGroup;)Lorg/bitcoinj/wallet/Wallet;

    move-result-object v2

    .line 1088
    new-instance v1, Ljava/util/ArrayList;

    invoke-direct {v1}, Ljava/util/ArrayList;-><init>()V

    .line 478
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getWatchedScriptList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :goto_4e
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_86

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$Script;

    .line 480
    :try_start_5a
    new-instance v4, Lorg/bitcoinj/script/Script;

    .line 481
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Script;->getProgram()Lcom/google/protobuf/ByteString;

    move-result-object v5

    invoke-virtual {v5}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v5

    .line 482
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Script;->getCreationTimestamp()J

    move-result-wide v6

    const-wide/16 v8, 0x3e8

    div-long/2addr v6, v8

    invoke-direct {v4, v5, v6, v7}, Lorg/bitcoinj/script/Script;-><init>([BJ)V

    .line 483
    invoke-interface {v1, v4}, Ljava/util/List;->add(Ljava/lang/Object;)Z
    :try_end_71
    .catch Lorg/bitcoinj/core/ScriptException; {:try_start_5a .. :try_end_71} :catch_72

    goto :goto_4e

    .line 485
    :catch_72
    move-exception v0

    new-instance v0, Lorg/bitcoinj/wallet/UnreadableWalletException;

    const-string v1, "Unparseable script in wallet"

    invoke-direct {v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;)V

    throw v0

    .line 473
    :cond_7b
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getKeyList()Ljava/util/List;

    move-result-object v0

    iget-object v1, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->keyChainFactory:Lorg/bitcoinj/wallet/KeyChainFactory;

    invoke-static {p1, v0, v1}, Lorg/bitcoinj/wallet/KeyChainGroup;->fromProtobufUnencrypted(Lorg/bitcoinj/core/NetworkParameters;Ljava/util/List;Lorg/bitcoinj/wallet/KeyChainFactory;)Lorg/bitcoinj/wallet/KeyChainGroup;

    move-result-object v0

    goto :goto_3b

    .line 489
    :cond_86
    invoke-virtual {v2, v1}, Lorg/bitcoinj/wallet/Wallet;->addWatchedScripts(Ljava/util/List;)I

    .line 491
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->hasDescription()Z

    move-result v0

    if-eqz v0, :cond_96

    .line 492
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getDescription()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setDescription(Ljava/lang/String;)V

    .line 495
    :cond_96
    if-eqz p4, :cond_ca

    .line 497
    const/4 v0, 0x0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenHash(Lorg/bitcoinj/core/Sha256Hash;)V

    .line 498
    const/4 v0, -0x1

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenHeight(I)V

    .line 499
    const-wide/16 v0, 0x0

    invoke-virtual {v2, v0, v1}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenTimeSecs(J)V

    .line 531
    :cond_a5
    :goto_a5
    if-eqz p2, :cond_148

    :goto_a7
    invoke-direct {p0, v2, p2, p3}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->loadExtensions(Lorg/bitcoinj/wallet/Wallet;[Lorg/bitcoinj/wallet/WalletExtension;Lorg/bitcoinj/wallet/Protos$Wallet;)V

    .line 533
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getTagsList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_b2
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_14d

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$Tag;

    .line 534
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Tag;->getTag()Ljava/lang/String;

    move-result-object v3

    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Tag;->getData()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v2, v3, v0}, Lorg/bitcoinj/wallet/Wallet;->setTag(Ljava/lang/String;Lcom/google/protobuf/ByteString;)V

    goto :goto_b2

    .line 502
    :cond_ca
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getTransactionList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_d2
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_e6

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$Transaction;

    .line 503
    invoke-virtual {v2}, Lorg/bitcoinj/wallet/Wallet;->getParams()Lorg/bitcoinj/core/NetworkParameters;

    move-result-object v3

    invoke-direct {p0, v0, v3}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->readTransaction(Lorg/bitcoinj/wallet/Protos$Transaction;Lorg/bitcoinj/core/NetworkParameters;)V

    goto :goto_d2

    .line 507
    :cond_e6
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getTransactionList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_ee
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_102

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$Transaction;

    .line 508
    invoke-direct {p0, p1, v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->connectTransactionOutputs(Lorg/bitcoinj/core/NetworkParameters;Lorg/bitcoinj/wallet/Protos$Transaction;)Lorg/bitcoinj/wallet/WalletTransaction;

    move-result-object v0

    .line 509
    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->addWalletTransaction(Lorg/bitcoinj/wallet/WalletTransaction;)V

    goto :goto_ee

    .line 513
    :cond_102
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->hasLastSeenBlockHash()Z

    move-result v0

    if-nez v0, :cond_134

    .line 514
    const/4 v0, 0x0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenHash(Lorg/bitcoinj/core/Sha256Hash;)V

    .line 518
    :goto_10c
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->hasLastSeenBlockHeight()Z

    move-result v0

    if-nez v0, :cond_140

    .line 519
    const/4 v0, -0x1

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenHeight(I)V

    .line 524
    :goto_116
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getLastSeenBlockTimeSecs()J

    move-result-wide v0

    invoke-virtual {v2, v0, v1}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenTimeSecs(J)V

    .line 526
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->hasKeyRotationTime()Z

    move-result v0

    if-eqz v0, :cond_a5

    .line 527
    new-instance v0, Ljava/util/Date;

    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getKeyRotationTime()J

    move-result-wide v4

    const-wide/16 v6, 0x3e8

    mul-long/2addr v4, v6

    invoke-direct {v0, v4, v5}, Ljava/util/Date;-><init>(J)V

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setKeyRotationTime(Ljava/util/Date;)V

    goto/16 :goto_a5

    .line 516
    :cond_134
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getLastSeenBlockHash()Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-static {v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->byteStringToHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenHash(Lorg/bitcoinj/core/Sha256Hash;)V

    goto :goto_10c

    .line 521
    :cond_140
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getLastSeenBlockHeight()I

    move-result v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setLastBlockSeenHeight(I)V

    goto :goto_116

    .line 531
    :cond_148
    const/4 v0, 0x0

    new-array p2, v0, [Lorg/bitcoinj/wallet/WalletExtension;

    goto/16 :goto_a7

    .line 537
    :cond_14d
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getTransactionSignersList()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :goto_155
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_198

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/Protos$TransactionSigner;

    .line 539
    :try_start_161
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$TransactionSigner;->getClassName()Ljava/lang/String;

    move-result-object v1

    invoke-static {v1}, Ljava/lang/Class;->forName(Ljava/lang/String;)Ljava/lang/Class;

    move-result-object v1

    .line 540
    invoke-virtual {v1}, Ljava/lang/Class;->newInstance()Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Lorg/bitcoinj/signers/TransactionSigner;

    .line 541
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$TransactionSigner;->getData()Lcom/google/protobuf/ByteString;

    move-result-object v4

    invoke-virtual {v4}, Lcom/google/protobuf/ByteString;->toByteArray()[B

    move-result-object v4

    invoke-interface {v1, v4}, Lorg/bitcoinj/signers/TransactionSigner;->deserialize([B)V

    .line 542
    invoke-virtual {v2, v1}, Lorg/bitcoinj/wallet/Wallet;->addTransactionSigner(Lorg/bitcoinj/signers/TransactionSigner;)V
    :try_end_17d
    .catch Ljava/lang/Exception; {:try_start_161 .. :try_end_17d} :catch_17e

    goto :goto_155

    .line 543
    :catch_17e
    move-exception v1

    .line 544
    new-instance v2, Lorg/bitcoinj/wallet/UnreadableWalletException;

    new-instance v3, Ljava/lang/StringBuilder;

    const-string v4, "Unable to deserialize TransactionSigner instance: "

    invoke-direct {v3, v4}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    .line 545
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$TransactionSigner;->getClassName()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v3, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-direct {v2, v0, v1}, Lorg/bitcoinj/wallet/UnreadableWalletException;-><init>(Ljava/lang/String;Ljava/lang/Throwable;)V

    throw v2

    .line 549
    :cond_198
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->hasVersion()Z

    move-result v0

    if-eqz v0, :cond_1a5

    .line 550
    invoke-virtual {p3}, Lorg/bitcoinj/wallet/Protos$Wallet;->getVersion()I

    move-result v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Wallet;->setVersion(I)V

    .line 554
    :cond_1a5
    iget-object v0, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->txMap:Ljava/util/Map;

    invoke-interface {v0}, Ljava/util/Map;->clear()V

    .line 556
    return-object v2
.end method

.method public setKeyChainFactory(Lorg/bitcoinj/wallet/KeyChainFactory;)V
    .registers 2

    .prologue
    .line 105
    iput-object p1, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->keyChainFactory:Lorg/bitcoinj/wallet/KeyChainFactory;

    .line 106
    return-void
.end method

.method public setRequireMandatoryExtensions(Z)V
    .registers 2

    .prologue
    .line 114
    iput-boolean p1, p0, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->requireMandatoryExtensions:Z

    .line 115
    return-void
.end method

.method public walletToProto(Lorg/bitcoinj/wallet/Wallet;)Lorg/bitcoinj/wallet/Protos$Wallet;
    .registers 10

    .prologue
    const-wide/16 v6, 0x3e8

    .line 144
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$Wallet;->newBuilder()Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    move-result-object v2

    .line 145
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getNetworkParameters()Lorg/bitcoinj/core/NetworkParameters;

    move-result-object v0

    invoke-virtual {v0}, Lorg/bitcoinj/core/NetworkParameters;->getId()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setNetworkIdentifier(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 146
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getDescription()Ljava/lang/String;

    move-result-object v0

    if-eqz v0, :cond_1e

    .line 147
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getDescription()Ljava/lang/String;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setDescription(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 150
    :cond_1e
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getWalletTransactions()Ljava/lang/Iterable;

    move-result-object v0

    invoke-interface {v0}, Ljava/lang/Iterable;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_26
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_3a

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/wallet/WalletTransaction;

    .line 151
    invoke-static {v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->makeTxProto(Lorg/bitcoinj/wallet/WalletTransaction;)Lorg/bitcoinj/wallet/Protos$Transaction;

    move-result-object v0

    .line 152
    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->addTransaction(Lorg/bitcoinj/wallet/Protos$Transaction;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    goto :goto_26

    .line 155
    :cond_3a
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->serializeKeyChainGroupToProtobuf()Ljava/util/List;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->addAllKey(Ljava/lang/Iterable;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 157
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getWatchedScripts()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :goto_49
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_76

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/script/Script;

    .line 159
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$Script;->newBuilder()Lorg/bitcoinj/wallet/Protos$Script$Builder;

    move-result-object v3

    .line 160
    invoke-virtual {v0}, Lorg/bitcoinj/script/Script;->getProgram()[B

    move-result-object v4

    invoke-static {v4}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v4

    invoke-virtual {v3, v4}, Lorg/bitcoinj/wallet/Protos$Script$Builder;->setProgram(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$Script$Builder;

    move-result-object v3

    .line 161
    invoke-virtual {v0}, Lorg/bitcoinj/script/Script;->getCreationTimeSeconds()J

    move-result-wide v4

    mul-long/2addr v4, v6

    invoke-virtual {v3, v4, v5}, Lorg/bitcoinj/wallet/Protos$Script$Builder;->setCreationTimestamp(J)Lorg/bitcoinj/wallet/Protos$Script$Builder;

    move-result-object v0

    .line 162
    invoke-virtual {v0}, Lorg/bitcoinj/wallet/Protos$Script$Builder;->build()Lorg/bitcoinj/wallet/Protos$Script;

    move-result-object v0

    .line 164
    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->addWatchedScript(Lorg/bitcoinj/wallet/Protos$Script;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    goto :goto_49

    .line 168
    :cond_76
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getLastBlockSeenHash()Lorg/bitcoinj/core/Sha256Hash;

    move-result-object v0

    .line 169
    if-eqz v0, :cond_8a

    .line 170
    invoke-static {v0}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->hashToByteString(Lorg/bitcoinj/core/Sha256Hash;)Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setLastSeenBlockHash(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 171
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getLastBlockSeenHeight()I

    move-result v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setLastSeenBlockHeight(I)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 173
    :cond_8a
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getLastBlockSeenTimeSecs()J

    move-result-wide v0

    const-wide/16 v4, 0x0

    cmp-long v0, v0, v4

    if-lez v0, :cond_9b

    .line 174
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getLastBlockSeenTimeSecs()J

    move-result-wide v0

    invoke-virtual {v2, v0, v1}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setLastSeenBlockTimeSecs(J)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 177
    :cond_9b
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getKeyCrypter()Lorg/bitcoinj/crypto/KeyCrypter;

    move-result-object v0

    .line 178
    if-nez v0, :cond_ef

    .line 180
    sget-object v0, Lorg/bitcoinj/wallet/Protos$Wallet$EncryptionType;->UNENCRYPTED:Lorg/bitcoinj/wallet/Protos$Wallet$EncryptionType;

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setEncryptionType(Lorg/bitcoinj/wallet/Protos$Wallet$EncryptionType;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 193
    :goto_a6
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getKeyRotationTime()Ljava/util/Date;

    move-result-object v0

    if-eqz v0, :cond_b8

    .line 194
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getKeyRotationTime()Ljava/util/Date;

    move-result-object v0

    invoke-virtual {v0}, Ljava/util/Date;->getTime()J

    move-result-wide v0

    div-long/2addr v0, v6

    .line 195
    invoke-virtual {v2, v0, v1}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setKeyRotationTime(J)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 198
    :cond_b8
    invoke-static {p1, v2}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->populateExtensions(Lorg/bitcoinj/wallet/Wallet;Lorg/bitcoinj/wallet/Protos$Wallet$Builder;)V

    .line 200
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getTags()Ljava/util/Map;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/Map;->entrySet()Ljava/util/Set;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/Set;->iterator()Ljava/util/Iterator;

    move-result-object v3

    :goto_c7
    invoke-interface {v3}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_123

    invoke-interface {v3}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Ljava/util/Map$Entry;

    .line 201
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$Tag;->newBuilder()Lorg/bitcoinj/wallet/Protos$Tag$Builder;

    move-result-object v4

    invoke-interface {v0}, Ljava/util/Map$Entry;->getKey()Ljava/lang/Object;

    move-result-object v1

    check-cast v1, Ljava/lang/String;

    invoke-virtual {v4, v1}, Lorg/bitcoinj/wallet/Protos$Tag$Builder;->setTag(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$Tag$Builder;

    move-result-object v1

    invoke-interface {v0}, Ljava/util/Map$Entry;->getValue()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lcom/google/protobuf/ByteString;

    invoke-virtual {v1, v0}, Lorg/bitcoinj/wallet/Protos$Tag$Builder;->setData(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$Tag$Builder;

    move-result-object v0

    .line 202
    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->addTags(Lorg/bitcoinj/wallet/Protos$Tag$Builder;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    goto :goto_c7

    .line 183
    :cond_ef
    invoke-interface {v0}, Lorg/bitcoinj/crypto/KeyCrypter;->getUnderstoodEncryptionType()Lorg/bitcoinj/wallet/Protos$Wallet$EncryptionType;

    move-result-object v1

    invoke-virtual {v2, v1}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setEncryptionType(Lorg/bitcoinj/wallet/Protos$Wallet$EncryptionType;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 184
    instance-of v1, v0, Lorg/bitcoinj/crypto/KeyCrypterScrypt;

    if-eqz v1, :cond_104

    .line 185
    check-cast v0, Lorg/bitcoinj/crypto/KeyCrypterScrypt;

    .line 186
    invoke-virtual {v0}, Lorg/bitcoinj/crypto/KeyCrypterScrypt;->getScryptParameters()Lorg/bitcoinj/wallet/Protos$ScryptParameters;

    move-result-object v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setEncryptionParameters(Lorg/bitcoinj/wallet/Protos$ScryptParameters;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    goto :goto_a6

    .line 189
    :cond_104
    new-instance v1, Ljava/lang/RuntimeException;

    new-instance v2, Ljava/lang/StringBuilder;

    const-string v3, "The wallet has encryption of type \'"

    invoke-direct {v2, v3}, Ljava/lang/StringBuilder;-><init>(Ljava/lang/String;)V

    invoke-interface {v0}, Lorg/bitcoinj/crypto/KeyCrypter;->getUnderstoodEncryptionType()Lorg/bitcoinj/wallet/Protos$Wallet$EncryptionType;

    move-result-object v0

    invoke-virtual {v2, v0}, Ljava/lang/StringBuilder;->append(Ljava/lang/Object;)Ljava/lang/StringBuilder;

    move-result-object v0

    const-string v2, "\' but this WalletProtobufSerializer does not know how to persist this."

    invoke-virtual {v0, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v0

    invoke-virtual {v0}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v0

    invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/String;)V

    throw v1

    .line 205
    :cond_123
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getTransactionSigners()Ljava/util/List;

    move-result-object v0

    invoke-interface {v0}, Ljava/util/List;->iterator()Ljava/util/Iterator;

    move-result-object v1

    :cond_12b
    :goto_12b
    invoke-interface {v1}, Ljava/util/Iterator;->hasNext()Z

    move-result v0

    if-eqz v0, :cond_159

    invoke-interface {v1}, Ljava/util/Iterator;->next()Ljava/lang/Object;

    move-result-object v0

    check-cast v0, Lorg/bitcoinj/signers/TransactionSigner;

    .line 207
    instance-of v3, v0, Lorg/bitcoinj/signers/LocalTransactionSigner;

    if-nez v3, :cond_12b

    .line 209
    invoke-static {}, Lorg/bitcoinj/wallet/Protos$TransactionSigner;->newBuilder()Lorg/bitcoinj/wallet/Protos$TransactionSigner$Builder;

    move-result-object v3

    .line 210
    invoke-virtual {v0}, Ljava/lang/Object;->getClass()Ljava/lang/Class;

    move-result-object v4

    invoke-virtual {v4}, Ljava/lang/Class;->getName()Ljava/lang/String;

    move-result-object v4

    invoke-virtual {v3, v4}, Lorg/bitcoinj/wallet/Protos$TransactionSigner$Builder;->setClassName(Ljava/lang/String;)Lorg/bitcoinj/wallet/Protos$TransactionSigner$Builder;

    .line 211
    invoke-interface {v0}, Lorg/bitcoinj/signers/TransactionSigner;->serialize()[B

    move-result-object v0

    invoke-static {v0}, Lcom/google/protobuf/ByteString;->copyFrom([B)Lcom/google/protobuf/ByteString;

    move-result-object v0

    invoke-virtual {v3, v0}, Lorg/bitcoinj/wallet/Protos$TransactionSigner$Builder;->setData(Lcom/google/protobuf/ByteString;)Lorg/bitcoinj/wallet/Protos$TransactionSigner$Builder;

    .line 212
    invoke-virtual {v2, v3}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->addTransactionSigners(Lorg/bitcoinj/wallet/Protos$TransactionSigner$Builder;)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    goto :goto_12b

    .line 216
    :cond_159
    invoke-virtual {p1}, Lorg/bitcoinj/wallet/Wallet;->getVersion()I

    move-result v0

    invoke-virtual {v2, v0}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->setVersion(I)Lorg/bitcoinj/wallet/Protos$Wallet$Builder;

    .line 218
    invoke-virtual {v2}, Lorg/bitcoinj/wallet/Protos$Wallet$Builder;->build()Lorg/bitcoinj/wallet/Protos$Wallet;

    move-result-object v0

    return-object v0
.end method

.method public walletToText(Lorg/bitcoinj/wallet/Wallet;)Ljava/lang/String;
    .registers 3

    .prologue
    .line 135
    invoke-virtual {p0, p1}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->walletToProto(Lorg/bitcoinj/wallet/Wallet;)Lorg/bitcoinj/wallet/Protos$Wallet;

    move-result-object v0

    .line 136
    invoke-static {v0}, Lcom/google/protobuf/TextFormat;->b(Lcom/google/protobuf/du;)Ljava/lang/String;

    move-result-object v0

    return-object v0
.end method

.method public writeWallet(Lorg/bitcoinj/wallet/Wallet;Ljava/io/OutputStream;)V
    .registers 4

    .prologue
    .line 123
    invoke-virtual {p0, p1}, Lorg/bitcoinj/wallet/WalletProtobufSerializer;->walletToProto(Lorg/bitcoinj/wallet/Wallet;)Lorg/bitcoinj/wallet/Protos$Wallet;

    move-result-object v0

    .line 124
    invoke-virtual {v0, p2}, Lorg/bitcoinj/wallet/Protos$Wallet;->writeTo(Ljava/io/OutputStream;)V

    .line 125
    return-void
.end method