#include <metal_stdlib>
using namespace metal;

kernel void v() {
  {
    uint2 tint_loop_idx = uint2(4294967295u);
    int i = 0;
    while(true) {
      if (all((tint_loop_idx == uint2(0u)))) {
        break;
      }
      if ((i < 2)) {
      } else {
        break;
      }
      bool tint_continue = false;
      switch(i) {
        case 0:
        {
          {
            uint2 tint_loop_idx_1 = uint2(4294967295u);
            int j = 0;
            while(true) {
              if (all((tint_loop_idx_1 == uint2(0u)))) {
                break;
              }
              if ((j < 2)) {
              } else {
                break;
              }
              bool tint_continue_1 = false;
              switch(j) {
                case 0:
                {
                  tint_continue_1 = true;
                  break;
                }
                default:
                {
                  break;
                }
              }
              if (tint_continue_1) {
                {
                  uint const tint_low_inc_1 = (tint_loop_idx_1.x - 1u);
                  tint_loop_idx_1.x = tint_low_inc_1;
                  uint const tint_carry_1 = uint((tint_low_inc_1 == 4294967295u));
                  tint_loop_idx_1.y = (tint_loop_idx_1.y - tint_carry_1);
                  j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)));
                }
                continue;
              }
              {
                uint const tint_low_inc_1 = (tint_loop_idx_1.x - 1u);
                tint_loop_idx_1.x = tint_low_inc_1;
                uint const tint_carry_1 = uint((tint_low_inc_1 == 4294967295u));
                tint_loop_idx_1.y = (tint_loop_idx_1.y - tint_carry_1);
                j = as_type<int>((as_type<uint>(j) + as_type<uint>(2)));
              }
              continue;
            }
          }
          tint_continue = true;
          break;
        }
        default:
        {
          break;
        }
      }
      if (tint_continue) {
        {
          uint const tint_low_inc = (tint_loop_idx.x - 1u);
          tint_loop_idx.x = tint_low_inc;
          uint const tint_carry = uint((tint_low_inc == 4294967295u));
          tint_loop_idx.y = (tint_loop_idx.y - tint_carry);
          i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)));
        }
        continue;
      }
      {
        uint const tint_low_inc = (tint_loop_idx.x - 1u);
        tint_loop_idx.x = tint_low_inc;
        uint const tint_carry = uint((tint_low_inc == 4294967295u));
        tint_loop_idx.y = (tint_loop_idx.y - tint_carry);
        i = as_type<int>((as_type<uint>(i) + as_type<uint>(2)));
      }
      continue;
    }
  }
}
