#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ int zero;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(constant buf0& x_6, thread float4* const tint_symbol_4) {
  int a = 0;
  int const x_25 = x_6.zero;
  a = x_25;
  int const x_26 = a;
  if ((x_26 == 0)) {
    int const x_31 = a;
    a = as_type<int>((as_type<uint>(x_31) + as_type<uint>(1)));
  } else {
    int const x_33 = a;
    a = as_type<int>((as_type<uint>(x_33) + as_type<uint>(1)));
  }
  int const x_35 = a;
  if ((x_35 == 1)) {
    *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 0.0f);
  }
  return;
}

fragment tint_symbol_1 tint_symbol(constant buf0& x_6 [[buffer(0)]]) {
  thread float4 tint_symbol_5 = 0.0f;
  main_1(x_6, &(tint_symbol_5));
  main_out const tint_symbol_2 = {.x_GLF_color_1=tint_symbol_5};
  tint_symbol_1 const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_2.x_GLF_color_1};
  return tint_symbol_3;
}

