#include <metal_stdlib>

using namespace metal;
struct tint_array_wrapper {
  int arr[10];
};
struct QuicksortObject {
  tint_array_wrapper numbers;
};
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

void swap_i1_i1_(thread int* const i, thread int* const j, thread QuicksortObject* const tint_symbol_83) {
  int temp = 0;
  int const x_932 = temp;
  temp = 0;
  temp = x_932;
  float3 const x_523 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
  int const x_933 = *(i);
  *(i) = 0;
  *(i) = x_933;
  int const x_28 = *(i);
  int const x_934 = *(j);
  *(j) = 0;
  *(j) = x_934;
  float3 const x_524 = float3(x_523.y, x_523.x, x_523.y);
  int const x_935 = temp;
  temp = 0;
  temp = x_935;
  int const x_30_save = x_28;
  int const x_936 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_936;
  int const x_31 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  int const x_937 = temp;
  temp = 0;
  temp = x_937;
  temp = x_31;
  int const x_938 = *(j);
  *(j) = 0;
  *(j) = x_938;
  float3 const x_525 = float3(x_523.z, float3(1.0f, 2.0f, 3.0f).x, x_523.y);
  int const x_939 = *(i);
  *(i) = 0;
  *(i) = x_939;
  int const x_32 = *(i);
  int const x_940 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_940;
  int const x_33 = *(j);
  int const x_941 = *(i);
  *(i) = 0;
  *(i) = x_941;
  float3 const x_526 = float3(x_525.x, x_525.z, x_525.z);
  int const x_942 = (*(tint_symbol_83)).numbers.arr[x_30_save];
  (*(tint_symbol_83)).numbers.arr[x_30_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_30_save] = x_942;
  int const x_34_save = x_33;
  int const x_35 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  QuicksortObject const x_943 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_4 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_5 = {.numbers=tint_symbol_4};
  *(tint_symbol_83) = tint_symbol_5;
  *(tint_symbol_83) = x_943;
  float2 const x_527 = float2(x_526.x, x_526.x);
  int const x_36_save = x_32;
  float3 const x_528 = float3(x_524.x, x_524.z, x_524.x);
  (*(tint_symbol_83)).numbers.arr[x_36_save] = x_35;
  QuicksortObject const x_944 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_6 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_7 = {.numbers=tint_symbol_6};
  *(tint_symbol_83) = tint_symbol_7;
  *(tint_symbol_83) = x_944;
  float3 const x_529 = float3(x_526.y, x_526.z, x_526.x);
  int const x_945 = *(i);
  *(i) = 0;
  *(i) = x_945;
  int const x_37 = *(j);
  int const x_946 = temp;
  temp = 0;
  temp = x_946;
  float2 const x_530 = float2(x_529.z, x_529.y);
  int const x_947 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  (*(tint_symbol_83)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_34_save] = x_947;
  int const x_38 = temp;
  int const x_948 = *(j);
  *(j) = 0;
  *(j) = x_948;
  float3 const x_531 = float3(x_527.x, x_526.y, x_526.x);
  int const x_949 = (*(tint_symbol_83)).numbers.arr[x_36_save];
  (*(tint_symbol_83)).numbers.arr[x_36_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_36_save] = x_949;
  QuicksortObject const x_950 = *(tint_symbol_83);
  tint_array_wrapper const tint_symbol_8 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_9 = {.numbers=tint_symbol_8};
  *(tint_symbol_83) = tint_symbol_9;
  *(tint_symbol_83) = x_950;
  float3 const x_532 = float3(x_528.x, x_528.y, x_528.x);
  int const x_951 = (*(tint_symbol_83)).numbers.arr[x_34_save];
  (*(tint_symbol_83)).numbers.arr[x_34_save] = 0;
  (*(tint_symbol_83)).numbers.arr[x_34_save] = x_951;
  (*(tint_symbol_83)).numbers.arr[x_37] = x_38;
  return;
}

int performPartition_i1_i1_(thread int* const l, thread int* const h, thread QuicksortObject* const tint_symbol_84) {
  int param_3 = 0;
  int i_1 = 0;
  int j_1 = 0;
  int param_2 = 0;
  int param_1 = 0;
  int param = 0;
  int pivot = 0;
  float2 x_537 = 0.0f;
  float3 x_538 = 0.0f;
  int const x_952 = *(h);
  *(h) = 0;
  *(h) = x_952;
  int const x_41 = *(h);
  int const x_953 = *(l);
  *(l) = 0;
  *(l) = x_953;
  int const x_42_save = x_41;
  int const x_954 = (*(tint_symbol_84)).numbers.arr[x_42_save];
  (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_84)).numbers.arr[x_42_save] = x_954;
  int const x_43 = (*(tint_symbol_84)).numbers.arr[x_42_save];
  int const x_955 = param_3;
  param_3 = 0;
  param_3 = x_955;
  float3 const x_534 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).z);
  int const x_956 = param_1;
  param_1 = 0;
  param_1 = x_956;
  pivot = x_43;
  int const x_45 = *(l);
  int const x_957 = *(h);
  *(h) = 0;
  *(h) = x_957;
  int const x_958 = j_1;
  j_1 = 0;
  j_1 = x_958;
  float3 const x_535 = float3(x_534.y, x_534.z, x_534.y);
  int const x_959 = *(l);
  *(l) = 0;
  *(l) = x_959;
  i_1 = as_type<int>((as_type<uint>(x_45) - as_type<uint>(as_type<int>(1u))));
  int const x_49 = *(l);
  float3 const x_536 = float3(x_534.x, x_534.z, x_535.x);
  j_1 = 10;
  QuicksortObject const x_960 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_10 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_11 = {.numbers=tint_symbol_10};
  *(tint_symbol_84) = tint_symbol_11;
  *(tint_symbol_84) = x_960;
  while (true) {
    int const x_961 = pivot;
    pivot = 0;
    pivot = x_961;
    int const x_962 = param_1;
    param_1 = 0;
    param_1 = x_962;
    int const x_55 = j_1;
    int const x_963 = pivot;
    pivot = 0;
    pivot = x_963;
    x_537 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    QuicksortObject const x_964 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_12 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_13 = {.numbers=tint_symbol_12};
    *(tint_symbol_84) = tint_symbol_13;
    *(tint_symbol_84) = x_964;
    int const x_56 = *(h);
    int const x_965 = *(h);
    *(h) = 0;
    *(h) = x_965;
    int const x_966 = param;
    param = 0;
    param = x_966;
    int const x_967 = j_1;
    j_1 = 0;
    j_1 = x_967;
    x_538 = float3(x_534.x, x_537.y, x_534.z);
    int const x_968 = param;
    param = 0;
    param = x_968;
    if ((x_55 <= as_type<int>((as_type<uint>(x_56) - as_type<uint>(as_type<int>(1u)))))) {
    } else {
      break;
    }
    int const x_60 = j_1;
    int const x_969 = (*(tint_symbol_84)).numbers.arr[x_42_save];
    (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
    (*(tint_symbol_84)).numbers.arr[x_42_save] = x_969;
    int const x_61_save = x_60;
    int const x_970 = *(h);
    *(h) = 0;
    *(h) = x_970;
    float3 const x_539 = float3(x_537.x, x_535.z, x_537.x);
    int const x_971 = param_1;
    param_1 = 0;
    param_1 = x_971;
    int const x_62 = (*(tint_symbol_84)).numbers.arr[x_61_save];
    QuicksortObject const x_972 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_14 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_15 = {.numbers=tint_symbol_14};
    *(tint_symbol_84) = tint_symbol_15;
    *(tint_symbol_84) = x_972;
    int const x_63 = pivot;
    float2 const x_540 = float2(float3(1.0f, 2.0f, 3.0f).y, x_534.z);
    int const x_973 = i_1;
    i_1 = 0;
    i_1 = x_973;
    int const x_974 = *(l);
    *(l) = 0;
    *(l) = x_974;
    float3 const x_541 = float3(x_534.y, x_534.x, x_534.y);
    int const x_975 = pivot;
    pivot = 0;
    pivot = x_975;
    if ((x_62 <= x_63)) {
      float3 const x_542 = float3(x_541.z, x_541.x, x_541.x);
      int const x_976 = param_3;
      param_3 = 0;
      param_3 = x_976;
      int const x_67 = i_1;
      int const x_977 = pivot;
      pivot = 0;
      pivot = x_977;
      float2 const x_543 = float2(x_539.x, x_541.y);
      int const x_978 = i_1;
      i_1 = 0;
      i_1 = x_978;
      int const x_979 = param;
      param = 0;
      param = x_979;
      i_1 = as_type<int>((as_type<uint>(x_67) + as_type<uint>(as_type<int>(1u))));
      int const x_980 = *(l);
      *(l) = 0;
      *(l) = x_980;
      float3 const x_544 = float3(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y, x_540.x);
      int const x_70 = i_1;
      float2 const x_545 = float2(x_537.y, x_538.x);
      int const x_981 = param;
      param = 0;
      param = x_981;
      param = x_70;
      int const x_982 = param;
      param = 0;
      param = x_982;
      float2 const x_546 = float2(x_545.x, x_545.x);
      int const x_983 = i_1;
      i_1 = 0;
      i_1 = x_983;
      int const x_72 = j_1;
      param_1 = x_72;
      int const x_984 = param_3;
      param_3 = 0;
      param_3 = x_984;
      swap_i1_i1_(&(param), &(param_1), tint_symbol_84);
      int const x_985 = param_1;
      param_1 = 0;
      param_1 = x_985;
    }
    QuicksortObject const x_986 = *(tint_symbol_84);
    tint_array_wrapper const tint_symbol_16 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_17 = {.numbers=tint_symbol_16};
    *(tint_symbol_84) = tint_symbol_17;
    *(tint_symbol_84) = x_986;
    {
      int const x_987 = *(h);
      *(h) = 0;
      *(h) = x_987;
      int const x_74 = j_1;
      int const x_988 = *(h);
      *(h) = 0;
      *(h) = x_988;
      float3 const x_547 = float3(x_539.x, x_541.z, x_541.z);
      int const x_989 = (*(tint_symbol_84)).numbers.arr[x_61_save];
      (*(tint_symbol_84)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_84)).numbers.arr[x_61_save] = x_989;
      int const x_990 = param;
      param = 0;
      param = x_990;
      j_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_74)));
      int const x_991 = param_1;
      param_1 = 0;
      param_1 = x_991;
      float3 const x_548 = float3(x_541.y, x_541.z, x_541.x);
      int const x_992 = (*(tint_symbol_84)).numbers.arr[x_61_save];
      (*(tint_symbol_84)).numbers.arr[x_61_save] = 0;
      (*(tint_symbol_84)).numbers.arr[x_61_save] = x_992;
    }
  }
  int const x_76 = i_1;
  int const x_993 = (*(tint_symbol_84)).numbers.arr[x_42_save];
  (*(tint_symbol_84)).numbers.arr[x_42_save] = 0;
  (*(tint_symbol_84)).numbers.arr[x_42_save] = x_993;
  float2 const x_549 = float2(x_534.x, x_534.y);
  QuicksortObject const x_994 = *(tint_symbol_84);
  tint_array_wrapper const tint_symbol_18 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_19 = {.numbers=tint_symbol_18};
  *(tint_symbol_84) = tint_symbol_19;
  *(tint_symbol_84) = x_994;
  int const x_995 = *(h);
  *(h) = 0;
  *(h) = x_995;
  i_1 = as_type<int>((as_type<uint>(1) + as_type<uint>(x_76)));
  int const x_996 = param_1;
  param_1 = 0;
  param_1 = x_996;
  int const x_79 = i_1;
  int const x_997 = j_1;
  j_1 = 0;
  j_1 = x_997;
  float2 const x_550 = float2(x_534.x, x_534.x);
  int const x_998 = param_1;
  param_1 = 0;
  param_1 = x_998;
  param_2 = x_79;
  float2 const x_551 = float2(x_534.y, x_536.x);
  int const x_999 = pivot;
  pivot = 0;
  pivot = x_999;
  int const x_81 = *(h);
  float2 const x_552 = float2(x_550.x, x_549.y);
  int const x_1000 = *(h);
  *(h) = 0;
  *(h) = x_1000;
  param_3 = x_81;
  int const x_1001 = i_1;
  i_1 = 0;
  i_1 = x_1001;
  float2 const x_553 = float2(x_549.y, x_552.x);
  int const x_1002 = *(h);
  *(h) = 0;
  *(h) = x_1002;
  swap_i1_i1_(&(param_2), &(param_3), tint_symbol_84);
  int const x_1003 = *(l);
  *(l) = 0;
  *(l) = x_1003;
  float2 const x_554 = float2(x_536.z, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1004 = param_1;
  param_1 = 0;
  param_1 = x_1004;
  int const x_83 = i_1;
  int const x_1005 = param;
  param = 0;
  param = x_1005;
  float2 const x_555 = float2(x_534.y, x_534.x);
  int const x_1006 = j_1;
  j_1 = 0;
  j_1 = x_1006;
  return x_83;
}

void quicksort_(thread QuicksortObject* const tint_symbol_85) {
  int param_4 = 0;
  int h_1 = 0;
  int p = 0;
  int l_1 = 0;
  int top = 0;
  tint_array_wrapper stack = {};
  int param_5 = 0;
  l_1 = 0;
  int const x_1007 = param_5;
  param_5 = 0;
  param_5 = x_1007;
  h_1 = 9;
  tint_array_wrapper const x_1008 = stack;
  tint_array_wrapper const tint_symbol_20 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_20;
  stack = x_1008;
  float2 const x_556 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1009 = param_5;
  param_5 = 0;
  param_5 = x_1009;
  top = -1;
  int const x_1010 = p;
  p = 0;
  p = x_1010;
  int const x_93 = top;
  float2 const x_557 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
  int const x_1011 = p;
  p = 0;
  p = x_1011;
  int const x_94 = as_type<int>((as_type<uint>(x_93) + as_type<uint>(as_type<int>(1u))));
  int const x_1012 = top;
  top = 0;
  top = x_1012;
  float2 const x_558 = float2(x_556.y, x_557.y);
  int const x_1013 = param_4;
  param_4 = 0;
  param_4 = x_1013;
  top = x_94;
  int const x_1014 = h_1;
  h_1 = 0;
  h_1 = x_1014;
  float3 const x_559 = float3(x_557.y, x_557.x, x_557.x);
  int const x_1015 = param_4;
  param_4 = 0;
  param_4 = x_1015;
  int const x_95 = l_1;
  QuicksortObject const x_1016 = *(tint_symbol_85);
  tint_array_wrapper const tint_symbol_21 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_22 = {.numbers=tint_symbol_21};
  *(tint_symbol_85) = tint_symbol_22;
  *(tint_symbol_85) = x_1016;
  float3 const x_560 = float3(x_559.y, x_559.x, x_557.x);
  int const x_96_save = x_94;
  tint_array_wrapper const x_1017 = stack;
  tint_array_wrapper const tint_symbol_23 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  stack = tint_symbol_23;
  stack = x_1017;
  float3 const x_561 = float3(x_556.y, x_556.y, x_556.y);
  int const x_1018 = l_1;
  l_1 = 0;
  l_1 = 0;
  stack.arr[x_96_save] = x_95;
  int const x_1019 = param_5;
  param_5 = 0;
  param_5 = x_1019;
  int const x_97 = top;
  int const x_1020 = param_4;
  param_4 = 0;
  param_4 = x_1020;
  float3 const x_562 = float3(float3(1.0f, 2.0f, 3.0f).z, x_558.y, float3(1.0f, 2.0f, 3.0f).y);
  int const x_1021 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1021;
  int const x_98 = as_type<int>((as_type<uint>(x_97) + as_type<uint>(1)));
  int const x_1022 = stack.arr[x_96_save];
  stack.arr[x_96_save] = 0;
  stack.arr[x_96_save] = x_1022;
  float3 const x_563 = float3(x_559.x, x_559.z, x_556.y);
  top = x_98;
  int const x_1023 = param_4;
  param_4 = 0;
  param_4 = x_1023;
  int const x_99 = h_1;
  int const x_1024 = param_4;
  param_4 = 0;
  param_4 = x_1024;
  float3 const x_564 = float3(x_558.x, x_561.x, x_558.y);
  int const x_1025 = l_1;
  l_1 = 0;
  l_1 = x_1025;
  int const x_100_save = x_98;
  int const x_1026 = param_5;
  param_5 = 0;
  param_5 = x_1026;
  float2 const x_565 = float2(x_564.z, x_564.z);
  int const x_1027 = p;
  p = 0;
  p = x_1027;
  stack.arr[x_100_save] = x_99;
  while (true) {
    float3 const x_566 = float3(x_563.x, x_563.x, x_563.x);
    int const x_1028 = h_1;
    h_1 = 0;
    h_1 = x_1028;
    tint_array_wrapper const x_1029 = stack;
    tint_array_wrapper const tint_symbol_24 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_24;
    stack = x_1029;
    int const x_106 = top;
    tint_array_wrapper const x_1030 = stack;
    tint_array_wrapper const tint_symbol_25 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_25;
    stack = x_1030;
    float2 const x_567 = float2(x_558.x, x_564.z);
    int const x_1031 = param_4;
    param_4 = 0;
    param_4 = x_1031;
    if ((x_106 >= as_type<int>(0u))) {
    } else {
      break;
    }
    QuicksortObject const x_1032 = *(tint_symbol_85);
    tint_array_wrapper const tint_symbol_26 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_27 = {.numbers=tint_symbol_26};
    *(tint_symbol_85) = tint_symbol_27;
    *(tint_symbol_85) = x_1032;
    float3 const x_568 = float3(x_559.y, x_559.x, x_563.y);
    int const x_1033 = param_4;
    param_4 = 0;
    param_4 = x_1033;
    int const x_108 = top;
    float3 const x_569 = float3(x_565.x, x_567.y, x_565.x);
    int const x_1034 = h_1;
    h_1 = 0;
    h_1 = x_1034;
    float2 const x_570 = float2(x_556.x, x_556.x);
    int const x_1035 = p;
    p = 0;
    p = x_1035;
    top = as_type<int>((as_type<uint>(x_108) - as_type<uint>(as_type<int>(1u))));
    int const x_1036 = p;
    p = 0;
    p = x_1036;
    int const x_110_save = x_108;
    int const x_1037 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1037;
    int const x_111 = stack.arr[x_110_save];
    tint_array_wrapper const x_1038 = stack;
    tint_array_wrapper const tint_symbol_28 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_28;
    stack = x_1038;
    float3 const x_571 = float3(x_559.y, x_559.x, x_564.y);
    int const x_1039 = l_1;
    l_1 = 0;
    l_1 = x_1039;
    h_1 = x_111;
    tint_array_wrapper const x_1040 = stack;
    tint_array_wrapper const tint_symbol_29 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    stack = tint_symbol_29;
    stack = x_1040;
    float2 const x_572 = float2(x_562.y, x_561.y);
    int const x_1041 = p;
    p = 0;
    p = x_1041;
    int const x_112 = top;
    int const x_1042 = param_4;
    param_4 = 0;
    param_4 = x_1042;
    int const x_1043 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1043;
    float2 const x_573 = float2(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).z);
    top = as_type<int>((as_type<uint>(x_112) - as_type<uint>(1)));
    int const x_1044 = param_5;
    param_5 = 0;
    param_5 = x_1044;
    float3 const x_574 = float3(x_570.y, x_565.x, x_570.y);
    int const x_1045 = h_1;
    h_1 = 0;
    h_1 = x_1045;
    int const x_114_save = x_112;
    float2 const x_575 = float2(x_564.y, x_564.z);
    int const x_1046 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1046;
    int const x_115 = stack.arr[x_114_save];
    int const x_1047 = p;
    p = 0;
    p = x_1047;
    float3 const x_576 = float3(x_573.y, x_573.y, x_565.x);
    int const x_1048 = param_5;
    param_5 = 0;
    param_5 = x_1048;
    l_1 = x_115;
    int const x_1049 = top;
    top = 0;
    top = x_1049;
    int const x_118 = l_1;
    param_4 = x_118;
    int const x_1050 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1050;
    float2 const x_577 = float2(x_569.y, x_569.z);
    int const x_120 = h_1;
    float2 const x_578 = float2(x_558.x, float3(1.0f, 2.0f, 3.0f).y);
    param_5 = x_120;
    int const x_1051 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1051;
    int const x_121 = performPartition_i1_i1_(&(param_4), &(param_5), tint_symbol_85);
    float2 const x_579 = float2(x_567.x, x_568.x);
    int const x_1052 = param_5;
    param_5 = 0;
    param_5 = x_1052;
    p = x_121;
    int const x_1053 = param_4;
    param_4 = 0;
    param_4 = x_1053;
    int const x_122 = p;
    int const x_1054 = h_1;
    h_1 = 0;
    h_1 = x_1054;
    float2 const x_580 = float2(x_568.y, x_568.y);
    int const x_1055 = l_1;
    l_1 = 0;
    l_1 = x_1055;
    int const x_1056 = h_1;
    h_1 = 0;
    h_1 = x_1056;
    int const x_124 = l_1;
    int const x_1057 = stack.arr[x_110_save];
    stack.arr[x_110_save] = 0;
    stack.arr[x_110_save] = x_1057;
    int const x_1058 = h_1;
    h_1 = 0;
    h_1 = x_1058;
    float2 const x_582 = float2(x_567.y, x_573.x);
    int const x_1059 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1059;
    if ((as_type<int>((as_type<uint>(x_122) - as_type<uint>(as_type<int>(1u)))) > x_124)) {
      int const x_1060 = param_4;
      param_4 = 0;
      param_4 = x_1060;
      int const x_128 = top;
      float2 const x_583 = float2(x_571.y, x_556.y);
      int const x_1061 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1061;
      tint_array_wrapper const x_1062 = stack;
      tint_array_wrapper const tint_symbol_30 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_30;
      stack = x_1062;
      float2 const x_584 = float2(x_569.z, x_569.y);
      float3 const x_585 = float3(x_580.y, x_577.x, x_577.x);
      int const x_130 = l_1;
      int const x_1063 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1063;
      float2 const x_586 = float2(x_564.x, x_585.x);
      int const x_1064 = param_5;
      param_5 = 0;
      param_5 = x_1064;
      int const x_131_save = as_type<int>((as_type<uint>(1) + as_type<uint>(x_128)));
      int const x_1065 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1065;
      float3 const x_587 = float3(x_566.y, x_566.y, x_563.x);
      int const x_1066 = param_5;
      param_5 = 0;
      param_5 = x_1066;
      stack.arr[x_131_save] = x_130;
      int const x_132 = top;
      int const x_1067 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1067;
      float2 const x_588 = float2(x_575.y, x_575.x);
      int const x_1068 = stack.arr[x_131_save];
      stack.arr[x_131_save] = 0;
      stack.arr[x_131_save] = x_1068;
      int const x_133 = as_type<int>((1u + as_type<uint>(x_132)));
      int const x_1069 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1069;
      float3 const x_589 = float3(x_576.z, x_588.y, x_576.z);
      int const x_1070 = h_1;
      h_1 = 0;
      h_1 = x_1070;
      top = x_133;
      tint_array_wrapper const x_1071 = stack;
      tint_array_wrapper const tint_symbol_31 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_31;
      stack = x_1071;
      int const x_134 = p;
      float2 const x_590 = float2(x_576.x, x_573.y);
      int const x_1072 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1072;
      int const x_136_save = x_133;
      int const x_1073 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1073;
      stack.arr[x_136_save] = as_type<int>((as_type<uint>(x_134) - as_type<uint>(as_type<int>(1u))));
      int const x_1074 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1074;
      float2 const x_591 = float2(x_569.z, x_569.y);
      int const x_1075 = stack.arr[x_136_save];
      stack.arr[x_136_save] = 0;
      stack.arr[x_136_save] = x_1075;
    }
    int const x_1076 = stack.arr[x_96_save];
    stack.arr[x_96_save] = 0;
    stack.arr[x_96_save] = x_1076;
    float2 const x_592 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).y);
    QuicksortObject const x_1077 = *(tint_symbol_85);
    tint_array_wrapper const tint_symbol_32 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_33 = {.numbers=tint_symbol_32};
    *(tint_symbol_85) = tint_symbol_33;
    *(tint_symbol_85) = x_1077;
    int const x_137 = p;
    int const x_1078 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1078;
    float3 const x_593 = float3(x_571.z, x_556.x, x_556.y);
    int const x_1079 = p;
    p = 0;
    p = x_1079;
    float3 const x_594 = float3(x_563.z, x_563.x, x_575.x);
    int const x_1080 = stack.arr[x_114_save];
    stack.arr[x_114_save] = 0;
    stack.arr[x_114_save] = x_1080;
    int const x_139 = h_1;
    int const x_1081 = top;
    top = 0;
    top = x_1081;
    float3 const x_595 = float3(x_560.z, x_568.x, x_560.x);
    int const x_1082 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1082;
    int const x_1083 = p;
    p = 0;
    p = x_1083;
    if ((as_type<int>((1u + as_type<uint>(x_137))) < x_139)) {
      int const x_1084 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1084;
      float2 const x_596 = float2(x_592.y, x_582.x);
      int const x_1085 = l_1;
      l_1 = 0;
      l_1 = x_1085;
      int const x_143 = top;
      int const x_1086 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1086;
      float3 const x_597 = float3(x_562.y, x_560.y, x_560.y);
      int const x_144 = as_type<int>((as_type<uint>(x_143) + as_type<uint>(1)));
      int const x_1087 = param_5;
      param_5 = 0;
      param_5 = x_1087;
      top = x_144;
      int const x_1088 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1088;
      int const x_145 = p;
      int const x_1089 = param_5;
      param_5 = 0;
      param_5 = x_1089;
      float3 const x_599 = float3(x_560.z, x_560.x, x_568.x);
      int const x_1090 = p;
      p = 0;
      p = x_1090;
      float3 const x_600 = float3(x_556.x, x_580.x, x_580.x);
      int const x_1091 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1091;
      int const x_147_save = x_144;
      int const x_1092 = stack.arr[x_110_save];
      stack.arr[x_110_save] = 0;
      stack.arr[x_110_save] = x_1092;
      float2 const x_601 = float2(x_563.x, x_563.y);
      stack.arr[x_147_save] = as_type<int>((1u + as_type<uint>(x_145)));
      tint_array_wrapper const x_1093 = stack;
      tint_array_wrapper const tint_symbol_34 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_34;
      stack = x_1093;
      int const x_148 = top;
      int const x_1094 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1094;
      float2 const x_602 = float2(x_565.y, x_599.y);
      tint_array_wrapper const x_1095 = stack;
      tint_array_wrapper const tint_symbol_35 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      stack = tint_symbol_35;
      stack = x_1095;
      int const x_149 = as_type<int>((as_type<uint>(x_148) + as_type<uint>(as_type<int>(1u))));
      int const x_1096 = stack.arr[x_147_save];
      stack.arr[x_147_save] = 0;
      stack.arr[x_147_save] = x_1096;
      top = x_149;
      int const x_1097 = param_4;
      param_4 = 0;
      param_4 = x_1097;
      int const x_150 = h_1;
      int const x_1098 = stack.arr[x_100_save];
      stack.arr[x_100_save] = 0;
      stack.arr[x_100_save] = x_1098;
      int const x_1099 = stack.arr[x_96_save];
      stack.arr[x_96_save] = 0;
      stack.arr[x_96_save] = x_1099;
      stack.arr[x_149] = x_150;
      int const x_1100 = stack.arr[x_114_save];
      stack.arr[x_114_save] = 0;
      stack.arr[x_114_save] = x_1100;
      float3 const x_603 = float3(x_568.y, x_564.x, x_564.x);
      int const x_1101 = l_1;
      l_1 = 0;
      l_1 = x_1101;
    }
    int const x_1102 = stack.arr[x_100_save];
    stack.arr[x_100_save] = 0;
    stack.arr[x_100_save] = x_1102;
    {
      int const x_1103 = l_1;
      l_1 = 0;
      l_1 = x_1103;
      float2 const x_604 = float2(x_563.z, x_564.x);
      QuicksortObject const x_1104 = *(tint_symbol_85);
      tint_array_wrapper const tint_symbol_36 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
      QuicksortObject const tint_symbol_37 = {.numbers=tint_symbol_36};
      *(tint_symbol_85) = tint_symbol_37;
      *(tint_symbol_85) = x_1104;
    }
  }
  int const x_1105 = h_1;
  h_1 = 0;
  h_1 = x_1105;
  return;
}

void main_1(constant buf0& x_188, thread QuicksortObject* const tint_symbol_86, thread float4* const tint_symbol_87, thread float4* const tint_symbol_88) {
  float3 color = 0.0f;
  int i_2 = 0;
  float2 uv = 0.0f;
  float2 const x_717 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_717;
  i_2 = 0;
  QuicksortObject const x_721 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_38 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_39 = {.numbers=tint_symbol_38};
  *(tint_symbol_86) = tint_symbol_39;
  *(tint_symbol_86) = x_721;
  if (true) {
    QuicksortObject const x_722 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_40 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_41 = {.numbers=tint_symbol_40};
    *(tint_symbol_86) = tint_symbol_41;
    *(tint_symbol_86) = x_722;
    float2 const x_431 = float2(float3(1.0f, 2.0f, 3.0f).x, float3(1.0f, 2.0f, 3.0f).x);
    int const x_158 = i_2;
    float2 const x_723 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_723;
    float3 const x_725 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_725;
    float2 const x_432 = float2(x_431.y, x_431.y);
    QuicksortObject const x_726 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_42 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_43 = {.numbers=tint_symbol_42};
    *(tint_symbol_86) = tint_symbol_43;
    *(tint_symbol_86) = x_726;
  }
  QuicksortObject const x_756 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_44 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_45 = {.numbers=tint_symbol_44};
  *(tint_symbol_86) = tint_symbol_45;
  *(tint_symbol_86) = x_756;
  float2 const x_446 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x);
  int const x_757 = i_2;
  i_2 = 0;
  i_2 = x_757;
  quicksort_(tint_symbol_86);
  QuicksortObject const x_758 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_46 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_47 = {.numbers=tint_symbol_46};
  *(tint_symbol_86) = tint_symbol_47;
  *(tint_symbol_86) = x_758;
  float4 const x_184 = *(tint_symbol_87);
  float2 const x_759 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_759;
  float2 const x_447 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  float2 const x_760 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_760;
  float2 const x_185 = float2(x_184.x, x_184.y);
  float3 const x_448 = float3(x_185.y, x_446.y, x_446.y);
  QuicksortObject const x_761 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_48 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_49 = {.numbers=tint_symbol_48};
  *(tint_symbol_86) = tint_symbol_49;
  *(tint_symbol_86) = x_761;
  float2 const x_762 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_762;
  float2 const x_191 = x_188.resolution;
  QuicksortObject const x_763 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_50 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_51 = {.numbers=tint_symbol_50};
  *(tint_symbol_86) = tint_symbol_51;
  *(tint_symbol_86) = x_763;
  float3 const x_449 = float3(x_184.y, float3(1.0f, 2.0f, 3.0f).z, x_184.w);
  float3 const x_764 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_764;
  float2 const x_192 = (x_185 / x_191);
  QuicksortObject const x_765 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_52 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_53 = {.numbers=tint_symbol_52};
  *(tint_symbol_86) = tint_symbol_53;
  *(tint_symbol_86) = x_765;
  float2 const x_450 = float2(x_447.x, x_185.y);
  float3 const x_766 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  float3 const x_767 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_767;
  color = x_766;
  uv = x_192;
  color = float3(1.0f, 2.0f, 3.0f);
  float3 const x_768 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_768;
  float3 const x_451 = float3(x_185.x, x_185.y, x_446.y);
  QuicksortObject const x_769 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_54 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_55 = {.numbers=tint_symbol_54};
  *(tint_symbol_86) = tint_symbol_55;
  *(tint_symbol_86) = x_769;
  int const x_770 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).numbers.arr[0u] = x_770;
  int const x_201 = (*(tint_symbol_86)).numbers.arr[0u];
  QuicksortObject const x_771 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_56 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_57 = {.numbers=tint_symbol_56};
  *(tint_symbol_86) = tint_symbol_57;
  *(tint_symbol_86) = x_771;
  int const x_772 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).numbers.arr[0u] = x_772;
  float const x_206 = color.x;
  float const x_773 = color.x;
  color.x = 0.0f;
  color.x = x_773;
  float2 const x_452 = float2(float3(1.0f, 2.0f, 3.0f).z, float3(1.0f, 2.0f, 3.0f).y);
  int const x_774 = i_2;
  i_2 = 0;
  i_2 = x_774;
  QuicksortObject const x_775 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_58 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_59 = {.numbers=tint_symbol_58};
  *(tint_symbol_86) = tint_symbol_59;
  *(tint_symbol_86) = x_775;
  float3 const x_453 = float3(x_451.x, x_450.x, x_450.y);
  color.x = (x_206 + float(x_201));
  float2 const x_776 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_776;
  float2 const x_777 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_777;
  float2 const x_454 = float2(x_184.y, x_184.y);
  float const x_210 = uv.x;
  float2 const x_455 = float2(x_192.y, x_192.x);
  float const x_778 = uv.x;
  uv.x = 0.0f;
  uv.x = x_778;
  QuicksortObject const x_779 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_60 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_61 = {.numbers=tint_symbol_60};
  *(tint_symbol_86) = tint_symbol_61;
  *(tint_symbol_86) = x_779;
  if ((x_210 > 0.25f)) {
    int const x_780 = i_2;
    i_2 = 0;
    i_2 = x_780;
    int const x_781 = (*(tint_symbol_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).numbers.arr[0u] = x_781;
    float3 const x_456 = float3(float2(0.0f, 0.0f).y, x_448.y, x_448.y);
    float const x_782 = uv.x;
    uv.x = 0.0f;
    uv.x = x_782;
    int const x_216 = (*(tint_symbol_86)).numbers.arr[1];
    QuicksortObject const x_783 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_62 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_63 = {.numbers=tint_symbol_62};
    *(tint_symbol_86) = tint_symbol_63;
    *(tint_symbol_86) = x_783;
    float2 const x_457 = float2(x_454.x, x_454.x);
    float2 const x_784 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_784;
    QuicksortObject const x_785 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_64 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_65 = {.numbers=tint_symbol_64};
    *(tint_symbol_86) = tint_symbol_65;
    *(tint_symbol_86) = x_785;
    float2 const x_458 = float2(float3(1.0f, 2.0f, 3.0f).z, float2(0.0f, 0.0f).y);
    int const x_786 = i_2;
    i_2 = 0;
    i_2 = x_786;
    float const x_219 = color[0];
    float const x_787 = color[0];
    color[0] = 0.0f;
    color[0] = x_787;
    float3 const x_788 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_788;
    float3 const x_789 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_789;
    float3 const x_459 = float3(x_454.y, x_454.y, x_447.y);
    float const x_790 = color[0];
    color[0] = 0.0f;
    color[0] = x_790;
    color.x = (float(x_216) + x_219);
    int const x_791 = (*(tint_symbol_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).numbers.arr[0u] = x_791;
  }
  float const x_792 = uv.x;
  uv.x = 0.0f;
  uv.x = x_792;
  float const x_793 = uv.x;
  uv.x = 0.0f;
  uv.x = x_793;
  float const x_223 = uv.x;
  float const x_794 = uv.x;
  uv.x = 0.0f;
  uv.x = x_794;
  float3 const x_460 = float3(x_453.z, x_453.y, x_453.y);
  float2 const x_795 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_795;
  float const x_796 = uv.x;
  uv.x = 0.0f;
  uv.x = x_796;
  float2 const x_461 = float2(float2(0.0f, 0.0f).y, float2(0.0f, 0.0f).y);
  float const x_797 = uv.x;
  uv.x = 0.0f;
  uv.x = x_797;
  if ((x_223 > 0.5f)) {
    float const x_798 = uv.x;
    uv.x = 0.0f;
    uv.x = x_798;
    float2 const x_462 = float2(x_446.x, x_446.x);
    float const x_799 = color.x;
    color.x = 0.0f;
    color.x = x_799;
    float const x_800 = color.x;
    color.x = 0.0f;
    color.x = x_800;
    float3 const x_463 = float3(x_453.x, x_453.z, x_461.y);
    float const x_801 = color.x;
    color.x = 0.0f;
    color.x = x_801;
    int const x_230 = (*(tint_symbol_86)).numbers.arr[2u];
    float const x_802 = uv.x;
    uv.x = 0.0f;
    uv.x = x_802;
    float const x_803 = color.x;
    color.x = 0.0f;
    color.x = x_803;
    int const x_804 = (*(tint_symbol_86)).numbers.arr[2u];
    (*(tint_symbol_86)).numbers.arr[2u] = 0;
    (*(tint_symbol_86)).numbers.arr[2u] = x_804;
    float2 const x_464 = float2(x_450.y, x_191.x);
    float const x_805 = color.y;
    color.y = 0.0f;
    color.y = x_805;
    float const x_234 = color.y;
    int const x_806 = (*(tint_symbol_86)).numbers.arr[2u];
    (*(tint_symbol_86)).numbers.arr[2u] = 0;
    (*(tint_symbol_86)).numbers.arr[2u] = x_806;
    float2 const x_465 = float2(x_463.x, x_185.x);
    float const x_807 = color.x;
    color.x = 0.0f;
    color.x = x_807;
    int const x_808 = i_2;
    i_2 = 0;
    i_2 = x_808;
    float2 const x_466 = float2(x_455.y, float2(0.0f, 0.0f).y);
    int const x_809 = i_2;
    i_2 = 0;
    i_2 = x_809;
    color.y = (float(x_230) + x_234);
    float const x_810 = uv.x;
    uv.x = 0.0f;
    uv.x = x_810;
  }
  int const x_811 = i_2;
  i_2 = 0;
  i_2 = x_811;
  float2 const x_467 = float2(x_191.x, x_191.x);
  float const x_812 = uv.x;
  uv.x = 0.0f;
  uv.x = x_812;
  float const x_238 = uv[0];
  float3 const x_813 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_813;
  float const x_814 = color.x;
  color.x = 0.0f;
  color.x = x_814;
  if ((x_238 > 0.75f)) {
    float const x_815 = color.x;
    color.x = 0.0f;
    color.x = x_815;
    int const x_245 = (*(tint_symbol_86)).numbers.arr[3];
    float const x_816 = color.x;
    color.x = 0.0f;
    color.x = x_816;
    QuicksortObject const x_817 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_66 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_67 = {.numbers=tint_symbol_66};
    *(tint_symbol_86) = tint_symbol_67;
    *(tint_symbol_86) = x_817;
    float3 const x_468 = float3(x_467.x, x_467.x, x_467.x);
    float const x_818 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_818;
    float const x_819 = uv.x;
    uv.x = 0.0f;
    uv.x = x_819;
    float const x_249 = color.z;
    float3 const x_820 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_820;
    float3 const x_469 = float3(x_467.x, x_191.y, x_467.y);
    float const x_821 = color.z;
    color.z = 0.0f;
    color.z = x_821;
    int const x_822 = (*(tint_symbol_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).numbers.arr[0u] = x_822;
    float2 const x_470 = float2(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    float const x_823 = color.z;
    color.z = 0.0f;
    color.z = x_823;
    color.z = (x_249 + float(x_245));
    float2 const x_824 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_824;
    float2 const x_471 = float2(x_470.y, x_470.y);
  }
  float const x_825 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_825;
  float3 const x_472 = float3(x_454.x, x_454.y, x_454.y);
  int const x_254 = (*(tint_symbol_86)).numbers.arr[4];
  float const x_826 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_826;
  float3 const x_827 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_827;
  float3 const x_473 = float3(x_446.y, x_453.x, x_453.x);
  int const x_828 = (*(tint_symbol_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).numbers.arr[4] = x_828;
  float2 const x_474 = float2(x_191.x, x_184.z);
  float const x_829 = uv.x;
  uv.x = 0.0f;
  uv.x = x_829;
  float const x_257 = color.y;
  float const x_830 = color.y;
  color.y = 0.0f;
  color.y = x_830;
  float2 const x_475 = float2(x_467.x, x_450.x);
  float const x_831 = uv.x;
  uv.x = 0.0f;
  uv.x = x_831;
  float const x_832 = color.x;
  color.x = 0.0f;
  color.x = x_832;
  float2 const x_476 = float2(x_451.z, x_460.y);
  color.y = (x_257 + float(x_254));
  float3 const x_477 = float3(float2(0.0f, 0.0f).x, x_472.x, float2(0.0f, 0.0f).y);
  float const x_833 = uv.x;
  uv.x = 0.0f;
  uv.x = x_833;
  float const x_834 = color.x;
  color.x = 0.0f;
  color.x = x_834;
  float2 const x_478 = float2(x_472.x, x_472.y);
  float const x_835 = uv.y;
  uv.y = 0.0f;
  uv.y = x_835;
  float const x_261 = uv.y;
  int const x_836 = i_2;
  i_2 = 0;
  i_2 = x_836;
  float3 const x_479 = float3(float2(0.0f, 0.0f).y, x_454.y, float2(0.0f, 0.0f).x);
  int const x_837 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).numbers.arr[0u] = x_837;
  float const x_838 = color.y;
  color.y = 0.0f;
  color.y = x_838;
  float3 const x_480 = float3(x_446.x, x_446.x, float2(0.0f, 0.0f).y);
  float const x_839 = uv.x;
  uv.x = 0.0f;
  uv.x = x_839;
  if ((x_261 > 0.25f)) {
    float2 const x_481 = float2(x_447.x, x_480.z);
    float3 const x_840 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_840;
    int const x_267 = (*(tint_symbol_86)).numbers.arr[5u];
    float const x_841 = color.x;
    color.x = 0.0f;
    color.x = x_841;
    int const x_842 = i_2;
    i_2 = 0;
    i_2 = x_842;
    int const x_843 = i_2;
    i_2 = 0;
    i_2 = x_843;
    float const x_270 = color.x;
    float const x_844 = uv[0];
    uv[0] = 0.0f;
    uv[0] = x_844;
    float3 const x_482 = float3(x_455.x, x_475.y, x_455.y);
    QuicksortObject const x_845 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_68 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_69 = {.numbers=tint_symbol_68};
    *(tint_symbol_86) = tint_symbol_69;
    *(tint_symbol_86) = x_845;
    float const x_846 = uv.y;
    uv.y = 0.0f;
    uv.y = x_846;
    int const x_847 = i_2;
    i_2 = 0;
    i_2 = x_847;
    float3 const x_483 = float3(x_184.w, x_184.w, x_192.x);
    float const x_848 = uv.x;
    uv.x = 0.0f;
    uv.x = x_848;
    color.x = (float(x_267) + x_270);
    float3 const x_484 = float3(x_454.y, x_450.x, x_454.y);
    float const x_849 = uv.x;
    uv.x = 0.0f;
    uv.x = x_849;
  }
  float const x_850 = color.x;
  color.x = 0.0f;
  color.x = x_850;
  float3 const x_485 = float3(x_467.x, x_450.y, x_450.x);
  float const x_851 = uv.y;
  uv.y = 0.0f;
  uv.y = x_851;
  int const x_852 = (*(tint_symbol_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).numbers.arr[4] = x_852;
  float const x_274 = uv.y;
  int const x_853 = (*(tint_symbol_86)).numbers.arr[0u];
  (*(tint_symbol_86)).numbers.arr[0u] = 0;
  (*(tint_symbol_86)).numbers.arr[0u] = x_853;
  if ((x_274 > 0.5f)) {
    float const x_854 = uv.x;
    uv.x = 0.0f;
    uv.x = x_854;
    float2 const x_486 = float2(x_480.y, x_455.y);
    float const x_855 = color.y;
    color.y = 0.0f;
    color.y = x_855;
    float2 const x_487 = float2(x_449.z, x_449.y);
    float const x_856 = uv.y;
    uv.y = 0.0f;
    uv.y = x_856;
    int const x_280 = (*(tint_symbol_86)).numbers.arr[6u];
    float const x_857 = uv.y;
    uv.y = 0.0f;
    uv.y = x_857;
    int const x_858 = i_2;
    i_2 = 0;
    i_2 = x_858;
    int const x_859 = (*(tint_symbol_86)).numbers.arr[4];
    (*(tint_symbol_86)).numbers.arr[4] = 0;
    (*(tint_symbol_86)).numbers.arr[4] = x_859;
    float2 const x_488 = float2(x_473.z, x_473.y);
    float const x_283 = color.y;
    float2 const x_860 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_860;
    float const x_861 = color.x;
    color.x = 0.0f;
    color.x = x_861;
    float2 const x_489 = float2(x_475.y, x_475.x);
    int const x_862 = (*(tint_symbol_86)).numbers.arr[6u];
    (*(tint_symbol_86)).numbers.arr[6u] = 0;
    (*(tint_symbol_86)).numbers.arr[6u] = x_862;
    int const x_863 = (*(tint_symbol_86)).numbers.arr[6u];
    (*(tint_symbol_86)).numbers.arr[6u] = 0;
    (*(tint_symbol_86)).numbers.arr[6u] = x_863;
    float2 const x_490 = float2(x_480.z, x_480.z);
    QuicksortObject const x_864 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_70 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_71 = {.numbers=tint_symbol_70};
    *(tint_symbol_86) = tint_symbol_71;
    *(tint_symbol_86) = x_864;
    color.y = (float(x_280) + x_283);
    float const x_865 = color.x;
    color.x = 0.0f;
    color.x = x_865;
    float2 const x_491 = float2(float3(1.0f, 2.0f, 3.0f).y, x_454.x);
    float const x_866 = color.y;
    color.y = 0.0f;
    color.y = x_866;
  }
  float2 const x_492 = float2(x_455.y, x_455.y);
  float const x_867 = color.x;
  color.x = 0.0f;
  color.x = x_867;
  float const x_287 = uv.y;
  QuicksortObject const x_868 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_72 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_73 = {.numbers=tint_symbol_72};
  *(tint_symbol_86) = tint_symbol_73;
  *(tint_symbol_86) = x_868;
  float2 const x_493 = float2(x_475.x, x_475.y);
  float const x_869 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_869;
  float const x_870 = color.y;
  color.y = 0.0f;
  color.y = x_870;
  float3 const x_494 = float3(x_191.x, x_191.y, x_191.y);
  int const x_871 = (*(tint_symbol_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).numbers.arr[4] = x_871;
  if ((x_287 > 0.75f)) {
    float3 const x_872 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_872;
    float const x_873 = color.x;
    color.x = 0.0f;
    color.x = x_873;
    float3 const x_495 = float3(x_192.y, x_192.x, x_192.y);
    float3 const x_874 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_874;
    int const x_293 = (*(tint_symbol_86)).numbers.arr[7];
    float const x_875 = uv.x;
    uv.x = 0.0f;
    uv.x = x_875;
    float3 const x_496 = float3(x_475.x, x_467.y, x_467.x);
    float const x_876 = color.y;
    color.y = 0.0f;
    color.y = x_876;
    float2 const x_497 = float2(x_477.x, x_461.y);
    int const x_877 = (*(tint_symbol_86)).numbers.arr[0u];
    (*(tint_symbol_86)).numbers.arr[0u] = 0;
    (*(tint_symbol_86)).numbers.arr[0u] = x_877;
    float const x_878 = color.y;
    color.y = 0.0f;
    color.y = x_878;
    float3 const x_498 = float3(x_478.x, x_478.y, x_478.x);
    float const x_879 = color.x;
    color.x = 0.0f;
    color.x = x_879;
    float const x_296 = color.z;
    float const x_880 = uv.y;
    uv.y = 0.0f;
    uv.y = x_880;
    float2 const x_499 = float2(x_184.x, x_184.y);
    float const x_881 = uv.x;
    uv.x = 0.0f;
    uv.x = x_881;
    float const x_882 = uv.y;
    uv.y = 0.0f;
    uv.y = x_882;
    float const x_883 = uv.y;
    uv.y = 0.0f;
    uv.y = x_883;
    float3 const x_500 = float3(x_499.y, x_499.y, x_494.z);
    float const x_884 = color.z;
    color.z = 0.0f;
    color.z = x_884;
    color.z = (float(x_293) + x_296);
    float const x_885 = color.y;
    color.y = 0.0f;
    color.y = x_885;
    float2 const x_501 = float2(x_453.x, x_453.z);
    float const x_886 = color.x;
    color.x = 0.0f;
    color.x = x_886;
  }
  int const x_887 = i_2;
  i_2 = 0;
  i_2 = x_887;
  float2 const x_502 = float2(x_451.y, x_192.y);
  float2 const x_888 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_888;
  int const x_301 = (*(tint_symbol_86)).numbers.arr[8];
  int const x_889 = i_2;
  i_2 = 0;
  i_2 = x_889;
  float2 const x_503 = float2(x_185.x, x_451.z);
  int const x_890 = (*(tint_symbol_86)).numbers.arr[8];
  (*(tint_symbol_86)).numbers.arr[8] = 0;
  (*(tint_symbol_86)).numbers.arr[8] = x_890;
  float const x_891 = color.y;
  color.y = 0.0f;
  color.y = x_891;
  float2 const x_504 = float2(x_453.y, float2(0.0f, 0.0f).x);
  float const x_892 = color.x;
  color.x = 0.0f;
  color.x = x_892;
  float3 const x_505 = float3(x_504.x, x_504.y, x_504.x);
  float const x_893 = color.z;
  color.z = 0.0f;
  color.z = x_893;
  float const x_304 = color.z;
  float const x_894 = color.x;
  color.x = 0.0f;
  color.x = x_894;
  float2 const x_506 = float2(x_493.x, x_492.x);
  int const x_895 = (*(tint_symbol_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).numbers.arr[4] = x_895;
  float const x_896 = uv.y;
  uv.y = 0.0f;
  uv.y = x_896;
  float2 const x_507 = float2(x_461.x, x_447.x);
  float const x_897 = color.y;
  color.y = 0.0f;
  color.y = x_897;
  color.z = (x_304 + float(x_301));
  float2 const x_898 = uv;
  uv = float2(0.0f, 0.0f);
  uv = x_898;
  float const x_899 = uv.x;
  uv.x = 0.0f;
  uv.x = x_899;
  float3 const x_508 = float3(x_461.y, x_461.x, x_506.y);
  float const x_900 = uv.x;
  uv.x = 0.0f;
  uv.x = x_900;
  float const x_308 = uv.x;
  float const x_901 = color.y;
  color.y = 0.0f;
  color.y = x_901;
  float3 const x_509 = float3(x_503.y, x_503.x, x_448.z);
  float const x_902 = uv.y;
  uv.y = 0.0f;
  uv.y = x_902;
  float const x_310 = uv.y;
  float const x_903 = uv.y;
  uv.y = 0.0f;
  uv.y = x_903;
  float const x_904 = color.z;
  color.z = 0.0f;
  color.z = x_904;
  float3 const x_510 = float3(float3(1.0f, 2.0f, 3.0f).y, x_485.y, x_485.z);
  float const x_905 = color.z;
  color.z = 0.0f;
  color.z = x_905;
  int const x_906 = i_2;
  i_2 = 0;
  i_2 = x_906;
  float2 const x_511 = float2(x_485.z, x_485.y);
  float3 const x_907 = color;
  color = float3(0.0f, 0.0f, 0.0f);
  color = x_907;
  float const x_908 = uv.y;
  uv.y = 0.0f;
  uv.y = x_908;
  float3 const x_512 = float3(x_455.y, x_455.y, x_455.y);
  int const x_909 = (*(tint_symbol_86)).numbers.arr[4];
  (*(tint_symbol_86)).numbers.arr[4] = 0;
  (*(tint_symbol_86)).numbers.arr[4] = x_909;
  if ((fabs((x_308 - x_310)) < 0.25f)) {
    float const x_910 = uv.x;
    uv.x = 0.0f;
    uv.x = x_910;
    QuicksortObject const x_911 = *(tint_symbol_86);
    tint_array_wrapper const tint_symbol_74 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
    QuicksortObject const tint_symbol_75 = {.numbers=tint_symbol_74};
    *(tint_symbol_86) = tint_symbol_75;
    *(tint_symbol_86) = x_911;
    float3 const x_513 = float3(x_505.z, x_505.x, x_448.x);
    int const x_912 = (*(tint_symbol_86)).numbers.arr[8];
    (*(tint_symbol_86)).numbers.arr[8] = 0;
    (*(tint_symbol_86)).numbers.arr[8] = x_912;
    int const x_317 = (*(tint_symbol_86)).numbers.arr[9u];
    float3 const x_514 = float3(x_474.y, x_474.y, x_474.y);
    float const x_913 = uv.y;
    uv.y = 0.0f;
    uv.y = x_913;
    float const x_320 = color.x;
    float const x_914 = uv.y;
    uv.y = 0.0f;
    uv.y = x_914;
    float2 const x_515 = float2(x_502.x, x_502.y);
    float const x_915 = color.x;
    color.x = 0.0f;
    color.x = x_915;
    float3 const x_916 = color;
    color = float3(0.0f, 0.0f, 0.0f);
    color = x_916;
    float2 const x_516 = float2(x_452.x, x_452.x);
    float2 const x_917 = uv;
    uv = float2(0.0f, 0.0f);
    uv = x_917;
    float const x_918 = uv.x;
    uv.x = 0.0f;
    uv.x = x_918;
    float3 const x_517 = float3(float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).x, float2(0.0f, 0.0f).y);
    color.x = (float(x_317) + x_320);
    float const x_919 = color.x;
    color.x = 0.0f;
    color.x = x_919;
    float3 const x_518 = float3(x_480.y, x_508.x, x_480.x);
    float const x_920 = color.x;
    color.x = 0.0f;
    color.x = x_920;
  }
  float const x_921 = uv.y;
  uv.y = 0.0f;
  uv.y = x_921;
  float3 const x_325 = color;
  float const x_922 = uv[0];
  uv[0] = 0.0f;
  uv[0] = x_922;
  float3 const x_519 = float3(x_447.x, x_446.x, x_446.y);
  float3 const x_326 = normalize(x_325);
  float const x_923 = uv.x;
  uv.x = 0.0f;
  uv.x = x_923;
  QuicksortObject const x_924 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_76 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_77 = {.numbers=tint_symbol_76};
  *(tint_symbol_86) = tint_symbol_77;
  *(tint_symbol_86) = x_924;
  QuicksortObject const x_925 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_78 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_79 = {.numbers=tint_symbol_78};
  *(tint_symbol_86) = tint_symbol_79;
  *(tint_symbol_86) = x_925;
  float const x_926 = color.y;
  color.y = 0.0f;
  color.y = x_926;
  float2 const x_520 = float2(x_506.y, x_519.y);
  float const x_927 = color.y;
  color.y = 0.0f;
  color.y = x_927;
  float4 const x_330 = float4(x_326.x, x_326.y, x_326.z, 1.0f);
  float const x_928 = uv.y;
  uv.y = 0.0f;
  uv.y = x_928;
  float3 const x_521 = float3(float3(1.0f, 2.0f, 3.0f).y, float3(1.0f, 2.0f, 3.0f).y, x_520.y);
  float const x_929 = uv.x;
  uv.x = 0.0f;
  uv.x = x_929;
  *(tint_symbol_88) = x_330;
  QuicksortObject const x_930 = *(tint_symbol_86);
  tint_array_wrapper const tint_symbol_80 = {.arr={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
  QuicksortObject const tint_symbol_81 = {.numbers=tint_symbol_80};
  *(tint_symbol_86) = tint_symbol_81;
  *(tint_symbol_86) = x_930;
  float3 const x_522 = float3(x_330.w, x_330.y, x_493.x);
  float const x_931 = color.x;
  color.x = 0.0f;
  color.x = x_931;
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_188 [[buffer(0)]]) {
  thread float4 tint_symbol_89 = 0.0f;
  thread QuicksortObject tint_symbol_90 = {};
  thread float4 tint_symbol_91 = 0.0f;
  tint_symbol_89 = gl_FragCoord_param;
  main_1(x_188, &(tint_symbol_90), &(tint_symbol_89), &(tint_symbol_91));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_91};
  tint_symbol_2 const tint_symbol_82 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_82;
}

