struct buf0 {
  one : i32;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var a : i32;
  var i0 : i32;
  var i1 : i32;
  var i2 : i32;
  var i3 : i32;
  var i4 : i32;
  var i5 : i32;
  var i6 : i32;
  var i7 : i32;
  var i8_1 : i32;
  var i9 : i32;
  a = 0;
  i0 = 0;
  loop {
    let x_40 : i32 = i0;
    let x_42 : i32 = x_7.one;
    if ((x_40 < x_42)) {
    } else {
      break;
    }
    i1 = 0;
    loop {
      let x_49 : i32 = i1;
      let x_51 : i32 = x_7.one;
      if ((x_49 < x_51)) {
      } else {
        break;
      }
      i2 = 0;
      loop {
        let x_58 : i32 = i2;
        let x_60 : i32 = x_7.one;
        if ((x_58 < x_60)) {
        } else {
          break;
        }
        i3 = 0;
        loop {
          let x_67 : i32 = i3;
          let x_69 : i32 = x_7.one;
          if ((x_67 < (x_69 + 2))) {
          } else {
            break;
          }
          i4 = 0;
          loop {
            let x_77 : i32 = i4;
            let x_79 : i32 = x_7.one;
            if ((x_77 < x_79)) {
            } else {
              break;
            }
            i5 = 0;
            loop {
              let x_86 : i32 = i5;
              let x_88 : i32 = x_7.one;
              if ((x_86 < x_88)) {
              } else {
                break;
              }
              loop {
                let x_96 : i32 = x_7.one;
                if ((x_96 > 0)) {
                } else {
                  break;
                }
                i6 = 0;
                loop {
                  let x_103 : i32 = i6;
                  let x_105 : i32 = x_7.one;
                  if ((x_103 < x_105)) {
                  } else {
                    break;
                  }
                  i7 = 0;
                  loop {
                    let x_112 : i32 = i7;
                    let x_114 : i32 = x_7.one;
                    if ((x_112 < x_114)) {
                    } else {
                      break;
                    }
                    i8_1 = 0;
                    loop {
                      let x_121 : i32 = i8_1;
                      let x_123 : i32 = x_7.one;
                      if ((x_121 < x_123)) {
                      } else {
                        break;
                      }
                      i9 = 0;
                      loop {
                        let x_130 : i32 = i9;
                        let x_132 : i32 = x_7.one;
                        if ((x_130 < x_132)) {
                        } else {
                          break;
                        }
                        let x_135 : i32 = a;
                        a = (x_135 + 1);

                        continuing {
                          let x_137 : i32 = i9;
                          i9 = (x_137 + 1);
                        }
                      }

                      continuing {
                        let x_139 : i32 = i8_1;
                        i8_1 = (x_139 + 1);
                      }
                    }

                    continuing {
                      let x_141 : i32 = i7;
                      i7 = (x_141 + 1);
                    }
                  }

                  continuing {
                    let x_143 : i32 = i6;
                    i6 = (x_143 + 1);
                  }
                }
                break;
              }

              continuing {
                let x_145 : i32 = i5;
                i5 = (x_145 + 1);
              }
            }

            continuing {
              let x_147 : i32 = i4;
              i4 = (x_147 + 1);
            }
          }

          continuing {
            let x_149 : i32 = i3;
            i3 = (x_149 + 1);
          }
        }

        continuing {
          let x_151 : i32 = i2;
          i2 = (x_151 + 1);
        }
      }

      continuing {
        let x_153 : i32 = i1;
        i1 = (x_153 + 1);
      }
    }

    continuing {
      let x_155 : i32 = i0;
      i0 = (x_155 + 1);
    }
  }
  let x_157 : i32 = a;
  if ((x_157 == 3)) {
    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);
  }
  return;
}

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

[[stage(fragment)]]
fn main() -> main_out {
  main_1();
  return main_out(x_GLF_color);
}
