public virtual AbstractF2mPoint TauPow(int pow)
    {
        if (base.IsInfinity)
        {
            return(this);
        }
        ECCurve        curve            = Curve;
        int            coordinateSystem = curve.CoordinateSystem;
        ECFieldElement rawXCoord        = base.RawXCoord;

        switch (coordinateSystem)
        {
        case 0:
        case 5:
        {
            ECFieldElement rawYCoord2 = base.RawYCoord;
            return((AbstractF2mPoint)curve.CreateRawPoint(rawXCoord.SquarePow(pow), rawYCoord2.SquarePow(pow), base.IsCompressed));
        }

        case 1:
        case 6:
        {
            ECFieldElement rawYCoord      = base.RawYCoord;
            ECFieldElement eCFieldElement = base.RawZCoords[0];
            return((AbstractF2mPoint)curve.CreateRawPoint(rawXCoord.SquarePow(pow), rawYCoord.SquarePow(pow), new ECFieldElement[1]
                {
                    eCFieldElement.SquarePow(pow)
                }, base.IsCompressed));
        }

        default:
            throw new InvalidOperationException("unsupported coordinate system");
        }
    }