struct buf0 {
  injected : i32;
};

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

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var idx : i32;
  var m43 : mat4x3<f32>;
  var ll_1 : i32;
  var GLF_live6rows : i32;
  var z : i32;
  var ll_2 : i32;
  var ctr : i32;
  var tempm43 : mat4x3<f32>;
  var ll_3 : i32;
  var c : i32;
  var d : i32;
  var GLF_live6sums : array<f32, 9>;
  idx = 0;
  m43 = mat4x3<f32>(vec3<f32>(1.0, 0.0, 0.0), vec3<f32>(0.0, 1.0, 0.0), vec3<f32>(0.0, 0.0, 1.0), vec3<f32>(0.0, 0.0, 0.0));
  ll_1 = 0;
  GLF_live6rows = 2;
  loop {
    let x_18 : i32 = ll_1;
    let x_19 : i32 = x_9.injected;
    if ((x_18 >= x_19)) {
      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
      break;
    }
    let x_20 : i32 = ll_1;
    ll_1 = (x_20 + 1);
    let x_22 : i32 = x_9.injected;
    z = x_22;
    ll_2 = 0;
    ctr = 0;
    loop {
      let x_23 : i32 = ctr;
      if ((x_23 < 1)) {
      } else {
        break;
      }
      let x_24 : i32 = ll_2;
      let x_25 : i32 = x_9.injected;
      if ((x_24 >= x_25)) {
        break;
      }
      let x_26 : i32 = ll_2;
      ll_2 = (x_26 + 1);
      let x_98 : mat4x3<f32> = m43;
      tempm43 = x_98;
      ll_3 = 0;
      c = 0;
      loop {
        let x_28 : i32 = z;
        if ((1 < x_28)) {
        } else {
          break;
        }
        d = 0;
        let x_29 : i32 = c;
        let x_30 : i32 = c;
        let x_31 : i32 = c;
        let x_32 : i32 = d;
        let x_33 : i32 = d;
        let x_34 : i32 = d;
        tempm43[select(0, x_31, ((x_29 >= 0) && (x_30 < 4)))][select(0, x_34, ((x_32 >= 0) && (x_33 < 3)))] = 1.0;

        continuing {
          let x_35 : i32 = c;
          c = (x_35 + 1);
        }
      }
      let x_37 : i32 = idx;
      let x_38 : i32 = idx;
      let x_39 : i32 = idx;
      let x_117 : i32 = select(0, x_39, ((x_37 >= 0) && (x_38 < 9)));
      let x_40 : i32 = ctr;
      let x_119 : f32 = m43[x_40].y;
      let x_121 : f32 = GLF_live6sums[x_117];
      GLF_live6sums[x_117] = (x_121 + x_119);

      continuing {
        let x_41 : i32 = ctr;
        ctr = (x_41 + 1);
      }
    }
    let x_43 : i32 = idx;
    idx = (x_43 + 1);
  }
  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);
}
