#version 450 core

#extension GL_EXT_shader_8bit_storage : enable

struct S
{
    uint8_t  x;
    u8vec2    y;
    u8vec3    z;
};

layout(column_major, std140) uniform B1
{
    uint8_t  a;
    u8vec2    b;
    u8vec3    c;
    uint8_t  d[2];
    S          g;
    S          h[2];
    uint        j;
} b1;

layout(row_major, std430) buffer B2
{
    uint8_t  o;
    u8vec2    p;
    u8vec3    q;
    uint8_t  r[2];
    S          u;
    S          v[2];
    u8vec2    x[100];
    uint8_t  w[];
} b2;

layout(row_major, std140) uniform B5
{
    uint8_t  o;
    u8vec2    p;
    u8vec3    q;
    uint8_t  r[2];
    S          u;
    S          v[2];
    u8vec2    x[100];
    uint8_t  w[100];
} b5;

struct S2 {
    mat4x4 x;
    uint8_t y;
    uint z;
};

struct S3 {
    S2 x;
};

layout(row_major, std430) buffer B3
{
    S2 x;
} b3;

layout(column_major, std430) buffer B4
{
    S2 x;
    S3 y;
} b4;

void main()
{
    b2.o = b1.a;
    b2.p = u8vec2(uvec3(b2.q).xy);
    b2.p = u8vec2(uvec3(b5.q).xy);
    b2.r[0] = b2.r[0];
    b2.r[1] = b5.r[1];
    b2.p = b2.p;
    uint x0 = uint(b1.a);
    uvec4 x1 = uvec4(b1.a, b2.p, 1);
    b4.x.x = b3.x.x;
    b2.o = uint8_t(uvec2(b2.p).x);
    b2.p = b2.v[1].y;
    uvec3 v3 = uvec3(b2.w[b1.j], b2.w[b1.j+1], b2.w[b1.j+2]);
    uvec3 u3 = uvec3(b5.w[b1.j], b5.w[b1.j+1], b5.w[b1.j+2]);
    b2.x[0] = b2.x[0];
    b2.x[1] = b5.x[1];
    b2.p.x = b1.a;
    b2.o = b2.p.x;
    b2.p = u8vec2(uvec2(1, 2));
    b2.o = uint8_t(3u);
}

