#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 gl_Position;
  float4 frag_color_1;
};
struct tint_symbol_2 {
  float4 position_param [[attribute(0)]];
};
struct tint_symbol_3 {
  float4 frag_color_1 [[user(locn1)]];
  float4 gl_Position [[position]];
};

void main_1(thread float4* const tint_symbol_6, thread float4* const tint_symbol_7, thread float4* const tint_symbol_8) {
  float4 const x_21 = *(tint_symbol_6);
  *(tint_symbol_7) = x_21;
  float4 const x_23 = *(tint_symbol_6);
  *(tint_symbol_8) = (x_23 * 0.5f);
  return;
}

vertex tint_symbol_3 tint_symbol(tint_symbol_2 tint_symbol_1 [[stage_in]]) {
  thread float4 tint_symbol_9 = 0.0f;
  thread float4 tint_symbol_10 = 0.0f;
  thread float4 tint_symbol_11 = 0.0f;
  float4 const position_param = tint_symbol_1.position_param;
  tint_symbol_9 = position_param;
  main_1(&(tint_symbol_9), &(tint_symbol_10), &(tint_symbol_11));
  main_out const tint_symbol_4 = {.gl_Position=tint_symbol_10, .frag_color_1=tint_symbol_11};
  tint_symbol_3 const tint_symbol_5 = {.frag_color_1=tint_symbol_4.frag_color_1, .gl_Position=tint_symbol_4.gl_Position};
  return tint_symbol_5;
}

