#include <metal_stdlib>

using namespace metal;
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void main_1(thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  int i = 0;
  *(tint_symbol_5) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  i = 1;
  while (true) {
    int const x_6 = i;
    if ((x_6 < 2)) {
    } else {
      break;
    }
    float const x_37 = (*(tint_symbol_6)).y;
    if ((x_37 < 0.0f)) {
      float const x_42 = (*(tint_symbol_6)).x;
      if ((x_42 < 0.0f)) {
        *(tint_symbol_5) = float4(226.695999146f, 1.0f, 1.0f, 1.0f);
      }
      {
        int const x_7 = i;
        i = (x_7 + 1);
      }
      continue;
    }
    return;
    {
      int const x_7 = i;
      i = (x_7 + 1);
    }
  }
  return;
}

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

