#include <metal_stdlib>

using namespace metal;

template<typename T, size_t N>
struct tint_array {
    const constant T& operator[](size_t i) const constant { return elements[i]; }
    device T& operator[](size_t i) device { return elements[i]; }
    const device T& operator[](size_t i) const device { return elements[i]; }
    thread T& operator[](size_t i) thread { return elements[i]; }
    const thread T& operator[](size_t i) const thread { return elements[i]; }
    threadgroup T& operator[](size_t i) threadgroup { return elements[i]; }
    const threadgroup T& operator[](size_t i) const threadgroup { return elements[i]; }
    T elements[N];
};

struct TestDatabuMltin {
  tint_array<atomic_int, 9> functionatxa4;
  tint_array<atomic_int, 32772> data;
  tint_array<atomic_int, 4> a;
  tint_array<atomic_int, 1> dzet4rnaumtax2at;
};

struct Tc65535tDtint_symbol_7ata {
  tint_array<atomic_int, 72365> dtma1atxa4;
  tint_array<atomic_int, 2> hata;
  tint_array<atomic_int, 3> a;
  tint_array<atomic_int, 35526> returnma3tatxa92233720368547R758p8;
};

struct TzVfat0x32769tDvar {
  tint_array<atomic_int, 39611> dmat2axat2;
};

struct TestDauiltin {
  tint_array<atomic_int, 9> dmat2a2axt;
  tint_array<atomic_int, 32742> data;
  tint_array<atomic_int, 4> a;
};

struct Teec65538tDtint_sybom_l7ata {
  tint_array<atomic_int, 32768> dmat1atxainverseSqrt4;
  tint_array<atomic_int, 2> hata;
  tint_array<atomic_int, 5> a;
  tint_array<atomic_int, 1> dreturnmc4tax2at;
};

struct TzfVatt0x0UDatasmvec65535tDtinvec4matomicMaxbol_fVatt0atomicMin3D9t672var {
  tint_array<atomic_int, 39711> dmat2axat1;
};

