user: What is the c source code of the assembly code below:

```asm
<constructSTUtil>:
  endbr64
  push   %r15
  movslq %r8d,%rax
  push   %r14
  movslq %esi,%r14
  push   %r13
  mov    %rax,%r13
  lea    (%rcx,%rax,4),%rax
  push   %r12
  push   %rbp
  mov    %rdi,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %edx,0xc(%rsp)
  mov    %rax,0x18(%rsp)
  cmp    %edx,%r14d
  je     L225
  mov    %edx,%esi
  mov    %r14d,%edi
  mov    %rcx,%r12
  call   <getMid@plt>
  mov    %eax,%ebx
  lea    0x0(%r13,%r13,1),%eax
  lea    0x1(%rax),%r15d
  mov    %eax,0x24(%rsp)
  movslq %r15d,%rax
  lea    (%r12,%rax,4),%rax
  mov    %rax,0x28(%rsp)
  lea    0x1(%r13),%eax
  mov    %eax,0x10(%rsp)
  cmp    %ebx,%r14d
  je     L261
  mov    %ebx,%esi
  mov    %r14d,%edi
  call   <getMid@plt>
  lea    0x1(%r15,%r15,1),%edx
  mov    %eax,%r13d
  movslq %edx,%rax
  lea    (%r12,%rax,4),%rax
  mov    %rax,0x30(%rsp)
  cmp    %r13d,%r14d
  je     L161
  mov    %r13d,%esi
  mov    %r14d,%edi
  mov    %edx,0x20(%rsp)
  call   <getMid@plt>
  mov    0x20(%rsp),%edx
  mov    %eax,%r15d
  lea    0x1(%rdx,%rdx,1),%ecx
  movslq %ecx,%rax
  lea    (%r12,%rax,4),%r10
  cmp    %r15d,%r14d
  je     L242
  mov    %r14d,%edi
  mov    %r15d,%esi
  mov    %r10,0x38(%rsp)
  mov    %ecx,0x20(%rsp)
  call   <getMid@plt>
  mov    0x20(%rsp),%ecx
  mov    %r14d,%esi
  mov    %rbp,%rdi
  mov    %eax,%edx
  mov    %eax,0x20(%rsp)
  lea    0x1(%rcx,%rcx,1),%r8d
  mov    %r12,%rcx
  call   <constructSTUtil>
  mov    0x20(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    0x10(%rsp),%r8d
  mov    %eax,%r14d
  lea    0x1(%rdx),%esi
  mov    %r15d,%edx
  shl    $0x4,%r8d
  call   <constructSTUtil>
  mov    0x38(%rsp),%r10
  lea    (%r14,%rax,1),%r9d
L151:
  mov    0x10(%rsp),%eax
  mov    %r9d,(%r10)
  lea    0x1(%r15),%r14d
  lea    0x0(,%rax,8),%r10d
  movslq %r10d,%rax
  lea    (%r12,%rax,4),%r15
  cmp    %r14d,%r13d
  je     L11
  mov    %r14d,%edi
  mov    %r13d,%esi
  mov    %r9d,0x40(%rsp)
  mov    %r10d,0x38(%rsp)
  call   <getMid@plt>
  mov    0x10(%rsp),%r8d
  mov    %r14d,%esi
  mov    %r12,%rcx
  mov    %eax,%edx
  mov    %rbp,%rdi
  mov    %eax,0x20(%rsp)
  shl    $0x4,%r8d
  add    $0x1,%r8d
  call   <constructSTUtil>
  mov    0x20(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    0x38(%rsp),%r10d
  mov    %eax,%r14d
  lea    0x1(%rdx),%esi
  mov    %r13d,%edx
  lea    0x2(%r10,%r10,1),%r8d
  call   <constructSTUtil>
  mov    0x40(%rsp),%r9d
  add    %eax,%r14d
L17:
  lea    (%r14,%r9,1),%eax
  mov    %r14d,(%r15)
  mov    %eax,0x20(%rsp)
  mov    %eax,%ecx
L88:
  mov    0x30(%rsp),%rax
  add    $0x1,%r13d
  mov    %ecx,(%rax)
  mov    0x10(%rsp),%eax
  lea    0x0(,%rax,4),%r15d
  movslq %r15d,%rax
  lea    (%r12,%rax,4),%rax
  mov    %rax,0x30(%rsp)
  cmp    %r13d,%ebx
  je     L45
  mov    %ebx,%esi
  mov    %r13d,%edi
  call   <getMid@plt>
  mov    %eax,%r14d
  mov    0x10(%rsp),%eax
  lea    0x1(,%rax,8),%r9d
  movslq %r9d,%rax
  lea    (%r12,%rax,4),%r10
  cmp    %r14d,%r13d
  je     L38
  mov    %r13d,%edi
  mov    %r14d,%esi
  mov    %r10,0x48(%rsp)
  mov    %r9d,0x38(%rsp)
  call   <getMid@plt>
  mov    0x38(%rsp),%r9d
  mov    %r13d,%esi
  mov    %r12,%rcx
  mov    %eax,%edx
  mov    %rbp,%rdi
  mov    %eax,0x38(%rsp)
  add    %r9d,%r9d
  lea    0x1(%r9),%r8d
  mov    %r9d,0x40(%rsp)
  call   <constructSTUtil>
  mov    0x38(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    0x40(%rsp),%r9d
  mov    %eax,%r13d
  lea    0x1(%rdx),%esi
  mov    %r14d,%edx
  lea    0x2(%r9),%r8d
  call   <constructSTUtil>
  mov    0x48(%rsp),%r10
  lea    0x0(%r13,%rax,1),%r9d
L167:
  lea    0x1(%r15),%ecx
  lea    0x1(%r14),%r13d
  mov    %r9d,(%r10)
  lea    (%rcx,%rcx,1),%r15d
  movslq %r15d,%rax
  lea    (%r12,%rax,4),%r14
  cmp    %r13d,%ebx
  je     L133
  mov    %r13d,%edi
  mov    %ebx,%esi
  mov    %r9d,0x40(%rsp)
  mov    %ecx,0x38(%rsp)
  call   <getMid@plt>
  mov    0x38(%rsp),%ecx
  mov    %r13d,%esi
  mov    %rbp,%rdi
  mov    %eax,%edx
  mov    %eax,0x38(%rsp)
  lea    0x1(,%rcx,4),%r8d
  mov    %r12,%rcx
  call   <constructSTUtil>
  mov    0x38(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  lea    0x2(%r15,%r15,1),%r8d
  mov    %eax,%r13d
  lea    0x1(%rdx),%esi
  mov    %ebx,%edx
  call   <constructSTUtil>
  mov    0x40(%rsp),%r9d
  add    %eax,%r13d
L177:
  mov    %r13d,(%r14)
  add    %r9d,%r13d
L191:
  mov    0x30(%rsp),%rax
  mov    %r13d,(%rax)
  add    0x20(%rsp),%r13d
  mov    %r13d,0x20(%rsp)
  mov    %r13d,%edi
  jmp    L57
  cs nopw 0x0(%rax,%rax,1)
L261:
  movslq %ebx,%rax
  mov    0x0(%rbp,%rax,4),%eax
  mov    %eax,0x20(%rsp)
  mov    %eax,%edi
L57:
  mov    0x28(%rsp),%rax
  add    $0x1,%ebx
  mov    %edi,(%rax)
  mov    0x24(%rsp),%eax
  add    $0x2,%eax
  cltq
  lea    (%r12,%rax,4),%rax
  mov    %rax,0x28(%rsp)
  cmp    0xc(%rsp),%ebx
  je     L20
  mov    0xc(%rsp),%esi
  mov    %ebx,%edi
  call   <getMid@plt>
  mov    0x10(%rsp),%edx
  mov    %eax,%r14d
  shl    $0x2,%edx
  lea    0x1(%rdx),%r15d
  movslq %r15d,%rax
  lea    (%r12,%rax,4),%rax
  mov    %rax,0x10(%rsp)
  cmp    %r14d,%ebx
  je     L267
  mov    %r14d,%esi
  mov    %ebx,%edi
  add    %r15d,%r15d
  mov    %edx,0x30(%rsp)
  call   <getMid@plt>
  mov    0x30(%rsp),%edx
  lea    0x1(%r15),%ecx
  mov    %eax,%r13d
  movslq %ecx,%rax
  lea    (%r12,%rax,4),%r9
  lea    0x2(%rdx),%eax
  mov    %eax,0x30(%rsp)
  cmp    %r13d,%ebx
  je     L78
  mov    %ebx,%edi
  mov    %r13d,%esi
  mov    %r9,0x40(%rsp)
  mov    %ecx,0x38(%rsp)
  call   <getMid@plt>
  mov    0x38(%rsp),%ecx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    %eax,%edx
  mov    %eax,0x38(%rsp)
  lea    0x1(%rcx,%rcx,1),%r8d
  mov    %r12,%rcx
  call   <constructSTUtil>
  mov    0x38(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    %eax,%ebx
  mov    0x30(%rsp),%eax
  lea    0x1(%rdx),%esi
  mov    %r13d,%edx
  lea    0x0(,%rax,4),%r8d
  call   <constructSTUtil>
  mov    0x40(%rsp),%r9
  add    %eax,%ebx
L179:
  lea    0x2(%r15),%eax
  add    $0x1,%r13d
  mov    %ebx,(%r9)
  cltq
  lea    (%r12,%rax,4),%r9
  cmp    %r13d,%r14d
  je     L143
  mov    %r13d,%edi
  mov    %r14d,%esi
  mov    %r9,0x38(%rsp)
  call   <getMid@plt>
  mov    %r13d,%esi
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    %eax,%edx
  mov    0x30(%rsp),%eax
  mov    %edx,0x30(%rsp)
  lea    0x1(,%rax,4),%r8d
  call   <constructSTUtil>
  mov    0x30(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  lea    0x6(%r15,%r15,1),%r8d
  mov    %eax,%r13d
  lea    0x1(%rdx),%esi
  mov    %r14d,%edx
  call   <constructSTUtil>
  mov    0x38(%rsp),%r9
  add    %eax,%r13d
L221:
  mov    %r13d,(%r9)
  add    %ebx,%r13d
L85:
  mov    0x24(%rsp),%edx
  mov    0x10(%rsp),%rax
  lea    0x1(%r14),%r15d
  add    $0x3,%edx
  mov    %r13d,(%rax)
  lea    (%rdx,%rdx,1),%r9d
  movslq %r9d,%rax
  lea    (%r12,%rax,4),%r14
  cmp    %r15d,0xc(%rsp)
  je     L122
  mov    0xc(%rsp),%esi
  mov    %r15d,%edi
  mov    %r9d,0x24(%rsp)
  mov    %edx,0x10(%rsp)
  call   <getMid@plt>
  mov    0x10(%rsp),%edx
  mov    0x24(%rsp),%r9d
  mov    %eax,%ebx
  lea    0x1(,%rdx,4),%r10d
  cmp    %ebx,%r15d
  movslq %r10d,%rax
  lea    (%r12,%rax,4),%r11
  je     L268
  mov    %r15d,%edi
  mov    %ebx,%esi
  mov    %r11,0x38(%rsp)
  mov    %r9d,0x30(%rsp)
  mov    %r10d,0x10(%rsp)
  call   <getMid@plt>
  mov    0x10(%rsp),%r10d
  mov    %r15d,%esi
  mov    %r12,%rcx
  mov    %eax,%edx
  mov    %rbp,%rdi
  mov    %eax,0x10(%rsp)
  add    %r10d,%r10d
  lea    0x1(%r10),%r8d
  mov    %r10d,0x24(%rsp)
  call   <constructSTUtil>
  mov    0x10(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    0x24(%rsp),%r10d
  mov    %eax,%r15d
  lea    0x1(%rdx),%esi
  mov    %ebx,%edx
  lea    0x2(%r10),%r8d
  call   <constructSTUtil>
  mov    0x38(%rsp),%r11
  mov    0x30(%rsp),%r9d
  add    %eax,%r15d
L156:
  add    $0x1,%r9d
  mov    %r15d,(%r11)
  add    $0x1,%ebx
  lea    (%r9,%r9,1),%r10d
  movslq %r10d,%rax
  lea    (%r12,%rax,4),%r11
  cmp    %ebx,0xc(%rsp)
  je     L47
  mov    0xc(%rsp),%esi
  mov    %ebx,%edi
  mov    %r11,0x30(%rsp)
  mov    %r10d,0x24(%rsp)
  mov    %r9d,0x10(%rsp)
  call   <getMid@plt>
  mov    0x10(%rsp),%r9d
  mov    %ebx,%esi
  mov    %r12,%rcx
  mov    %eax,%edx
  mov    %rbp,%rdi
  mov    %eax,0x10(%rsp)
  lea    0x1(,%r9,4),%r8d
  call   <constructSTUtil>
  mov    0x10(%rsp),%edx
  mov    %r12,%rcx
  mov    %rbp,%rdi
  mov    0x24(%rsp),%r10d
  mov    %eax,%ebx
  lea    0x1(%rdx),%esi
  mov    0xc(%rsp),%edx
  lea    0x2(%r10,%r10,1),%r8d
  call   <constructSTUtil>
  mov    0x30(%rsp),%r11
  add    %ebx,%eax
L181:
  mov    %eax,(%r11)
  add    %r15d,%eax
L239:
  mov    %eax,(%r14)
  add    %r13d,%eax
  jmp    L273
  xchg   %ax,%ax
L225:
  mov    (%rdi,%r14,4),%eax
L276:
  mov    0x18(%rsp),%rcx
  mov    %eax,(%rcx)
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L20:
  movslq 0xc(%rsp),%rax
  mov    0x0(%rbp,%rax,4),%eax
L273:
  mov    0x28(%rsp),%rbx
  mov    %eax,(%rbx)
  add    0x20(%rsp),%eax
  jmp    L276
  cs nopw 0x0(%rax,%rax,1)
L78:
  movslq %r13d,%rax
  mov    0x0(%rbp,%rax,4),%ebx
  jmp    L179
  nopl   0x0(%rax)
L242:
  movslq %r15d,%rax
  mov    0x0(%rbp,%rax,4),%r9d
  jmp    L151
  nopl   (%rax)
L267:
  movslq %r14d,%rax
  mov    0x0(%rbp,%rax,4),%r13d
  jmp    L85
  nopl   (%rax)
L161:
  movslq %r13d,%rax
  mov    0x0(%rbp,%rax,4),%eax
  mov    %eax,0x20(%rsp)
  mov    %eax,%ecx
  jmp    L88
  nopw   0x0(%rax,%rax,1)
L122:
  movslq 0xc(%rsp),%rax
  mov    0x0(%rbp,%rax,4),%eax
  jmp    L239
  cs nopw 0x0(%rax,%rax,1)
L45:
  movslq %ebx,%rax
  mov    0x0(%rbp,%rax,4),%r13d
  jmp    L191
  nopl   (%rax)
L47:
  movslq 0xc(%rsp),%rax
  mov    0x0(%rbp,%rax,4),%eax
  jmp    L181
  xchg   %ax,%ax
L268:
  movslq %ebx,%rax
  mov    0x0(%rbp,%rax,4),%r15d
  jmp    L156
  nopl   (%rax)
L143:
  movslq %r14d,%rax
  mov    0x0(%rbp,%rax,4),%r13d
  jmp    L221
  nopl   (%rax)
L11:
  movslq %r13d,%rax
  mov    0x0(%rbp,%rax,4),%r14d
  jmp    L17
  nopl   (%rax)
L133:
  movslq %ebx,%rax
  mov    0x0(%rbp,%rax,4),%r13d
  jmp    L177
  nopl   (%rax)
L38:
  movslq %r14d,%rax
  mov    0x0(%rbp,%rax,4),%r9d
  jmp    L167
```

assistant: ```c
int constructSTUtil(int arr[], int ss, int se, int *st, int si) {
  if (ss == se) {
    st[si] = arr[ss];
    return arr[ss];
  }
  int mid = getMid(ss, se);
  st[si] = constructSTUtil(arr, ss, mid, st, si * 2 + 1) + constructSTUtil(arr, mid + 1, se, st, si * 2 + 2);
  return st[si];
}
```