#include <metal_stdlib>

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

float3 f_mf22_(thread float2x2* const m) {
  while (true) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  return float3(0.0f, 0.0f, 0.0f);
}

void main_1(thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
  float2x2 param = float2x2(0.0f);
  float2x2 x_38_phi = float2x2(0.0f);
  float const x_34 = (*(tint_symbol_3)).x;
  x_38_phi = float2x2(float2(0.0f, 0.0f), float2(0.0f, 0.0f));
  if ((x_34 >= 0.0f)) {
    x_38_phi = float2x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f));
  }
  float2x2 const x_38 = x_38_phi;
  param = (x_38 * x_38);
  float3 const x_40 = f_mf22_(&(param));
  *(tint_symbol_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

main_out tint_symbol_inner(float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  *(tint_symbol_5) = gl_FragCoord_param;
  main_1(tint_symbol_5, tint_symbol_6);
  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
  return tint_symbol_2;
}

fragment tint_symbol_1 tint_symbol(float4 gl_FragCoord_param [[position]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  main_out const inner_result = tint_symbol_inner(gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

