// File: /workspace/github_c_makefile_star2_O2/PoulinV[P]AxiCLASS/build/../main/class.c
// Function: main
int main(int argc, char **argv) {

  struct precision pr;        /* for precision parameters */
  struct background ba;       /* for cosmological background */
  struct thermodynamics th;           /* for thermodynamics */
  struct perturbations pt;         /* for source functions */
  struct primordial pm;       /* for primordial spectra */
  struct fourier fo;        /* for non-linear spectra */
  struct transfer tr;        /* for transfer functions */
  struct harmonic hr;          /* for output spectra */
  struct lensing le;          /* for lensed spectra */
  struct distortions sd;      /* for spectral distortions */
  struct output op;           /* for output files */
  ErrorMsg errmsg;            /* for error messages */

  if (input_init(argc, argv,&pr,&ba,&th,&pt,&tr,&pm,&hr,&fo,&le,&sd,&op,errmsg) == _FAILURE_) {
    printf("\n\nError running input_init \n=>%s\n",errmsg);
    return _FAILURE_;
  }

  if (background_init(&pr,&ba) == _FAILURE_) {
    printf("\n\nError running background_init \n=>%s\n",ba.error_message);
    return _FAILURE_;
  }

  if (thermodynamics_init(&pr,&ba,&th) == _FAILURE_) {
    printf("\n\nError in thermodynamics_init \n=>%s\n",th.error_message);
    return _FAILURE_;
  }

  if (perturbations_init(&pr,&ba,&th,&pt) == _FAILURE_) {
    printf("\n\nError in perturbations_init \n=>%s\n",pt.error_message);
    return _FAILURE_;
  }

  if (primordial_init(&pr,&pt,&pm) == _FAILURE_) {
    printf("\n\nError in primordial_init \n=>%s\n",pm.error_message);
    return _FAILURE_;
  }

  if (fourier_init(&pr,&ba,&th,&pt,&pm,&fo) == _FAILURE_) {
    printf("\n\nError in fourier_init \n=>%s\n",fo.error_message);
    return _FAILURE_;
  }

  if (transfer_init(&pr,&ba,&th,&pt,&fo,&tr) == _FAILURE_) {
    printf("\n\nError in transfer_init \n=>%s\n",tr.error_message);
    return _FAILURE_;
  }

  if (harmonic_init(&pr,&ba,&pt,&pm,&fo,&tr,&hr) == _FAILURE_) {
    printf("\n\nError in harmonic_init \n=>%s\n",hr.error_message);
    return _FAILURE_;
  }

  if (lensing_init(&pr,&pt,&hr,&fo,&le) == _FAILURE_) {
    printf("\n\nError in lensing_init \n=>%s\n",le.error_message);
    return _FAILURE_;
  }

  if (distortions_init(&pr,&ba,&th,&pt,&pm,&sd) == _FAILURE_) {
    printf("\n\nError in distortions_init \n=>%s\n",sd.error_message);
    return _FAILURE_;
  }

  if (output_init(&ba,&th,&pt,&pm,&tr,&hr,&fo,&le,&sd,&op) == _FAILURE_) {
    printf("\n\nError in output_init \n=>%s\n",op.error_message);
    return _FAILURE_;
  }

  /****** all calculations done, now free the structures ******/

  if (distortions_free(&sd) == _FAILURE_) {
    printf("\n\nError in distortions_free \n=>%s\n",sd.error_message);
    return _FAILURE_;
  }

  if (lensing_free(&le) == _FAILURE_) {
    printf("\n\nError in lensing_free \n=>%s\n",le.error_message);
    return _FAILURE_;
  }

  if (harmonic_free(&hr) == _FAILURE_) {
    printf("\n\nError in harmonic_free \n=>%s\n",hr.error_message);
    return _FAILURE_;
  }

  if (transfer_free(&tr) == _FAILURE_) {
    printf("\n\nError in transfer_free \n=>%s\n",tr.error_message);
    return _FAILURE_;
  }

  if (fourier_free(&fo) == _FAILURE_) {
    printf("\n\nError in fourier_free \n=>%s\n",fo.error_message);
    return _FAILURE_;
  }

  if (primordial_free(&pm) == _FAILURE_) {
    printf("\n\nError in primordial_free \n=>%s\n",pm.error_message);
    return _FAILURE_;
  }

  if (perturbations_free(&pt) == _FAILURE_) {
    printf("\n\nError in perturbations_free \n=>%s\n",pt.error_message);
    return _FAILURE_;
  }

  if (thermodynamics_free(&th) == _FAILURE_) {
    printf("\n\nError in thermodynamics_free \n=>%s\n",th.error_message);
    return _FAILURE_;
  }

  if (background_free(&ba) == _FAILURE_) {
    printf("\n\nError in background_free \n=>%s\n",ba.error_message);
    return _FAILURE_;
  }

  return _SUCCESS_;

}

// Assembly:
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x11e60, %rsp          # imm = 0x11E60
leaq 0x77a0(%rsp), %rax
leaq 0x9db0(%rsp), %r12
leaq 0x7fa8(%rsp), %r10
leaq 0x1de0(%rsp), %r11
leaq 0x8(%rsp), %r14
leaq 0x14f0(%rsp), %rbx
leaq 0x9a0(%rsp), %r15
leaq 0x6630(%rsp), %r13
leaq 0x3b98(%rsp), %rdx
leaq 0x2678(%rsp), %rcx
leaq 0x4dc8(%rsp), %r8
leaq 0xa9d0(%rsp), %r9
pushq %rax
pushq %r12
pushq %r10
pushq %r11
pushq %r14
pushq %rbx
pushq %r15
pushq %r13
callq 0x2e8bc
addq $0x40, %rsp
cmpl $0x1, %eax
jne 0xe4bb5
leaq 0x42f8f(%rip), %rdi     # 0x127b37
leaq 0x77a0(%rsp), %rsi
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
callq 0x5a9de
cmpl $0x1, %eax
jne 0xe4be3
leaq 0x3394(%rsp), %rsi
leaq 0x42f7b(%rip), %rdi     # 0x127b59
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
callq 0x62e7f
cmpl $0x1, %eax
jne 0xe4c19
leaq 0x5e2c(%rsp), %rsi
leaq 0x42f6c(%rip), %rdi     # 0x127b80
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
leaq 0xa9d0(%rsp), %rcx
callq 0x6edec
cmpl $0x1, %eax
jne 0xe4c57
leaq 0x1165a(%rsp), %rsi
leaq 0x42f54(%rip), %rdi     # 0x127ba6
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0xa9d0(%rsp), %rsi
leaq 0x9a0(%rsp), %rdx
callq 0x90005
cmpl $0x1, %eax
jne 0xe4c8d
leaq 0xcca(%rsp), %rsi
leaq 0x42f43(%rip), %rdi     # 0x127bcb
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
leaq 0xa9d0(%rsp), %rcx
leaq 0x9a0(%rsp), %r8
leaq 0x8(%rsp), %r9
callq 0x9af94
cmpl $0x1, %eax
jne 0xe4cd8
leaq 0x19a(%rsp), %rsi
leaq 0x42f1a(%rip), %rdi     # 0x127bed
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
leaq 0xa9d0(%rsp), %rcx
leaq 0x8(%rsp), %r8
leaq 0x6630(%rsp), %r9
callq 0x9ed5d
cmpl $0x1, %eax
jne 0xe4d23
leaq 0x6f9a(%rsp), %rsi
leaq 0x42eee(%rip), %rdi     # 0x127c0c
jmp 0xe4fb1
subq $0x8, %rsp
leaq 0x3ba0(%rsp), %rdi
leaq 0x2680(%rsp), %rsi
leaq 0xa9d8(%rsp), %rdx
leaq 0x9a8(%rsp), %rcx
leaq 0x10(%rsp), %r8
leaq 0x6638(%rsp), %r9
pushq %rbx
callq 0xacfdf
popq %rcx
popq %rdx
cmpl $0x1, %eax
jne 0xe4d75
leaq 0x15da(%rsp), %rsi
leaq 0x42ebc(%rip), %rdi     # 0x127c2c
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0xa9d0(%rsp), %rsi
leaq 0x14f0(%rsp), %rdx
leaq 0x8(%rsp), %rbx
leaq 0x1de0(%rsp), %r14
movq %rbx, %rcx
movq %r14, %r8
callq 0xb0aad
cmpl $0x1, %eax
jne 0xe4dbe
leaq 0x1e72(%rsp), %rsi
leaq 0x42e93(%rip), %rdi     # 0x127c4c
jmp 0xe4fb1
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
leaq 0xa9d0(%rsp), %rcx
leaq 0x9a0(%rsp), %r8
leaq 0x7fa8(%rsp), %r15
movq %r15, %r9
callq 0xbfe34
cmpl $0x1, %eax
jne 0xe4e0f
leaq 0x95aa(%rsp), %rsi
leaq 0x42e61(%rip), %rdi     # 0x127c6b
jmp 0xe4fb1
leaq 0x2678(%rsp), %rdi
leaq 0x4dc8(%rsp), %rsi
leaq 0xa9d0(%rsp), %rdx
leaq 0x9a0(%rsp), %rcx
leaq 0x6630(%rsp), %r8
leaq 0x14f0(%rsp), %r9
pushq %r12
pushq %r15
pushq %r14
pushq %rbx
callq 0xde6bb
addq $0x20, %rsp
cmpl $0x1, %eax
jne 0xe4e68
leaq 0xa1d0(%rsp), %rsi
leaq 0x42e2b(%rip), %rdi     # 0x127c8e
jmp 0xe4fb1
leaq 0x7fa8(%rsp), %rdi
callq 0xc288d
cmpl $0x1, %eax
jne 0xe4e8e
leaq 0x95aa(%rsp), %rsi
leaq 0x42e23(%rip), %rdi     # 0x127cac
jmp 0xe4fb1
leaq 0x1de0(%rsp), %rdi
callq 0xb9875
cmpl $0x1, %eax
jne 0xe4eb4
leaq 0x1e72(%rsp), %rsi
leaq 0x42e20(%rip), %rdi     # 0x127ccf
jmp 0xe4fb1
leaq 0x14f0(%rsp), %rdi
callq 0xae4b7
cmpl $0x1, %eax
jne 0xe4eda
leaq 0x15da(%rsp), %rsi
leaq 0x42e19(%rip), %rdi     # 0x127cee
jmp 0xe4fb1
leaq 0x6630(%rsp), %rdi
callq 0xa30e8
cmpl $0x1, %eax
jne 0xe4f00
leaq 0x6f9a(%rsp), %rsi
leaq 0x42e13(%rip), %rdi     # 0x127d0e
jmp 0xe4fb1
leaq 0x8(%rsp), %rdi
callq 0x9e001
cmpl $0x1, %eax
jne 0xe4f23
leaq 0x19a(%rsp), %rsi
leaq 0x42e10(%rip), %rdi     # 0x127d2e
jmp 0xe4fb1
leaq 0x9a0(%rsp), %rdi
callq 0x91ee1
cmpl $0x1, %eax
jne 0xe4f46
leaq 0xcca(%rsp), %rsi
leaq 0x42e09(%rip), %rdi     # 0x127d4d
jmp 0xe4fb1
leaq 0xa9d0(%rsp), %rdi
callq 0x731a9
cmpl $0x1, %eax
jne 0xe4f69
leaq 0x1165a(%rsp), %rsi
leaq 0x42e08(%rip), %rdi     # 0x127d6f
jmp 0xe4fb1
leaq 0x4dc8(%rsp), %rdi
callq 0x66ecc
cmpl $0x1, %eax
jne 0xe4f8c
leaq 0x5e2c(%rsp), %rsi
leaq 0x42e0a(%rip), %rdi     # 0x127d94
jmp 0xe4fb1
leaq 0x2678(%rsp), %rdi
callq 0x5df89
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x1, %ecx
jne 0xe4fbb
leaq 0x3394(%rsp), %rsi
leaq 0x42e09(%rip), %rdi     # 0x127dba
xorl %eax, %eax
callq 0x8030
pushq $0x1
popq %rax
addq $0x11e60, %rsp          # imm = 0x11E60
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq