#version 430

in float infloat;
out float outfloat;

uniform uAofA {
    float f[2][4];
} nameAofA[3][5];

float[4][5][6] many[1][2][3];

float g4[4][7];
in float g5[5][7];

flat in int i, j, k;

float[4][7] foo(float a[5][7])
{
    float r[7];
    r = a[2];

    return float[4][7](a[0], a[1], r, a[3]);
}

void main()
{
    outfloat = 0.0;

    g4 = foo(g5);

//    if (foo(g5) == g4)
//        ++outfloat;

    float u[][7];
    u[2][2] = 3.0;
    float u[5][7];

    foo(u);

    many[i][j][k][i][j][k] = infloat;
    outfloat += many[j][j][j][j][j][j];
    outfloat += nameAofA[1][2].f[0][3];
}