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

```asm
<parse_gamess_out>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %rbx
  sub    $0xc8,%rsp
  mov    %edi,-0xa4(%rbp)
  mov    %esi,-0xa8(%rbp)
  mov    %rdx,-0xb0(%rbp)
  mov    %rcx,-0xb8(%rbp)
  mov    %r8,-0xc0(%rbp)
  mov    %r9,-0xc8(%rbp)
  mov    0x10(%rbp),%rax
  mov    %rax,-0xd0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x18(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x94(%rbp)
  mov    -0xa4(%rbp),%eax
  add    $0x6,%eax
  movslq %eax,%rdx
  imul   $0x66666667,%rdx,%rdx
  shr    $0x20,%rdx
  sar    %edx
  sar    $0x1f,%eax
  mov    %eax,%ecx
  mov    %edx,%eax
  sub    %ecx,%eax
  add    $0x1,%eax
  mov    %eax,-0x88(%rbp)
  mov    -0x88(%rbp),%eax
  mov    %eax,-0x98(%rbp)
  lea    D38(%rip),%rax
  mov    %rax,%rsi
  lea    D15(%rip),%rax
  mov    %rax,%rdi
  call   <fopen@plt>
  mov    %rax,-0x80(%rbp)
  cmpq   $0x0,-0x80(%rbp)
  je     L181
  jmp    L243
L89:
  lea    -0x70(%rbp),%rax
  lea    D64(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  mov    %rax,-0x78(%rbp)
  cmpq   $0x0,-0x78(%rbp)
  je     L377
  mov    -0x98(%rbp),%eax
  cmp    -0x88(%rbp),%eax
  jne    L39
  subl   $0x1,-0x98(%rbp)
  jmp    L377
L39:
  mov    -0x88(%rbp),%eax
  sub    $0x1,%eax
  cmp    %eax,-0x98(%rbp)
  jne    L257
  movl   $0x1,-0x90(%rbp)
  jmp    L351
L99:
  mov    -0x94(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jge    L254
  mov    -0x90(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  add    $0x12,%eax
  lea    -0x70(%rbp),%rdx
  cltq
  add    %rdx,%rax
  mov    -0x94(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0xb0(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addl   $0x1,-0x94(%rbp)
L254:
  addl   $0x1,-0x90(%rbp)
L351:
  cmpl   $0x4,-0x90(%rbp)
  jle    L99
  subl   $0x1,-0x98(%rbp)
  jmp    L377
L257:
  cmpl   $0x0,-0x98(%rbp)
  jle    L377
  movl   $0x0,-0x90(%rbp)
  jmp    L179
L236:
  mov    -0x94(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jge    L343
  mov    -0x90(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  shl    $0x2,%eax
  add    $0x12,%eax
  lea    -0x70(%rbp),%rdx
  cltq
  add    %rdx,%rax
  mov    -0x94(%rbp),%edx
  movslq %edx,%rdx
  lea    0x0(,%rdx,8),%rcx
  mov    -0xb0(%rbp),%rdx
  lea    (%rcx,%rdx,1),%rbx
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  addl   $0x1,-0x94(%rbp)
L343:
  addl   $0x1,-0x90(%rbp)
L179:
  cmpl   $0x4,-0x90(%rbp)
  jle    L236
  subl   $0x1,-0x98(%rbp)
L377:
  lea    -0x70(%rbp),%rax
  lea    D62(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L293
  lea    -0x70(%rbp),%rax
  add    $0x14,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    -0xb8(%rbp),%rdx
  mov    %rax,(%rdx)
  lea    -0x70(%rbp),%rax
  add    $0x2b,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    -0xc0(%rbp),%rdx
  mov    %rax,(%rdx)
  movl   $0x1,-0x90(%rbp)
  jmp    L268
L319:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L102
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xb8(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0x14,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  mov    -0x90(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0xc0(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0x2b,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
L102:
  addl   $0x1,-0x90(%rbp)
L268:
  mov    -0x90(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jl     L319
L293:
  lea    -0x70(%rbp),%rax
  lea    D68(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L277
  movl   $0x0,-0x90(%rbp)
  jmp    L314
L10:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L303
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L303:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L284
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,0x8(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm1
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
L284:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L324
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,0x10(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  movsd  0x10(%rax),%xmm1
  mov    -0x90(%rbp),%eax
  cltq
  shl    $0x5,%rax
  mov    %rax,%rdx
  mov    -0xc8(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
L324:
  movl   $0x0,-0x8c(%rbp)
  jmp    L80
L146:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  addl   $0x1,-0x8c(%rbp)
L80:
  cmpl   $0xe,-0x8c(%rbp)
  jle    L146
  addl   $0x1,-0x90(%rbp)
L314:
  mov    -0x90(%rbp),%eax
  cmp    -0xa4(%rbp),%eax
  jl     L10
L277:
  lea    -0x70(%rbp),%rax
  lea    D55(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strstr@plt>
  test   %rax,%rax
  je     L243
  movl   $0x0,-0x90(%rbp)
  jmp    L7
L201:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L20
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
L20:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L147
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,0x8(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  0x8(%rax),%xmm1
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x8(%rax)
L147:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L101
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,0x10(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  0x10(%rax),%xmm1
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x10(%rax)
L101:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L232
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,0x18(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  0x18(%rax),%xmm1
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x18(%rax)
L232:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L108
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  lea    (%rdx,%rax,1),%rbx
  lea    -0x70(%rbp),%rax
  add    $0xf,%rax
  mov    %rax,%rdi
  call   <atof@plt>
  movq   %xmm0,%rax
  mov    %rax,0x20(%rbx)
  lea    -0x70(%rbp),%rax
  add    $0x1c,%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x84(%rbp),%eax
  mov    %eax,%esi
  mov    $0xa,%edi
  call   <pow@plt>
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  movsd  0x20(%rax),%xmm1
  mov    -0x90(%rbp),%eax
  movslq %eax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x4,%rax
  mov    %rax,%rdx
  mov    -0xd0(%rbp),%rax
  add    %rdx,%rax
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,0x20(%rax)
L108:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L292
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
L292:
  addl   $0x1,-0x90(%rbp)
L7:
  mov    -0x90(%rbp),%eax
  cmp    -0xa8(%rbp),%eax
  jl     L201
L243:
  mov    -0x80(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    $0x50,%esi
  mov    %rax,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  jne    L89
  mov    -0x80(%rbp),%rax
  mov    %rax,%rdi
  call   <fclose@plt>
  jmp    L205
L181:
  lea    D45(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
L205:
  mov    $0x0,%eax
  mov    -0x18(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L364
  call   <__stack_chk_fail@plt>
L364:
  mov    -0x8(%rbp),%rbx
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D38
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D15
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D64
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D62
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D68
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D55
type_guessed: string
name: extract_symbolic_data
arguments: data_label: D45
type_guessed: string

tool: D38: r

tool: D15: output

tool: D64: FREQUENCY:

tool: D62: MODE # 1   QRANGE=

tool: D68: QFF>  MODE=

tool: D55: QFF>  MODE (I,J)

tool: D45: Can not open 'output' GAMESS output file, data should be provided in the input file 


assistant: ```c
int parse_gamess_out(const int nmodes, const int npairs, double harmonic[nmodes], double xrange[nmodes], double deltax[nmodes], double fdiag[nmodes][4], double foffdiag[npairs][6]) {
  char line[82], *pos;
  FILE *fp;
  int ex;
  int freq_line_count, freq_line_max;
  int harmonic_count = 0, i, j;
  freq_line_count = freq_line_max = (nmodes + 6) / 5 + 1;
  if ((fp = fopen("output", "r")) != NULL) {
    while (fgets(line, 80, fp) != NULL) {
      if ((pos = strstr(line, "FREQUENCY:")) != NULL) {
        if (freq_line_count == freq_line_max) {
          freq_line_count--;
        } else if (freq_line_count == (freq_line_max - 1)) {
          for (i = 1; i < 5; i++)
            if (harmonic_count < nmodes) {
              harmonic[harmonic_count] = atof(&line[18 + 12 * i]);
              harmonic_count++;
            }
          freq_line_count--;
        } else if (freq_line_count > 0) {
          for (i = 0; i < 5; i++)
            if (harmonic_count < nmodes) {
              harmonic[harmonic_count] = atof(&line[18 + 12 * i]);
              harmonic_count++;
            }
          freq_line_count--;
        }
      }
      if (strstr(line, "MODE # 1   QRANGE=") != NULL) {
        xrange[0] = atof(&line[20]);
        deltax[0] = atof(&line[43]);
        for (i = 1; i < nmodes; i++) {
          if (fgets(line, 80, fp) != NULL) {
            xrange[i] = atof(&line[20]);
            deltax[i] = atof(&line[43]);
          }
        }
      }
      if (strstr(line, "QFF>  MODE=") != NULL) {
        for (i = 0; i < nmodes; i++) {
          if (fgets(line, 80, fp) != NULL) {
            fdiag[i][0] = atof(&line[15]);
            ex = atoi(&line[28]);
            fdiag[i][0] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL) {
            fdiag[i][1] = atof(&line[15]);
            ex = atoi(&line[28]);
            fdiag[i][1] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL) {
            fdiag[i][2] = atof(&line[15]);
            ex = atoi(&line[28]);
            fdiag[i][2] *= pow(10, ex);
          }
          for (j = 0; j < 15; j++)
            if (fgets(line, 80, fp) != NULL)
              ;
        }
      }
      if (strstr(line, "QFF>  MODE (I,J)") != NULL) {
        for (i = 0; i < npairs; i++) {
          if (fgets(line, 80, fp) != NULL) {
            foffdiag[i][0] = atof(&line[15]);
            ex = atoi(&line[28]);
            foffdiag[i][0] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL) {
            foffdiag[i][1] = atof(&line[15]);
            ex = atoi(&line[28]);
            foffdiag[i][1] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL) {
            foffdiag[i][2] = atof(&line[15]);
            ex = atoi(&line[28]);
            foffdiag[i][2] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL) {
            foffdiag[i][3] = atof(&line[15]);
            ex = atoi(&line[28]);
            foffdiag[i][3] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL) {
            foffdiag[i][4] = atof(&line[15]);
            ex = atoi(&line[28]);
            foffdiag[i][4] *= pow(10, ex);
          }
          if (fgets(line, 80, fp) != NULL)
            if (fgets(line, 80, fp) != NULL)
              ;
        }
      }
    }
    fclose(fp);
  } else {
    printf("Can not open \'output\' GAMESS output file, data should be provided in the input file \n");
  }
  return 0;
}
```