#include <metal_stdlib>

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

void main_1(constant buf0& x_8, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  tint_array_wrapper temp = {};
  tint_array_wrapper data = {};
  float x_180 = 0.0f;
  float x_279 = 0.0f;
  int x_65_phi = 0;
  int x_93_phi = 0;
  int x_102_phi = 0;
  float x_280_phi = 0.0f;
  float const x_62 = x_8.injectionSwitch.x;
  int const x_63 = int(x_62);
  x_65_phi = x_63;
  while (true) {
    int const x_65 = x_65_phi;
    switch(x_65) {
      case 9: {
        data.arr[x_65] = -5;
        break;
      }
      case 8: {
        data.arr[x_65] = -4;
        break;
      }
      case 7: {
        data.arr[x_65] = -3;
        break;
      }
      case 6: {
        data.arr[x_65] = -2;
        break;
      }
      case 5: {
        data.arr[x_65] = -1;
        break;
      }
      case 4: {
        data.arr[x_65] = 0;
        break;
      }
      case 3: {
        data.arr[x_65] = 1;
        break;
      }
      case 2: {
        data.arr[x_65] = 2;
        break;
      }
      case 1: {
        data.arr[x_65] = 3;
        break;
      }
      case 0: {
        data.arr[x_65] = 4;
        break;
      }
      default: {
        break;
      }
    }
    int const x_66 = as_type<int>((as_type<uint>(x_65) + as_type<uint>(1)));
    {
      x_65_phi = x_66;
      if ((x_66 < 10)) {
      } else {
        break;
      }
    }
  }
  x_93_phi = 0;
  while (true) {
    int x_94 = 0;
    int const x_93 = x_93_phi;
    if ((x_93 < 10)) {
    } else {
      break;
    }
    {
      int const x_99 = data.arr[x_93];
      temp.arr[x_93] = x_99;
      x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(1)));
      x_93_phi = x_94;
    }
  }
  x_102_phi = 1;
  while (true) {
    int x_103 = 0;
    int x_109_phi = 0;
    int const x_102 = x_102_phi;
    if ((x_102 <= 9)) {
    } else {
      break;
    }
    x_109_phi = 0;
    while (true) {
      int x_121 = 0;
      int x_126 = 0;
      int x_121_phi = 0;
      int x_124_phi = 0;
      int x_126_phi = 0;
      int x_148_phi = 0;
      int x_151_phi = 0;
      int x_161_phi = 0;
      int const x_109 = x_109_phi;
      if ((x_109 < 9)) {
      } else {
        break;
      }
      int const x_115 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(x_102)));
      int const x_116 = as_type<int>((as_type<uint>(x_115) - as_type<uint>(1)));
      int const x_110 = as_type<int>((as_type<uint>(x_109) + as_type<uint>(as_type<int>((as_type<uint>(2) * as_type<uint>(x_102))))));
      int const x_119 = min(as_type<int>((as_type<uint>(x_110) - as_type<uint>(1))), 9);
      x_121_phi = x_109;
      x_124_phi = x_115;
      x_126_phi = x_109;
      while (true) {
        int x_141 = 0;
        int x_144 = 0;
        int x_125_phi = 0;
        int x_127_phi = 0;
        x_121 = x_121_phi;
        int const x_124 = x_124_phi;
        x_126 = x_126_phi;
        if (((x_126 <= x_116) && (x_124 <= x_119))) {
        } else {
          break;
        }
        int const x_133_save = x_126;
        int const x_134 = data.arr[x_133_save];
        int const x_135_save = x_124;
        int const x_136 = data.arr[x_135_save];
        int const x_122 = as_type<int>(as_type<int>((as_type<uint>(x_121) + as_type<uint>(as_type<int>(1)))));
        if ((x_134 < x_136)) {
          x_141 = as_type<int>(as_type<int>((as_type<uint>(x_126) + as_type<uint>(as_type<int>(1)))));
          int const x_142 = data.arr[x_133_save];
          temp.arr[x_121] = x_142;
          x_125_phi = x_124;
          x_127_phi = x_141;
        } else {
          x_144 = as_type<int>((as_type<uint>(x_124) + as_type<uint>(1)));
          int const x_145 = data.arr[x_135_save];
          temp.arr[x_121] = x_145;
          x_125_phi = x_144;
          x_127_phi = x_126;
        }
        int const x_125 = x_125_phi;
        int const x_127 = x_127_phi;
        {
          x_121_phi = x_122;
          x_124_phi = x_125;
          x_126_phi = x_127;
        }
      }
      x_148_phi = x_121;
      x_151_phi = x_126;
      while (true) {
        int x_149 = 0;
        int x_152 = 0;
        int const x_148 = x_148_phi;
        int const x_151 = x_151_phi;
        if (((x_151 < 10) && (x_151 <= x_116))) {
        } else {
          break;
        }
        {
          x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(1)));
          x_152 = as_type<int>((as_type<uint>(x_151) + as_type<uint>(1)));
          int const x_158 = data.arr[x_151];
          temp.arr[x_148] = x_158;
          x_148_phi = x_149;
          x_151_phi = x_152;
        }
      }
      x_161_phi = x_109;
      while (true) {
        int x_162 = 0;
        int const x_161 = x_161_phi;
        if ((x_161 <= x_119)) {
        } else {
          break;
        }
        {
          int const x_167 = temp.arr[x_161];
          data.arr[x_161] = x_167;
          x_162 = as_type<int>((as_type<uint>(x_161) + as_type<uint>(1)));
          x_161_phi = x_162;
        }
      }
      {
        x_109_phi = x_110;
      }
    }
    {
      x_103 = as_type<int>((as_type<uint>(2) * as_type<uint>(x_102)));
      x_102_phi = x_103;
    }
  }
  int x_171 = 0;
  float x_189 = 0.0f;
  float x_278 = 0.0f;
  float x_279_phi = 0.0f;
  float const x_170 = (*(tint_symbol_5)).y;
  x_171 = int(x_170);
  if ((x_171 < 30)) {
    int const x_177 = data.arr[0];
    x_180 = (0.5f + (float(x_177) * 0.100000001f));
    x_280_phi = x_180;
  } else {
    float x_198 = 0.0f;
    float x_277 = 0.0f;
    float x_278_phi = 0.0f;
    if ((x_171 < 60)) {
      int const x_186 = data.arr[1];
      x_189 = (0.5f + (float(x_186) * 0.100000001f));
      x_279_phi = x_189;
    } else {
      float x_207 = 0.0f;
      float x_249 = 0.0f;
      float x_277_phi = 0.0f;
      if ((x_171 < 90)) {
        int const x_195 = data.arr[2];
        x_198 = (0.5f + (float(x_195) * 0.100000001f));
        x_278_phi = x_198;
      } else {
        if ((x_171 < 120)) {
          int const x_204 = data.arr[3];
          x_207 = (0.5f + (float(x_204) * 0.100000001f));
          x_277_phi = x_207;
        } else {
          float x_220 = 0.0f;
          float x_248 = 0.0f;
          float x_249_phi = 0.0f;
          float2 x_256_phi = 0.0f;
          int x_259_phi = 0;
          if ((x_171 < 150)) {
            discard_fragment();
          } else {
            float x_229 = 0.0f;
            float x_247 = 0.0f;
            float x_248_phi = 0.0f;
            if ((x_171 < 180)) {
              int const x_217 = data.arr[5];
              x_220 = (0.5f + (float(x_217) * 0.100000001f));
              x_249_phi = x_220;
            } else {
              float x_238 = 0.0f;
              float x_246 = 0.0f;
              float x_247_phi = 0.0f;
              if ((x_171 < 210)) {
                int const x_226 = data.arr[6];
                x_229 = (0.5f + (float(x_226) * 0.100000001f));
                x_248_phi = x_229;
              } else {
                if ((x_171 < 240)) {
                  int const x_235 = data.arr[7];
                  x_238 = (0.5f + (float(x_235) * 0.100000001f));
                  x_247_phi = x_238;
                } else {
                  if ((x_171 < 270)) {
                  } else {
                    discard_fragment();
                  }
                  int const x_243 = data.arr[8];
                  x_246 = (0.5f + (float(x_243) * 0.100000001f));
                  x_247_phi = x_246;
                }
                x_247 = x_247_phi;
                x_248_phi = x_247;
              }
              x_248 = x_248_phi;
              x_249_phi = x_248;
            }
            x_249 = x_249_phi;
            float const x_251 = x_8.injectionSwitch.y;
            bool const x_252 = (x_62 > x_251);
            if (x_252) {
              *(tint_symbol_6) = float4(1.0f, 1.0f, 1.0f, 1.0f);
            }
            x_256_phi = float2(1.0f, 1.0f);
            x_259_phi = 0;
            while (true) {
              float2 x_272 = 0.0f;
              int x_260 = 0;
              float2 x_273_phi = 0.0f;
              float2 const x_256 = x_256_phi;
              int const x_259 = x_259_phi;
              if ((x_259 <= 32)) {
              } else {
                break;
              }
              x_273_phi = x_256;
              if ((x_256.x < 0.0f)) {
                if (x_252) {
                  discard_fragment();
                }
                x_272 = x_256;
                x_272.y = (x_256.y + 1.0f);
                x_273_phi = x_272;
              }
              float2 const x_273 = x_273_phi;
              float2 x_257_1 = x_273;
              x_257_1.x = (x_273.x + x_273.y);
              float2 const x_257 = x_257_1;
              {
                x_260 = as_type<int>((as_type<uint>(x_259) + as_type<uint>(1)));
                x_256_phi = x_257;
                x_259_phi = x_260;
              }
            }
          }
          x_277_phi = x_249;
        }
        x_277 = x_277_phi;
        x_278_phi = x_277;
      }
      x_278 = x_278_phi;
      x_279_phi = x_278;
    }
    x_279 = x_279_phi;
    x_280_phi = x_279;
  }
  float const x_280 = x_280_phi;
  *(tint_symbol_6) = float4(x_280, x_280, x_280, 1.0f);
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_8 [[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_8, &(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;
}

