user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  lea    D246(%rip),%rdi
  call   <puts@plt>
  lea    D729(%rip),%rdi
  call   <puts@plt>
  lea    D114(%rip),%rdi
  call   <puts@plt>
  lea    D262(%rip),%rdi
  call   <puts@plt>
  lea    D432(%rip),%rdi
  call   <puts@plt>
  lea    D646(%rip),%rdi
  call   <puts@plt>
  mov    D738(%rip),%rbp
  mov    %rbp,0x10(%rsp)
  mov    %rbp,0x8(%rsp)
  lea    D844(%rip),%r15
  lea    D476(%rip),%rbx
  lea    D566(%rip),%r13
  jmp    L69
L75:
  lea    D955(%rip),%rdi
  call   <puts@plt>
  lea    0x40(%rsp),%r12
  lea    D846(%rip),%r14
  jmp    L95
L211:
  movsd  0x8(%rsp),%xmm3
  addsd  0x40(%rsp),%xmm3
  movsd  %xmm3,0x8(%rsp)
  mov    %r14,%rdi
  call   <puts@plt>
L95:
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  cmp    $0x1,%eax
  je     L211
L35:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  jne    L35
L244:
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D246(%rip),%rdi
  call   <puts@plt>
  lea    D729(%rip),%rdi
  call   <puts@plt>
  lea    D114(%rip),%rdi
  call   <puts@plt>
  lea    D262(%rip),%rdi
  call   <puts@plt>
  lea    D432(%rip),%rdi
  call   <puts@plt>
  lea    D646(%rip),%rdi
  call   <puts@plt>
L69:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0x61,%al
  je     L75
  lea    -0x62(%rax),%edx
  cmp    $0x1,%dl
  ja     L131
  cmp    $0x63,%al
  je     L227
  lea    D523(%rip),%rdi
  call   <puts@plt>
  lea    0x40(%rsp),%r12
  lea    D212(%rip),%r14
  jmp    L268
L137:
  movsd  0x10(%rsp),%xmm4
  addsd  0x40(%rsp),%xmm4
  movsd  %xmm4,0x10(%rsp)
  mov    %r14,%rdi
  call   <puts@plt>
L268:
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  cmp    $0x1,%eax
  je     L137
L43:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  je     L244
  jmp    L43
L227:
  mov    %r15,%rdi
  call   <puts@plt>
  lea    0x40(%rsp),%r12
  jmp    L205
L47:
  movq   %rbp,%xmm5
  addsd  0x40(%rsp),%xmm5
  movq   %xmm5,%rbp
  mov    %r13,%rdi
  call   <puts@plt>
L205:
  mov    %r12,%rsi
  mov    %rbx,%rdi
  call   <scanf@plt>
  cmp    $0x1,%eax
  je     L47
L71:
  mov    $0x0,%eax
  call   <getchar@plt>
  cmp    $0xa,%al
  je     L244
  jmp    L71
L131:
  movsd  0x8(%rsp),%xmm6
  movapd %xmm6,%xmm7
  mulsd  D915(%rip),%xmm7
  movsd  %xmm7,0x20(%rsp)
  movsd  0x10(%rsp),%xmm2
  movapd %xmm2,%xmm1
  mulsd  D475(%rip),%xmm1
  movsd  %xmm1,0x28(%rsp)
  movq   %rbp,%xmm3
  mulsd  D634(%rip),%xmm3
  movsd  %xmm3,0x30(%rsp)
  addsd  %xmm1,%xmm7
  movapd %xmm7,%xmm0
  addsd  %xmm3,%xmm0
  movsd  %xmm0,0x18(%rsp)
  comisd D716(%rip),%xmm0
  jbe    L186
  mulsd  D694(%rip),%xmm0
  movsd  %xmm0,0x38(%rsp)
  addsd  %xmm2,%xmm6
  movapd %xmm6,%xmm0
  movq   %rbp,%xmm6
  addsd  %xmm6,%xmm0
  movsd  D328(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L158
  movsd  D144(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L83
  mov    $0x1,%r12d
L162:
  subsd  D144(%rip),%xmm0
  mulsd  D741(%rip),%xmm0
  addsd  D764(%rip),%xmm0
  movq   %xmm0,%rbx
  movapd %xmm0,%xmm2
  addsd  0x38(%rsp),%xmm2
  movq   %xmm2,%r13
  lea    D595(%rip),%rdi
  call   <puts@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  D915(%rip),%xmm0
  lea    D777(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  D475(%rip),%xmm0
  lea    D202(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movq   %rbp,%xmm1
  movsd  D634(%rip),%xmm0
  lea    D572(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  lea    D786(%rip),%rdi
  call   <puts@plt>
  lea    D321(%rip),%rdi
  call   <puts@plt>
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm0
  lea    D583(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  0x38(%rsp),%xmm0
  lea    D180(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  test   %r12d,%r12d
  je     L56
  jmp    L90
L158:
  movsd  D466(%rip),%xmm2
  addsd  0x38(%rsp),%xmm2
  movq   %xmm2,%r13
  lea    D595(%rip),%rdi
  call   <puts@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  D915(%rip),%xmm0
  lea    D777(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  D475(%rip),%xmm0
  lea    D202(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movq   %rbp,%xmm1
  movsd  D634(%rip),%xmm0
  lea    D572(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  lea    D786(%rip),%rdi
  call   <puts@plt>
  lea    D321(%rip),%rdi
  call   <puts@plt>
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm0
  lea    D583(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  0x38(%rsp),%xmm0
  lea    D180(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movabs $0x401a000000000000,%rbx
L90:
  movsd  0x18(%rsp),%xmm0
  mulsd  D905(%rip),%xmm0
  lea    D685(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
L56:
  movq   %rbx,%xmm0
  lea    D706(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movq   %r13,%xmm0
  lea    D898(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D53(%rip),%rdi
  call   <puts@plt>
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L200
  mov    $0x0,%eax
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L55:
  movsd  D466(%rip),%xmm2
  addsd  0x18(%rsp),%xmm2
  movq   %xmm2,%r13
  lea    D595(%rip),%rdi
  call   <puts@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  D915(%rip),%xmm0
  lea    D777(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  D475(%rip),%xmm0
  lea    D202(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movq   %rbp,%xmm1
  movsd  D634(%rip),%xmm0
  lea    D572(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  lea    D786(%rip),%rdi
  call   <puts@plt>
  lea    D321(%rip),%rdi
  call   <puts@plt>
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm0
  lea    D583(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  0x18(%rsp),%xmm0
  lea    D180(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movabs $0x401a000000000000,%rbx
  jmp    L56
L186:
  movsd  0x8(%rsp),%xmm0
  addsd  0x10(%rsp),%xmm0
  movq   %rbp,%xmm6
  addsd  %xmm6,%xmm0
  movsd  D328(%rip),%xmm1
  comisd %xmm0,%xmm1
  ja     L55
  movsd  D144(%rip),%xmm1
  comisd %xmm0,%xmm1
  jbe    L88
  movsd  D764(%rip),%xmm6
  addsd  0x18(%rsp),%xmm6
  movq   %xmm6,%r13
  lea    D595(%rip),%rdi
  call   <puts@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  D915(%rip),%xmm0
  lea    D777(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  D475(%rip),%xmm0
  lea    D202(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movq   %rbp,%xmm1
  movsd  D634(%rip),%xmm0
  lea    D572(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  lea    D786(%rip),%rdi
  call   <puts@plt>
  lea    D321(%rip),%rdi
  call   <puts@plt>
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm0
  lea    D583(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  0x18(%rsp),%xmm0
  lea    D180(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movabs $0x402c000000000000,%rbx
  jmp    L56
L83:
  movsd  D764(%rip),%xmm6
  addsd  0x38(%rsp),%xmm6
  movq   %xmm6,%r13
  lea    D595(%rip),%rdi
  call   <puts@plt>
  movsd  0x8(%rsp),%xmm1
  movsd  D915(%rip),%xmm0
  lea    D777(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm1
  movsd  D475(%rip),%xmm0
  lea    D202(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  movq   %rbp,%xmm1
  movsd  D634(%rip),%xmm0
  lea    D572(%rip),%rdi
  mov    $0x2,%eax
  call   <printf@plt>
  lea    D786(%rip),%rdi
  call   <puts@plt>
  lea    D321(%rip),%rdi
  call   <puts@plt>
  movsd  0x30(%rsp),%xmm2
  movsd  0x28(%rsp),%xmm1
  movsd  0x20(%rsp),%xmm0
  lea    D583(%rip),%rdi
  mov    $0x3,%eax
  call   <printf@plt>
  movsd  0x38(%rsp),%xmm0
  lea    D180(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movabs $0x402c000000000000,%rbx
  jmp    L90
L88:
  movsd  0x18(%rsp),%xmm2
  movsd  %xmm2,0x38(%rsp)
  mov    $0x0,%r12d
  jmp    L162
L200:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D246
datatype: string
name: extract_symbolic_data
arguments: tag: D729
datatype: string
name: extract_symbolic_data
arguments: tag: D114
datatype: string
name: extract_symbolic_data
arguments: tag: D262
datatype: string
name: extract_symbolic_data
arguments: tag: D432
datatype: string
name: extract_symbolic_data
arguments: tag: D646
datatype: string
name: extract_symbolic_data
arguments: tag: D738
datatype: byte[8]
name: extract_symbolic_data
arguments: tag: D844
datatype: string
name: extract_symbolic_data
arguments: tag: D476
datatype: string
name: extract_symbolic_data
arguments: tag: D566
datatype: string
name: extract_symbolic_data
arguments: tag: D955
datatype: string
name: extract_symbolic_data
arguments: tag: D846
datatype: string
name: extract_symbolic_data
arguments: tag: D523
datatype: string
name: extract_symbolic_data
arguments: tag: D212
datatype: string
name: extract_symbolic_data
arguments: tag: D915
datatype: f64
name: extract_symbolic_data
arguments: tag: D475
datatype: f64
name: extract_symbolic_data
arguments: tag: D634
datatype: f64
name: extract_symbolic_data
arguments: tag: D716
datatype: byte[16]
name: extract_symbolic_data
arguments: tag: D694
datatype: byte[8]
name: extract_symbolic_data
arguments: tag: D328
datatype: byte[8]
name: extract_symbolic_data
arguments: tag: D144
datatype: byte[8]
name: extract_symbolic_data
arguments: tag: D741
datatype: f64
name: extract_symbolic_data
arguments: tag: D764
datatype: byte[8]
name: extract_symbolic_data
arguments: tag: D595
datatype: string
name: extract_symbolic_data
arguments: tag: D777
datatype: string
name: extract_symbolic_data
arguments: tag: D202
datatype: string
name: extract_symbolic_data
arguments: tag: D572
datatype: string
name: extract_symbolic_data
arguments: tag: D786
datatype: string
name: extract_symbolic_data
arguments: tag: D321
datatype: string
name: extract_symbolic_data
arguments: tag: D583
datatype: string
name: extract_symbolic_data
arguments: tag: D180
datatype: string
name: extract_symbolic_data
arguments: tag: D466
datatype: f64
name: extract_symbolic_data
arguments: tag: D905
datatype: f64
name: extract_symbolic_data
arguments: tag: D685
datatype: string
name: extract_symbolic_data
arguments: tag: D706
datatype: string
name: extract_symbolic_data
arguments: tag: D898
datatype: string
name: extract_symbolic_data
arguments: tag: D53
datatype: string

tool: D246: **************The ABC Mail Order Grocery Order System*************

tool: D729: Enter the letter corresponding to the desired vegetable or action:

tool: D114: a) Artichokes               b) Beets

tool: D262: c) Carrots

tool: D432: q) Quit ordering process

tool: D646: ******************************************************************

tool: {"D738": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D844: Please enter pounds of carrots (q to finish):

tool: D476: %lf

tool: D566: More pounds of carrots? (q to finish)

tool: D955: Please enter pounds of artichokes (q to finish):

tool: D846: More pounds of artichokes? (q to finish)

tool: D523: Please enter pounds of beets (q to finish):

tool: D212: More pounds of beets? (q to finish)

tool: D915: 2.05

tool: D475: 1.15

tool: D634: 1.09

tool: {"D716": [0x00,0x00,0x00,0x00,0x00,0x00,0x59,0x40,0x66,0x66,0x66,0x66,0x66,0x66,0xee,0x3f]}

tool: {"D694": [0x66,0x66,0x66,0x66,0x66,0x66,0xee,0x3f]}

tool: {"D328": [0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x40]}

tool: {"D144": [0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x40]}

tool: D741: 0.5

tool: {"D764": [0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x40]}

tool: D595: 
---------------------------------------------------------

tool: D777: Artichokes: $%.2f/pound, you have ordered %.1f pound(s)


tool: D202: Beets: $%.2f/pound, you have ordered %.1f pound(s)


tool: D572: Carrots: $%.2f/pound, you have ordered %.1f pound(s)


tool: D786: ---------------------------------------------------------

tool: D321: Summary:


tool: D583: Artichokes: $%.2f
Beets: $%.2f
Carrots: $%.2f


tool: D180: Total: $%.2f



tool: D466: 6.5

tool: D905: 0.05

tool: D685: Discount: -$%.2f


tool: D706: Shipment: $%.2f


tool: D898: Grand Total Cost: $%.2f



tool: D53: Thank you for purchasing!
Your vegetables will arrive within 3 minutes:)

assistant: ```c
int main(void) {
  char option;
  double apound, bpound, cpound, pound, temp;
  double total, ship, price;
  bool DISCOUNT_FLAG;
  apound = bpound = cpound = pound = total = ship = price = 0;
  printf("**************The ABC Mail Order Grocery Order System*************\n");
  printf("Enter the letter corresponding to the desired vegetable or action:\n");
  printf("a) Artichokes               b) Beets\n");
  printf("c) Carrots\n");
  printf("q) Quit ordering process\n");
  printf("******************************************************************\n");
  while ((option = getchar()) == 'a' || option == 'b' || option == 'c') {
    switch (option) {
    case 'a':
      printf("Please enter pounds of artichokes (q to finish):\n");
      while (scanf("%lf", &temp) == 1) {
        apound += temp;
        printf("More pounds of artichokes? (q to finish)\n");
      }
      while (getchar() != '\n')
        continue;
      break;
    case 'b':
      printf("Please enter pounds of beets (q to finish):\n");
      while (scanf("%lf", &temp) == 1) {
        bpound += temp;
        printf("More pounds of beets? (q to finish)\n");
      }
      while (getchar() != '\n')
        continue;
      break;
    case 'c':
      printf("Please enter pounds of carrots (q to finish):\n");
      while (scanf("%lf", &temp) == 1) {
        cpound += temp;
        printf("More pounds of carrots? (q to finish)\n");
      }
      while (getchar() != '\n')
        continue;
      break;
    }
    if ('q' == option)
      break;
    putchar('\n');
    printf("**************The ABC Mail Order Grocery Order System*************\n");
    printf("Enter the letter corresponding to the desired vegetable or action:\n");
    printf("a) Artichokes               b) Beets\n");
    printf("c) Carrots\n");
    printf("q) Quit ordering process\n");
    printf("******************************************************************\n");
  }
  price = apound * 2.05 + bpound * 1.15 + cpound * 1.09;
  if (price > 100) {
    price *= (1 - 0.05);
    DISCOUNT_FLAG = true;
  } else
    DISCOUNT_FLAG = false;
  pound = apound + bpound + cpound;
  if (pound < 5)
    ship = 6.5;
  else if (pound < 20)
    ship = 14;
  else
    ship = 14 + (pound - 20) * 0.5;
  total = price + ship;
  printf("\n---------------------------------------------------------\n");
  printf("Artichokes: $%.2f/pound, you have ordered %.1f pound(s)\n", 2.05, apound);
  printf("Beets: $%.2f/pound, you have ordered %.1f pound(s)\n", 1.15, bpound);
  printf("Carrots: $%.2f/pound, you have ordered %.1f pound(s)\n", 1.09, cpound);
  printf("---------------------------------------------------------\n");
  printf("Summary:\n\n");
  printf("Artichokes: $%.2f\nBeets: $%.2f\nCarrots: $%.2f\n", 2.05 * apound, 1.15 * bpound, 1.09 * cpound);
  printf("Total: $%.2f\n\n", price);
  if (DISCOUNT_FLAG)
    printf("Discount: -$%.2f\n", 0.05 * (apound * 2.05 + bpound * 1.15 + cpound * 1.09));
  printf("Shipment: $%.2f\n", ship);
  printf("Grand Total Cost: $%.2f\n\n", total);
  printf("Thank you for purchasing!\nYour vegetables will arrive within 3 minutes:)\n");
  return 0;
}
```