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

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

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

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

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

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

[[group(0), binding(1)]] var<uniform> x_32 : buf1;

fn merge_i1_i1_i1_(from : ptr<function, i32>, mid : ptr<function, i32>, to : ptr<function, i32>) {
  var k : i32;
  var i : i32;
  var j : i32;
  var i_1 : i32;
  let x_255 : i32 = *(from);
  k = x_255;
  let x_256 : i32 = *(from);
  i = x_256;
  let x_257 : i32 = *(mid);
  j = (x_257 + 1);
  loop {
    let x_263 : i32 = i;
    let x_264 : i32 = *(mid);
    let x_266 : i32 = j;
    let x_267 : i32 = *(to);
    if (((x_263 <= x_264) & (x_266 <= x_267))) {
    } else {
      break;
    }
    let x_271 : i32 = i;
    let x_273 : i32 = data[x_271];
    let x_274 : i32 = j;
    let x_276 : i32 = data[x_274];
    if ((x_273 < x_276)) {
      let x_281 : i32 = k;
      k = (x_281 + 1);
      let x_283 : i32 = i;
      i = (x_283 + 1);
      let x_286 : i32 = data[x_283];
      temp[x_281] = x_286;
    } else {
      let x_288 : i32 = k;
      k = (x_288 + 1);
      let x_290 : i32 = j;
      j = (x_290 + 1);
      let x_293 : i32 = data[x_290];
      temp[x_288] = x_293;
    }
  }
  loop {
    let x_299 : i32 = i;
    let x_301 : i32 = i;
    let x_302 : i32 = *(mid);
    if (((x_299 < 10) & (x_301 <= x_302))) {
    } else {
      break;
    }
    let x_306 : i32 = k;
    k = (x_306 + 1);
    let x_308 : i32 = i;
    i = (x_308 + 1);
    let x_311 : i32 = data[x_308];
    temp[x_306] = x_311;
  }
  let x_313 : i32 = *(from);
  i_1 = x_313;
  loop {
    let x_318 : i32 = i_1;
    let x_319 : i32 = *(to);
    if ((x_318 <= x_319)) {
    } else {
      break;
    }
    let x_322 : i32 = i_1;
    let x_323 : i32 = i_1;
    let x_325 : i32 = temp[x_323];
    data[x_322] = x_325;

    continuing {
      let x_327 : i32 = i_1;
      i_1 = (x_327 + 1);
    }
  }
  return;
}

fn mergeSort_() {
  var low : i32;
  var high : i32;
  var m : i32;
  var i_2 : i32;
  var from_1 : i32;
  var mid_1 : i32;
  var to_1 : i32;
  var param : i32;
  var param_1 : i32;
  var param_2 : i32;
  low = 0;
  high = 9;
  m = 1;
  loop {
    let x_334 : i32 = m;
    let x_335 : i32 = high;
    if ((x_334 <= x_335)) {
    } else {
      break;
    }
    let x_338 : i32 = low;
    i_2 = x_338;
    loop {
      let x_343 : i32 = i_2;
      let x_344 : i32 = high;
      if ((x_343 < x_344)) {
      } else {
        break;
      }
      let x_347 : i32 = i_2;
      from_1 = x_347;
      let x_348 : i32 = i_2;
      let x_349 : i32 = m;
      mid_1 = ((x_348 + x_349) - 1);
      let x_352 : i32 = i_2;
      let x_353 : i32 = m;
      let x_357 : i32 = high;
      to_1 = min(((x_352 + (2 * x_353)) - 1), x_357);
      let x_359 : i32 = from_1;
      param = x_359;
      let x_360 : i32 = mid_1;
      param_1 = x_360;
      let x_361 : i32 = to_1;
      param_2 = x_361;
      merge_i1_i1_i1_(&(param), &(param_1), &(param_2));

      continuing {
        let x_363 : i32 = m;
        let x_365 : i32 = i_2;
        i_2 = (x_365 + (2 * x_363));
      }
    }

    continuing {
      let x_367 : i32 = m;
      m = (2 * x_367);
    }
  }
  return;
}

fn main_1() {
  var i_3 : i32;
  var j_1 : i32;
  var grey : f32;
  let x_88 : f32 = x_28.injectionSwitch.x;
  i_3 = i32(x_88);
  loop {
    let x_94 : i32 = i_3;
    switch(x_94) {
      case 9: {
        let x_124 : i32 = i_3;
        data[x_124] = -5;
        if (true) {
        } else {
          continue;
        }
      }
      case 8: {
        let x_122 : i32 = i_3;
        data[x_122] = -4;
      }
      case 7: {
        let x_120 : i32 = i_3;
        data[x_120] = -3;
      }
      case 6: {
        let x_118 : i32 = i_3;
        data[x_118] = -2;
      }
      case 5: {
        let x_116 : i32 = i_3;
        data[x_116] = -1;
      }
      case 4: {
        let x_114 : i32 = i_3;
        data[x_114] = 0;
      }
      case 3: {
        let x_112 : i32 = i_3;
        data[x_112] = 1;
      }
      case 2: {
        let x_110 : i32 = i_3;
        data[x_110] = 2;
      }
      case 1: {
        let x_108 : i32 = i_3;
        data[x_108] = 3;
      }
      case 0: {
        let x_106 : i32 = i_3;
        data[x_106] = 4;
      }
      default: {
      }
    }
    let x_126 : i32 = i_3;
    i_3 = (x_126 + 1);

    continuing {
      let x_128 : i32 = i_3;
      if ((x_128 < 10)) {
      } else {
        break;
      }
    }
  }
  j_1 = 0;
  loop {
    let x_134 : i32 = j_1;
    if ((x_134 < 10)) {
    } else {
      break;
    }
    let x_137 : i32 = j_1;
    let x_138 : i32 = j_1;
    let x_140 : i32 = data[x_138];
    temp[x_137] = x_140;

    continuing {
      let x_142 : i32 = j_1;
      j_1 = (x_142 + 1);
    }
  }
  mergeSort_();
  let x_146 : f32 = gl_FragCoord.y;
  if ((i32(x_146) < 30)) {
    let x_153 : i32 = data[0];
    grey = (0.5 + (f32(x_153) / 10.0));
  } else {
    let x_158 : f32 = gl_FragCoord.y;
    if ((i32(x_158) < 60)) {
      let x_165 : i32 = data[1];
      grey = (0.5 + (f32(x_165) / 10.0));
    } else {
      let x_170 : f32 = gl_FragCoord.y;
      if ((i32(x_170) < 90)) {
        let x_177 : i32 = data[2];
        grey = (0.5 + (f32(x_177) / 10.0));
      } else {
        let x_182 : f32 = gl_FragCoord.y;
        if ((i32(x_182) < 120)) {
          let x_189 : i32 = data[3];
          grey = (0.5 + (f32(x_189) / 10.0));
        } else {
          let x_194 : f32 = gl_FragCoord.y;
          if ((i32(x_194) < 150)) {
            discard;
          } else {
            let x_201 : f32 = gl_FragCoord.y;
            if ((i32(x_201) < 180)) {
              let x_208 : i32 = data[5];
              grey = (0.5 + (f32(x_208) / 10.0));
            } else {
              let x_213 : f32 = gl_FragCoord.y;
              if ((i32(x_213) < 210)) {
                let x_220 : i32 = data[6];
                grey = (0.5 + (f32(x_220) / 10.0));
              } else {
                let x_225 : f32 = gl_FragCoord.y;
                if ((i32(x_225) < 240)) {
                  let x_232 : i32 = data[7];
                  grey = (0.5 + (f32(x_232) / 10.0));
                } else {
                  let x_237 : f32 = gl_FragCoord.y;
                  if ((i32(x_237) < 270)) {
                    let x_244 : i32 = data[8];
                    grey = (0.5 + (f32(x_244) / 10.0));
                  } else {
                    discard;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
  let x_248 : f32 = grey;
  let x_249 : vec3<f32> = vec3<f32>(x_248, x_248, x_248);
  x_GLF_color = vec4<f32>(x_249.x, x_249.y, x_249.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);
}
