#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 injectionSwitch;
};
struct tint_array_wrapper {
  float arr[9];
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float3 drawShape_vf2_(constant buf0& x_25, thread float2* const pos) {
  bool c2 = false;
  bool c3 = false;
  bool c4 = false;
  bool c5 = false;
  bool c6 = false;
  int GLF_live4i = 0;
  int GLF_live4_looplimiter5 = 0;
  float4x2 GLF_live7m42 = float4x2(0.0f);
  float3x3 GLF_live7m33 = float3x3(0.0f);
  int GLF_live7cols = 0;
  int GLF_live7_looplimiter3 = 0;
  int GLF_live7rows = 0;
  int GLF_live7_looplimiter2 = 0;
  int GLF_live7_looplimiter1 = 0;
  int GLF_live7c = 0;
  int GLF_live7r = 0;
  int GLF_live7_looplimiter0 = 0;
  int GLF_live7sum_index = 0;
  int GLF_live7_looplimiter7 = 0;
  int GLF_live7cols_1 = 0;
  int GLF_live7rows_1 = 0;
  tint_array_wrapper GLF_live7sums = {};
  int GLF_live7c_1 = 0;
  int GLF_live7r_1 = 0;
  int x_180 = 0;
  float3x3 indexable = float3x3(0.0f);
  float const x_182 = (*(pos)).x;
  c2 = (x_182 > 1.0f);
  bool const x_184 = c2;
  if (x_184) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_188 = (*(pos)).y;
  c3 = (x_188 < 1.0f);
  bool const x_190 = c3;
  if (x_190) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_194 = (*(pos)).y;
  c4 = (x_194 > 1.0f);
  bool const x_196 = c4;
  if (x_196) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_200 = (*(pos)).x;
  c5 = (x_200 < 1.0f);
  bool const x_202 = c5;
  if (x_202) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  float const x_206 = (*(pos)).x;
  c6 = ((x_206 + 1.0f) > 1.0f);
  bool const x_209 = c6;
  if (x_209) {
    return float3(1.0f, 1.0f, 1.0f);
  }
  GLF_live4i = 0;
  while (true) {
    int const x_39 = GLF_live4i;
    if ((x_39 < 4)) {
    } else {
      break;
    }
    int const x_40 = GLF_live4_looplimiter5;
    if ((x_40 >= 7)) {
      break;
    }
    int const x_41 = GLF_live4_looplimiter5;
    GLF_live4_looplimiter5 = (x_41 + 1);
    GLF_live7m42 = float4x2(float2(1.0f, 0.0f), float2(0.0f, 1.0f), float2(0.0f, 0.0f), float2(1.0f, 0.0f));
    GLF_live7m33 = float3x3(float3(1.0f, 0.0f, 0.0f), float3(0.0f, 1.0f, 0.0f), float3(0.0f, 0.0f, 1.0f));
    GLF_live7cols = 2;
    while (true) {
      int const x_43 = GLF_live7cols;
      if ((x_43 < 4)) {
      } else {
        break;
      }
      int const x_44 = GLF_live7_looplimiter3;
      if ((x_44 >= 7)) {
        break;
      }
      int const x_45 = GLF_live7_looplimiter3;
      GLF_live7_looplimiter3 = (x_45 + 1);
      GLF_live7rows = 2;
      while (true) {
        int const x_47 = GLF_live7rows;
        if ((x_47 < 4)) {
        } else {
          break;
        }
        int const x_48 = GLF_live7_looplimiter2;
        if ((x_48 >= 7)) {
          break;
        }
        int const x_49 = GLF_live7_looplimiter2;
        GLF_live7_looplimiter2 = (x_49 + 1);
        GLF_live7_looplimiter1 = 0;
        GLF_live7c = 0;
        while (true) {
          int const x_51 = GLF_live7c;
          if ((x_51 < 3)) {
          } else {
            break;
          }
          int const x_52 = GLF_live7_looplimiter1;
          if ((x_52 >= 7)) {
            break;
          }
          int const x_53 = GLF_live7_looplimiter1;
          GLF_live7_looplimiter1 = (x_53 + 1);
          GLF_live7r = 0;
          while (true) {
            int const x_55 = GLF_live7r;
            if ((x_55 < 2)) {
            } else {
              break;
            }
            int const x_56 = GLF_live7_looplimiter0;
            if ((x_56 >= 7)) {
              break;
            }
            int const x_57 = GLF_live7_looplimiter0;
            GLF_live7_looplimiter0 = (x_57 + 1);
            int const x_59 = GLF_live7c;
            int const x_60 = GLF_live7c;
            int const x_61 = GLF_live7c;
            int const x_62 = GLF_live7r;
            int const x_63 = GLF_live7r;
            int const x_64 = GLF_live7r;
            GLF_live7m33[select(0, x_61, ((x_59 >= 0) && (x_60 < 3)))][select(0, x_64, ((x_62 >= 0) && (x_63 < 3)))] = 1.0f;
            float const x_267 = x_25.injectionSwitch.y;
            if ((0.0f > x_267)) {
            } else {
              int const x_65 = GLF_live7c;
              int const x_66 = GLF_live7c;
              int const x_67 = GLF_live7c;
              int const x_68 = GLF_live7r;
              int const x_69 = GLF_live7r;
              int const x_70 = GLF_live7r;
              GLF_live7m42[select(0, x_67, ((x_65 >= 0) && (x_66 < 4)))][select(0, x_70, ((x_68 >= 0) && (x_69 < 2)))] = 1.0f;
            }
            {
              int const x_71 = GLF_live7r;
              GLF_live7r = (x_71 + 1);
            }
          }
          {
            int const x_73 = GLF_live7c;
            GLF_live7c = (x_73 + 1);
          }
        }
        {
          int const x_75 = GLF_live7rows;
          GLF_live7rows = (x_75 + 1);
        }
      }
      {
        int const x_77 = GLF_live7cols;
        GLF_live7cols = (x_77 + 1);
      }
    }
    GLF_live7sum_index = 0;
    GLF_live7_looplimiter7 = 0;
    GLF_live7cols_1 = 2;
    while (true) {
      int const x_79 = GLF_live7cols_1;
      if ((x_79 < 4)) {
      } else {
        break;
      }
      int const x_80 = GLF_live7_looplimiter7;
      if ((x_80 >= 7)) {
        break;
      }
      int const x_81 = GLF_live7_looplimiter7;
      GLF_live7_looplimiter7 = (x_81 + 1);
      GLF_live7rows_1 = 2;
      int const x_83 = GLF_live7sum_index;
      int const x_84 = GLF_live7sum_index;
      int const x_85 = GLF_live7sum_index;
      GLF_live7sums.arr[select(0, x_85, ((x_83 >= 0) && (x_84 < 9)))] = 0.0f;
      GLF_live7c_1 = 0;
      while (true) {
        int const x_86 = GLF_live7c_1;
        if ((x_86 < 1)) {
        } else {
          break;
        }
        GLF_live7r_1 = 0;
        while (true) {
          int const x_87 = GLF_live7r_1;
          int const x_88 = GLF_live7rows_1;
          if ((x_87 < x_88)) {
          } else {
            break;
          }
          int const x_89 = GLF_live7sum_index;
          int const x_90 = GLF_live7sum_index;
          int const x_91 = GLF_live7sum_index;
          int const x_310 = select(0, x_91, ((x_89 >= 0) && (x_90 < 9)));
          float3x3 const x_311 = GLF_live7m33;
          float3x3 const x_312 = transpose(x_311);
          int const x_92 = GLF_live7c_1;
          if ((x_92 < 3)) {
            x_180 = 1;
          } else {
            float const x_318 = x_25.injectionSwitch.x;
            x_180 = int(x_318);
          }
          int const x_320 = x_180;
          int const x_93 = GLF_live7r_1;
          indexable = x_312;
          float const x_324 = indexable[x_320][select(0, 1, (x_93 < 3))];
          float const x_326 = GLF_live7sums.arr[x_310];
          GLF_live7sums.arr[x_310] = (x_326 + x_324);
          int const x_94 = GLF_live7sum_index;
          int const x_95 = GLF_live7sum_index;
          int const x_96 = GLF_live7sum_index;
          int const x_332 = select(0, x_96, ((x_94 >= 0) && (x_95 < 9)));
          int const x_97 = GLF_live7r_1;
          float const x_334 = GLF_live7m42[1][x_97];
          float const x_336 = GLF_live7sums.arr[x_332];
          GLF_live7sums.arr[x_332] = (x_336 + x_334);
          {
            int const x_98 = GLF_live7r_1;
            GLF_live7r_1 = (x_98 + 1);
          }
        }
        {
          int const x_100 = GLF_live7c_1;
          GLF_live7c_1 = (x_100 + 1);
        }
      }
      int const x_102 = GLF_live7sum_index;
      GLF_live7sum_index = (x_102 + 1);
      {
        int const x_104 = GLF_live7cols_1;
        GLF_live7cols_1 = (x_104 + 1);
      }
    }
    {
      int const x_106 = GLF_live4i;
      GLF_live4i = (x_106 + 1);
    }
  }
  return float3(1.0f, 1.0f, 1.0f);
}

void main_1(constant buf0& x_25, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float2 position = 0.0f;
  float2 param = 0.0f;
  float2 param_1 = 0.0f;
  int i = 0;
  float2 param_2 = 0.0f;
  float const x_161 = x_25.injectionSwitch.x;
  if ((x_161 >= 2.0f)) {
    float4 const x_165 = *(tint_symbol_5);
    position = float2(x_165.x, x_165.y);
    float2 const x_167 = position;
    param = x_167;
    float3 const x_168 = drawShape_vf2_(x_25, &(param));
    float2 const x_169 = position;
    param_1 = x_169;
    float3 const x_170 = drawShape_vf2_(x_25, &(param_1));
    i = 25;
    while (true) {
      int const x_108 = i;
      if ((x_108 > 0)) {
      } else {
        break;
      }
      float2 const x_177 = position;
      param_2 = x_177;
      float3 const x_178 = drawShape_vf2_(x_25, &(param_2));
      {
        int const x_109 = i;
        i = (x_109 - 1);
      }
    }
  }
  *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_25 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_25, &(tint_symbol_7), &(tint_symbol_8));
  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;
}

