// Path: src/main/java/gov/nasa/jpf/constraints/casts/CastOperation.java
// public interface CastOperation<F, T> {
// 	public Class<F> getFromClass();
// 	public Class<T> getToClass();
// 	
// 	public T cast(F from);
// }
// 
// Path: src/main/java/gov/nasa/jpf/constraints/casts/NumericCastOperation.java
// public abstract class NumericCastOperation<T extends Number> implements CastOperation<Number,T> {
// 	
// 	private final Class<T> toClass;
// 	
// 	public NumericCastOperation(Class<T> toClass) {
// 		this.toClass = toClass;
// 	}
// 	
// 	public static final NumericCastOperation<Byte> TO_SINT8 = new NumericCastOperation<Byte>(Byte.class) {
// 		@Override
// 		public Byte cast(Number from) {
// 			return from.byteValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Short> TO_SINT16 = new NumericCastOperation<Short>(Short.class) {
// 		@Override
// 		public Short cast(Number from) {
// 			return from.shortValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Integer> TO_SINT32 = new NumericCastOperation<Integer>(Integer.class) {
// 		@Override
// 		public Integer cast(Number from) {
// 			return from.intValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Long> TO_SINT64 = new NumericCastOperation<Long>(Long.class) {
// 		@Override
// 		public Long cast(Number from) {
// 			return from.longValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Float> TO_FLOAT = new NumericCastOperation<Float>(Float.class) {
// 		@Override
// 		public Float cast(Number from) {
// 			return from.floatValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Double> TO_DOUBLE = new NumericCastOperation<Double>(Double.class) {
// 		@Override
// 		public Double cast(Number from) {
// 			return from.doubleValue();
// 		}
// 	};
// 	
// 	public static final NumericCastOperation<BigInteger> TO_INTEGER = new NumericCastOperation<BigInteger>(BigInteger.class) {
//     @Override
//     public BigInteger cast(Number from) {
//       Class<?> clazz = from.getClass();
//       if(clazz == BigInteger.class)
//         return (BigInteger)from;
//       if(clazz == BigDecimal.class)
//         return ((BigDecimal)from).toBigInteger();
//       else if(clazz == Double.class || clazz == Float.class)
//         return BigDecimal.valueOf(from.doubleValue()).toBigInteger();
//       return BigInteger.valueOf(from.longValue());
//     }
// 	};
// 	
// 	public static final NumericCastOperation<BigDecimal> TO_DECIMAL = new NumericCastOperation<BigDecimal>(BigDecimal.class) {
//     @Override
//     public BigDecimal cast(Number from) {
//       Class<?> clazz = from.getClass();
//       if(clazz == BigDecimal.class)
//         return (BigDecimal)from;
//       if(clazz == BigInteger.class)
//         return new BigDecimal((BigInteger)from);
//       if(clazz == Long.class)
//         return new BigDecimal(from.longValue());
//       return new BigDecimal(from.doubleValue());
//     }
// 	};
// 	
// 	public Class<Number> getFromClass() {
// 		return Number.class;
// 	}
// 	
// 	public Class<T> getToClass() {
// 		return toClass;
// 	}
// 	
// }


import gov.nasa.jpf.constraints.casts.CastOperation;
import gov.nasa.jpf.constraints.casts.NumericCastOperation;
import java.math.BigDecimal;
import java.math.BigInteger;

    @Override
    public Byte mul(Byte left, Byte right) {
      return (byte)(left * right);
    }

    @Override
    public Byte div(Byte left, Byte right) {
      return (byte)(left / right);
    }

    @Override
    public Byte mod(Byte left, Byte right) {
      return (byte)(left % right);
    }

    @Override
    public BigInteger integerValue(Byte value) {
      return BigInteger.valueOf(value.intValue());
    }

    @Override
    public Byte cast(Object other) {
      if(other instanceof Number)
        return ((Number)other).byteValue();
      throw new ClassCastException();
    }
    
    @Override
    @SuppressWarnings("unchecked")
// Path: src/main/java/gov/nasa/jpf/constraints/casts/CastOperation.java
// public interface CastOperation<F, T> {
// 	public Class<F> getFromClass();
// 	public Class<T> getToClass();
// 	
// 	public T cast(F from);
// }
// 
// Path: src/main/java/gov/nasa/jpf/constraints/casts/NumericCastOperation.java
// public abstract class NumericCastOperation<T extends Number> implements CastOperation<Number,T> {
// 	
// 	private final Class<T> toClass;
// 	
// 	public NumericCastOperation(Class<T> toClass) {
// 		this.toClass = toClass;
// 	}
// 	
// 	public static final NumericCastOperation<Byte> TO_SINT8 = new NumericCastOperation<Byte>(Byte.class) {
// 		@Override
// 		public Byte cast(Number from) {
// 			return from.byteValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Short> TO_SINT16 = new NumericCastOperation<Short>(Short.class) {
// 		@Override
// 		public Short cast(Number from) {
// 			return from.shortValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Integer> TO_SINT32 = new NumericCastOperation<Integer>(Integer.class) {
// 		@Override
// 		public Integer cast(Number from) {
// 			return from.intValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Long> TO_SINT64 = new NumericCastOperation<Long>(Long.class) {
// 		@Override
// 		public Long cast(Number from) {
// 			return from.longValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Float> TO_FLOAT = new NumericCastOperation<Float>(Float.class) {
// 		@Override
// 		public Float cast(Number from) {
// 			return from.floatValue();
// 		}
// 	};
// 	public static final NumericCastOperation<Double> TO_DOUBLE = new NumericCastOperation<Double>(Double.class) {
// 		@Override
// 		public Double cast(Number from) {
// 			return from.doubleValue();
// 		}
// 	};
// 	
// 	public static final NumericCastOperation<BigInteger> TO_INTEGER = new NumericCastOperation<BigInteger>(BigInteger.class) {
//     @Override
//     public BigInteger cast(Number from) {
//       Class<?> clazz = from.getClass();
//       if(clazz == BigInteger.class)
//         return (BigInteger)from;
//       if(clazz == BigDecimal.class)
//         return ((BigDecimal)from).toBigInteger();
//       else if(clazz == Double.class || clazz == Float.class)
//         return BigDecimal.valueOf(from.doubleValue()).toBigInteger();
//       return BigInteger.valueOf(from.longValue());
//     }
// 	};
// 	
// 	public static final NumericCastOperation<BigDecimal> TO_DECIMAL = new NumericCastOperation<BigDecimal>(BigDecimal.class) {
//     @Override
//     public BigDecimal cast(Number from) {
//       Class<?> clazz = from.getClass();
//       if(clazz == BigDecimal.class)
//         return (BigDecimal)from;
//       if(clazz == BigInteger.class)
//         return new BigDecimal((BigInteger)from);
//       if(clazz == Long.class)
//         return new BigDecimal(from.longValue());
//       return new BigDecimal(from.doubleValue());
//     }
// 	};
// 	
// 	public Class<Number> getFromClass() {
// 		return Number.class;
// 	}
// 	
// 	public Class<T> getToClass() {
// 		return toClass;
// 	}
// 	
// }


// Path: src/main/java/gov/nasa/jpf/constraints/types/BuiltinTypes.java
import gov.nasa.jpf.constraints.casts.CastOperation;
import gov.nasa.jpf.constraints.casts.NumericCastOperation;
import java.math.BigDecimal;
import java.math.BigInteger;


    @Override
    public Byte mul(Byte left, Byte right) {
      return (byte)(left * right);
    }

    @Override
    public Byte div(Byte left, Byte right) {
      return (byte)(left / right);
    }

    @Override
    public Byte mod(Byte left, Byte right) {
      return (byte)(left % right);
    }

    @Override
    public BigInteger integerValue(Byte value) {
      return BigInteger.valueOf(value.intValue());
    }

    @Override
    public Byte cast(Object other) {
      if(other instanceof Number)
        return ((Number)other).byteValue();
      throw new ClassCastException();
    }
    
    @Override
    @SuppressWarnings("unchecked")
    protected <O> CastOperation<? super O, ? extends Byte> castFrom(