[[block]]
struct buf0 {
  injectionSwitch : vec2<f32>;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var k : i32;
  var GLF_dead0j : i32;
  var donor_replacementGLF_dead0stack : array<i32, 10>;
  var donor_replacementGLF_dead0top : i32;
  var x_54 : i32;
  var matrix_b : vec4<f32>;
  var b : i32;
  k = 0;
  loop {
    let x_12 : i32 = k;
    if ((x_12 < 4)) {
    } else {
      break;
    }
    let x_62 : f32 = x_6.injectionSwitch.y;
    if ((0.0 > x_62)) {
      GLF_dead0j = 1;
      loop {
        let x_13 : i32 = donor_replacementGLF_dead0stack[0];
        if ((1 <= x_13)) {
        } else {
          break;
        }
      }
      let x_14 : i32 = donor_replacementGLF_dead0top;
      let x_15 : i32 = donor_replacementGLF_dead0top;
      if (((x_14 >= 0) & (x_15 < 9))) {
        let x_16 : i32 = donor_replacementGLF_dead0top;
        let x_17 : i32 = (x_16 + 1);
        donor_replacementGLF_dead0top = x_17;
        x_54 = x_17;
      } else {
        x_54 = 0;
      }
      let x_18 : i32 = x_54;
      donor_replacementGLF_dead0stack[x_18] = 1;
    }
    matrix_b = vec4<f32>(0.0, 0.0, 0.0, 0.0);
    b = 3;
    loop {
      let x_19 : i32 = b;
      if ((x_19 >= 0)) {
      } else {
        break;
      }
      let x_20 : i32 = b;
      let x_21 : i32 = b;
      let x_87 : f32 = matrix_b[x_21];
      matrix_b[x_20] = (x_87 - 1.0);

      continuing {
        let x_22 : i32 = b;
        b = (x_22 - 1);
      }
    }

    continuing {
      let x_24 : i32 = k;
      k = (x_24 + 1);
    }
  }
  x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.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);
}
