b.smali

.class public final Lcom/subgraph/orchid/encoders/b;
.super Ljava/lang/Object;
.source "Base64Encoder.java"

# interfaces
.implements Lcom/subgraph/orchid/encoders/c;


# instance fields
.field private decodingTable:[B

.field private encodingTable:[B

.field private padding:B


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

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

    .line 9
    const/16 v0, 0x40

    new-array v0, v0, [B

    fill-array-data v0, :array_1a

    iput-object v0, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    .line 25
    const/16 v0, 0x3d

    iput-byte v0, p0, Lcom/subgraph/orchid/encoders/b;->padding:B

    .line 30
    const/16 v0, 0x80

    new-array v0, v0, [B

    iput-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    .line 47
    invoke-direct {p0}, Lcom/subgraph/orchid/encoders/b;->initialiseDecodingTable()V

    .line 48
    return-void

    .line 9
    :array_1a
    .array-data 1
        0x41t
        0x42t
        0x43t
        0x44t
        0x45t
        0x46t
        0x47t
        0x48t
        0x49t
        0x4at
        0x4bt
        0x4ct
        0x4dt
        0x4et
        0x4ft
        0x50t
        0x51t
        0x52t
        0x53t
        0x54t
        0x55t
        0x56t
        0x57t
        0x58t
        0x59t
        0x5at
        0x61t
        0x62t
        0x63t
        0x64t
        0x65t
        0x66t
        0x67t
        0x68t
        0x69t
        0x6at
        0x6bt
        0x6ct
        0x6dt
        0x6et
        0x6ft
        0x70t
        0x71t
        0x72t
        0x73t
        0x74t
        0x75t
        0x76t
        0x77t
        0x78t
        0x79t
        0x7at
        0x30t
        0x31t
        0x32t
        0x33t
        0x34t
        0x35t
        0x36t
        0x37t
        0x38t
        0x39t
        0x2bt
        0x2ft
    .end array-data
.end method

.method private decodeLastBlock(Ljava/io/OutputStream;CCCC)I
    .registers 11

    .prologue
    .line 270
    iget-byte v0, p0, Lcom/subgraph/orchid/encoders/b;->padding:B

    if-ne p4, v0, :cond_22

    .line 272
    iget-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v0, v0, p2

    .line 273
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v1, v1, p3

    .line 275
    or-int v2, v0, v1

    if-gez v2, :cond_18

    .line 277
    new-instance v0, Ljava/io/IOException;

    const-string v1, "invalid characters encountered at end of base64 data"

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

    throw v0

    .line 280
    :cond_18
    shl-int/lit8 v0, v0, 0x2

    shr-int/lit8 v1, v1, 0x4

    or-int/2addr v0, v1

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 282
    const/4 v0, 0x1

    .line 316
    :goto_21
    return v0

    .line 284
    :cond_22
    iget-byte v0, p0, Lcom/subgraph/orchid/encoders/b;->padding:B

    if-ne p5, v0, :cond_51

    .line 286
    iget-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v0, v0, p2

    .line 287
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v1, v1, p3

    .line 288
    iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v2, v2, p4

    .line 290
    or-int v3, v0, v1

    or-int/2addr v3, v2

    if-gez v3, :cond_3f

    .line 292
    new-instance v0, Ljava/io/IOException;

    const-string v1, "invalid characters encountered at end of base64 data"

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

    throw v0

    .line 295
    :cond_3f
    shl-int/lit8 v0, v0, 0x2

    shr-int/lit8 v3, v1, 0x4

    or-int/2addr v0, v3

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 296
    shl-int/lit8 v0, v1, 0x4

    shr-int/lit8 v1, v2, 0x2

    or-int/2addr v0, v1

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 298
    const/4 v0, 0x2

    goto :goto_21

    .line 302
    :cond_51
    iget-object v0, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v0, v0, p2

    .line 303
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v1, v1, p3

    .line 304
    iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v2, v2, p4

    .line 305
    iget-object v3, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    aget-byte v3, v3, p5

    .line 307
    or-int v4, v0, v1

    or-int/2addr v4, v2

    or-int/2addr v4, v3

    if-gez v4, :cond_6f

    .line 309
    new-instance v0, Ljava/io/IOException;

    const-string v1, "invalid characters encountered at end of base64 data"

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

    throw v0

    .line 312
    :cond_6f
    shl-int/lit8 v0, v0, 0x2

    shr-int/lit8 v4, v1, 0x4

    or-int/2addr v0, v4

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 313
    shl-int/lit8 v0, v1, 0x4

    shr-int/lit8 v1, v2, 0x2

    or-int/2addr v0, v1

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 314
    shl-int/lit8 v0, v2, 0x6

    or-int/2addr v0, v3

    invoke-virtual {p1, v0}, Ljava/io/OutputStream;->write(I)V

    .line 316
    const/4 v0, 0x3

    goto :goto_21
.end method

.method private static ignore(C)Z
    .registers 2

    .prologue
    .line 119
    const/16 v0, 0xa

    if-eq p0, v0, :cond_10

    const/16 v0, 0xd

    if-eq p0, v0, :cond_10

    const/16 v0, 0x9

    if-eq p0, v0, :cond_10

    const/16 v0, 0x20

    if-ne p0, v0, :cond_12

    :cond_10
    const/4 v0, 0x1

    :goto_11
    return v0

    :cond_12
    const/4 v0, 0x0

    goto :goto_11
.end method

.method private initialiseDecodingTable()V
    .registers 5

    .prologue
    const/4 v0, 0x0

    .line 34
    move v1, v0

    :goto_2
    const/16 v2, 0x80

    if-ge v1, v2, :cond_e

    .line 36
    iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    const/4 v3, -0x1

    aput-byte v3, v2, v1

    .line 34
    add-int/lit8 v1, v1, 0x1

    goto :goto_2

    .line 39
    :cond_e
    :goto_e
    const/16 v1, 0x40

    if-ge v0, v1, :cond_1e

    .line 41
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    iget-object v2, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    aget-byte v2, v2, v0

    int-to-byte v3, v0

    aput-byte v3, v1, v2

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

    goto :goto_e

    .line 43
    :cond_1e
    return-void
.end method

.method private static nextI(Ljava/lang/String;II)I
    .registers 4

    .prologue
    .line 322
    :goto_0
    if-ge p1, p2, :cond_f

    invoke-virtual {p0, p1}, Ljava/lang/String;->charAt(I)C

    move-result v0

    invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z

    move-result v0

    if-eqz v0, :cond_f

    .line 324
    add-int/lit8 p1, p1, 0x1

    goto :goto_0

    .line 326
    :cond_f
    return p1
.end method

.method private static nextI([BII)I
    .registers 4

    .prologue
    .line 192
    :goto_0
    if-ge p1, p2, :cond_e

    aget-byte v0, p0, p1

    int-to-char v0, v0

    invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z

    move-result v0

    if-eqz v0, :cond_e

    .line 194
    add-int/lit8 p1, p1, 0x1

    goto :goto_0

    .line 196
    :cond_e
    return p1
.end method


# virtual methods
.method public final a([BILjava/io/OutputStream;)I
    .registers 13

    .prologue
    const/4 v0, 0x0

    .line 62
    rem-int/lit8 v2, p2, 0x3

    .line 63
    sub-int v3, p2, v2

    move v1, v0

    .line 66
    :goto_6
    if-ge v1, v3, :cond_4b

    .line 68
    aget-byte v4, p1, v1

    and-int/lit16 v4, v4, 0xff

    .line 69
    add-int/lit8 v5, v1, 0x1

    aget-byte v5, p1, v5

    and-int/lit16 v5, v5, 0xff

    .line 70
    add-int/lit8 v6, v1, 0x2

    aget-byte v6, p1, v6

    and-int/lit16 v6, v6, 0xff

    .line 72
    iget-object v7, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    ushr-int/lit8 v8, v4, 0x2

    and-int/lit8 v8, v8, 0x3f

    aget-byte v7, v7, v8

    invoke-virtual {p3, v7}, Ljava/io/OutputStream;->write(I)V

    .line 73
    iget-object v7, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    shl-int/lit8 v4, v4, 0x4

    ushr-int/lit8 v8, v5, 0x4

    or-int/2addr v4, v8

    and-int/lit8 v4, v4, 0x3f

    aget-byte v4, v7, v4

    invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V

    .line 74
    iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    shl-int/lit8 v5, v5, 0x2

    ushr-int/lit8 v7, v6, 0x6

    or-int/2addr v5, v7

    and-int/lit8 v5, v5, 0x3f

    aget-byte v4, v4, v5

    invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V

    .line 75
    iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    and-int/lit8 v5, v6, 0x3f

    aget-byte v4, v4, v5

    invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V

    .line 66
    add-int/lit8 v1, v1, 0x3

    goto :goto_6

    .line 84
    :cond_4b
    packed-switch v2, :pswitch_data_b2

    .line 113
    :goto_4e
    :pswitch_4e
    div-int/lit8 v1, v3, 0x3

    shl-int/lit8 v1, v1, 0x2

    if-nez v2, :cond_af

    :goto_54
    add-int/2addr v0, v1

    return v0

    .line 89
    :pswitch_56
    aget-byte v1, p1, v3

    and-int/lit16 v1, v1, 0xff

    .line 90
    ushr-int/lit8 v4, v1, 0x2

    and-int/lit8 v4, v4, 0x3f

    .line 91
    shl-int/lit8 v1, v1, 0x4

    and-int/lit8 v1, v1, 0x3f

    .line 93
    iget-object v5, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    aget-byte v4, v5, v4

    invoke-virtual {p3, v4}, Ljava/io/OutputStream;->write(I)V

    .line 94
    iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    aget-byte v1, v4, v1

    invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V

    .line 95
    iget-byte v1, p0, Lcom/subgraph/orchid/encoders/b;->padding:B

    invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V

    .line 96
    iget-byte v1, p0, Lcom/subgraph/orchid/encoders/b;->padding:B

    invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V

    goto :goto_4e

    .line 99
    :pswitch_7b
    aget-byte v1, p1, v3

    and-int/lit16 v1, v1, 0xff

    .line 100
    add-int/lit8 v4, v3, 0x1

    aget-byte v4, p1, v4

    and-int/lit16 v4, v4, 0xff

    .line 102
    ushr-int/lit8 v5, v1, 0x2

    and-int/lit8 v5, v5, 0x3f

    .line 103
    shl-int/lit8 v1, v1, 0x4

    ushr-int/lit8 v6, v4, 0x4

    or-int/2addr v1, v6

    and-int/lit8 v1, v1, 0x3f

    .line 104
    shl-int/lit8 v4, v4, 0x2

    and-int/lit8 v4, v4, 0x3f

    .line 106
    iget-object v6, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    aget-byte v5, v6, v5

    invoke-virtual {p3, v5}, Ljava/io/OutputStream;->write(I)V

    .line 107
    iget-object v5, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    aget-byte v1, v5, v1

    invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V

    .line 108
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->encodingTable:[B

    aget-byte v1, v1, v4

    invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V

    .line 109
    iget-byte v1, p0, Lcom/subgraph/orchid/encoders/b;->padding:B

    invoke-virtual {p3, v1}, Ljava/io/OutputStream;->write(I)V

    goto :goto_4e

    .line 113
    :cond_af
    const/4 v0, 0x4

    goto :goto_54

    .line 84
    nop

    :pswitch_data_b2
    .packed-switch 0x0
        :pswitch_4e
        :pswitch_56
        :pswitch_7b
    .end packed-switch
.end method

.method public final b([BILjava/io/OutputStream;)I
    .registers 12

    .prologue
    const/4 v1, 0x0

    .line 136
    .line 140
    :goto_1
    if-lez p2, :cond_11

    .line 142
    add-int/lit8 v0, p2, -0x1

    aget-byte v0, p1, v0

    int-to-char v0, v0

    invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z

    move-result v0

    if-eqz v0, :cond_11

    .line 147
    add-int/lit8 p2, p2, -0x1

    goto :goto_1

    .line 151
    :cond_11
    add-int/lit8 v2, p2, -0x4

    .line 153
    invoke-static {p1, v1, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I

    move-result v0

    move v6, v1

    .line 155
    :goto_18
    if-ge v0, v2, :cond_72

    .line 157
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v3, v0, 0x1

    aget-byte v0, p1, v0

    aget-byte v0, v1, v0

    .line 159
    invoke-static {p1, v3, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I

    move-result v1

    .line 161
    iget-object v3, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v4, v1, 0x1

    aget-byte v1, p1, v1

    aget-byte v1, v3, v1

    .line 163
    invoke-static {p1, v4, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I

    move-result v3

    .line 165
    iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v5, v3, 0x1

    aget-byte v3, p1, v3

    aget-byte v3, v4, v3

    .line 167
    invoke-static {p1, v5, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I

    move-result v4

    .line 169
    iget-object v5, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v7, v4, 0x1

    aget-byte v4, p1, v4

    aget-byte v4, v5, v4

    .line 171
    or-int v5, v0, v1

    or-int/2addr v5, v3

    or-int/2addr v5, v4

    if-gez v5, :cond_54

    .line 173
    new-instance v0, Ljava/io/IOException;

    const-string v1, "invalid characters encountered in base64 data"

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

    throw v0

    .line 176
    :cond_54
    shl-int/lit8 v0, v0, 0x2

    shr-int/lit8 v5, v1, 0x4

    or-int/2addr v0, v5

    invoke-virtual {p3, v0}, Ljava/io/OutputStream;->write(I)V

    .line 177
    shl-int/lit8 v0, v1, 0x4

    shr-int/lit8 v1, v3, 0x2

    or-int/2addr v0, v1

    invoke-virtual {p3, v0}, Ljava/io/OutputStream;->write(I)V

    .line 178
    shl-int/lit8 v0, v3, 0x6

    or-int/2addr v0, v4

    invoke-virtual {p3, v0}, Ljava/io/OutputStream;->write(I)V

    .line 180
    add-int/lit8 v1, v6, 0x3

    .line 182
    invoke-static {p1, v7, v2}, Lcom/subgraph/orchid/encoders/b;->nextI([BII)I

    move-result v0

    move v6, v1

    goto :goto_18

    .line 185
    :cond_72
    add-int/lit8 v0, p2, -0x4

    aget-byte v0, p1, v0

    int-to-char v2, v0

    add-int/lit8 v0, p2, -0x3

    aget-byte v0, p1, v0

    int-to-char v3, v0

    add-int/lit8 v0, p2, -0x2

    aget-byte v0, p1, v0

    int-to-char v4, v0

    add-int/lit8 v0, p2, -0x1

    aget-byte v0, p1, v0

    int-to-char v5, v0

    move-object v0, p0

    move-object v1, p3

    invoke-direct/range {v0 .. v5}, Lcom/subgraph/orchid/encoders/b;->decodeLastBlock(Ljava/io/OutputStream;CCCC)I

    move-result v0

    add-int/2addr v0, v6

    .line 187
    return v0
.end method

.method public final decode(Ljava/lang/String;Ljava/io/OutputStream;)I
    .registers 12

    .prologue
    const/4 v1, 0x0

    .line 211
    .line 213
    invoke-virtual {p1}, Ljava/lang/String;->length()I

    move-result v0

    move v5, v0

    .line 215
    :goto_6
    if-lez v5, :cond_18

    .line 217
    add-int/lit8 v0, v5, -0x1

    invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v0

    invoke-static {v0}, Lcom/subgraph/orchid/encoders/b;->ignore(C)Z

    move-result v0

    if-eqz v0, :cond_18

    .line 222
    add-int/lit8 v0, v5, -0x1

    move v5, v0

    goto :goto_6

    .line 226
    :cond_18
    add-int/lit8 v2, v5, -0x4

    .line 228
    invoke-static {p1, v1, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I

    move-result v0

    move v6, v1

    .line 230
    :goto_1f
    if-ge v0, v2, :cond_81

    .line 232
    iget-object v1, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v3, v0, 0x1

    invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v0

    aget-byte v0, v1, v0

    .line 234
    invoke-static {p1, v3, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I

    move-result v1

    .line 236
    iget-object v3, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v4, v1, 0x1

    invoke-virtual {p1, v1}, Ljava/lang/String;->charAt(I)C

    move-result v1

    aget-byte v1, v3, v1

    .line 238
    invoke-static {p1, v4, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I

    move-result v3

    .line 240
    iget-object v4, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v7, v3, 0x1

    invoke-virtual {p1, v3}, Ljava/lang/String;->charAt(I)C

    move-result v3

    aget-byte v3, v4, v3

    .line 242
    invoke-static {p1, v7, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I

    move-result v4

    .line 244
    iget-object v7, p0, Lcom/subgraph/orchid/encoders/b;->decodingTable:[B

    add-int/lit8 v8, v4, 0x1

    invoke-virtual {p1, v4}, Ljava/lang/String;->charAt(I)C

    move-result v4

    aget-byte v4, v7, v4

    .line 246
    or-int v7, v0, v1

    or-int/2addr v7, v3

    or-int/2addr v7, v4

    if-gez v7, :cond_63

    .line 248
    new-instance v0, Ljava/io/IOException;

    const-string v1, "invalid characters encountered in base64 data"

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

    throw v0

    .line 251
    :cond_63
    shl-int/lit8 v0, v0, 0x2

    shr-int/lit8 v7, v1, 0x4

    or-int/2addr v0, v7

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 252
    shl-int/lit8 v0, v1, 0x4

    shr-int/lit8 v1, v3, 0x2

    or-int/2addr v0, v1

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 253
    shl-int/lit8 v0, v3, 0x6

    or-int/2addr v0, v4

    invoke-virtual {p2, v0}, Ljava/io/OutputStream;->write(I)V

    .line 255
    add-int/lit8 v1, v6, 0x3

    .line 257
    invoke-static {p1, v8, v2}, Lcom/subgraph/orchid/encoders/b;->nextI(Ljava/lang/String;II)I

    move-result v0

    move v6, v1

    goto :goto_1f

    .line 260
    :cond_81
    add-int/lit8 v0, v5, -0x4

    invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v2

    add-int/lit8 v0, v5, -0x3

    invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v3

    add-int/lit8 v0, v5, -0x2

    invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v4

    add-int/lit8 v0, v5, -0x1

    invoke-virtual {p1, v0}, Ljava/lang/String;->charAt(I)C

    move-result v5

    move-object v0, p0

    move-object v1, p2

    invoke-direct/range {v0 .. v5}, Lcom/subgraph/orchid/encoders/b;->decodeLastBlock(Ljava/io/OutputStream;CCCC)I

    move-result v0

    add-int/2addr v0, v6

    .line 262
    return v0
.end method