Nat128.smali

.class public abstract Lorg/spongycastle/math/raw/Nat128;
.super Ljava/lang/Object;
.source "Nat128.java"


# static fields
.field private static final M:J = 0xffffffffL


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

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

    return-void
.end method

.method public static add([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 15
    long-to-int v2, v0

    aput v2, p2, v9

    .line 16
    ushr-long/2addr v0, v8

    .line 17
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 18
    long-to-int v2, v0

    aput v2, p2, v10

    .line 19
    ushr-long/2addr v0, v8

    .line 20
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 21
    long-to-int v2, v0

    aput v2, p2, v11

    .line 22
    ushr-long/2addr v0, v8

    .line 23
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 24
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 25
    ushr-long/2addr v0, v8

    .line 26
    long-to-int v0, v0

    return v0
.end method

.method public static addBothTo([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x3

    const/4 v10, 0x2

    const/4 v9, 0x1

    const/4 v8, 0x0

    const-wide v6, 0xffffffffL

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

    aget v2, p0, v8

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v8

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v8

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 33
    long-to-int v2, v0

    aput v2, p2, v8

    .line 34
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 35
    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 36
    long-to-int v2, v0

    aput v2, p2, v9

    .line 37
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 38
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 39
    long-to-int v2, v0

    aput v2, p2, v10

    .line 40
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 41
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    aget v4, p2, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 42
    long-to-int v2, v0

    aput v2, p2, v11

    .line 43
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 44
    long-to-int v0, v0

    return v0
.end method

.method public static addTo([II[III)I
    .registers 14

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 67
    int-to-long v0, p4

    and-long/2addr v0, v6

    .line 68
    aget v2, p0, p1

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 69
    long-to-int v2, v0

    aput v2, p2, p3

    .line 70
    ushr-long/2addr v0, v8

    .line 71
    add-int/lit8 v2, p1, 0x1

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 72
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 73
    ushr-long/2addr v0, v8

    .line 74
    add-int/lit8 v2, p1, 0x2

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x2

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 75
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 76
    ushr-long/2addr v0, v8

    .line 77
    add-int/lit8 v2, p1, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 78
    add-int/lit8 v2, p3, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 79
    ushr-long/2addr v0, v8

    .line 80
    long-to-int v0, v0

    return v0
.end method

.method public static addTo([I[I)I
    .registers 14

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 51
    long-to-int v2, v0

    aput v2, p1, v9

    .line 52
    ushr-long/2addr v0, v8

    .line 53
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 54
    long-to-int v2, v0

    aput v2, p1, v10

    .line 55
    ushr-long/2addr v0, v8

    .line 56
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 57
    long-to-int v2, v0

    aput v2, p1, v11

    .line 58
    ushr-long/2addr v0, v8

    .line 59
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 60
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p1, v2

    .line 61
    ushr-long/2addr v0, v8

    .line 62
    long-to-int v0, v0

    return v0
.end method

.method public static addToEachOther([II[II)I
    .registers 13

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p0, p1

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 87
    long-to-int v2, v0

    aput v2, p0, p1

    .line 88
    long-to-int v2, v0

    aput v2, p2, p3

    .line 89
    ushr-long/2addr v0, v8

    .line 90
    add-int/lit8 v2, p1, 0x1

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 91
    add-int/lit8 v2, p1, 0x1

    long-to-int v3, v0

    aput v3, p0, v2

    .line 92
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 93
    ushr-long/2addr v0, v8

    .line 94
    add-int/lit8 v2, p1, 0x2

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x2

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 95
    add-int/lit8 v2, p1, 0x2

    long-to-int v3, v0

    aput v3, p0, v2

    .line 96
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 97
    ushr-long/2addr v0, v8

    .line 98
    add-int/lit8 v2, p1, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 99
    add-int/lit8 v2, p1, 0x3

    long-to-int v3, v0

    aput v3, p0, v2

    .line 100
    add-int/lit8 v2, p3, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 101
    ushr-long/2addr v0, v8

    .line 102
    long-to-int v0, v0

    return v0
.end method

.method public static copy([I[I)V
    .registers 7

    .prologue
    const/4 v4, 0x3

    const/4 v3, 0x2

    const/4 v2, 0x1

    const/4 v1, 0x0

    .line 107
    aget v0, p0, v1

    aput v0, p1, v1

    .line 108
    aget v0, p0, v2

    aput v0, p1, v2

    .line 109
    aget v0, p0, v3

    aput v0, p1, v3

    .line 110
    aget v0, p0, v4

    aput v0, p1, v4

    .line 111
    return-void
.end method

.method public static copy64([J[J)V
    .registers 6

    .prologue
    const/4 v3, 0x1

    const/4 v2, 0x0

    .line 115
    aget-wide v0, p0, v2

    aput-wide v0, p1, v2

    .line 116
    aget-wide v0, p0, v3

    aput-wide v0, p1, v3

    .line 117
    return-void
.end method

.method public static create()[I
    .registers 1

    .prologue
    .line 121
    const/4 v0, 0x4

    new-array v0, v0, [I

    return-object v0
.end method

.method public static create64()[J
    .registers 1

    .prologue
    .line 126
    const/4 v0, 0x2

    new-array v0, v0, [J

    return-object v0
.end method

.method public static createExt()[I
    .registers 1

    .prologue
    .line 131
    const/16 v0, 0x8

    new-array v0, v0, [I

    return-object v0
.end method

.method public static createExt64()[J
    .registers 1

    .prologue
    .line 136
    const/4 v0, 0x4

    new-array v0, v0, [J

    return-object v0
.end method

.method public static diff([II[II[II)Z
    .registers 13

    .prologue
    .line 141
    invoke-static {p0, p1, p2, p3}, Lorg/spongycastle/math/raw/Nat128;->gte([II[II)Z

    move-result v6

    .line 142
    if-eqz v6, :cond_a

    .line 144
    invoke-static/range {p0 .. p5}, Lorg/spongycastle/math/raw/Nat128;->sub([II[II[II)I

    .line 150
    :goto_9
    return v6

    :cond_a
    move-object v0, p2

    move v1, p3

    move-object v2, p0

    move v3, p1

    move-object v4, p4

    move v5, p5

    .line 148
    invoke-static/range {v0 .. v5}, Lorg/spongycastle/math/raw/Nat128;->sub([II[II[II)I

    goto :goto_9
.end method

.method public static eq([I[I)Z
    .registers 5

    .prologue
    .line 155
    const/4 v0, 0x3

    :goto_1
    if-ltz v0, :cond_e

    .line 157
    aget v1, p0, v0

    aget v2, p1, v0

    if-eq v1, v2, :cond_b

    .line 159
    const/4 v0, 0x0

    .line 162
    :goto_a
    return v0

    .line 155
    :cond_b
    add-int/lit8 v0, v0, -0x1

    goto :goto_1

    .line 162
    :cond_e
    const/4 v0, 0x1

    goto :goto_a
.end method

.method public static eq64([J[J)Z
    .registers 8

    .prologue
    const/4 v0, 0x1

    .line 167
    move v1, v0

    :goto_2
    if-ltz v1, :cond_d

    .line 169
    aget-wide v2, p0, v1

    aget-wide v4, p1, v1

    cmp-long v2, v2, v4

    if-eqz v2, :cond_e

    .line 171
    const/4 v0, 0x0

    .line 174
    :cond_d
    return v0

    .line 167
    :cond_e
    add-int/lit8 v1, v1, -0x1

    goto :goto_2
.end method

.method public static fromBigInteger(Ljava/math/BigInteger;)[I
    .registers 5

    .prologue
    .line 179
    invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I

    move-result v0

    if-ltz v0, :cond_e

    invoke-virtual {p0}, Ljava/math/BigInteger;->bitLength()I

    move-result v0

    const/16 v1, 0x80

    if-le v0, v1, :cond_14

    .line 181
    :cond_e
    new-instance v0, Ljava/lang/IllegalArgumentException;

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

    throw v0

    .line 184
    :cond_14
    invoke-static {}, Lorg/spongycastle/math/raw/Nat128;->create()[I

    move-result-object v2

    .line 185
    const/4 v0, 0x0

    .line 186
    :goto_19
    invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I

    move-result v1

    if-eqz v1, :cond_2f

    .line 188
    add-int/lit8 v1, v0, 0x1

    invoke-virtual {p0}, Ljava/math/BigInteger;->intValue()I

    move-result v3

    aput v3, v2, v0

    .line 189
    const/16 v0, 0x20

    invoke-virtual {p0, v0}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;

    move-result-object p0

    move v0, v1

    goto :goto_19

    .line 191
    :cond_2f
    return-object v2
.end method

.method public static fromBigInteger64(Ljava/math/BigInteger;)[J
    .registers 7

    .prologue
    .line 196
    invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I

    move-result v0

    if-ltz v0, :cond_e

    invoke-virtual {p0}, Ljava/math/BigInteger;->bitLength()I

    move-result v0

    const/16 v1, 0x80

    if-le v0, v1, :cond_14

    .line 198
    :cond_e
    new-instance v0, Ljava/lang/IllegalArgumentException;

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

    throw v0

    .line 201
    :cond_14
    invoke-static {}, Lorg/spongycastle/math/raw/Nat128;->create64()[J

    move-result-object v2

    .line 202
    const/4 v0, 0x0

    .line 203
    :goto_19
    invoke-virtual {p0}, Ljava/math/BigInteger;->signum()I

    move-result v1

    if-eqz v1, :cond_2f

    .line 205
    add-int/lit8 v1, v0, 0x1

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

    move-result-wide v4

    aput-wide v4, v2, v0

    .line 206
    const/16 v0, 0x40

    invoke-virtual {p0, v0}, Ljava/math/BigInteger;->shiftRight(I)Ljava/math/BigInteger;

    move-result-object p0

    move v0, v1

    goto :goto_19

    .line 208
    :cond_2f
    return-object v2
.end method

.method public static getBit([II)I
    .registers 5

    .prologue
    const/4 v0, 0x0

    .line 213
    if-nez p1, :cond_8

    .line 215
    aget v0, p0, v0

    and-int/lit8 v0, v0, 0x1

    .line 223
    :cond_7
    :goto_7
    return v0

    .line 217
    :cond_8
    shr-int/lit8 v1, p1, 0x5

    .line 218
    if-ltz v1, :cond_7

    const/4 v2, 0x4

    if-ge v1, v2, :cond_7

    .line 222
    and-int/lit8 v0, p1, 0x1f

    .line 223
    aget v1, p0, v1

    ushr-int v0, v1, v0

    and-int/lit8 v0, v0, 0x1

    goto :goto_7
.end method

.method public static gte([II[II)Z
    .registers 9

    .prologue
    const/4 v0, 0x1

    const/high16 v4, -0x80000000

    .line 242
    const/4 v1, 0x3

    :goto_4
    if-ltz v1, :cond_13

    .line 244
    add-int v2, p1, v1

    aget v2, p0, v2

    xor-int/2addr v2, v4

    .line 245
    add-int v3, p3, v1

    aget v3, p2, v3

    xor-int/2addr v3, v4

    .line 246
    if-ge v2, v3, :cond_14

    .line 247
    const/4 v0, 0x0

    .line 251
    :cond_13
    return v0

    .line 248
    :cond_14
    if-gt v2, v3, :cond_13

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

    goto :goto_4
.end method

.method public static gte([I[I)Z
    .registers 7

    .prologue
    const/4 v0, 0x1

    const/high16 v4, -0x80000000

    .line 228
    const/4 v1, 0x3

    :goto_4
    if-ltz v1, :cond_f

    .line 230
    aget v2, p0, v1

    xor-int/2addr v2, v4

    .line 231
    aget v3, p1, v1

    xor-int/2addr v3, v4

    .line 232
    if-ge v2, v3, :cond_10

    .line 233
    const/4 v0, 0x0

    .line 237
    :cond_f
    return v0

    .line 234
    :cond_10
    if-gt v2, v3, :cond_f

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

    goto :goto_4
.end method

.method public static isOne([I)Z
    .registers 5

    .prologue
    const/4 v1, 0x1

    const/4 v0, 0x0

    .line 256
    aget v2, p0, v0

    if-eq v2, v1, :cond_7

    .line 267
    :cond_6
    :goto_6
    return v0

    :cond_7
    move v2, v1

    .line 260
    :goto_8
    const/4 v3, 0x4

    if-ge v2, v3, :cond_12

    .line 262
    aget v3, p0, v2

    if-nez v3, :cond_6

    .line 260
    add-int/lit8 v2, v2, 0x1

    goto :goto_8

    :cond_12
    move v0, v1

    .line 267
    goto :goto_6
.end method

.method public static isOne64([J)Z
    .registers 9

    .prologue
    const/4 v1, 0x1

    const/4 v0, 0x0

    .line 272
    aget-wide v2, p0, v0

    const-wide/16 v4, 0x1

    cmp-long v2, v2, v4

    if-eqz v2, :cond_b

    .line 283
    :cond_a
    :goto_a
    return v0

    :cond_b
    move v2, v1

    .line 276
    :goto_c
    const/4 v3, 0x2

    if-ge v2, v3, :cond_1a

    .line 278
    aget-wide v4, p0, v1

    const-wide/16 v6, 0x0

    cmp-long v3, v4, v6

    if-nez v3, :cond_a

    .line 276
    add-int/lit8 v2, v2, 0x1

    goto :goto_c

    :cond_1a
    move v0, v1

    .line 283
    goto :goto_a
.end method

.method public static isZero([I)Z
    .registers 4

    .prologue
    const/4 v0, 0x0

    .line 288
    move v1, v0

    :goto_2
    const/4 v2, 0x4

    if-ge v1, v2, :cond_d

    .line 290
    aget v2, p0, v1

    if-eqz v2, :cond_a

    .line 295
    :goto_9
    return v0

    .line 288
    :cond_a
    add-int/lit8 v1, v1, 0x1

    goto :goto_2

    .line 295
    :cond_d
    const/4 v0, 0x1

    goto :goto_9
.end method

.method public static isZero64([J)Z
    .registers 7

    .prologue
    const/4 v0, 0x0

    .line 300
    move v1, v0

    :goto_2
    const/4 v2, 0x2

    if-ge v1, v2, :cond_11

    .line 302
    aget-wide v2, p0, v1

    const-wide/16 v4, 0x0

    cmp-long v2, v2, v4

    if-eqz v2, :cond_e

    .line 307
    :goto_d
    return v0

    .line 300
    :cond_e
    add-int/lit8 v1, v1, 0x1

    goto :goto_2

    .line 307
    :cond_11
    const/4 v0, 0x1

    goto :goto_d
.end method

.method public static mul([II[II[II)V
    .registers 28

    .prologue
    .line 355
    aget v2, p2, p3

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v4, v2

    .line 356
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v6, 0xffffffffL

    and-long/2addr v6, v2

    .line 357
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v8, v2

    .line 358
    add-int/lit8 v2, p3, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v10, 0xffffffffL

    and-long/2addr v10, v2

    .line 361
    aget v2, p0, p1

    int-to-long v2, v2

    const-wide v12, 0xffffffffL

    and-long/2addr v2, v12

    .line 362
    const-wide/16 v12, 0x0

    mul-long v14, v2, v4

    add-long/2addr v12, v14

    .line 363
    long-to-int v14, v12

    aput v14, p4, p5

    .line 364
    const/16 v14, 0x20

    ushr-long/2addr v12, v14

    .line 365
    mul-long v14, v2, v6

    add-long/2addr v12, v14

    .line 366
    add-int/lit8 v14, p5, 0x1

    long-to-int v15, v12

    aput v15, p4, v14

    .line 367
    const/16 v14, 0x20

    ushr-long/2addr v12, v14

    .line 368
    mul-long v14, v2, v8

    add-long/2addr v12, v14

    .line 369
    add-int/lit8 v14, p5, 0x2

    long-to-int v15, v12

    aput v15, p4, v14

    .line 370
    const/16 v14, 0x20

    ushr-long/2addr v12, v14

    .line 371
    mul-long/2addr v2, v10

    add-long/2addr v2, v12

    .line 372
    add-int/lit8 v12, p5, 0x3

    long-to-int v13, v2

    aput v13, p4, v12

    .line 373
    const/16 v12, 0x20

    ushr-long/2addr v2, v12

    .line 374
    add-int/lit8 v12, p5, 0x4

    long-to-int v2, v2

    aput v2, p4, v12

    .line 377
    const/4 v2, 0x1

    :goto_64
    const/4 v3, 0x4

    if-ge v2, v3, :cond_ed

    .line 379
    add-int/lit8 p5, p5, 0x1

    .line 380
    add-int v3, p1, v2

    aget v3, p0, v3

    int-to-long v12, v3

    const-wide v14, 0xffffffffL

    and-long/2addr v12, v14

    .line 381
    const-wide/16 v14, 0x0

    mul-long v16, v12, v4

    aget v3, p4, p5

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v16, v16, v18

    add-long v14, v14, v16

    .line 382
    long-to-int v3, v14

    aput v3, p4, p5

    .line 383
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 384
    mul-long v16, v12, v6

    add-int/lit8 v3, p5, 0x1

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v16, v16, v18

    add-long v14, v14, v16

    .line 385
    add-int/lit8 v3, p5, 0x1

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p4, v3

    .line 386
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 387
    mul-long v16, v12, v8

    add-int/lit8 v3, p5, 0x2

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v16, v16, v18

    add-long v14, v14, v16

    .line 388
    add-int/lit8 v3, p5, 0x2

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p4, v3

    .line 389
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 390
    mul-long/2addr v12, v10

    add-int/lit8 v3, p5, 0x3

    aget v3, p4, v3

    int-to-long v0, v3

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    add-long v12, v12, v16

    add-long/2addr v12, v14

    .line 391
    add-int/lit8 v3, p5, 0x3

    long-to-int v14, v12

    aput v14, p4, v3

    .line 392
    const/16 v3, 0x20

    ushr-long/2addr v12, v3

    .line 393
    add-int/lit8 v3, p5, 0x4

    long-to-int v12, v12

    aput v12, p4, v3

    .line 377
    add-int/lit8 v2, v2, 0x1

    goto/16 :goto_64

    .line 395
    :cond_ed
    return-void
.end method

.method public static mul([I[I[I)V
    .registers 25

    .prologue
    .line 312
    const/4 v2, 0x0

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v4, v2

    .line 313
    const/4 v2, 0x1

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v6, 0xffffffffL

    and-long/2addr v6, v2

    .line 314
    const/4 v2, 0x2

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v8, v2

    .line 315
    const/4 v2, 0x3

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v10, 0xffffffffL

    and-long/2addr v10, v2

    .line 318
    const/4 v2, 0x0

    aget v2, p0, v2

    int-to-long v2, v2

    const-wide v12, 0xffffffffL

    and-long/2addr v2, v12

    .line 319
    const-wide/16 v12, 0x0

    mul-long v14, v2, v4

    add-long/2addr v12, v14

    .line 320
    const/4 v14, 0x0

    long-to-int v15, v12

    aput v15, p2, v14

    .line 321
    const/16 v14, 0x20

    ushr-long/2addr v12, v14

    .line 322
    mul-long v14, v2, v6

    add-long/2addr v12, v14

    .line 323
    const/4 v14, 0x1

    long-to-int v15, v12

    aput v15, p2, v14

    .line 324
    const/16 v14, 0x20

    ushr-long/2addr v12, v14

    .line 325
    mul-long v14, v2, v8

    add-long/2addr v12, v14

    .line 326
    const/4 v14, 0x2

    long-to-int v15, v12

    aput v15, p2, v14

    .line 327
    const/16 v14, 0x20

    ushr-long/2addr v12, v14

    .line 328
    mul-long/2addr v2, v10

    add-long/2addr v2, v12

    .line 329
    const/4 v12, 0x3

    long-to-int v13, v2

    aput v13, p2, v12

    .line 330
    const/16 v12, 0x20

    ushr-long/2addr v2, v12

    .line 331
    const/4 v12, 0x4

    long-to-int v2, v2

    aput v2, p2, v12

    .line 334
    const/4 v2, 0x1

    :goto_60
    const/4 v3, 0x4

    if-ge v2, v3, :cond_e5

    .line 336
    aget v3, p0, v2

    int-to-long v12, v3

    const-wide v14, 0xffffffffL

    and-long/2addr v12, v14

    .line 337
    const-wide/16 v14, 0x0

    mul-long v16, v12, v4

    aget v3, p2, v2

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v16, v16, v18

    add-long v14, v14, v16

    .line 338
    long-to-int v3, v14

    aput v3, p2, v2

    .line 339
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 340
    mul-long v16, v12, v6

    add-int/lit8 v3, v2, 0x1

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v16, v16, v18

    add-long v14, v14, v16

    .line 341
    add-int/lit8 v3, v2, 0x1

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p2, v3

    .line 342
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 343
    mul-long v16, v12, v8

    add-int/lit8 v3, v2, 0x2

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v16, v16, v18

    add-long v14, v14, v16

    .line 344
    add-int/lit8 v3, v2, 0x2

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p2, v3

    .line 345
    const/16 v3, 0x20

    ushr-long/2addr v14, v3

    .line 346
    mul-long/2addr v12, v10

    add-int/lit8 v3, v2, 0x3

    aget v3, p2, v3

    int-to-long v0, v3

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    add-long v12, v12, v16

    add-long/2addr v12, v14

    .line 347
    add-int/lit8 v3, v2, 0x3

    long-to-int v14, v12

    aput v14, p2, v3

    .line 348
    const/16 v3, 0x20

    ushr-long/2addr v12, v3

    .line 349
    add-int/lit8 v3, v2, 0x4

    long-to-int v12, v12

    aput v12, p2, v3

    .line 334
    add-int/lit8 v2, v2, 0x1

    goto/16 :goto_60

    .line 351
    :cond_e5
    return-void
.end method

.method public static mul33Add(I[II[II[II)J
    .registers 19

    .prologue
    .line 462
    int-to-long v0, p0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    .line 463
    aget v2, p1, p2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    .line 464
    const-wide/16 v4, 0x0

    mul-long v6, v0, v2

    aget v8, p3, p4

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v6, v8

    add-long/2addr v4, v6

    .line 465
    long-to-int v6, v4

    aput v6, p5, p6

    .line 466
    const/16 v6, 0x20

    ushr-long/2addr v4, v6

    .line 467
    add-int/lit8 v6, p2, 0x1

    aget v6, p1, v6

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    .line 468
    mul-long v8, v0, v6

    add-long/2addr v2, v8

    add-int/lit8 v8, p4, 0x1

    aget v8, p3, v8

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v2, v8

    add-long/2addr v2, v4

    .line 469
    add-int/lit8 v4, p6, 0x1

    long-to-int v5, v2

    aput v5, p5, v4

    .line 470
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 471
    add-int/lit8 v4, p2, 0x2

    aget v4, p1, v4

    int-to-long v4, v4

    const-wide v8, 0xffffffffL

    and-long/2addr v4, v8

    .line 472
    mul-long v8, v0, v4

    add-long/2addr v6, v8

    add-int/lit8 v8, p4, 0x2

    aget v8, p3, v8

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v6, v8

    add-long/2addr v2, v6

    .line 473
    add-int/lit8 v6, p6, 0x2

    long-to-int v7, v2

    aput v7, p5, v6

    .line 474
    const/16 v6, 0x20

    ushr-long/2addr v2, v6

    .line 475
    add-int/lit8 v6, p2, 0x3

    aget v6, p1, v6

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    .line 476
    mul-long/2addr v0, v6

    add-long/2addr v0, v4

    add-int/lit8 v4, p4, 0x3

    aget v4, p3, v4

    int-to-long v4, v4

    const-wide v8, 0xffffffffL

    and-long/2addr v4, v8

    add-long/2addr v0, v4

    add-long/2addr v0, v2

    .line 477
    add-int/lit8 v2, p6, 0x3

    long-to-int v3, v0

    aput v3, p5, v2

    .line 478
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 479
    add-long/2addr v0, v6

    .line 480
    return-wide v0
.end method

.method public static mul33DWordAdd(IJ[II)I
    .registers 18

    .prologue
    .line 508
    int-to-long v0, p0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    .line 509
    const-wide v2, 0xffffffffL

    and-long/2addr v2, p1

    .line 510
    const-wide/16 v4, 0x0

    mul-long v6, v0, v2

    aget v8, p3, p4

    int-to-long v8, v8

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    add-long/2addr v6, v8

    add-long/2addr v4, v6

    .line 511
    long-to-int v6, v4

    aput v6, p3, p4

    .line 512
    const/16 v6, 0x20

    ushr-long/2addr v4, v6

    .line 513
    const/16 v6, 0x20

    ushr-long v6, p1, v6

    .line 514
    mul-long/2addr v0, v6

    add-long/2addr v0, v2

    add-int/lit8 v2, p4, 0x1

    aget v2, p3, v2

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v2, v8

    add-long/2addr v0, v2

    add-long/2addr v0, v4

    .line 515
    add-int/lit8 v2, p4, 0x1

    long-to-int v3, v0

    aput v3, p3, v2

    .line 516
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 517
    add-int/lit8 v2, p4, 0x2

    aget v2, p3, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    add-long/2addr v2, v6

    add-long/2addr v0, v2

    .line 518
    add-int/lit8 v2, p4, 0x2

    long-to-int v3, v0

    aput v3, p3, v2

    .line 519
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 520
    add-int/lit8 v2, p4, 0x3

    aget v2, p3, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 521
    add-int/lit8 v2, p4, 0x3

    long-to-int v3, v0

    aput v3, p3, v2

    .line 522
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 523
    long-to-int v0, v0

    return v0
.end method

.method public static mul33WordAdd(II[II)I
    .registers 16

    .prologue
    const-wide/16 v10, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

    .line 531
    int-to-long v0, p0

    and-long/2addr v0, v6

    int-to-long v2, p1

    and-long/2addr v2, v6

    .line 532
    mul-long/2addr v0, v2

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v0, v4

    add-long/2addr v0, v10

    .line 533
    long-to-int v4, v0

    aput v4, p2, p3

    .line 534
    ushr-long/2addr v0, v8

    .line 535
    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    add-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 536
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 537
    ushr-long/2addr v0, v8

    .line 538
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-long/2addr v0, v2

    .line 539
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 540
    ushr-long/2addr v0, v8

    .line 541
    cmp-long v0, v0, v10

    if-nez v0, :cond_39

    const/4 v0, 0x0

    :goto_38
    return v0

    :cond_39
    const/4 v0, 0x4

    const/4 v1, 0x3

    invoke-static {v0, p2, p3, v1}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v0

    goto :goto_38
.end method

.method public static mulAddTo([II[II[II)I
    .registers 30

    .prologue
    .line 429
    aget v2, p2, p3

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 430
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v8, v2, v4

    .line 431
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v10, v2, v4

    .line 432
    add-int/lit8 v2, p3, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v12, v2, v4

    .line 434
    const-wide/16 v2, 0x0

    .line 435
    const/4 v4, 0x0

    :goto_31
    const/4 v5, 0x4

    if-ge v4, v5, :cond_db

    .line 437
    add-int v5, p1, v4

    aget v5, p0, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 438
    const-wide/16 v16, 0x0

    mul-long v18, v14, v6

    aget v5, p4, p5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 439
    move-wide/from16 v0, v16

    long-to-int v5, v0

    aput v5, p4, p5

    .line 440
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 441
    mul-long v18, v14, v8

    add-int/lit8 v5, p5, 0x1

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 442
    add-int/lit8 v5, p5, 0x1

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p4, v5

    .line 443
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 444
    mul-long v18, v14, v10

    add-int/lit8 v5, p5, 0x2

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 445
    add-int/lit8 v5, p5, 0x2

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p4, v5

    .line 446
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 447
    mul-long/2addr v14, v12

    add-int/lit8 v5, p5, 0x3

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v14, v14, v18

    add-long v14, v14, v16

    .line 448
    add-int/lit8 v5, p5, 0x3

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p4, v5

    .line 449
    const/16 v5, 0x20

    ushr-long/2addr v14, v5

    .line 450
    add-int/lit8 v5, p5, 0x4

    aget v5, p4, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    add-long v2, v2, v16

    add-long/2addr v2, v14

    .line 451
    add-int/lit8 v5, p5, 0x4

    long-to-int v14, v2

    aput v14, p4, v5

    .line 452
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    .line 453
    add-int/lit8 p5, p5, 0x1

    .line 435
    add-int/lit8 v4, v4, 0x1

    goto/16 :goto_31

    .line 455
    :cond_db
    long-to-int v2, v2

    return v2
.end method

.method public static mulAddTo([I[I[I)I
    .registers 27

    .prologue
    .line 399
    const/4 v2, 0x0

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 400
    const/4 v2, 0x1

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v8, v2, v4

    .line 401
    const/4 v2, 0x2

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v10, v2, v4

    .line 402
    const/4 v2, 0x3

    aget v2, p1, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v12, v2, v4

    .line 404
    const-wide/16 v2, 0x0

    .line 405
    const/4 v4, 0x0

    :goto_2f
    const/4 v5, 0x4

    if-ge v4, v5, :cond_d5

    .line 407
    aget v5, p0, v4

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 408
    const-wide/16 v16, 0x0

    mul-long v18, v14, v6

    aget v5, p2, v4

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 409
    move-wide/from16 v0, v16

    long-to-int v5, v0

    aput v5, p2, v4

    .line 410
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 411
    mul-long v18, v14, v8

    add-int/lit8 v5, v4, 0x1

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 412
    add-int/lit8 v5, v4, 0x1

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p2, v5

    .line 413
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 414
    mul-long v18, v14, v10

    add-int/lit8 v5, v4, 0x2

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v20, v0

    const-wide v22, 0xffffffffL

    and-long v20, v20, v22

    add-long v18, v18, v20

    add-long v16, v16, v18

    .line 415
    add-int/lit8 v5, v4, 0x2

    move-wide/from16 v0, v16

    long-to-int v0, v0

    move/from16 v18, v0

    aput v18, p2, v5

    .line 416
    const/16 v5, 0x20

    ushr-long v16, v16, v5

    .line 417
    mul-long/2addr v14, v12

    add-int/lit8 v5, v4, 0x3

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    add-long v14, v14, v18

    add-long v14, v14, v16

    .line 418
    add-int/lit8 v5, v4, 0x3

    long-to-int v0, v14

    move/from16 v16, v0

    aput v16, p2, v5

    .line 419
    const/16 v5, 0x20

    ushr-long/2addr v14, v5

    .line 420
    add-int/lit8 v5, v4, 0x4

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    add-long v2, v2, v16

    add-long/2addr v2, v14

    .line 421
    add-int/lit8 v5, v4, 0x4

    long-to-int v14, v2

    aput v14, p2, v5

    .line 422
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    .line 405
    add-int/lit8 v4, v4, 0x1

    goto/16 :goto_2f

    .line 424
    :cond_d5
    long-to-int v2, v2

    return v2
.end method

.method public static mulWord(I[I[II)I
    .registers 14

    .prologue
    const-wide v8, 0xffffffffL

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

    int-to-long v2, p0

    and-long v4, v2, v8

    .line 577
    const/4 v2, 0x0

    .line 580
    :cond_b
    aget v3, p1, v2

    int-to-long v6, v3

    and-long/2addr v6, v8

    mul-long/2addr v6, v4

    add-long/2addr v0, v6

    .line 581
    add-int v3, p3, v2

    long-to-int v6, v0

    aput v6, p2, v3

    .line 582
    const/16 v3, 0x20

    ushr-long/2addr v0, v3

    .line 584
    add-int/lit8 v2, v2, 0x1

    const/4 v3, 0x4

    if-lt v2, v3, :cond_b

    .line 585
    long-to-int v0, v0

    return v0
.end method

.method public static mulWordAddExt(I[II[II)I
    .registers 16

    .prologue
    const/16 v10, 0x20

    const-wide v8, 0xffffffffL

    .line 487
    int-to-long v0, p0

    and-long/2addr v0, v8

    .line 488
    const-wide/16 v2, 0x0

    aget v4, p1, p2

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    aget v6, p3, p4

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 489
    long-to-int v4, v2

    aput v4, p3, p4

    .line 490
    ushr-long/2addr v2, v10

    .line 491
    add-int/lit8 v4, p2, 0x1

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    add-int/lit8 v6, p4, 0x1

    aget v6, p3, v6

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 492
    add-int/lit8 v4, p4, 0x1

    long-to-int v5, v2

    aput v5, p3, v4

    .line 493
    ushr-long/2addr v2, v10

    .line 494
    add-int/lit8 v4, p2, 0x2

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v4, v0

    add-int/lit8 v6, p4, 0x2

    aget v6, p3, v6

    int-to-long v6, v6

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 495
    add-int/lit8 v4, p4, 0x2

    long-to-int v5, v2

    aput v5, p3, v4

    .line 496
    ushr-long/2addr v2, v10

    .line 497
    add-int/lit8 v4, p2, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    mul-long/2addr v0, v4

    add-int/lit8 v4, p4, 0x3

    aget v4, p3, v4

    int-to-long v4, v4

    and-long/2addr v4, v8

    add-long/2addr v0, v4

    add-long/2addr v0, v2

    .line 498
    add-int/lit8 v2, p4, 0x3

    long-to-int v3, v0

    aput v3, p3, v2

    .line 499
    ushr-long/2addr v0, v10

    .line 500
    long-to-int v0, v0

    return v0
.end method

.method public static mulWordDwordAdd(IJ[II)I
    .registers 16

    .prologue
    .line 547
    int-to-long v0, p0

    const-wide v2, 0xffffffffL

    and-long/2addr v0, v2

    .line 548
    const-wide/16 v2, 0x0

    const-wide v4, 0xffffffffL

    and-long/2addr v4, p1

    mul-long/2addr v4, v0

    aget v6, p3, p4

    int-to-long v6, v6

    const-wide v8, 0xffffffffL

    and-long/2addr v6, v8

    add-long/2addr v4, v6

    add-long/2addr v2, v4

    .line 549
    long-to-int v4, v2

    aput v4, p3, p4

    .line 550
    const/16 v4, 0x20

    ushr-long/2addr v2, v4

    .line 551
    const/16 v4, 0x20

    ushr-long v4, p1, v4

    mul-long/2addr v0, v4

    add-int/lit8 v4, p4, 0x1

    aget v4, p3, v4

    int-to-long v4, v4

    const-wide v6, 0xffffffffL

    and-long/2addr v4, v6

    add-long/2addr v0, v4

    add-long/2addr v0, v2

    .line 552
    add-int/lit8 v2, p4, 0x1

    long-to-int v3, v0

    aput v3, p3, v2

    .line 553
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 554
    add-int/lit8 v2, p4, 0x2

    aget v2, p3, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 555
    add-int/lit8 v2, p4, 0x2

    long-to-int v3, v0

    aput v3, p3, v2

    .line 556
    const/16 v2, 0x20

    ushr-long/2addr v0, v2

    .line 557
    const-wide/16 v2, 0x0

    cmp-long v0, v0, v2

    if-nez v0, :cond_57

    const/4 v0, 0x0

    :goto_56
    return v0

    :cond_57
    const/4 v0, 0x4

    const/4 v1, 0x3

    invoke-static {v0, p3, p4, v1}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v0

    goto :goto_56
.end method

.method public static mulWordsAdd(II[II)I
    .registers 14

    .prologue
    const-wide/16 v8, 0x0

    const/16 v6, 0x20

    const-wide v4, 0xffffffffL

    .line 564
    int-to-long v0, p0

    and-long/2addr v0, v4

    int-to-long v2, p1

    and-long/2addr v2, v4

    .line 565
    mul-long/2addr v0, v2

    aget v2, p2, p3

    int-to-long v2, v2

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    add-long/2addr v0, v8

    .line 566
    long-to-int v2, v0

    aput v2, p2, p3

    .line 567
    ushr-long/2addr v0, v6

    .line 568
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 569
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 570
    ushr-long/2addr v0, v6

    .line 571
    cmp-long v0, v0, v8

    if-nez v0, :cond_2b

    const/4 v0, 0x0

    :goto_2a
    return v0

    :cond_2b
    const/4 v0, 0x4

    const/4 v1, 0x2

    invoke-static {v0, p2, p3, v1}, Lorg/spongycastle/math/raw/Nat;->incAt(I[III)I

    move-result v0

    goto :goto_2a
.end method

.method public static square([II[II)V
    .registers 26

    .prologue
    .line 667
    aget v2, p0, p1

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 670
    const/4 v4, 0x0

    .line 672
    const/4 v3, 0x3

    const/16 v2, 0x8

    move v5, v4

    .line 675
    :goto_f
    add-int/lit8 v4, v3, -0x1

    add-int v3, v3, p1

    aget v3, p0, v3

    int-to-long v8, v3

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 676
    mul-long/2addr v8, v8

    .line 677
    add-int/lit8 v2, v2, -0x1

    add-int v3, p3, v2

    shl-int/lit8 v5, v5, 0x1f

    const/16 v10, 0x21

    ushr-long v10, v8, v10

    long-to-int v10, v10

    or-int/2addr v5, v10

    aput v5, p2, v3

    .line 678
    add-int/lit8 v2, v2, -0x1

    add-int v3, p3, v2

    const/4 v5, 0x1

    ushr-long v10, v8, v5

    long-to-int v5, v10

    aput v5, p2, v3

    .line 679
    long-to-int v3, v8

    .line 681
    if-gtz v4, :cond_136

    .line 684
    mul-long v4, v6, v6

    .line 685
    shl-int/lit8 v2, v3, 0x1f

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v2, v8

    const/16 v8, 0x21

    ushr-long v8, v4, v8

    or-long/2addr v2, v8

    .line 686
    long-to-int v8, v4

    aput v8, p2, p3

    .line 687
    const/16 v8, 0x20

    ushr-long/2addr v4, v8

    long-to-int v4, v4

    and-int/lit8 v4, v4, 0x1

    .line 691
    add-int/lit8 v5, p1, 0x1

    aget v5, p0, v5

    int-to-long v8, v5

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 692
    add-int/lit8 v5, p3, 0x2

    aget v5, p2, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 695
    mul-long v12, v8, v6

    add-long/2addr v2, v12

    .line 696
    long-to-int v5, v2

    .line 697
    add-int/lit8 v12, p3, 0x1

    shl-int/lit8 v13, v5, 0x1

    or-int/2addr v4, v13

    aput v4, p2, v12

    .line 698
    ushr-int/lit8 v4, v5, 0x1f

    .line 699
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    add-long/2addr v2, v10

    .line 702
    add-int/lit8 v5, p1, 0x2

    aget v5, p0, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 703
    add-int/lit8 v5, p3, 0x3

    aget v5, p2, v5

    int-to-long v12, v5

    const-wide v14, 0xffffffffL

    and-long/2addr v12, v14

    .line 704
    add-int/lit8 v5, p3, 0x4

    aget v5, p2, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 706
    mul-long v16, v10, v6

    add-long v2, v2, v16

    .line 707
    long-to-int v5, v2

    .line 708
    add-int/lit8 v16, p3, 0x2

    shl-int/lit8 v17, v5, 0x1

    or-int v4, v4, v17

    aput v4, p2, v16

    .line 709
    ushr-int/lit8 v4, v5, 0x1f

    .line 710
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v16, v10, v8

    add-long v2, v2, v16

    add-long/2addr v2, v12

    .line 711
    const/16 v5, 0x20

    ushr-long v12, v2, v5

    add-long/2addr v12, v14

    .line 712
    const-wide v14, 0xffffffffL

    and-long/2addr v2, v14

    .line 715
    add-int/lit8 v5, p1, 0x3

    aget v5, p0, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 716
    add-int/lit8 v5, p3, 0x5

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    .line 717
    add-int/lit8 v5, p3, 0x6

    aget v5, p2, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    .line 719
    mul-long/2addr v6, v14

    add-long/2addr v2, v6

    .line 720
    long-to-int v5, v2

    .line 721
    add-int/lit8 v6, p3, 0x3

    shl-int/lit8 v7, v5, 0x1

    or-int/2addr v4, v7

    aput v4, p2, v6

    .line 722
    ushr-int/lit8 v4, v5, 0x1f

    .line 723
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v6, v14, v8

    add-long/2addr v2, v6

    add-long/2addr v2, v12

    .line 724
    const/16 v5, 0x20

    ushr-long v6, v2, v5

    mul-long v8, v14, v10

    add-long/2addr v6, v8

    add-long v6, v6, v16

    .line 725
    const/16 v5, 0x20

    ushr-long v8, v6, v5

    add-long v8, v8, v18

    .line 728
    long-to-int v2, v2

    .line 729
    add-int/lit8 v3, p3, 0x4

    shl-int/lit8 v5, v2, 0x1

    or-int/2addr v4, v5

    aput v4, p2, v3

    .line 730
    ushr-int/lit8 v2, v2, 0x1f

    .line 731
    long-to-int v3, v6

    .line 732
    add-int/lit8 v4, p3, 0x5

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p2, v4

    .line 733
    ushr-int/lit8 v2, v3, 0x1f

    .line 734
    long-to-int v3, v8

    .line 735
    add-int/lit8 v4, p3, 0x6

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p2, v4

    .line 736
    ushr-int/lit8 v2, v3, 0x1f

    .line 737
    add-int/lit8 v3, p3, 0x7

    aget v3, p2, v3

    const/16 v4, 0x20

    shr-long v4, v8, v4

    long-to-int v4, v4

    add-int/2addr v3, v4

    .line 738
    add-int/lit8 v4, p3, 0x7

    shl-int/lit8 v3, v3, 0x1

    or-int/2addr v2, v3

    aput v2, p2, v4

    .line 739
    return-void

    :cond_136
    move v5, v3

    move v3, v4

    goto/16 :goto_f
.end method

.method public static square([I[I)V
    .registers 24

    .prologue
    .line 590
    const/4 v2, 0x0

    aget v2, p0, v2

    int-to-long v2, v2

    const-wide v4, 0xffffffffL

    and-long v6, v2, v4

    .line 593
    const/4 v4, 0x0

    .line 595
    const/4 v3, 0x3

    const/16 v2, 0x8

    move v5, v4

    .line 598
    :goto_10
    add-int/lit8 v4, v3, -0x1

    aget v3, p0, v3

    int-to-long v8, v3

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 599
    mul-long/2addr v8, v8

    .line 600
    add-int/lit8 v2, v2, -0x1

    shl-int/lit8 v3, v5, 0x1f

    const/16 v5, 0x21

    ushr-long v10, v8, v5

    long-to-int v5, v10

    or-int/2addr v3, v5

    aput v3, p1, v2

    .line 601
    add-int/lit8 v2, v2, -0x1

    const/4 v3, 0x1

    ushr-long v10, v8, v3

    long-to-int v3, v10

    aput v3, p1, v2

    .line 602
    long-to-int v3, v8

    .line 604
    if-gtz v4, :cond_129

    .line 607
    mul-long v4, v6, v6

    .line 608
    shl-int/lit8 v2, v3, 0x1f

    int-to-long v2, v2

    const-wide v8, 0xffffffffL

    and-long/2addr v2, v8

    const/16 v8, 0x21

    ushr-long v8, v4, v8

    or-long/2addr v2, v8

    .line 609
    const/4 v8, 0x0

    long-to-int v9, v4

    aput v9, p1, v8

    .line 610
    const/16 v8, 0x20

    ushr-long/2addr v4, v8

    long-to-int v4, v4

    and-int/lit8 v4, v4, 0x1

    .line 614
    const/4 v5, 0x1

    aget v5, p0, v5

    int-to-long v8, v5

    const-wide v10, 0xffffffffL

    and-long/2addr v8, v10

    .line 615
    const/4 v5, 0x2

    aget v5, p1, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 618
    mul-long v12, v8, v6

    add-long/2addr v2, v12

    .line 619
    long-to-int v5, v2

    .line 620
    const/4 v12, 0x1

    shl-int/lit8 v13, v5, 0x1

    or-int/2addr v4, v13

    aput v4, p1, v12

    .line 621
    ushr-int/lit8 v4, v5, 0x1f

    .line 622
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    add-long/2addr v2, v10

    .line 625
    const/4 v5, 0x2

    aget v5, p0, v5

    int-to-long v10, v5

    const-wide v12, 0xffffffffL

    and-long/2addr v10, v12

    .line 626
    const/4 v5, 0x3

    aget v5, p1, v5

    int-to-long v12, v5

    const-wide v14, 0xffffffffL

    and-long/2addr v12, v14

    .line 627
    const/4 v5, 0x4

    aget v5, p1, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 629
    mul-long v16, v10, v6

    add-long v2, v2, v16

    .line 630
    long-to-int v5, v2

    .line 631
    const/16 v16, 0x2

    shl-int/lit8 v17, v5, 0x1

    or-int v4, v4, v17

    aput v4, p1, v16

    .line 632
    ushr-int/lit8 v4, v5, 0x1f

    .line 633
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v16, v10, v8

    add-long v2, v2, v16

    add-long/2addr v2, v12

    .line 634
    const/16 v5, 0x20

    ushr-long v12, v2, v5

    add-long/2addr v12, v14

    .line 635
    const-wide v14, 0xffffffffL

    and-long/2addr v2, v14

    .line 638
    const/4 v5, 0x3

    aget v5, p0, v5

    int-to-long v14, v5

    const-wide v16, 0xffffffffL

    and-long v14, v14, v16

    .line 639
    const/4 v5, 0x5

    aget v5, p1, v5

    int-to-long v0, v5

    move-wide/from16 v16, v0

    const-wide v18, 0xffffffffL

    and-long v16, v16, v18

    .line 640
    const/4 v5, 0x6

    aget v5, p1, v5

    int-to-long v0, v5

    move-wide/from16 v18, v0

    const-wide v20, 0xffffffffL

    and-long v18, v18, v20

    .line 642
    mul-long/2addr v6, v14

    add-long/2addr v2, v6

    .line 643
    long-to-int v5, v2

    .line 644
    const/4 v6, 0x3

    shl-int/lit8 v7, v5, 0x1

    or-int/2addr v4, v7

    aput v4, p1, v6

    .line 645
    ushr-int/lit8 v4, v5, 0x1f

    .line 646
    const/16 v5, 0x20

    ushr-long/2addr v2, v5

    mul-long v6, v14, v8

    add-long/2addr v2, v6

    add-long/2addr v2, v12

    .line 647
    const/16 v5, 0x20

    ushr-long v6, v2, v5

    mul-long v8, v14, v10

    add-long/2addr v6, v8

    add-long v6, v6, v16

    .line 648
    const/16 v5, 0x20

    ushr-long v8, v6, v5

    add-long v8, v8, v18

    .line 649
    const-wide v10, 0xffffffffL

    and-long/2addr v6, v10

    .line 652
    long-to-int v2, v2

    .line 653
    const/4 v3, 0x4

    shl-int/lit8 v5, v2, 0x1

    or-int/2addr v4, v5

    aput v4, p1, v3

    .line 654
    ushr-int/lit8 v2, v2, 0x1f

    .line 655
    long-to-int v3, v6

    .line 656
    const/4 v4, 0x5

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p1, v4

    .line 657
    ushr-int/lit8 v2, v3, 0x1f

    .line 658
    long-to-int v3, v8

    .line 659
    const/4 v4, 0x6

    shl-int/lit8 v5, v3, 0x1

    or-int/2addr v2, v5

    aput v2, p1, v4

    .line 660
    ushr-int/lit8 v2, v3, 0x1f

    .line 661
    const/4 v3, 0x7

    aget v3, p1, v3

    const/16 v4, 0x20

    shr-long v4, v8, v4

    long-to-int v4, v4

    add-int/2addr v3, v4

    .line 662
    const/4 v4, 0x7

    shl-int/lit8 v3, v3, 0x1

    or-int/2addr v2, v3

    aput v2, p1, v4

    .line 663
    return-void

    :cond_129
    move v5, v3

    move v3, v4

    goto/16 :goto_10
.end method

.method public static sub([II[II[II)I
    .registers 15

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p0, p1

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p2, p3

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 763
    long-to-int v2, v0

    aput v2, p4, p5

    .line 764
    shr-long/2addr v0, v8

    .line 765
    add-int/lit8 v2, p1, 0x1

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x1

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 766
    add-int/lit8 v2, p5, 0x1

    long-to-int v3, v0

    aput v3, p4, v2

    .line 767
    shr-long/2addr v0, v8

    .line 768
    add-int/lit8 v2, p1, 0x2

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x2

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 769
    add-int/lit8 v2, p5, 0x2

    long-to-int v3, v0

    aput v3, p4, v2

    .line 770
    shr-long/2addr v0, v8

    .line 771
    add-int/lit8 v2, p1, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p3, 0x3

    aget v4, p2, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 772
    add-int/lit8 v2, p5, 0x3

    long-to-int v3, v0

    aput v3, p4, v2

    .line 773
    shr-long/2addr v0, v8

    .line 774
    long-to-int v0, v0

    return v0
.end method

.method public static sub([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p0, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 745
    long-to-int v2, v0

    aput v2, p2, v9

    .line 746
    shr-long/2addr v0, v8

    .line 747
    aget v2, p0, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 748
    long-to-int v2, v0

    aput v2, p2, v10

    .line 749
    shr-long/2addr v0, v8

    .line 750
    aget v2, p0, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 751
    long-to-int v2, v0

    aput v2, p2, v11

    .line 752
    shr-long/2addr v0, v8

    .line 753
    const/4 v2, 0x3

    aget v2, p0, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p1, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 754
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 755
    shr-long/2addr v0, v8

    .line 756
    long-to-int v0, v0

    return v0
.end method

.method public static subBothFrom([I[I[I)I
    .registers 15

    .prologue
    const/4 v11, 0x3

    const/4 v10, 0x2

    const/4 v9, 0x1

    const/4 v8, 0x0

    const-wide v6, 0xffffffffL

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

    aget v2, p2, v8

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v8

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v8

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 781
    long-to-int v2, v0

    aput v2, p2, v8

    .line 782
    const/16 v2, 0x20

    shr-long/2addr v0, v2

    .line 783
    aget v2, p2, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 784
    long-to-int v2, v0

    aput v2, p2, v9

    .line 785
    const/16 v2, 0x20

    shr-long/2addr v0, v2

    .line 786
    aget v2, p2, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 787
    long-to-int v2, v0

    aput v2, p2, v10

    .line 788
    const/16 v2, 0x20

    shr-long/2addr v0, v2

    .line 789
    aget v2, p2, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    aget v4, p1, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 790
    long-to-int v2, v0

    aput v2, p2, v11

    .line 791
    const/16 v2, 0x20

    shr-long/2addr v0, v2

    .line 792
    long-to-int v0, v0

    return v0
.end method

.method public static subFrom([II[II)I
    .registers 13

    .prologue
    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p2, p3

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, p1

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 817
    long-to-int v2, v0

    aput v2, p2, p3

    .line 818
    shr-long/2addr v0, v8

    .line 819
    add-int/lit8 v2, p3, 0x1

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x1

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 820
    add-int/lit8 v2, p3, 0x1

    long-to-int v3, v0

    aput v3, p2, v2

    .line 821
    shr-long/2addr v0, v8

    .line 822
    add-int/lit8 v2, p3, 0x2

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x2

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 823
    add-int/lit8 v2, p3, 0x2

    long-to-int v3, v0

    aput v3, p2, v2

    .line 824
    shr-long/2addr v0, v8

    .line 825
    add-int/lit8 v2, p3, 0x3

    aget v2, p2, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    add-int/lit8 v4, p1, 0x3

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 826
    add-int/lit8 v2, p3, 0x3

    long-to-int v3, v0

    aput v3, p2, v2

    .line 827
    shr-long/2addr v0, v8

    .line 828
    long-to-int v0, v0

    return v0
.end method

.method public static subFrom([I[I)I
    .registers 14

    .prologue
    const/4 v11, 0x2

    const/4 v10, 0x1

    const/4 v9, 0x0

    const/16 v8, 0x20

    const-wide v6, 0xffffffffL

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

    aget v2, p1, v9

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v9

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 799
    long-to-int v2, v0

    aput v2, p1, v9

    .line 800
    shr-long/2addr v0, v8

    .line 801
    aget v2, p1, v10

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v10

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 802
    long-to-int v2, v0

    aput v2, p1, v10

    .line 803
    shr-long/2addr v0, v8

    .line 804
    aget v2, p1, v11

    int-to-long v2, v2

    and-long/2addr v2, v6

    aget v4, p0, v11

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 805
    long-to-int v2, v0

    aput v2, p1, v11

    .line 806
    shr-long/2addr v0, v8

    .line 807
    const/4 v2, 0x3

    aget v2, p1, v2

    int-to-long v2, v2

    and-long/2addr v2, v6

    const/4 v4, 0x3

    aget v4, p0, v4

    int-to-long v4, v4

    and-long/2addr v4, v6

    sub-long/2addr v2, v4

    add-long/2addr v0, v2

    .line 808
    const/4 v2, 0x3

    long-to-int v3, v0

    aput v3, p1, v2

    .line 809
    shr-long/2addr v0, v8

    .line 810
    long-to-int v0, v0

    return v0
.end method

.method public static toBigInteger([I)Ljava/math/BigInteger;
    .registers 5

    .prologue
    .line 833
    const/16 v0, 0x10

    new-array v1, v0, [B

    .line 834
    const/4 v0, 0x0

    :goto_5
    const/4 v2, 0x4

    if-ge v0, v2, :cond_16

    .line 836
    aget v2, p0, v0

    .line 837
    if-eqz v2, :cond_13

    .line 839
    rsub-int/lit8 v3, v0, 0x3

    shl-int/lit8 v3, v3, 0x2

    invoke-static {v2, v1, v3}, Lorg/spongycastle/util/Pack;->intToBigEndian(I[BI)V

    .line 834
    :cond_13
    add-int/lit8 v0, v0, 0x1

    goto :goto_5

    .line 842
    :cond_16
    new-instance v0, Ljava/math/BigInteger;

    const/4 v2, 0x1

    invoke-direct {v0, v2, v1}, Ljava/math/BigInteger;-><init>(I[B)V

    return-object v0
.end method

.method public static toBigInteger64([J)Ljava/math/BigInteger;
    .registers 7

    .prologue
    .line 847
    const/16 v0, 0x10

    new-array v1, v0, [B

    .line 848
    const/4 v0, 0x0

    :goto_5
    const/4 v2, 0x2

    if-ge v0, v2, :cond_1a

    .line 850
    aget-wide v2, p0, v0

    .line 851
    const-wide/16 v4, 0x0

    cmp-long v4, v2, v4

    if-eqz v4, :cond_17

    .line 853
    rsub-int/lit8 v4, v0, 0x1

    shl-int/lit8 v4, v4, 0x3

    invoke-static {v2, v3, v1, v4}, Lorg/spongycastle/util/Pack;->longToBigEndian(J[BI)V

    .line 848
    :cond_17
    add-int/lit8 v0, v0, 0x1

    goto :goto_5

    .line 856
    :cond_1a
    new-instance v0, Ljava/math/BigInteger;

    const/4 v2, 0x1

    invoke-direct {v0, v2, v1}, Ljava/math/BigInteger;-><init>(I[B)V

    return-object v0
.end method

.method public static zero([I)V
    .registers 3

    .prologue
    const/4 v1, 0x0

    .line 861
    aput v1, p0, v1

    .line 862
    const/4 v0, 0x1

    aput v1, p0, v0

    .line 863
    const/4 v0, 0x2

    aput v1, p0, v0

    .line 864
    const/4 v0, 0x3

    aput v1, p0, v0

    .line 865
    return-void
.end method