#include <metal_stdlib>

using namespace metal;
void main_1(texture2d_array<float, access::sample> tint_symbol_1, sampler tint_symbol_2) {
  float const f1 = 1.0f;
  float2 const vf12 = float2(1.0f, 2.0f);
  float2 const vf21 = float2(2.0f, 1.0f);
  float3 const vf123 = float3(1.0f, 2.0f, 3.0f);
  float4 const vf1234 = float4(1.0f, 2.0f, 3.0f, 4.0f);
  int const i1 = 1;
  int2 const vi12 = int2(1, 2);
  int3 const vi123 = int3(1, 2, 3);
  int4 const vi1234 = int4(1, 2, 3, 4);
  uint const u1 = 1u;
  uint2 const vu12 = uint2(1u, 2u);
  uint3 const vu123 = uint3(1u, 2u, 3u);
  uint4 const vu1234 = uint4(1u, 2u, 3u, 4u);
  float const coords1 = 1.0f;
  float2 const coords12 = vf12;
  float3 const coords123 = vf123;
  float4 const coords1234 = vf1234;
  float4 const x_79 = tint_symbol_1.sample(tint_symbol_2, coords123.xy, int(coords123.z), gradient2d(vf12, vf21), int2(3, 4));
  return;
}

fragment void tint_symbol(texture2d_array<float, access::sample> tint_symbol_3 [[texture(1)]], sampler tint_symbol_4 [[sampler(0)]]) {
  main_1(tint_symbol_3, tint_symbol_4);
  return;
}

