struct buf0 {
  injectionSwitch : vec2<f32>;
};

[[group(0), binding(0)]] var<uniform> x_8 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var temp : array<i32, 10>;
  var data : array<i32, 10>;
  var x_180 : f32;
  var x_279 : f32;
  var x_65_phi : i32;
  var x_93_phi : i32;
  var x_102_phi : i32;
  var x_280_phi : f32;
  let x_62 : f32 = x_8.injectionSwitch.x;
  let x_63 : i32 = i32(x_62);
  x_65_phi = x_63;
  loop {
    let x_65 : i32 = x_65_phi;
    switch(x_65) {
      case 9: {
        data[x_65] = -5;
      }
      case 8: {
        data[x_65] = -4;
      }
      case 7: {
        data[x_65] = -3;
      }
      case 6: {
        data[x_65] = -2;
      }
      case 5: {
        data[x_65] = -1;
      }
      case 4: {
        data[x_65] = 0;
      }
      case 3: {
        data[x_65] = 1;
      }
      case 2: {
        data[x_65] = 2;
      }
      case 1: {
        data[x_65] = 3;
      }
      case 0: {
        data[x_65] = 4;
      }
      default: {
      }
    }
    let x_66 : i32 = (x_65 + 1);

    continuing {
      x_65_phi = x_66;
      if ((x_66 < 10)) {
      } else {
        break;
      }
    }
  }
  x_93_phi = 0;
  loop {
    var x_94 : i32;
    let x_93 : i32 = x_93_phi;
    if ((x_93 < 10)) {
    } else {
      break;
    }

    continuing {
      let x_99 : i32 = data[x_93];
      temp[x_93] = x_99;
      x_94 = (x_93 + 1);
      x_93_phi = x_94;
    }
  }
  x_102_phi = 1;
  loop {
    var x_103 : i32;
    var x_109_phi : i32;
    let x_102 : i32 = x_102_phi;
    if ((x_102 <= 9)) {
    } else {
      break;
    }
    x_109_phi = 0;
    loop {
      var x_121 : i32;
      var x_126 : i32;
      var x_121_phi : i32;
      var x_124_phi : i32;
      var x_126_phi : i32;
      var x_148_phi : i32;
      var x_151_phi : i32;
      var x_161_phi : i32;
      let x_109 : i32 = x_109_phi;
      if ((x_109 < 9)) {
      } else {
        break;
      }
      let x_115 : i32 = (x_109 + x_102);
      let x_116 : i32 = (x_115 - 1);
      let x_110 : i32 = (x_109 + (2 * x_102));
      let x_119 : i32 = min((x_110 - 1), 9);
      x_121_phi = x_109;
      x_124_phi = x_115;
      x_126_phi = x_109;
      loop {
        var x_141 : i32;
        var x_144 : i32;
        var x_125_phi : i32;
        var x_127_phi : i32;
        x_121 = x_121_phi;
        let x_124 : i32 = x_124_phi;
        x_126 = x_126_phi;
        if (((x_126 <= x_116) && (x_124 <= x_119))) {
        } else {
          break;
        }
        let x_133 : ptr<function, i32> = &(data[x_126]);
        let x_134 : i32 = *(x_133);
        let x_135 : ptr<function, i32> = &(data[x_124]);
        let x_136 : i32 = *(x_135);
        let x_122 : i32 = bitcast<i32>((x_121 + bitcast<i32>(1)));
        if ((x_134 < x_136)) {
          x_141 = bitcast<i32>((x_126 + bitcast<i32>(1)));
          let x_142 : i32 = *(x_133);
          temp[x_121] = x_142;
          x_125_phi = x_124;
          x_127_phi = x_141;
        } else {
          x_144 = (x_124 + 1);
          let x_145 : i32 = *(x_135);
          temp[x_121] = x_145;
          x_125_phi = x_144;
          x_127_phi = x_126;
        }
        let x_125 : i32 = x_125_phi;
        let x_127 : i32 = x_127_phi;

        continuing {
          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;
      loop {
        var x_149 : i32;
        var x_152 : i32;
        let x_148 : i32 = x_148_phi;
        let x_151 : i32 = x_151_phi;
        if (((x_151 < 10) && (x_151 <= x_116))) {
        } else {
          break;
        }

        continuing {
          x_149 = (x_148 + 1);
          x_152 = (x_151 + 1);
          let x_158 : i32 = data[x_151];
          temp[x_148] = x_158;
          x_148_phi = x_149;
          x_151_phi = x_152;
        }
      }
      x_161_phi = x_109;
      loop {
        var x_162 : i32;
        let x_161 : i32 = x_161_phi;
        if ((x_161 <= x_119)) {
        } else {
          break;
        }

        continuing {
          let x_167 : i32 = temp[x_161];
          data[x_161] = x_167;
          x_162 = (x_161 + 1);
          x_161_phi = x_162;
        }
      }

      continuing {
        x_109_phi = x_110;
      }
    }

    continuing {
      x_103 = (2 * x_102);
      x_102_phi = x_103;
    }
  }
  var x_171 : i32;
  var x_189 : f32;
  var x_278 : f32;
  var x_279_phi : f32;
  let x_170 : f32 = gl_FragCoord.y;
  x_171 = i32(x_170);
  if ((x_171 < 30)) {
    let x_177 : i32 = data[0];
    x_180 = (0.5 + (f32(x_177) * 0.100000001));
    x_280_phi = x_180;
  } else {
    var x_198 : f32;
    var x_277 : f32;
    var x_278_phi : f32;
    if ((x_171 < 60)) {
      let x_186 : i32 = data[1];
      x_189 = (0.5 + (f32(x_186) * 0.100000001));
      x_279_phi = x_189;
    } else {
      var x_207 : f32;
      var x_249 : f32;
      var x_277_phi : f32;
      if ((x_171 < 90)) {
        let x_195 : i32 = data[2];
        x_198 = (0.5 + (f32(x_195) * 0.100000001));
        x_278_phi = x_198;
      } else {
        if ((x_171 < 120)) {
          let x_204 : i32 = data[3];
          x_207 = (0.5 + (f32(x_204) * 0.100000001));
          x_277_phi = x_207;
        } else {
          var x_220 : f32;
          var x_248 : f32;
          var x_249_phi : f32;
          var x_256_phi : vec2<f32>;
          var x_259_phi : i32;
          if ((x_171 < 150)) {
            discard;
          } else {
            var x_229 : f32;
            var x_247 : f32;
            var x_248_phi : f32;
            if ((x_171 < 180)) {
              let x_217 : i32 = data[5];
              x_220 = (0.5 + (f32(x_217) * 0.100000001));
              x_249_phi = x_220;
            } else {
              var x_238 : f32;
              var x_246 : f32;
              var x_247_phi : f32;
              if ((x_171 < 210)) {
                let x_226 : i32 = data[6];
                x_229 = (0.5 + (f32(x_226) * 0.100000001));
                x_248_phi = x_229;
              } else {
                if ((x_171 < 240)) {
                  let x_235 : i32 = data[7];
                  x_238 = (0.5 + (f32(x_235) * 0.100000001));
                  x_247_phi = x_238;
                } else {
                  if ((x_171 < 270)) {
                  } else {
                    discard;
                  }
                  let x_243 : i32 = data[8];
                  x_246 = (0.5 + (f32(x_243) * 0.100000001));
                  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;
            let x_251 : f32 = x_8.injectionSwitch.y;
            let x_252 : bool = (x_62 > x_251);
            if (x_252) {
              x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
            }
            x_256_phi = vec2<f32>(1.0, 1.0);
            x_259_phi = 0;
            loop {
              var x_272 : vec2<f32>;
              var x_260 : i32;
              var x_273_phi : vec2<f32>;
              let x_256 : vec2<f32> = x_256_phi;
              let x_259 : i32 = x_259_phi;
              if ((x_259 <= 32)) {
              } else {
                break;
              }
              x_273_phi = x_256;
              if ((x_256.x < 0.0)) {
                if (x_252) {
                  discard;
                }
                x_272 = x_256;
                x_272.y = (x_256.y + 1.0);
                x_273_phi = x_272;
              }
              let x_273 : vec2<f32> = x_273_phi;
              var x_257_1 : vec2<f32> = x_273;
              x_257_1.x = (x_273.x + x_273.y);
              let x_257 : vec2<f32> = x_257_1;

              continuing {
                x_260 = (x_259 + 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;
  }
  let x_280 : f32 = x_280_phi;
  x_GLF_color = vec4<f32>(x_280, x_280, x_280, 1.0);
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
