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

```asm
<get_blocks>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %rdi,-0x48(%rbp)
  mov    %esi,-0x4c(%rbp)
  mov    %rdx,-0x58(%rbp)
  mov    %ecx,-0x50(%rbp)
  mov    %r8d,-0x5c(%rbp)
  mov    %r9d,-0x60(%rbp)
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x10(%rbp)
  mov    -0x4c(%rbp),%eax
  add    $0x1,%eax
  mov    $0x4,%esi
  mov    %eax,%edi
  call   <calloc@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x34(%rbp)
  movl   $0x0,-0x34(%rbp)
  jmp    L16
L205:
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x4e,%al
  je     L166
  mov    -0x34(%rbp),%eax
  movslq %eax,%rdx
  mov    0x10(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L50
L166:
  mov    -0x34(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    0x18(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cltq
  shl    $0x2,%rax
  lea    -0x4(%rax),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  movl   $0x1,(%rax)
L50:
  addl   $0x1,-0x34(%rbp)
L16:
  mov    -0x34(%rbp),%eax
  cmp    0x20(%rbp),%eax
  jl     L205
  movl   $0x0,-0x30(%rbp)
  movl   $0x0,-0x30(%rbp)
  jmp    L218
L198:
  movl   $0x0,-0x2c(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x5c(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  neg    %eax
  add    %edx,%eax
  mov    %eax,-0x28(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  lea    -0x1(%rax),%edi
  mov    -0x8(%rbp),%rcx
  mov    -0x4c(%rbp),%edx
  mov    -0x28(%rbp),%eax
  mov    %eax,%esi
  call   <extend_lower_part_of_window@plt>
  mov    %eax,-0x28(%rbp)
  cmpl   $0x0,-0x28(%rbp)
  jns    L171
  movl   $0x0,-0x28(%rbp)
L171:
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x5c(%rbp),%eax
  mov    %eax,%ecx
  shr    $0x1f,%ecx
  add    %ecx,%eax
  sar    %eax
  add    %edx,%eax
  mov    %eax,-0x24(%rbp)
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  lea    0x1(%rax),%edi
  mov    -0x8(%rbp),%rcx
  mov    -0x4c(%rbp),%edx
  mov    -0x24(%rbp),%eax
  mov    %eax,%esi
  call   <extend_upper_part_of_window@plt>
  mov    %eax,-0x24(%rbp)
  mov    -0x24(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jle    L251
  mov    -0x4c(%rbp),%eax
  mov    %eax,-0x24(%rbp)
L251:
  mov    -0x28(%rbp),%eax
  mov    %eax,-0x2c(%rbp)
  jmp    L84
L95:
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x2c(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rcx
  mov    -0x10(%rbp),%rax
  add    %rcx,%rax
  add    $0x1,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x2c(%rbp)
L84:
  mov    -0x2c(%rbp),%eax
  cmp    -0x24(%rbp),%eax
  jl     L95
  addl   $0x1,-0x30(%rbp)
L218:
  mov    -0x30(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jl     L198
  movl   $0x0,-0x20(%rbp)
  movl   $0x0,-0x1c(%rbp)
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x14(%rbp)
  jmp    L173
L76:
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x60(%rbp)
  jge    L204
  cmpl   $0x0,-0x1c(%rbp)
  jne    L204
  mov    -0x14(%rbp),%eax
  mov    %eax,-0x18(%rbp)
  movl   $0x1,-0x1c(%rbp)
L204:
  mov    -0x14(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    %eax,-0x60(%rbp)
  jge    L265
  mov    -0x14(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x4c(%rbp)
  jne    L179
L265:
  cmpl   $0x1,-0x1c(%rbp)
  jne    L179
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x20(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    -0x18(%rbp),%eax
  mov    %eax,(%rdx)
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x20(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    -0x14(%rbp),%edx
  sub    $0x1,%edx
  mov    %edx,(%rax)
  addl   $0x1,-0x20(%rbp)
  movl   $0x0,-0x1c(%rbp)
L179:
  addl   $0x1,-0x14(%rbp)
L173:
  mov    -0x14(%rbp),%eax
  cmp    -0x4c(%rbp),%eax
  jl     L76
  movl   $0x0,-0x14(%rbp)
  jmp    L225
L33:
  movl   $0x0,-0x30(%rbp)
  jmp    L145
L227:
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jl     L66
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x48(%rbp),%rax
  mov    (%rax),%rdx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rax,%rdx
  mov    (%rcx),%eax
  mov    %eax,(%rdx)
  jmp    L185
L66:
  addl   $0x1,-0x30(%rbp)
L145:
  mov    -0x30(%rbp),%eax
  cmp    -0x50(%rbp),%eax
  jl     L227
L185:
  mov    -0x50(%rbp),%eax
  sub    $0x1,%eax
  mov    %eax,-0x30(%rbp)
  jmp    L26
L111:
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%edx
  mov    -0x48(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rcx
  mov    -0x14(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rcx,%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jg     L68
  mov    -0x30(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x58(%rbp),%rax
  add    %rdx,%rax
  mov    -0x48(%rbp),%rdx
  add    $0x8,%rdx
  mov    (%rdx),%rcx
  mov    -0x14(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    (%rax),%eax
  mov    %eax,(%rdx)
  jmp    L151
L68:
  subl   $0x1,-0x30(%rbp)
L26:
  cmpl   $0x0,-0x30(%rbp)
  jns    L111
L151:
  addl   $0x1,-0x14(%rbp)
L225:
  mov    -0x14(%rbp),%eax
  cmp    -0x20(%rbp),%eax
  jl     L33
  mov    -0x8(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x20(%rbp),%eax
  leave
  ret
```

assistant: ```c
int get_blocks(int **block_coordinates, int genome_size, int *snp_site_coords, int number_of_branch_snps, int window_size, int cutoff, char *original_sequence, int *snp_locations, int number_of_snps) {
  int *window_count;
  window_count = (int *)calloc((genome_size + 1), sizeof(int));
  int *gaps_in_original_genome_space;
  gaps_in_original_genome_space = (int *)calloc((genome_size + 1), sizeof(int));
  int x = 0;
  for (x = 0; x < number_of_snps; x++) {
    if (original_sequence[x] == 'N' || original_sequence[x] == '-') {
      gaps_in_original_genome_space[snp_locations[x] - 1] = 1;
    }
  }
  int snp_counter = 0;
  for (snp_counter = 0; snp_counter < number_of_branch_snps; snp_counter++) {
    int j = 0;
    int snp_sliding_window_counter = snp_site_coords[snp_counter] - (window_size / 2);
    snp_sliding_window_counter = extend_lower_part_of_window(snp_site_coords[snp_counter] - 1, snp_sliding_window_counter, genome_size, gaps_in_original_genome_space);
    if (snp_sliding_window_counter < 0) {
      snp_sliding_window_counter = 0;
    }
    int max_snp_sliding_window_counter = snp_site_coords[snp_counter] + (window_size / 2);
    max_snp_sliding_window_counter = extend_upper_part_of_window(snp_site_coords[snp_counter] + 1, max_snp_sliding_window_counter, genome_size, gaps_in_original_genome_space);
    if (max_snp_sliding_window_counter > genome_size) {
      max_snp_sliding_window_counter = genome_size;
    }
    for (j = snp_sliding_window_counter; j < max_snp_sliding_window_counter; j++) {
      window_count[j] += 1;
    }
  }
  int number_of_blocks = 0;
  int in_block = 0;
  int block_lower_bound = 0;
  int i;
  for (i = 0; i < genome_size; i++) {
    if (window_count[i] > cutoff && in_block == 0) {
      block_lower_bound = i;
      in_block = 1;
    }
    if ((window_count[i] <= cutoff || i + 1 == genome_size) && in_block == 1) {
      block_coordinates[0][number_of_blocks] = block_lower_bound;
      block_coordinates[1][number_of_blocks] = i - 1;
      number_of_blocks++;
      in_block = 0;
    }
  }
  for (i = 0; i < number_of_blocks; i++) {
    for (snp_counter = 0; snp_counter < number_of_branch_snps; snp_counter++) {
      if (snp_site_coords[snp_counter] >= block_coordinates[0][i]) {
        block_coordinates[0][i] = snp_site_coords[snp_counter];
        break;
      }
    }
    for (snp_counter = number_of_branch_snps - 1; snp_counter >= 0; snp_counter--) {
      if (snp_site_coords[snp_counter] <= block_coordinates[1][i]) {
        block_coordinates[1][i] = snp_site_coords[snp_counter];
        break;
      }
    }
  }
  free(gaps_in_original_genome_space);
  free(window_count);
  return number_of_blocks;
}
```