#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 position_1;
};
struct tint_symbol_1 {
  float4 position_1 [[position]];
};

void main_1() {
  return;
}

main_out tint_symbol_inner(uint x_2_param, thread uint* const tint_symbol_3, thread float4* const tint_symbol_4) {
  *(tint_symbol_3) = x_2_param;
  main_1();
  main_out const tint_symbol_2 = {.position_1=*(tint_symbol_4)};
  return tint_symbol_2;
}

vertex tint_symbol_1 tint_symbol(uint x_2_param [[vertex_id]]) {
  thread uint tint_symbol_5 = 0u;
  thread float4 tint_symbol_6 = 0.0f;
  main_out const inner_result = tint_symbol_inner(x_2_param, &(tint_symbol_5), &(tint_symbol_6));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.position_1 = inner_result.position_1;
  return wrapper_result;
}

