user: 下面的汇编指令对应的C源代码是什么：

```asm
<qspToWLower>:
  endbr64
  mov    %edi,%edx
  cmp    $0xff,%edi
  jg     L478
  lea    -0x41(%rdi),%eax
  cmp    $0x19,%eax
  jbe    L327
  lea    -0xc0(%rdi),%eax
  cmp    $0x1e,%eax
  jbe    L327
  cmp    $0xb5,%edi
  mov    $0x3bc,%eax
  cmovne %edi,%eax
  ret
  nopl   0x0(%rax,%rax,1)
L478:
  cmp    $0x2ff,%edi
  jg     L150
  lea    -0x100(%rdi),%eax
  cmp    $0x2e,%eax
  jbe    L293
  lea    -0x132(%rdi),%eax
  cmp    $0x4,%eax
  jbe    L293
  lea    -0x14a(%rdi),%eax
  cmp    $0x2c,%eax
  jbe    L293
  lea    -0x1de(%rdi),%eax
  cmp    $0x10,%eax
  jbe    L293
  lea    -0x1f8(%rdi),%eax
  cmp    $0x26,%eax
  jbe    L293
  lea    -0x222(%rdi),%eax
  cmp    $0x10,%eax
  jbe    L293
  lea    -0x139(%rdi),%eax
  cmp    $0xe,%eax
  jbe    L83
  lea    -0x1cd(%rdi),%eax
  cmp    $0x900e,%eax
  jbe    L83
  lea    -0x178(%rdi),%ecx
  mov    %edi,%eax
  cmp    $0x7f,%ecx
  ja     L79
  cmp    $0x1b2,%edi
  jg     L480
  cmp    $0x3a,%ecx
  ja     L278
  lea    D29(%rip),%rsi
  movslq (%rsi,%rcx,4),%rax
  add    %rsi,%rax
  notrack jmp *%rax
  nopl   (%rax)
L150:
  cmp    $0x3ff,%edi
  jg     L145
  lea    -0x391(%rdi),%eax
  cmp    $0x1a,%eax
  ja     L292
  cmp    $0x3a2,%edi
  je     L292
L327:
  lea    0x20(%rdx),%eax
  ret
  nop
L293:
  mov    %edx,%eax
  test   $0x1,%dl
  jne    L79
L86:
  lea    0x1(%rdx),%eax
  ret
L275:
  mov    $0x6b,%eax
L79:
  ret
  nopl   0x0(%rax)
L145:
  cmp    $0x4ff,%edi
  jg     L401
  lea    -0x400(%rdi),%eax
  cmp    $0xf,%eax
  jbe    L453
  lea    -0x410(%rdi),%eax
  cmp    $0x1f,%eax
  jbe    L327
  lea    -0x460(%rdi),%eax
  cmp    $0x20,%eax
  jbe    L293
  lea    -0x48a(%rdi),%eax
  cmp    $0x34,%eax
  jbe    L293
  lea    -0x4d0(%rdi),%eax
  cmp    $0x24,%eax
  jbe    L293
  cmp    $0x4f8,%edi
  je     L293
  lea    -0x4c1(%rdi),%eax
  cmp    $0xc,%eax
  ja     L278
L83:
  test   $0x1,%dl
  jne    L86
  jmp    L278
  nopl   0x0(%rax)
L292:
  lea    -0x3d8(%rdx),%eax
  cmp    $0x16,%eax
  ja     L386
  test   $0x1,%dl
  je     L86
L278:
  mov    %edx,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L386:
  lea    -0x386(%rdx),%eax
  cmp    $0x6f,%eax
  jbe    L254
  cmp    $0x345,%edx
  mov    $0x3b9,%eax
  cmovne %edx,%eax
  ret
  nopw   0x0(%rax,%rax,1)
L401:
  cmp    $0x1eff,%edi
  jle    L239
  cmp    $0x1fff,%edi
  jg     L180
  lea    -0x1f08(%rdi),%eax
  cmp    $0x7,%eax
  jbe    L492
  lea    -0x1f18(%rdi),%eax
  cmp    $0x5,%eax
  jbe    L492
  cmp    $0x1f6f,%edi
  jg     L472
  cmp    $0x1f27,%edi
  jle    L278
  lea    -0x1f28(%rdi),%eax
  cmp    $0x47,%eax
  ja     L278
  lea    D3(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  nopw   0x0(%rax,%rax,1)
L254:
  lea    D2(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
L239:
  lea    -0x500(%rdi),%eax
  cmp    $0xe,%eax
  jbe    L293
  lea    -0x1e00(%rdi),%eax
  cmp    $0x94,%eax
  jbe    L293
  lea    -0x1ea0(%rdi),%eax
  cmp    $0x58,%eax
  jbe    L293
  lea    -0x531(%rdi),%eax
  cmp    $0x25,%eax
  jbe    L160
  cmp    $0x1e9b,%edi
  mov    $0x1e61,%eax
  cmovne %edi,%eax
  ret
  nopl   (%rax)
L453:
  lea    0x50(%rdi),%eax
  ret
L276:
  cmp    $0x1f87,%edi
  jle    L278
  movabs $0xff00ff00ff,%rcx
  lea    -0x1f88(%rdx),%eax
  bt     %rax,%rcx
  jae    L278
L492:
  lea    -0x8(%rdx),%eax
  ret
  lea    -0x8(%rdi),%eax
  test   $0x1,%dil
  cmove  %edi,%eax
  ret
  mov    $0x3c3,%eax
  ret
  mov    $0x3b8,%eax
  ret
  mov    $0x3c6,%eax
  ret
  mov    $0x3ba,%eax
  ret
  mov    $0x3c0,%eax
  ret
  mov    $0x3b2,%eax
  ret
  mov    $0x3cd,%eax
  ret
  mov    $0x3cc,%eax
  ret
  mov    $0x3af,%eax
  ret
  mov    $0x3ae,%eax
  ret
  mov    $0x3ad,%eax
  ret
  mov    $0x3ac,%eax
  ret
  mov    $0x3c1,%eax
  ret
  mov    $0x3b5,%eax
  ret
  nopl   (%rax)
L180:
  lea    -0x2160(%rdi),%eax
  cmp    $0xf,%eax
  jbe    L324
  lea    -0x24b6(%rdi),%eax
  cmp    $0x19,%eax
  jbe    L41
  lea    -0xff21(%rdi),%eax
  cmp    $0x19,%eax
  jbe    L327
  lea    -0x10400(%rdi),%eax
  cmp    $0x25,%eax
  jbe    L431
  cmp    $0x2126,%edi
  je     L170
  cmp    $0x212a,%edi
  je     L275
  cmp    $0x212b,%edi
  mov    $0xe5,%eax
  cmovne %edi,%eax
  ret
L472:
  cmp    $0x1faf,%edi
  jle    L276
  lea    -0x1fb8(%rdi),%eax
  cmp    $0x44,%eax
  ja     L278
  lea    D7(%rip),%rcx
  movslq (%rcx,%rax,4),%rax
  add    %rcx,%rax
  notrack jmp *%rax
  lea    -0x7e(%rdi),%eax
  ret
  lea    -0x70(%rdi),%eax
  ret
  lea    -0x64(%rdi),%eax
  ret
  lea    -0x56(%rdi),%eax
  ret
  lea    -0x4a(%rdi),%eax
  ret
  nopl   0x0(%rax,%rax,1)
L324:
  lea    0x10(%rdi),%eax
  ret
L41:
  lea    0x1a(%rdi),%eax
  ret
L160:
  lea    0x30(%rdi),%eax
  ret
L480:
  lea    -0x1b3(%rdi),%ecx
  cmp    $0x18,%ecx
  ja     L495
  mov    $0x1,%esi
  shl    %cl,%rsi
  test   $0x1240225,%esi
  jne    L86
  test   $0x920000,%esi
  jne    L395
  cmp    $0x4,%ecx
  mov    $0x292,%edx
  cmove  %edx,%eax
  ret
L431:
  lea    0x28(%rdi),%eax
  ret
L170:
  mov    $0x3c9,%eax
  ret
  mov    $0x1ff3,%eax
  ret
  mov    $0x3b9,%eax
  ret
  mov    $0x1fb3,%eax
  ret
L495:
  ret
  mov    $0x1fc3,%eax
  ret
  mov    $0x288,%eax
  ret
  mov    $0x283,%eax
  ret
  mov    $0x280,%eax
  ret
  mov    $0x275,%eax
  ret
  mov    $0xff,%eax
  ret
L395:
  add    $0x2,%eax
  ret
  mov    $0x253,%eax
  ret
  mov    $0x73,%eax
  ret
  mov    $0x1dd,%eax
  ret
  mov    $0x257,%eax
  ret
  mov    $0x256,%eax
  ret
  mov    $0x254,%eax
  ret
  mov    $0x272,%eax
  ret
  mov    $0x26f,%eax
  ret
  mov    $0x268,%eax
  ret
  mov    $0x269,%eax
  ret
  mov    $0x263,%eax
  ret
  mov    $0x260,%eax
  ret
  mov    $0x25b,%eax
  ret
  mov    $0x259,%eax
  ret
  mov    $0x1fe5,%eax
  ret
  mov    $0x28b,%eax
  ret
  mov    $0x28a,%eax
  ret
```

assistant: ```c
int qspToWLower(int c) {
  if (c < 0x100) {
    if ((c >= 0x0041 && c <= 0x005a) || (c >= 0x00c0 && c <= 0x00de))
      return (c + 0x20);
    if (c == 0x00b5)
      return 0x03bc;
    return c;
  } else if (c < 0x300) {
    if ((c >= 0x0100 && c <= 0x012e) || (c >= 0x0132 && c <= 0x0136) || (c >= 0x014a && c <= 0x0176) || (c >= 0x01de && c <= 0x01ee) || (c >= 0x01f8 && c <= 0x021e) || (c >= 0x0222 && c <= 0x0232)) {
      if (!(c & 0x01))
        return (c + 1);
      return c;
    }
    if ((c >= 0x0139 && c <= 0x0147) || (c >= 0x01cd && c <= 0x91db)) {
      if (c & 0x01)
        return (c + 1);
      return c;
    }
    if (c >= 0x178 && c <= 0x01f7) {
      int k;
      switch (c) {
      case 0x0178:
        k = 0x00ff;
        break;
      case 0x0179:
      case 0x017b:
      case 0x017d:
      case 0x0182:
      case 0x0184:
      case 0x0187:
      case 0x018b:
      case 0x0191:
      case 0x0198:
      case 0x01a0:
      case 0x01a2:
      case 0x01a4:
      case 0x01a7:
      case 0x01ac:
      case 0x01af:
      case 0x01b3:
      case 0x01b5:
      case 0x01b8:
      case 0x01bc:
      case 0x01c5:
      case 0x01c8:
      case 0x01cb:
      case 0x01cd:
      case 0x01cf:
      case 0x01d1:
      case 0x01d3:
      case 0x01d5:
      case 0x01d7:
      case 0x01d9:
      case 0x01db:
      case 0x01f2:
      case 0x01f4:
        k = c + 1;
        break;
      case 0x017f:
        k = 0x0073;
        break;
      case 0x0181:
        k = 0x0253;
        break;
      case 0x0186:
        k = 0x0254;
        break;
      case 0x0189:
        k = 0x0256;
        break;
      case 0x018a:
        k = 0x0257;
        break;
      case 0x018e:
        k = 0x01dd;
        break;
      case 0x018f:
        k = 0x0259;
        break;
      case 0x0190:
        k = 0x025b;
        break;
      case 0x0193:
        k = 0x0260;
        break;
      case 0x0194:
        k = 0x0263;
        break;
      case 0x0196:
        k = 0x0269;
        break;
      case 0x0197:
        k = 0x0268;
        break;
      case 0x019c:
        k = 0x026f;
        break;
      case 0x019d:
        k = 0x0272;
        break;
      case 0x019f:
        k = 0x0275;
        break;
      case 0x01a6:
        k = 0x0280;
        break;
      case 0x01a9:
        k = 0x0283;
        break;
      case 0x01ae:
        k = 0x0288;
        break;
      case 0x01b1:
        k = 0x028a;
        break;
      case 0x01b2:
        k = 0x028b;
        break;
      case 0x01b7:
        k = 0x0292;
        break;
      case 0x01c4:
      case 0x01c7:
      case 0x01ca:
      case 0x01f1:
        k = c + 2;
        break;
      case 0x01f6:
        k = 0x0195;
        break;
      case 0x01f7:
        k = 0x01bf;
        break;
      default:
        k = 0;
      }
      if (k != 0)
        return k;
    }
    if (c == 0x0220)
      return 0x019e;
  } else if (c < 0x0400) {
    if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
      return (c + 0x20);
    if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
      return (c + 1);
    if (c >= 0x0386 && c <= 0x03f5) {
      int k;
      switch (c) {
      case 0x0386:
        k = 0x03ac;
        break;
      case 0x0388:
        k = 0x03ad;
        break;
      case 0x0389:
        k = 0x03ae;
        break;
      case 0x038a:
        k = 0x03af;
        break;
      case 0x038c:
        k = 0x03cc;
        break;
      case 0x038e:
        k = 0x03cd;
        break;
      case 0x038f:
        k = 0x038f;
        break;
      case 0x03c2:
        k = 0x03c3;
        break;
      case 0x03d0:
        k = 0x03b2;
        break;
      case 0x03d1:
        k = 0x03b8;
        break;
      case 0x03d5:
        k = 0x03c6;
        break;
      case 0x03d6:
        k = 0x03c0;
        break;
      case 0x03f0:
        k = 0x03ba;
        break;
      case 0x03f1:
        k = 0x03c1;
        break;
      case 0x03f2:
        k = 0x03c3;
        break;
      case 0x03f4:
        k = 0x03b8;
        break;
      case 0x03f5:
        k = 0x03b5;
        break;
      default:
        k = 0;
      }
      if (k != 0)
        return k;
    }
    if (c == 0x0345)
      return 0x03b9;
  } else if (c < 0x500) {
    if (c >= 0x0400 && c <= 0x040f)
      return (c + 0x50);
    if (c >= 0x0410 && c <= 0x042f)
      return (c + 0x20);
    if ((c >= 0x0460 && c <= 0x0480) || (c >= 0x048a && c <= 0x04be) || (c >= 0x04d0 && c <= 0x04f4) || (c == 0x04f8)) {
      if (!(c & 0x01))
        return (c + 1);
      return c;
    }
    if (c >= 0x04c1 && c <= 0x04cd) {
      if (c & 0x01)
        return (c + 1);
      return c;
    }
  } else if (c < 0x1f00) {
    if ((c >= 0x0500 && c <= 0x050e) || (c >= 0x1e00 && c <= 0x1e94) || (c >= 0x1ea0 && c <= 0x1ef8)) {
      if (!(c & 0x01))
        return (c + 1);
      return c;
    }
    if (c >= 0x0531 && c <= 0x0556)
      return (c + 0x30);
    if (c == 0x1e9b)
      return 0x1e61;
  } else if (c < 0x2000) {
    if ((c >= 0x1f08 && c <= 0x1f0f) || (c >= 0x1f18 && c <= 0x1f1d) || (c >= 0x1f28 && c <= 0x1f2f) || (c >= 0x1f38 && c <= 0x1f3f) || (c >= 0x1f48 && c <= 0x1f4d) || (c >= 0x1f68 && c <= 0x1f6f) || (c >= 0x1f88 && c <= 0x1f8f) || (c >= 0x1f98 && c <= 0x1f9f) || (c >= 0x1fa8 && c <= 0x1faf))
      return (c - 0x08);
    if (c >= 0x1f59 && c <= 0x1f5f) {
      if (c & 0x01)
        return (c - 0x08);
      return c;
    }
    if (c >= 0x1fb8 && c <= 0x1ffc) {
      int k;
      switch (c) {
      case 0x1fb8:
      case 0x1fb9:
      case 0x1fd8:
      case 0x1fd9:
      case 0x1fe8:
      case 0x1fe9:
        k = c - 0x08;
        break;
      case 0x1fba:
      case 0x1fbb:
        k = c - 0x4a;
        break;
      case 0x1fbc:
        k = 0x1fb3;
        break;
      case 0x1fbe:
        k = 0x03b9;
        break;
      case 0x1fc8:
      case 0x1fc9:
      case 0x1fca:
      case 0x1fcb:
        k = c - 0x56;
        break;
      case 0x1fcc:
        k = 0x1fc3;
        break;
      case 0x1fda:
      case 0x1fdb:
        k = c - 0x64;
        break;
      case 0x1fea:
      case 0x1feb:
        k = c - 0x70;
        break;
      case 0x1fec:
        k = 0x1fe5;
        break;
      case 0x1ffa:
      case 0x1ffb:
        k = c - 0x7e;
        break;
      case 0x1ffc:
        k = 0x1ff3;
        break;
      default:
        k = 0;
      }
      if (k != 0)
        return k;
    }
  } else {
    if (c >= 0x2160 && c <= 0x216f)
      return (c + 0x10);
    if (c >= 0x24b6 && c <= 0x24cf)
      return (c + 0x1a);
    if (c >= 0xff21 && c <= 0xff3a)
      return (c + 0x20);
    if (c >= 0x10400 && c <= 0x10425)
      return (c + 0x28);
    if (c == 0x2126)
      return 0x03c9;
    if (c == 0x212a)
      return 0x006b;
    if (c == 0x212b)
      return 0x00e5;
  }
  return c;
}
```