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

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn main_1() {
  var c : vec3<f32>;
  var x_51 : f32;
  var x_55 : f32;
  var x_56 : f32;
  var x_81 : f32;
  var x_82 : f32;
  var x_118 : f32;
  var x_119 : f32;
  var x_55_phi : f32;
  var x_58_phi : i32;
  var x_81_phi : f32;
  var x_82_phi : f32;
  var x_83_phi : bool;
  var x_85_phi : f32;
  var x_122_phi : f32;
  var x_129_phi : i32;
  c = vec3<f32>(7.0, 8.0, 9.0);
  let x_47 : f32 = x_7.resolution.x;
  let x_49 : f32 = round((x_47 * 0.125));
  x_51 = gl_FragCoord.x;
  switch(0u) {
    default: {
      x_55_phi = -0.5;
      x_58_phi = 1;
      loop {
        var x_68 : f32;
        var x_76 : f32;
        var x_59 : i32;
        var x_56_phi : f32;
        x_55 = x_55_phi;
        let x_58 : i32 = x_58_phi;
        x_81_phi = 0.0;
        x_82_phi = x_55;
        x_83_phi = false;
        if ((x_58 < 800)) {
        } else {
          break;
        }
        var x_75 : f32;
        var x_76_phi : f32;
        if (((x_58 % 32) == 0)) {
          x_68 = (x_55 + 0.400000006);
          x_56_phi = x_68;
        } else {
          x_76_phi = x_55;
          if (((f32(x_58) % round(x_49)) <= 0.01)) {
            x_75 = (x_55 + 100.0);
            x_76_phi = x_75;
          }
          x_76 = x_76_phi;
          x_56_phi = x_76;
        }
        x_56 = x_56_phi;
        if ((f32(x_58) >= x_51)) {
          x_81_phi = x_56;
          x_82_phi = x_56;
          x_83_phi = true;
          break;
        }

        continuing {
          x_59 = (x_58 + 1);
          x_55_phi = x_56;
          x_58_phi = x_59;
        }
      }
      x_81 = x_81_phi;
      x_82 = x_82_phi;
      let x_83 : bool = x_83_phi;
      x_85_phi = x_81;
      if (x_83) {
        break;
      }
      x_85_phi = x_82;
    }
  }
  var x_88 : f32;
  var x_92 : f32;
  var x_93 : f32;
  var x_92_phi : f32;
  var x_95_phi : i32;
  var x_118_phi : f32;
  var x_119_phi : f32;
  var x_120_phi : bool;
  let x_85 : f32 = x_85_phi;
  let x_86 : ptr<function, f32> = &(c.x);
  *(x_86) = x_85;
  x_88 = gl_FragCoord.y;
  switch(0u) {
    default: {
      x_92_phi = -0.5;
      x_95_phi = 1;
      loop {
        var x_105 : f32;
        var x_113 : f32;
        var x_96 : i32;
        var x_93_phi : f32;
        x_92 = x_92_phi;
        let x_95 : i32 = x_95_phi;
        x_118_phi = 0.0;
        x_119_phi = x_92;
        x_120_phi = false;
        if ((x_95 < 800)) {
        } else {
          break;
        }
        var x_112 : f32;
        var x_113_phi : f32;
        if (((x_95 % 32) == 0)) {
          x_105 = (x_92 + 0.400000006);
          x_93_phi = x_105;
        } else {
          x_113_phi = x_92;
          if (((f32(x_95) % round(x_49)) <= 0.01)) {
            x_112 = (x_92 + 100.0);
            x_113_phi = x_112;
          }
          x_113 = x_113_phi;
          x_93_phi = x_113;
        }
        x_93 = x_93_phi;
        if ((f32(x_95) >= x_88)) {
          x_118_phi = x_93;
          x_119_phi = x_93;
          x_120_phi = true;
          break;
        }

        continuing {
          x_96 = (x_95 + 1);
          x_92_phi = x_93;
          x_95_phi = x_96;
        }
      }
      x_118 = x_118_phi;
      x_119 = x_119_phi;
      let x_120 : bool = x_120_phi;
      x_122_phi = x_118;
      if (x_120) {
        break;
      }
      x_122_phi = x_119;
    }
  }
  let x_122 : f32 = x_122_phi;
  let x_123 : ptr<function, f32> = &(c.y);
  *(x_123) = x_122;
  let x_124 : f32 = *(x_86);
  let x_125 : f32 = *(x_123);
  c.z = (x_124 + x_125);
  x_129_phi = 0;
  loop {
    var x_130 : i32;
    let x_129 : i32 = x_129_phi;
    if ((x_129 < 3)) {
    } else {
      break;
    }
    let x_135 : ptr<function, f32> = &(c[x_129]);
    let x_136 : f32 = *(x_135);
    if ((x_136 >= 1.0)) {
      let x_140 : f32 = *(x_135);
      let x_141 : f32 = *(x_135);
      *(x_135) = (x_140 * x_141);
    }

    continuing {
      x_130 = (x_129 + 1);
      x_129_phi = x_130;
    }
  }
  let x_143 : vec3<f32> = c;
  let x_145 : vec3<f32> = normalize(abs(x_143));
  x_GLF_color = vec4<f32>(x_145.x, x_145.y, x_145.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);
}
