// Path: src/main/java/com/shapesecurity/functional/data/HashCodeBuilder.java
// @CheckReturnValue
// public final class HashCodeBuilder {
//     //int is a 32 bit integer
//     private static final int INITIAL_VALUE = -2128831035;
//     private static final int MULT = 16777619;
//     private static final int NULL_SIGIL = -1150993239;
// 
//     public static int init() {
//         return INITIAL_VALUE;
//     }
// 
//     public static int put(int hash, @Nullable Object os) {
//         int p = os == null ? NULL_SIGIL : os.hashCode();
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         return hash;
//     }
// 
//     public static int putChar(int hash, char p) {
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         return hash;
//     }
// }


import com.shapesecurity.functional.data.HashCodeBuilder;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;
        this.b = b;
        this.c = c;
    }

    @Nonnull
    public <A1> Tuple3<A1, B, C> mapA(@Nonnull F<A, A1> f) {
        return new Tuple3<>(f.apply(this.a), this.b, this.c);
    }

    @Nonnull
    public <B1> Tuple3<A, B1, C> mapB(@Nonnull F<B, B1> f) {
        return new Tuple3<>(this.a, f.apply(this.b), this.c);
    }

    @Nonnull
    public <C1> Tuple3<A, B, C1> mapC(@Nonnull F<C, C1> f) {
        return new Tuple3<>(this.a, this.b, f.apply(this.c));
    }

    @SuppressWarnings("unchecked")
    @Override
    public boolean equals(Object obj) {
        return obj == this || obj instanceof Tuple3 &&
                ((Tuple3<A, B, C>) obj).a.equals(this.a) &&
                ((Tuple3<A, B, C>) obj).b.equals(this.b) &&
                ((Tuple3<A, B, C>) obj).c.equals(this.c);
    }

    @Override
    public int hashCode() {
// Path: src/main/java/com/shapesecurity/functional/data/HashCodeBuilder.java
// @CheckReturnValue
// public final class HashCodeBuilder {
//     //int is a 32 bit integer
//     private static final int INITIAL_VALUE = -2128831035;
//     private static final int MULT = 16777619;
//     private static final int NULL_SIGIL = -1150993239;
// 
//     public static int init() {
//         return INITIAL_VALUE;
//     }
// 
//     public static int put(int hash, @Nullable Object os) {
//         int p = os == null ? NULL_SIGIL : os.hashCode();
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         return hash;
//     }
// 
//     public static int putChar(int hash, char p) {
//         hash = hash * MULT ^ (p & 255);
//         p >>>= 8;
//         hash = hash * MULT ^ (p & 255);
//         return hash;
//     }
// }


// Path: src/main/java/com/shapesecurity/functional/Tuple3.java
import com.shapesecurity.functional.data.HashCodeBuilder;
import javax.annotation.CheckReturnValue;
import javax.annotation.Nonnull;

        this.b = b;
        this.c = c;
    }

    @Nonnull
    public <A1> Tuple3<A1, B, C> mapA(@Nonnull F<A, A1> f) {
        return new Tuple3<>(f.apply(this.a), this.b, this.c);
    }

    @Nonnull
    public <B1> Tuple3<A, B1, C> mapB(@Nonnull F<B, B1> f) {
        return new Tuple3<>(this.a, f.apply(this.b), this.c);
    }

    @Nonnull
    public <C1> Tuple3<A, B, C1> mapC(@Nonnull F<C, C1> f) {
        return new Tuple3<>(this.a, this.b, f.apply(this.c));
    }

    @SuppressWarnings("unchecked")
    @Override
    public boolean equals(Object obj) {
        return obj == this || obj instanceof Tuple3 &&
                ((Tuple3<A, B, C>) obj).a.equals(this.a) &&
                ((Tuple3<A, B, C>) obj).b.equals(this.b) &&
                ((Tuple3<A, B, C>) obj).c.equals(this.c);
    }

    @Override
    public int hashCode() {
        int hash = HashCodeBuilder.put(HashCodeBuilder.init(), "Tuple3");