user: 请从给定的汇编指令推导出C源代码：

```asm
<Spsum>:
  endbr64
  push   %r15
  mov    %edx,%eax
  mov    %rsi,%r15
  push   %r14
  and    $0x1,%eax
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  sub    $0x28,%rsp
  mov    %edx,0xc(%rsp)
  mov    %eax,0x18(%rsp)
  movq   $0x0,0x10(%rsp)
  xchg   %ax,%ax
L79:
  mov    %r15,%rdi
  call   <Digits@plt>
  mov    $0xa,%edi
  lea    -0x1(%rax),%r14d
  mov    %eax,%r13d
  mov    %r14d,%esi
  call   <pow@plt>
  mov    $0xa,%edi
  movslq %eax,%rsi
  mov    %rbx,%rax
  cqto
  idiv   %rsi
  mov    %r14d,%esi
  mov    %rax,%rbp
  call   <pow@plt>
  movslq %eax,%rsi
  mov    %r15,%rax
  cqto
  idiv   %rsi
  mov    %rax,%r12
  mov    %r15,%rax
  or     %rbx,%rax
  je     L4
  cmpl   $0x1,0xc(%rsp)
  je     L109
  mov    0x18(%rsp),%eax
  test   %eax,%eax
  jne    L202
  cmp    $0x1,%r13d
  je     L64
  mov    0xc(%rsp),%eax
  sub    %r13d,%eax
  test   $0x1,%al
  jne    L199
  test   %rbx,%rbx
  je     L12
  cmp    %r12d,%ebp
  je     L147
  lea    -0x1(%r12),%eax
  lea    -0x1(%rbp),%esi
  mov    $0xa,%edi
  imul   %r12d,%eax
  imul   %ebp,%esi
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  mov    %esi,%eax
  shr    $0x1f,%eax
  sar    %edx
  add    %esi,%eax
  mov    %r14d,%esi
  sar    %eax
  sub    %eax,%edx
  mov    %edx,0x1c(%rsp)
  call   <pow@plt>
  lea    -0x2(%r13),%esi
  mov    $0xa,%edi
  mov    %eax,%ebx
  call   <pow@plt>
  mov    %r14d,%ecx
  shr    $0x1f,%ecx
  mov    %eax,%r11d
  lea    (%r14,%rcx,1),%eax
  and    $0x1,%eax
  sub    %ecx,%eax
  mov    %r12d,%ecx
  imul   %r11d,%eax
  sub    %ebp,%ecx
  mov    %eax,%ebp
  mov    0x1c(%rsp),%eax
  imul   %ecx,%ebp
  imul   %ebx,%eax
  imul   $0x2d,%ebp,%ebp
  movslq %ebp,%rbp
L143:
  cltq
  mov    %r14d,%esi
  mov    $0xa,%edi
  sub    %rax,%rbp
  call   <pow@plt>
  add    %rbp,0x10(%rsp)
  imul   %r12d,%eax
  movslq %eax,%rbx
  jmp    L79
  nopw   0x0(%rax,%rax,1)
L202:
  cmp    $0x1,%r13d
  je     L109
  movabs $0x6666666666666667,%rax
  imul   %r15
  mov    %r15,%rax
  sar    $0x3f,%rax
  sar    $0x2,%rdx
  sub    %rax,%rdx
  mov    %r15,%rax
  lea    (%rdx,%rdx,4),%rdx
  add    %rdx,%rdx
  sub    %rdx,%rax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  and    $0x1,%eax
  sub    %edx,%eax
  cmp    $0x1,%eax
  je     L255
  mov    0xc(%rsp),%eax
  sub    %r13d,%eax
  and    $0x1,%eax
  cmp    $0x1,%eax
  sbb    %edx,%edx
  or     $0x1,%edx
  test   %rbx,%rbx
  je     L132
  cmp    %r12d,%ebp
  je     L7
L47:
  lea    -0x2(%r13),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r14d,%esi
  mov    $0xa,%edi
  mov    %eax,%r13d
  call   <pow@plt>
  mov    %r12d,%r10d
  sub    %ebp,%r10d
  imul   %r12d,%eax
  imul   %r13d,%r10d
  movslq %eax,%rbx
  lea    (%r10,%r10,4),%eax
  cltq
  add    %rax,0x10(%rsp)
  jmp    L79
  nopw   0x0(%rax,%rax,1)
L199:
  test   %rbx,%rbx
  je     L100
  cmp    %r12d,%ebp
  jne    L100
  mov    %r15,%rax
  mov    %r14d,%esi
  mov    $0xa,%edi
  movslq %ebp,%rbp
  sub    %rbx,%rax
  lea    0x1(%rax),%rbx
  call   <pow@plt>
  imul   %rbp,%rbx
  add    %rbx,0x10(%rsp)
  xor    %ebx,%ebx
  imul   %r12d,%eax
  cltq
  sub    %rax,%r15
  jmp    L79
  nopl   (%rax)
L255:
  test   %rbx,%rbx
  je     L132
  cmp    %r12d,%ebp
  jne    L47
  mov    %r14d,%esi
  mov    $0xa,%edi
  xor    %ebx,%ebx
  call   <pow@plt>
  imul   %ebp,%eax
  cltq
  sub    %rax,%r15
  jmp    L79
  nopw   0x0(%rax,%rax,1)
L132:
  lea    -0x2(%r13),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r14d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   %r12d,%ebp
  imul   %r12d,%eax
  movslq %eax,%rbx
  lea    0x0(%rbp,%rbp,4),%eax
  cltq
  add    %rax,0x10(%rsp)
  jmp    L79
L100:
  lea    -0x1(%r12),%eax
  lea    -0x1(%rbp),%ecx
  mov    %r14d,%esi
  mov    $0xa,%edi
  imul   %r12d,%eax
  imul   %ebp,%ecx
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %eax,%edx
  mov    %ecx,%eax
  shr    $0x1f,%eax
  sar    %edx
  add    %ecx,%eax
  sar    %eax
  sub    %eax,%edx
  mov    %edx,%r13d
  call   <pow@plt>
  mov    %r14d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   %r12d,%eax
  movslq %eax,%rbx
  mov    %r13d,%eax
  imul   %ebp,%eax
  cltq
  add    %rax,0x10(%rsp)
  jmp    L79
  nopl   0x0(%rax,%rax,1)
L109:
  test   %r15,%r15
  jle    L4
  lea    0x1(%r15),%r8d
  mov    $0x1,%ecx
  mov    $0x1,%eax
  xor    %esi,%esi
  nopl   (%rax)
L23:
  mov    %ecx,%edx
  neg    %ecx
  imul   %eax,%edx
  add    $0x1,%eax
  movslq %edx,%rdx
  add    %rdx,%rsi
  cmp    %eax,%r8d
  jne    L23
  add    %rsi,0x10(%rsp)
L4:
  mov    0x10(%rsp),%rax
  add    $0x28,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L12:
  lea    -0x2(%r13),%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    %r14d,%esi
  mov    $0xa,%edi
  mov    %eax,%ebp
  call   <pow@plt>
  imul   %r12d,%ebp
  lea    -0x1(%r12),%edx
  imul   %r12d,%edx
  mov    %eax,%r11d
  imul   $0x2d,%ebp,%ebp
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  movslq %ebp,%rbp
  sar    %eax
  imul   %r11d,%eax
  jmp    L143
  nopl   (%rax)
L7:
  mov    %r14d,%esi
  mov    $0xa,%edi
  mov    %edx,0x1c(%rsp)
  xor    %ebx,%ebx
  call   <pow@plt>
  mov    0x1c(%rsp),%edx
  imul   %ebp,%eax
  imul   %ebp,%edx
  cltq
  movslq %edx,%rdx
  sub    %rax,%r15
  add    %rdx,0x10(%rsp)
  jmp    L79
  nopw   0x0(%rax,%rax,1)
L147:
  mov    %r15,%rax
  mov    %r14d,%esi
  mov    $0xa,%edi
  sub    %rbx,%rax
  lea    0x1(%rax),%rbx
  movslq %ebp,%rax
  imul   %rax,%rbx
  call   <pow@plt>
  sub    %rbx,0x10(%rsp)
  xor    %ebx,%ebx
  imul   %ebp,%eax
  cltq
  sub    %rax,%r15
  jmp    L79
  nopw   0x0(%rax,%rax,1)
L64:
  lea    0x1(%r15),%rdx
  imul   %r15,%rdx
  mov    %rdx,%rax
  shr    $0x3f,%rax
  add    %rdx,%rax
  sar    %rax
  add    %rax,0x10(%rsp)
  jmp    L4
```

assistant: ```c
long long int Spsum(long long int a, long long int b, int se) {
  long long int s = 0;
  int i, o, p, f1, f2, d = 0, l2;
  d = Digits(b);
  f1 = a / pow(10, d - 1);
  f2 = b / pow(10, d - 1);
  l2 = b % 10;
  if (a == 0 && b == 0)
    return 0;
  if (se == 1) {
    s = 0;
  l:
    p = 1;
    for (i = 1; i <= b; i++) {
      s = s + p * i;
      p = p * -1;
    }
    return s;
  }
  if (se % 2 == 0) {
    if (d == 1) {
      s = b * (b + 1) / 2;
      return s;
    }
    if ((se - d) % 2 == 0) {
      if (a == 0) {
        s = s + 45 * pow(10, d - 2) * f2;
        s = s - f2 * (f2 - 1) / 2 * pow(10, d - 1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s - (f2 * (f2 - 1) / 2 - f1 * (f1 - 1) / 2) * pow(10, d - 1);
        s = s + (d - 1) % 2 * 45 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s - f2 * (b - a + 1);
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    } else {
      if (a == 0 || f1 != f2) {
        s = s + (f2 * (f2 - 1) / 2 - f1 * (f1 - 1) / 2) * pow(10, d - 1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s + f1 * (b - a + 1);
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    }
  } else {
    if (d == 1)
      goto l;
    if (l2 % 2 == 1) {
      if (a == 0) {
        s = s + 5 * pow(10, d - 2) * f2;
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s + 5 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
    } else {
      p = ((se - d) % 2 == 0) ? -1 : 1;
      if (a == 0) {
        s = s + 5 * pow(10, d - 2) * f2;
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else if (f1 != f2) {
        s = s + 5 * pow(10, d - 2) * (f2 - f1);
        s = s + Spsum(f2 * pow(10, d - 1), b, se);
      } else {
        s = s + p * f2;
        s = s + Spsum(0, b - f2 * pow(10, d - 1), se);
      }
    }
  }
  return s;
}
```