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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn collatz_i1_(v : ptr<function, i32>) -> i32 {
  var count : i32;
  count = 0;
  loop {
    let x_89 : i32 = *(v);
    if ((x_89 > 1)) {
    } else {
      break;
    }
    let x_92 : i32 = *(v);
    if (((x_92 & 1) == 1)) {
      let x_98 : i32 = *(v);
      *(v) = ((3 * x_98) + 1);
    } else {
      let x_101 : i32 = *(v);
      *(v) = (x_101 / 2);
    }
    let x_103 : i32 = count;
    count = (x_103 + 1);
  }
  let x_105 : i32 = count;
  return x_105;
}

fn main_1() {
  var lin : vec2<f32>;
  var v_1 : i32;
  var param : i32;
  var indexable : array<vec4<f32>, 16>;
  let x_63 : vec4<f32> = gl_FragCoord;
  let x_66 : vec2<f32> = x_10.resolution;
  lin = (vec2<f32>(x_63.x, x_63.y) / x_66);
  let x_68 : vec2<f32> = lin;
  lin = floor((x_68 * 8.0));
  let x_72 : f32 = lin.x;
  let x_76 : f32 = lin.y;
  v_1 = ((i32(x_72) * 8) + i32(x_76));
  let x_79 : i32 = v_1;
  param = x_79;
  let x_80 : i32 = collatz_i1_(&(param));
  indexable = array<vec4<f32>, 16>(vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(0.5, 0.0, 0.0, 1.0), vec4<f32>(0.0, 0.5, 0.0, 1.0), vec4<f32>(0.5, 0.5, 0.0, 1.0), vec4<f32>(0.0, 0.0, 0.5, 1.0), vec4<f32>(0.5, 0.0, 0.5, 1.0), vec4<f32>(0.0, 0.5, 0.5, 1.0), vec4<f32>(0.5, 0.5, 0.5, 1.0), vec4<f32>(0.0, 0.0, 0.0, 1.0), vec4<f32>(1.0, 0.0, 0.0, 1.0), vec4<f32>(0.0, 1.0, 0.0, 1.0), vec4<f32>(1.0, 1.0, 0.0, 1.0), vec4<f32>(0.0, 0.0, 1.0, 1.0), vec4<f32>(1.0, 0.0, 1.0, 1.0), vec4<f32>(0.0, 1.0, 1.0, 1.0), vec4<f32>(1.0, 1.0, 1.0, 1.0));
  let x_83 : vec4<f32> = indexable[(x_80 % 16)];
  x_GLF_color = x_83;
  return;
}

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

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
