
// Make newform 17.4.d.a in Magma, downloaded from the LMFDB on 23 April 2024.
// To make the character of type GrpDrchElt, type "MakeCharacter_17_d();"
// To make the character of type GrpDrchElt with Codomain the HeckeField, type "MakeCharacter_17_d_Hecke();"
// To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();"
// To make the newform (type ModFrm), type "MakeNewformModFrm_17_4_d_a();".
// This may take a long time!  To see verbose output, uncomment the SetVerbose lines below.
// The precision argument determines an initial guess on how many Fourier coefficients to use.
// This guess is increased enough to uniquely determine the newform.
// To make the Hecke irreducible modular symbols subspace (type ModSym)
// containing the newform, type "MakeNewformModSym_17_4_d_a();".
// This may take a long time!  To see verbose output, uncomment the SetVerbose line below.
// The default sign is -1.  You can change this with the optional parameter "sign".
function ConvertToHeckeField(input: pass_field := false, Kf := [])
    if not pass_field then
        poly := [16384, 0, 49664, 0, 38276, 0, 9836, 0, 1085, 0, 54, 0, 1];
        Kf := NumberField(Polynomial([elt : elt in poly]));
        AssignNames(~Kf, ["nu"]);
    end if;
    Rf_num := [[1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-2889728, -1741056, -4623456, -729732, -1728288, -73516, -268600, -1725, -17680, 10, -408, -1], [2889728, -1741056, 4623456, -729732, 1728288, -73516, 268600, -1725, 17680, 10, 408, -1], [2432, 0, 5498, 0, 3051, 0, 569, 0, 41, 0, 1, 0], [12462080, 17121536, 23023520, 20629572, 5701600, 5292396, 387400, 502765, 2800, 19350, -280, 241], [12462080, -17121536, 23023520, -20629572, 5701600, -5292396, 387400, -502765, 2800, -19350, -280, -241], [-5347328, -1301760, 1717664, -10989460, 2176992, -3460060, 459720, -386545, 34800, -18510, 872, -325], [5347328, -1301760, -1717664, -10989460, -2176992, -3460060, -459720, -386545, -34800, -18510, -872, -325], [0, 239872, 0, 336716, 0, 114052, 0, 15367, 0, 898, 0, 19], [2048, -361216, -211424, -577932, -86432, -216036, -7960, -33575, -80, -2210, 8, -51], [-2048, -361216, 211424, -577932, 86432, -216036, 7960, -33575, 80, -2210, -8, -51]];
    Rf_basisdens := [1, 1, 1392640, 1392640, 544, 1392640, 1392640, 1392640, 1392640, 69632, 174080, 174080];
    Rf_basisnums := ChangeUniverse([[z : z in elt] : elt in Rf_num], Kf);
    Rfbasis := [Rf_basisnums[i]/Rf_basisdens[i] : i in [1..Degree(Kf)]];
    inp_vec := Vector(Rfbasis)*ChangeRing(Transpose(Matrix([[elt : elt in row] : row in input])),Kf);
    return Eltseq(inp_vec);
end function;


// To make the character of type GrpDrchElt, type "MakeCharacter_17_d();"
function MakeCharacter_17_d()
    N := 17;
    order := 8;
    char_gens := [3];
    v := [7];
    // chi(gens[i]) = zeta^v[i]
    assert UnitGenerators(DirichletGroup(N)) eq char_gens;
    F := CyclotomicField(order);
    chi := DirichletCharacterFromValuesOnUnitGenerators(DirichletGroup(N,F),[F|F.1^e:e in v]);
    return MinimalBaseRingCharacter(chi);
end function;

// To make the character of type GrpDrchElt with Codomain the HeckeField, type "MakeCharacter_17_d_Hecke();"
function MakeCharacter_17_d_Hecke(Kf)
    N := 17;
    order := 8;
    char_gens := [3];
    char_values := [[0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0]];
    assert UnitGenerators(DirichletGroup(N)) eq char_gens;
    values := ConvertToHeckeField(char_values : pass_field := true, Kf := Kf); // the value of chi on the gens as elements in the Hecke field
    F := Universe(values);// the Hecke field
    chi := DirichletCharacterFromValuesOnUnitGenerators(DirichletGroup(N,F),values);
    return chi;
end function;


function ExtendMultiplicatively(weight, aps, character)
    prec := NextPrime(NthPrime(#aps)) - 1; // we will able to figure out a_0 ... a_prec
    primes := PrimesUpTo(prec);
    prime_powers := primes;
    assert #primes eq #aps;
    log_prec := Floor(Log(prec)/Log(2)); // prec < 2^(log_prec+1)
    F := Universe(aps);
    FXY<X, Y> := PolynomialRing(F, 2);
    // 1/(1 - a_p T + p^(weight - 1) * char(p) T^2) = 1 + a_p T + a_{p^2} T^2 + ...
    R<T> := PowerSeriesRing(FXY : Precision := log_prec + 1);
    recursion := Coefficients(1/(1 - X*T + Y*T^2));
    coeffs := [F!0: i in [1..(prec+1)]];
    coeffs[1] := 1; //a_1
    for i := 1 to #primes do
        p := primes[i];
        coeffs[p] := aps[i];
        b := p^(weight - 1) * F!character(p);
        r := 2;
        p_power := p * p;
        //deals with powers of p
        while p_power le prec do
            Append(~prime_powers, p_power);
            coeffs[p_power] := Evaluate(recursion[r + 1], [aps[i], b]);
            p_power *:= p;
            r +:= 1;
        end while;    
    end for;
    Sort(~prime_powers);
    for pp in prime_powers do
        for k := 1 to Floor(prec/pp) do
            if GCD(k, pp) eq 1 then
                coeffs[pp*k] := coeffs[pp]*coeffs[k];
            end if;
        end for;
    end for;
    return coeffs;
end function;


function qexpCoeffs()
    // To make the coeffs of the qexp of the newform in the Hecke field type "qexpCoeffs();"
    weight := 4;
    raw_aps := [[0, 0, 0, -1, 0, 0, 0, 0, 0, 0, -1, 0], [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], [-2, 0, -2, -1, -1, -1, 1, -1, 0, 1, 0, -1], [-2, 1, 0, 2, -2, 0, 2, 0, -2, 0, 2, -1], [2, -7, -8, 2, 1, 0, -1, -5, -1, -8, 1, -7], [0, 6, -11, -11, 0, 3, -3, 4, 4, 2, -6, -6], [12, -4, -6, -10, 1, -8, 4, -2, 1, -31, -15, 8], [-14, 19, 0, -16, -19, 3, -3, 3, -3, 14, 14, 0], [-20, 9, 24, -20, 24, 0, 0, 0, 0, 24, 24, 9], [51, 10, 51, -88, -3, 14, -9, 14, 0, 88, -10, -3], [6, 3, -6, 74, -4, -6, 0, 6, -14, 74, 3, 4], [98, -26, -98, 73, 15, 12, 0, -12, 9, 73, -26, -15], [-1, 21, 44, 1, -7, -12, -23, 0, 23, -44, 7, -21], [-136, 6, 116, 0, 6, -28, -1, -1, -28, -136, 0, -18], [0, -30, 0, 0, 0, 6, -6, -22, -22, -112, 52, 52], [29, -39, 0, -236, 39, 13, 40, -40, -13, -29, -58, 0], [-94, -54, -356, 0, -54, 14, 15, 15, 14, -94, 0, -110], [-54, 68, -51, 54, 85, -1, -29, 0, 29, 51, -85, -68], [144, 0, 128, -128, 50, 25, 25, -66, 66, 0, 35, -35], [-16, -43, 16, 50, -44, -42, 0, 42, -14, 50, -43, 44], [139, -5, 139, -42, 73, -41, 70, -41, 0, 42, 5, 73], [-42, 27, 6, -42, 6, 0, -64, -24, -64, 6, 6, 27], [-118, -16, 0, 272, 16, -19, -12, 12, 19, 118, 94, 0], [0, 96, -249, -249, 0, 21, -21, -53, -53, 194, 7, 7], [22, 104, 22, 331, 108, 75, -28, 75, 0, -331, -104, 108], [58, 0, 91, -91, 112, -68, -68, 149, -149, 0, -32, 32], [88, 0, -14, 14, 104, 70, 70, -58, 58, 0, -278, 278], [628, -59, 628, 228, -119, 52, -101, 52, 0, -228, 59, -119], [-204, 100, -611, 204, -173, -49, -5, 0, 5, 611, 173, -100], [-526, -243, 101, -526, 9, 0, 54, 8, 54, 101, 9, -243], [124, -131, 356, 0, -131, -72, 152, 152, -72, 124, 0, 124], [-164, 164, -164, 864, -194, -75, 261, -75, 0, -864, -164, -194], [18, 0, -519, 519, -18, -189, -189, 104, -104, 0, 128, -128], [284, -46, -284, -62, 306, 132, 0, -132, 219, -62, -46, -306], [0, -130, 700, 700, 0, -59, 59, 117, 117, -1100, -52, -52], [-438, 111, 0, 552, -111, 8, -220, 220, -8, 438, -172, 0], [0, -270, -796, -796, 0, -17, 17, 51, 51, -624, 0, 0], [36, 271, -6, -36, 37, 159, 70, 0, -70, 6, -37, -271], [728, -91, -728, -486, 54, -96, 0, 96, -268, -486, -91, -54], [-505, 52, 505, 664, -301, -21, 0, 21, -217, 664, 52, 301], [-844, -145, 748, 0, -145, -109, 155, 155, -109, -844, 0, 114], [-98, 552, 347, -98, 105, 0, 82, 83, 82, 347, 105, 552], [0, 186, 470, 470, 0, 424, -424, 24, 24, 1600, 110, 110], [-321, -245, 664, -321, -667, 0, -83, 128, -83, 664, -667, -245], [-89, -26, -432, 89, -25, -119, -282, 0, 282, 432, 25, 26], [1360, -207, 1360, -184, 560, -232, 80, -232, 0, 184, 207, 560], [114, -324, 634, -114, 178, -209, 201, 0, -201, -634, -178, 324], [-918, -477, 0, -752, 477, -64, -64, 64, 64, 918, 432, 0], [-2082, 92, 128, -2082, -154, 0, -94, -111, -94, 128, -154, 92], [-1104, -337, -286, 0, -337, 6, -240, -240, 6, -1104, 0, -234], [552, -208, 552, -465, -216, 103, 58, 103, 0, 465, 208, -216], [-1944, 0, -470, 470, 176, 152, 152, 20, -20, 0, 530, -530], [1349, -144, -1349, 1564, 216, 192, 0, -192, 312, 1564, -144, -216], [0, 528, -46, -46, 0, 6, -6, -245, -245, -2228, -47, -47], [2138, -46, 0, -1542, 46, -153, -62, 62, 153, -2138, 232, 0], [490, 697, -3416, 0, 697, 70, 168, 168, 70, 490, 0, 756], [964, -988, -964, 957, 447, 598, 0, -598, 377, 957, -988, -447], [1276, 0, 702, -702, -276, -236, -236, -28, 28, 0, 10, -10], [-1629, -390, -1629, -1244, -683, 238, 467, 238, 0, 1244, 390, -683], [-1293, 365, 404, 0, 365, -271, -416, -416, -271, -1293, 0, -256], [614, -91, -1164, 614, 567, 0, -3, 85, -3, -1164, 567, -91], [0, -462, 1058, 1058, 0, -696, 696, -186, -186, 1302, -216, -216], [480, 0, 438, -438, 680, 106, 106, 380, -380, 0, -92, 92], [232, -99, 232, 378, -578, -480, -28, -480, 0, -378, 99, -578], [-1787, -468, -560, 1787, -704, -160, 92, 0, -92, 560, 704, 468], [-1013, -152, 1970, -1013, 305, 0, -275, -163, -275, 1970, 305, -152], [2204, 8, 1376, 0, 8, 358, -477, -477, 358, 2204, 0, 106], [1167, 507, -1167, 492, -55, -159, 0, 159, 474, 492, 507, 55], [2730, -482, 944, -2730, 268, 1089, -573, 0, 573, -944, -268, 482], [541, -899, -2396, 0, -899, 556, 443, 443, 556, 541, 0, 558], [0, 552, 4656, 4656, 0, -492, 492, -225, -225, 1270, -123, -123], [798, 1013, 0, -1420, -1013, -334, -192, 192, 334, -798, -312, 0], [558, 497, 788, -558, -36, -838, -106, 0, 106, -788, 36, -497], [-3746, 0, -1663, 1663, 444, -228, -228, 229, -229, 0, 1078, -1078], [-46, 876, -46, 2202, 1074, -109, 321, -109, 0, -2202, -876, 1074], [2290, 91, -2172, 0, 91, 302, 262, 262, 302, 2290, 0, -1052], [-2914, 921, 0, -512, -921, 279, -279, 279, -279, 2914, 1926, 0], [1760, -598, -2029, 1760, -877, 0, 534, -495, 534, -2029, -877, -598], [3833, 608, -182, -3833, 990, 652, -186, 0, 186, 182, -990, -608], [1016, 0, 124, -124, -1990, -28, -28, -645, 645, 0, 643, -643], [1968, 312, 2416, 1968, -568, 0, -748, 1257, -748, 2416, -568, 312], [0, 322, 3079, 3079, 0, -593, 593, -252, -252, 3158, 1500, 1500], [-1326, -1197, -6414, -1326, -554, 0, 296, 516, 296, -6414, -554, -1197], [-1470, -91, 6348, 0, -91, -474, -188, -188, -474, -1470, 0, -876], [-3134, -447, 3134, -3252, 972, 832, 0, -832, 350, -3252, -447, -972], [-5864, 0, -952, 952, -1330, -493, -493, 674, -674, 0, -467, 467], [134, 1620, -2655, -134, 110, -378, -785, 0, 785, 2655, -110, -1620], [1352, -1105, 0, -1458, 1105, 1009, 107, -107, -1009, -1352, 1772, 0], [6699, -509, 0, 2032, 509, -181, 342, -342, 181, -6699, 174, 0], [0, 1654, 5162, 5162, 0, -128, 128, 606, 606, -4148, 1460, 1460], [124, -1201, -2796, 0, -1201, -39, -411, -411, -39, 124, 0, 1262], [98, 83, -98, -4894, 1818, 88, 0, -88, -832, -4894, 83, -1818], [5872, -1877, -4126, 5872, 366, 0, 560, 226, 560, -4126, 366, -1877], [-4706, -289, 0, 1016, 289, 507, -711, 711, -507, 4706, -1162, 0], [-1346, 1543, 2966, -1346, 1127, 0, 823, -1507, 823, 2966, 1127, 1543], [5128, 333, -4090, -5128, 320, 662, -664, 0, 664, 4090, -320, -333], [3316, 0, -458, 458, 316, -641, -641, -5, 5, 0, -2204, 2204], [469, -848, 2704, 469, 944, 0, 1300, 24, 1300, 2704, 944, -848], [0, 2672, -3470, -3470, 0, 250, -250, 911, 911, 7436, 1509, 1509], [568, -288, -568, 6201, -1811, -460, 0, 460, -565, 6201, -288, 1811], [518, 1012, -518, -2194, -212, 1030, 0, -1030, -1291, -2194, 1012, 212], [0, -10, 4639, 4639, 0, 1251, -1251, 978, 978, 1422, -1466, -1466], [-1236, 512, 0, -2260, -512, 351, -120, 120, -351, 1236, 2338, 0], [-7403, -502, -1580, 0, -502, -238, -52, -52, -238, -7403, 0, -288], [-6358, -356, -6458, 6358, -902, -301, -315, 0, 315, 6458, 902, 356], [4422, 0, 921, -921, 536, 2072, 2072, -1041, 1041, 0, -1044, 1044], [-196, 2469, 6384, 0, 2469, 270, 1642, 1642, 270, -196, 0, -168], [8211, 32, 0, -6080, -32, 320, -102, 102, -320, -8211, -3324, 0], [0, -514, 4726, 4726, 0, -1094, 1094, -1144, -1144, 7696, -1572, -1572], [499, -959, -5582, 499, 341, 0, -1415, -1096, -1415, -5582, 341, -959], [1700, 1249, 1700, -2820, -1750, 796, -198, 796, 0, 2820, -1249, -1750], [6906, 0, -2656, 2656, -1996, 784, 784, 982, -982, 0, 1034, -1034], [502, -339, 502, -7615, 1357, 280, -2358, 280, 0, 7615, 339, 1357], [1284, 667, 6658, -1284, 2087, -119, 150, 0, -150, -6658, -2087, -667], [3364, -2771, 0, -2568, 2771, 1760, -716, 716, -1760, -3364, -948, 0], [-6508, -1345, -6508, -3639, -699, -426, 1006, -426, 0, 3639, 1345, -699], [-7806, 507, 7806, 2006, -1373, 1035, 0, -1035, -597, 2006, 507, 1373], [-12988, 0, 2802, -2802, -676, -480, -480, -1012, 1012, 0, -202, 202], [-313, -1444, -3798, 313, 2167, -363, -330, 0, 330, 3798, -2167, 1444], [0, -2514, -4200, -4200, 0, -2946, 2946, -530, -530, -3736, 156, 156], [-1023, -1673, 0, -3888, 1673, -51, -1078, 1078, 51, 1023, 758, 0], [1194, 123, 2351, -1194, -311, -578, 44, 0, -44, -2351, 311, -123], [931, 3632, -931, 6670, 405, 1641, 0, -1641, -253, 6670, 3632, -405], [2036, -2717, -2036, -7484, -1977, 1225, 0, -1225, -349, -7484, -2717, 1977], [6034, 505, 4916, 6034, -2257, 0, -471, 341, -471, 4916, -2257, 505], [0, -1834, -4729, -4729, 0, 763, -763, 2550, 2550, 2406, -698, -698], [-4145, -1844, -4145, 3318, 3299, 982, -207, 982, 0, -3318, 1844, 3299], [2888, 3303, 2888, 2890, 4478, 974, -402, 974, 0, -2890, -3303, 4478], [0, -1662, -3368, -3368, 0, -80, 80, -12, -12, -6204, -340, -340], [4737, -4097, 0, 1752, 4097, -423, 2254, -2254, 423, -4737, -1106, 0], [5896, 1725, -2744, 0, 1725, 2126, -1254, -1254, 2126, 5896, 0, -3488], [5204, -23, 5204, 700, -122, 1060, -2066, 1060, 0, -700, 23, -122], [-588, -31, 588, -3522, 708, -1514, 0, 1514, -3774, -3522, -31, -708], [-3420, -1795, -6142, 0, -1795, -4254, -250, -250, -4254, -3420, 0, -166], [0, 4708, 8205, 8205, 0, 254, -254, -1007, -1007, -890, 3912, 3912], [0, -76, -6865, -6865, 0, 762, -762, -1313, -1313, -3870, 528, 528], [-8374, 3885, 12912, 0, 3885, 183, 1579, 1579, 183, -8374, 0, 2866], [4120, -1825, 4120, 14798, -5055, -370, -1437, -370, 0, -14798, 1825, -5055], [-5357, 123, 0, 1908, -123, -1655, -2124, 2124, 1655, 5357, -718, 0], [318, 1948, 1517, -318, -4622, 602, -1137, 0, 1137, -1517, 4622, -1948], [-1606, 1591, -1606, 10596, -2539, -400, 471, -400, 0, -10596, -1591, -2539], [5411, -1842, 5411, -3160, -1885, -2114, 3689, -2114, 0, 3160, 1842, -1885], [14402, -4727, -2294, -14402, 588, 2592, -1142, 0, 1142, 2294, -588, 4727], [10690, -2684, -5326, 10690, -144, 0, 102, -3067, 102, -5326, -144, -2684], [0, 98, 2948, 2948, 0, 2297, -2297, 2007, 2007, -9328, -3274, -3274], [16764, 4475, 4990, 16764, 3496, 0, -546, -932, -546, 4990, 3496, 4475], [-4780, 3208, 4780, 10321, 2667, -1266, 0, 1266, -151, 10321, 3208, -2667], [-15837, -953, -9828, 15837, -1427, -4074, 1875, 0, -1875, 9828, 1427, 953], [-2322, -2808, -352, 0, -2808, 3556, 1423, 1423, 3556, -2322, 0, -650], [0, 1766, -3410, -3410, 0, 1150, -1150, 1052, 1052, 2760, -2948, -2948], [-1690, 1794, -1043, 1690, -1215, -263, 2473, 0, -2473, 1043, 1215, -1794], [12181, -3252, -12181, -6338, 1554, 42, 0, -42, -644, -6338, -3252, -1554], [-16920, 0, 122, -122, -1282, 1937, 1937, -500, 500, 0, -1085, 1085], [-3588, 2461, 3588, -1832, -1032, 804, 0, -804, 2748, -1832, 2461, 1032], [-1862, 3569, -1000, -1862, -981, 0, 721, 1377, 721, -1000, -981, 3569], [-8576, -5213, 2010, 8576, -92, -4076, -722, 0, 722, -2010, 92, 5213], [-12632, 0, -9324, 9324, 756, -448, -448, 2688, -2688, 0, -2048, 2048], [-9641, 2297, -5270, -9641, -3551, 0, -1103, 3392, -1103, -5270, -3551, 2297], [4673, -957, 0, 40, 957, 655, -656, 656, -655, -4673, 134, 0], [14519, -1316, 2134, 14519, -1575, 0, 2881, -1651, 2881, 2134, -1575, -1316], [4500, -781, 4500, -2762, 1271, 86, 2237, 86, 0, 2762, 781, 1271], [16754, 0, -1963, 1963, 4558, -1503, -1503, -3105, 3105, 0, -1439, 1439], [-8876, 2253, 0, 7436, -2253, 226, -2954, 2954, -226, 8876, 12, 0], [-7320, -3204, 0, 3368, 3204, -2479, -442, 442, 2479, 7320, 6218, 0], [-5077, 2092, -328, 0, 2092, 2688, -1086, -1086, 2688, -5077, 0, -5792], [-13530, -453, 13530, -3100, -1154, -854, 0, 854, -5658, -3100, -453, 1154], [-5166, -1415, -5166, -9564, 2224, 2874, -770, 2874, 0, 9564, 1415, 2224], [-3781, 2974, 13280, -3781, 3027, 0, 1319, 967, 1319, 13280, 3027, 2974]];
    aps := ConvertToHeckeField(raw_aps);
    chi := MakeCharacter_17_d_Hecke(Universe(aps));
    return ExtendMultiplicatively(weight, aps, chi);
end function;


// To make the newform (type ModFrm), type "MakeNewformModFrm_17_4_d_a();".
// This may take a long time!  To see verbose output, uncomment the SetVerbose lines below.
// The precision argument determines an initial guess on how many Fourier coefficients to use.
// This guess is increased enough to uniquely determine the newform.
function MakeNewformModFrm_17_4_d_a(:prec:=12)
    chi := MakeCharacter_17_d();
    f_vec := qexpCoeffs();
    Kf := Universe(f_vec);
    // SetVerbose("ModularForms", true);
    // SetVerbose("ModularSymbols", true);
    S := CuspidalSubspace(ModularForms(chi, 4));
    S := BaseChange(S, Kf);
    maxprec := NextPrime(997) - 1;
    while true do
        trunc_vec := Vector(Kf, [0] cat [f_vec[i]: i in [1..prec]]);
        B := Basis(S, prec + 1);
        S_basismat := Matrix([AbsEltseq(g): g in B]);
        if Rank(S_basismat) eq Min(NumberOfRows(S_basismat), NumberOfColumns(S_basismat)) then
            S_basismat := ChangeRing(S_basismat,Kf);
            f_lincom := Solution(S_basismat,trunc_vec);
            f := &+[f_lincom[i]*Basis(S)[i] : i in [1..#Basis(S)]];
            return f;
        end if;
        error if prec eq maxprec, "Unable to distinguish newform within newspace";
        prec := Min(Ceiling(1.25 * prec), maxprec);
    end while;
end function;


// To make the Hecke irreducible modular symbols subspace (type ModSym)
// containing the newform, type "MakeNewformModSym_17_4_d_a();".
// This may take a long time!  To see verbose output, uncomment the SetVerbose line below.
// The default sign is -1.  You can change this with the optional parameter "sign".
function MakeNewformModSym_17_4_d_a( : sign := -1)
    R<x> := PolynomialRing(Rationals());
    chi := MakeCharacter_17_d();
    // SetVerbose("ModularSymbols", true);
    Snew := NewSubspace(CuspidalSubspace(ModularSymbols(chi,4,sign)));
    Vf := Kernel([],Snew);
    return Vf;
end function;