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

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn compute_value_f1_f1_(limit : ptr<function, f32>, thirty_two : ptr<function, f32>) -> f32 {
  var result : f32;
  var i : i32;
  result = -0.5;
  i = 1;
  loop {
    let x_111 : i32 = i;
    if ((x_111 < 800)) {
    } else {
      break;
    }
    let x_114 : i32 = i;
    if (((x_114 % 32) == 0)) {
      let x_120 : f32 = result;
      result = (x_120 + 0.400000006);
    } else {
      let x_122 : i32 = i;
      let x_124 : f32 = *(thirty_two);
      if (((f32(x_122) % round(x_124)) <= 0.01)) {
        let x_130 : f32 = result;
        result = (x_130 + 100.0);
      }
    }
    let x_132 : i32 = i;
    let x_134 : f32 = *(limit);
    if ((f32(x_132) >= x_134)) {
      let x_138 : f32 = result;
      return x_138;
    }

    continuing {
      let x_139 : i32 = i;
      i = (x_139 + 1);
    }
  }
  let x_141 : f32 = result;
  return x_141;
}

fn main_1() {
  var c : vec3<f32>;
  var thirty_two_1 : f32;
  var param : f32;
  var param_1 : f32;
  var param_2 : f32;
  var param_3 : f32;
  var i_1 : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_56 : f32 = x_13.resolution.x;
  thirty_two_1 = round((x_56 / 8.0));
  let x_60 : f32 = gl_FragCoord.x;
  param = x_60;
  let x_61 : f32 = thirty_two_1;
  param_1 = x_61;
  let x_62 : f32 = compute_value_f1_f1_(&(param), &(param_1));
  c.x = x_62;
  let x_65 : f32 = gl_FragCoord.y;
  param_2 = x_65;
  let x_66 : f32 = thirty_two_1;
  param_3 = x_66;
  let x_67 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
  c.y = x_67;
  let x_70 : f32 = c.x;
  let x_72 : f32 = c.y;
  c.z = (x_70 + x_72);
  i_1 = 0;
  loop {
    let x_79 : i32 = i_1;
    if ((x_79 < 3)) {
    } else {
      break;
    }
    let x_82 : i32 = i_1;
    let x_84 : f32 = c[x_82];
    if ((x_84 >= 1.0)) {
      let x_88 : i32 = i_1;
      let x_89 : i32 = i_1;
      let x_91 : f32 = c[x_89];
      let x_92 : i32 = i_1;
      let x_94 : f32 = c[x_92];
      c[x_88] = (x_91 * x_94);
    }

    continuing {
      let x_97 : i32 = i_1;
      i_1 = (x_97 + 1);
    }
  }
  let x_99 : vec3<f32> = c;
  let x_101 : vec3<f32> = normalize(abs(x_99));
  x_GLF_color = vec4<f32>(x_101.x, x_101.y, x_101.z, 1.0);
  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);
}
