#include <metal_stdlib>

using namespace metal;
struct main_out {
  int out_data_1;
};
struct tint_symbol_2 {
  int out_data_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread int* const tint_symbol_6) {
  bool x_is_odd = false;
  bool y_is_odd = false;
  float const x_24 = (*(tint_symbol_5)).x;
  x_is_odd = ((int(x_24) & 1) == 1);
  float const x_29 = (*(tint_symbol_5)).y;
  y_is_odd = ((int(x_29) & 1) == 1);
  bool const x_33 = x_is_odd;
  bool const x_34 = y_is_odd;
  *(tint_symbol_6) = select(0, 1, (x_33 || x_34));
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread int tint_symbol_8 = 0;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(&(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.out_data_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.out_data_1=tint_symbol_3.out_data_1};
  return tint_symbol_4;
}

