#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;
      }
      {
        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 = false;
          switch(i) {
            case 0:
            {
              tint_continue = true;
              break;
            }
            default:
            {
              break;
            }
          }
          if (tint_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;
          }
          {
            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 = (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;
    }
  }
}
