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

var<private> GLF_live6tree : array<i32, 10>;

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

var<private> x_GLF_color : vec4<f32>;

fn GLF_live6search_() -> i32 {
  var GLF_live6index : i32;
  var GLF_live6currentNode : i32;
  GLF_live6index = 0;
  loop {
    if (true) {
    } else {
      break;
    }
    let x_10 : i32 = GLF_live6index;
    let x_11 : i32 = GLF_live6tree[x_10];
    GLF_live6currentNode = x_11;
    let x_12 : i32 = GLF_live6currentNode;
    if ((x_12 != 1)) {
      return 1;
    }
    GLF_live6index = 1;
  }
  return 1;
}

fn main_1() {
  let x_40 : f32 = x_9.injectionSwitch.x;
  if ((x_40 > 1.0)) {
    let x_13 : i32 = GLF_live6search_();
  }
  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);
}
