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

[[group(0), binding(0)]] var<uniform> x_10 : 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 x_91 : f32;
  var x_91_phi : f32;
  var x_94_phi : i32;
  x_91_phi = -0.5;
  x_94_phi = 1;
  loop {
    var x_104 : f32;
    var x_113 : f32;
    var x_95 : i32;
    var x_92_phi : f32;
    x_91 = x_91_phi;
    let x_94 : i32 = x_94_phi;
    if ((x_94 < 800)) {
    } else {
      break;
    }
    var x_112 : f32;
    var x_113_phi : f32;
    if (((x_94 % 32) == 0)) {
      x_104 = (x_91 + 0.400000006);
      x_92_phi = x_104;
    } else {
      let x_106 : f32 = *(thirty_two);
      x_113_phi = x_91;
      if (((f32(x_94) - (round(x_106) * floor((f32(x_94) / round(x_106))))) <= 0.01)) {
        x_112 = (x_91 + 100.0);
        x_113_phi = x_112;
      }
      x_113 = x_113_phi;
      x_92_phi = x_113;
    }
    var x_92 : f32;
    x_92 = x_92_phi;
    let x_115 : f32 = *(limit);
    if ((f32(x_94) >= x_115)) {
      return x_92;
    }

    continuing {
      x_95 = (x_94 + 1);
      x_91_phi = x_92;
      x_94_phi = x_95;
    }
  }
  return x_91;
}

fn main_1() {
  var c : vec3<f32>;
  var param : f32;
  var param_1 : f32;
  var param_2 : f32;
  var param_3 : f32;
  var x_68_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_52 : f32 = x_10.resolution.x;
  let x_54 : f32 = round((x_52 * 0.125));
  let x_56 : f32 = gl_FragCoord.x;
  param = x_56;
  param_1 = x_54;
  let x_57 : f32 = compute_value_f1_f1_(&(param), &(param_1));
  c.x = x_57;
  let x_60 : f32 = gl_FragCoord.y;
  param_2 = x_60;
  param_3 = x_54;
  let x_61 : f32 = compute_value_f1_f1_(&(param_2), &(param_3));
  c.y = x_61;
  let x_63 : f32 = c.x;
  let x_64 : f32 = c.y;
  c.z = (x_63 + x_64);
  x_68_phi = 0;
  loop {
    var x_69 : i32;
    let x_68 : i32 = x_68_phi;
    if ((x_68 < 3)) {
    } else {
      break;
    }
    let x_75 : f32 = c[x_68];
    if ((x_75 >= 1.0)) {
      let x_79 : f32 = c[x_68];
      let x_80 : f32 = c[x_68];
      c[x_68] = (x_79 * x_80);
    }

    continuing {
      x_69 = (x_68 + 1);
      x_68_phi = x_69;
    }
  }
  let x_82 : vec3<f32> = c;
  let x_84 : vec3<f32> = normalize(abs(x_82));
  x_GLF_color = vec4<f32>(x_84.x, x_84.y, x_84.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);
}
