var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var m43 : mat4x3<f32>;
  var ll1 : i32;
  var rows : i32;
  var ll4 : i32;
  var ll2 : i32;
  var c : i32;
  var tempm43 : mat4x3<f32>;
  var ll3 : i32;
  var d : i32;
  var r : i32;
  var sums : array<f32, 9>;
  var idx : i32;
  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));
  ll1 = 0;
  rows = 2;
  loop {
    if (true) {
    } else {
      break;
    }
    x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
    let x_16 : i32 = ll1;
    if ((x_16 >= 5)) {
      break;
    }
    let x_17 : i32 = ll1;
    ll1 = (x_17 + 1);
    ll4 = 10;
    ll2 = 0;
    c = 0;
    loop {
      let x_19 : i32 = c;
      if ((x_19 < 1)) {
      } else {
        break;
      }
      let x_20 : i32 = ll2;
      if ((x_20 >= 0)) {
        break;
      }
      let x_21 : i32 = ll2;
      ll2 = (x_21 + 1);
      let x_92 : mat4x3<f32> = m43;
      tempm43 = x_92;
      ll3 = 0;
      d = 0;
      loop {
        let x_23 : i32 = ll4;
        if ((1 < x_23)) {
        } else {
          break;
        }
        let x_24 : i32 = d;
        let x_25 : i32 = d;
        let x_26 : i32 = d;
        let x_27 : i32 = r;
        let x_28 : i32 = r;
        let x_29 : i32 = r;
        tempm43[select(0, x_26, ((x_24 >= 0) && (x_25 < 4)))][select(0, x_29, ((x_27 >= 0) && (x_28 < 3)))] = 1.0;

        continuing {
          let x_30 : i32 = d;
          d = (x_30 + 1);
        }
      }
      let x_32 : i32 = idx;
      let x_33 : i32 = idx;
      let x_34 : i32 = idx;
      let x_111 : i32 = select(0, x_34, ((x_32 >= 0) && (x_33 < 9)));
      let x_35 : i32 = c;
      let x_113 : f32 = m43[x_35].y;
      let x_115 : f32 = sums[x_111];
      sums[x_111] = (x_115 + x_113);

      continuing {
        let x_36 : i32 = c;
        c = (x_36 + 1);
      }
    }
    let x_38 : i32 = idx;
    idx = (x_38 + 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);
}
