#include <metal_stdlib>

using namespace metal;

template<typename T, int N, int M>
inline vec<T, M> operator*(matrix<T, N, M> lhs, packed_vec<T, N> rhs) {
  return lhs * vec<T, N>(rhs);
}

template<typename T, int N, int M>
inline vec<T, N> operator*(packed_vec<T, M> lhs, matrix<T, N, M> rhs) {
  return vec<T, M>(lhs) * rhs;
}

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 S {
  /* 0x0000 */ packed_float3 v;
  /* 0x000c */ tint_array<int8_t, 4> tint_pad;
};

void f(const constant S* const tint_symbol) {
  float3 v = (*(tint_symbol)).v;
  float x = (*(tint_symbol)).v[0];
  float y = (*(tint_symbol)).v[1];
  float z = (*(tint_symbol)).v[2];
  float2 xx = float3((*(tint_symbol)).v).xx;
  float2 xy = float3((*(tint_symbol)).v).xy;
  float2 xz = float3((*(tint_symbol)).v).xz;
  float2 yx = float3((*(tint_symbol)).v).yx;
  float2 yy = float3((*(tint_symbol)).v).yy;
  float2 yz = float3((*(tint_symbol)).v).yz;
  float2 zx = float3((*(tint_symbol)).v).zx;
  float2 zy = float3((*(tint_symbol)).v).zy;
  float2 zz = float3((*(tint_symbol)).v).zz;
  float3 xxx = float3((*(tint_symbol)).v).xxx;
  float3 xxy = float3((*(tint_symbol)).v).xxy;
  float3 xxz = float3((*(tint_symbol)).v).xxz;
  float3 xyx = float3((*(tint_symbol)).v).xyx;
  float3 xyy = float3((*(tint_symbol)).v).xyy;
  float3 xyz = float3((*(tint_symbol)).v).xyz;
  float3 xzx = float3((*(tint_symbol)).v).xzx;
  float3 xzy = float3((*(tint_symbol)).v).xzy;
  float3 xzz = float3((*(tint_symbol)).v).xzz;
  float3 yxx = float3((*(tint_symbol)).v).yxx;
  float3 yxy = float3((*(tint_symbol)).v).yxy;
  float3 yxz = float3((*(tint_symbol)).v).yxz;
  float3 yyx = float3((*(tint_symbol)).v).yyx;
  float3 yyy = float3((*(tint_symbol)).v).yyy;
  float3 yyz = float3((*(tint_symbol)).v).yyz;
  float3 yzx = float3((*(tint_symbol)).v).yzx;
  float3 yzy = float3((*(tint_symbol)).v).yzy;
  float3 yzz = float3((*(tint_symbol)).v).yzz;
  float3 zxx = float3((*(tint_symbol)).v).zxx;
  float3 zxy = float3((*(tint_symbol)).v).zxy;
  float3 zxz = float3((*(tint_symbol)).v).zxz;
  float3 zyx = float3((*(tint_symbol)).v).zyx;
  float3 zyy = float3((*(tint_symbol)).v).zyy;
  float3 zyz = float3((*(tint_symbol)).v).zyz;
  float3 zzx = float3((*(tint_symbol)).v).zzx;
  float3 zzy = float3((*(tint_symbol)).v).zzy;
  float3 zzz = float3((*(tint_symbol)).v).zzz;
  float4 xxxx = float3((*(tint_symbol)).v).xxxx;
  float4 xxxy = float3((*(tint_symbol)).v).xxxy;
  float4 xxxz = float3((*(tint_symbol)).v).xxxz;
  float4 xxyx = float3((*(tint_symbol)).v).xxyx;
  float4 xxyy = float3((*(tint_symbol)).v).xxyy;
  float4 xxyz = float3((*(tint_symbol)).v).xxyz;
  float4 xxzx = float3((*(tint_symbol)).v).xxzx;
  float4 xxzy = float3((*(tint_symbol)).v).xxzy;
  float4 xxzz = float3((*(tint_symbol)).v).xxzz;
  float4 xyxx = float3((*(tint_symbol)).v).xyxx;
  float4 xyxy = float3((*(tint_symbol)).v).xyxy;
  float4 xyxz = float3((*(tint_symbol)).v).xyxz;
  float4 xyyx = float3((*(tint_symbol)).v).xyyx;
  float4 xyyy = float3((*(tint_symbol)).v).xyyy;
  float4 xyyz = float3((*(tint_symbol)).v).xyyz;
  float4 xyzx = float3((*(tint_symbol)).v).xyzx;
  float4 xyzy = float3((*(tint_symbol)).v).xyzy;
  float4 xyzz = float3((*(tint_symbol)).v).xyzz;
  float4 xzxx = float3((*(tint_symbol)).v).xzxx;
  float4 xzxy = float3((*(tint_symbol)).v).xzxy;
  float4 xzxz = float3((*(tint_symbol)).v).xzxz;
  float4 xzyx = float3((*(tint_symbol)).v).xzyx;
  float4 xzyy = float3((*(tint_symbol)).v).xzyy;
  float4 xzyz = float3((*(tint_symbol)).v).xzyz;
  float4 xzzx = float3((*(tint_symbol)).v).xzzx;
  float4 xzzy = float3((*(tint_symbol)).v).xzzy;
  float4 xzzz = float3((*(tint_symbol)).v).xzzz;
  float4 yxxx = float3((*(tint_symbol)).v).yxxx;
  float4 yxxy = float3((*(tint_symbol)).v).yxxy;
  float4 yxxz = float3((*(tint_symbol)).v).yxxz;
  float4 yxyx = float3((*(tint_symbol)).v).yxyx;
  float4 yxyy = float3((*(tint_symbol)).v).yxyy;
  float4 yxyz = float3((*(tint_symbol)).v).yxyz;
  float4 yxzx = float3((*(tint_symbol)).v).yxzx;
  float4 yxzy = float3((*(tint_symbol)).v).yxzy;
  float4 yxzz = float3((*(tint_symbol)).v).yxzz;
  float4 yyxx = float3((*(tint_symbol)).v).yyxx;
  float4 yyxy = float3((*(tint_symbol)).v).yyxy;
  float4 yyxz = float3((*(tint_symbol)).v).yyxz;
  float4 yyyx = float3((*(tint_symbol)).v).yyyx;
  float4 yyyy = float3((*(tint_symbol)).v).yyyy;
  float4 yyyz = float3((*(tint_symbol)).v).yyyz;
  float4 yyzx = float3((*(tint_symbol)).v).yyzx;
  float4 yyzy = float3((*(tint_symbol)).v).yyzy;
  float4 yyzz = float3((*(tint_symbol)).v).yyzz;
  float4 yzxx = float3((*(tint_symbol)).v).yzxx;
  float4 yzxy = float3((*(tint_symbol)).v).yzxy;
  float4 yzxz = float3((*(tint_symbol)).v).yzxz;
  float4 yzyx = float3((*(tint_symbol)).v).yzyx;
  float4 yzyy = float3((*(tint_symbol)).v).yzyy;
  float4 yzyz = float3((*(tint_symbol)).v).yzyz;
  float4 yzzx = float3((*(tint_symbol)).v).yzzx;
  float4 yzzy = float3((*(tint_symbol)).v).yzzy;
  float4 yzzz = float3((*(tint_symbol)).v).yzzz;
  float4 zxxx = float3((*(tint_symbol)).v).zxxx;
  float4 zxxy = float3((*(tint_symbol)).v).zxxy;
  float4 zxxz = float3((*(tint_symbol)).v).zxxz;
  float4 zxyx = float3((*(tint_symbol)).v).zxyx;
  float4 zxyy = float3((*(tint_symbol)).v).zxyy;
  float4 zxyz = float3((*(tint_symbol)).v).zxyz;
  float4 zxzx = float3((*(tint_symbol)).v).zxzx;
  float4 zxzy = float3((*(tint_symbol)).v).zxzy;
  float4 zxzz = float3((*(tint_symbol)).v).zxzz;
  float4 zyxx = float3((*(tint_symbol)).v).zyxx;
  float4 zyxy = float3((*(tint_symbol)).v).zyxy;
  float4 zyxz = float3((*(tint_symbol)).v).zyxz;
  float4 zyyx = float3((*(tint_symbol)).v).zyyx;
  float4 zyyy = float3((*(tint_symbol)).v).zyyy;
  float4 zyyz = float3((*(tint_symbol)).v).zyyz;
  float4 zyzx = float3((*(tint_symbol)).v).zyzx;
  float4 zyzy = float3((*(tint_symbol)).v).zyzy;
  float4 zyzz = float3((*(tint_symbol)).v).zyzz;
  float4 zzxx = float3((*(tint_symbol)).v).zzxx;
  float4 zzxy = float3((*(tint_symbol)).v).zzxy;
  float4 zzxz = float3((*(tint_symbol)).v).zzxz;
  float4 zzyx = float3((*(tint_symbol)).v).zzyx;
  float4 zzyy = float3((*(tint_symbol)).v).zzyy;
  float4 zzyz = float3((*(tint_symbol)).v).zzyz;
  float4 zzzx = float3((*(tint_symbol)).v).zzzx;
  float4 zzzy = float3((*(tint_symbol)).v).zzzy;
  float4 zzzz = float3((*(tint_symbol)).v).zzzz;
}

