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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  loop {
    var x_45 : bool;
    var x_48 : i32;
    var x_49 : i32;
    var x_46 : bool;
    var x_115 : i32;
    var x_116 : i32;
    var x_45_phi : bool;
    var x_48_phi : i32;
    var x_50_phi : i32;
    var x_52_phi : i32;
    var x_111_phi : i32;
    var x_112_phi : bool;
    var x_115_phi : i32;
    var x_118_phi : i32;
    var x_120_phi : i32;
    var x_161_phi : i32;
    let x_40 : f32 = x_6.injectionSwitch.x;
    let x_41 : bool = (x_40 < -1.0);
    x_45_phi = false;
    x_48_phi = 0;
    x_50_phi = 0;
    x_52_phi = 0;
    loop {
      var x_62 : i32;
      var x_65 : i32;
      var x_66 : i32;
      var x_63 : i32;
      var x_53 : i32;
      var x_62_phi : i32;
      var x_65_phi : i32;
      var x_67_phi : i32;
      var x_51_phi : i32;
      var x_49_phi : i32;
      var x_46_phi : bool;
      x_45 = x_45_phi;
      x_48 = x_48_phi;
      let x_50 : i32 = x_50_phi;
      let x_52 : i32 = x_52_phi;
      let x_55 : f32 = gl_FragCoord.y;
      x_111_phi = x_48;
      x_112_phi = x_45;
      if ((x_52 < select(100, 10, (x_55 > -1.0)))) {
      } else {
        break;
      }
      x_62_phi = x_48;
      x_65_phi = x_50;
      x_67_phi = 0;
      loop {
        var x_97 : i32;
        var x_68 : i32;
        var x_66_phi : i32;
        x_62 = x_62_phi;
        x_65 = x_65_phi;
        let x_67 : i32 = x_67_phi;
        x_51_phi = x_65;
        x_49_phi = x_62;
        x_46_phi = x_45;
        if ((x_67 < 2)) {
        } else {
          break;
        }
        loop {
          var x_78 : bool;
          var x_86_phi : i32;
          var x_97_phi : i32;
          var x_98_phi : bool;
          let x_77 : f32 = gl_FragCoord.x;
          x_78 = (x_77 < -1.0);
          if (!((x_40 < 0.0))) {
            if (x_78) {
              x_66_phi = 0;
              break;
            }
            x_86_phi = 1;
            loop {
              var x_87 : i32;
              let x_86 : i32 = x_86_phi;
              x_97_phi = x_65;
              x_98_phi = false;
              if ((x_86 < 3)) {
              } else {
                break;
              }
              if (x_78) {
                continue;
              }
              if ((x_86 > 0)) {
                x_97_phi = 1;
                x_98_phi = true;
                break;
              }

              continuing {
                x_87 = (x_86 + 1);
                x_86_phi = x_87;
              }
            }
            x_97 = x_97_phi;
            let x_98 : bool = x_98_phi;
            x_66_phi = x_97;
            if (x_98) {
              break;
            }
          }
          x_66_phi = 0;
          break;
        }
        x_66 = x_66_phi;
        x_63 = bitcast<i32>((x_62 + x_66));
        if (x_41) {
          loop {
            if (x_41) {
            } else {
              break;
            }

            continuing {
              let x_105 : f32 = f32(x_52);
              x_GLF_color = vec4<f32>(x_105, x_105, x_105, x_105);
            }
          }
          x_51_phi = x_66;
          x_49_phi = x_63;
          x_46_phi = true;
          break;
        }

        continuing {
          x_68 = (x_67 + 1);
          x_62_phi = x_63;
          x_65_phi = x_66;
          x_67_phi = x_68;
        }
      }
      let x_51 : i32 = x_51_phi;
      x_49 = x_49_phi;
      x_46 = x_46_phi;
      x_111_phi = x_49;
      x_112_phi = x_46;
      if (x_46) {
        break;
      }
      if (!(x_41)) {
        x_111_phi = x_49;
        x_112_phi = x_46;
        break;
      }

      continuing {
        x_53 = (x_52 + 1);
        x_45_phi = x_46;
        x_48_phi = x_49;
        x_50_phi = x_51;
        x_52_phi = x_53;
      }
    }
    let x_111 : i32 = x_111_phi;
    let x_112 : bool = x_112_phi;
    if (x_112) {
      break;
    }
    x_115_phi = x_111;
    x_118_phi = 0;
    x_120_phi = 0;
    loop {
      var x_154 : i32;
      var x_121 : i32;
      var x_119_phi : i32;
      x_115 = x_115_phi;
      let x_118 : i32 = x_118_phi;
      let x_120 : i32 = x_120_phi;
      let x_123 : f32 = x_6.injectionSwitch.y;
      x_161_phi = x_115;
      if ((x_120 < i32((x_123 + 1.0)))) {
      } else {
        break;
      }
      loop {
        var x_135 : bool;
        var x_143_phi : i32;
        var x_154_phi : i32;
        var x_155_phi : bool;
        let x_134 : f32 = gl_FragCoord.x;
        x_135 = (x_134 < -1.0);
        if (!((x_40 < 0.0))) {
          if (x_135) {
            x_119_phi = 0;
            break;
          }
          x_143_phi = 1;
          loop {
            var x_144 : i32;
            let x_143 : i32 = x_143_phi;
            x_154_phi = x_118;
            x_155_phi = false;
            if ((x_143 < 3)) {
            } else {
              break;
            }
            if (x_135) {
              continue;
            }
            if ((x_143 > 0)) {
              x_154_phi = 1;
              x_155_phi = true;
              break;
            }

            continuing {
              x_144 = (x_143 + 1);
              x_143_phi = x_144;
            }
          }
          x_154 = x_154_phi;
          let x_155 : bool = x_155_phi;
          x_119_phi = x_154;
          if (x_155) {
            break;
          }
        }
        x_119_phi = 0;
        break;
      }
      var x_119 : i32;
      x_119 = x_119_phi;
      x_116 = bitcast<i32>((x_115 + x_119));
      if (select(x_41, false, !(x_41))) {
        x_161_phi = x_116;
        break;
      }

      continuing {
        x_121 = (x_120 + 1);
        x_115_phi = x_116;
        x_118_phi = x_119;
        x_120_phi = x_121;
      }
    }
    let x_161 : i32 = x_161_phi;
    if ((x_161 == 4)) {
      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
    } else {
      x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
    }
    break;
  }
  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);
}
