class JacobianPoint {

  JacobianPoint toAffine() {
    if (isInfinity()) {
      return INFINITY;
    }
    FP2Immutable zInv = z.inverse();
    FP2Immutable z2Inv = zInv.sqr();
    FP2Immutable z3Inv = zInv.mul(z2Inv);
    return new JacobianPoint(x.mul(z2Inv), y.mul(z3Inv), FP2Immutable.ONE);
  }

    JacobianPoint();
    JacobianPoint(JacobianPoint p);
    JacobianPoint(FP2Immutable x, FP2Immutable y, FP2Immutable z);
    JacobianPoint(ECP2 p);

}