// File: /workspace/github_c_makefile_star2_O1/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 0x314e4
addq $0x40, %rsp
cmpl $0x1, %eax
jne 0xf07a1
leaq 0x43503(%rip), %rdi     # 0x133c97
leaq 0x77a0(%rsp), %rsi
jmp 0xf0b9f
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
callq 0x61036
cmpl $0x1, %eax
jne 0xf07cf
leaq 0x3394(%rsp), %rsi
leaq 0x434ef(%rip), %rdi     # 0x133cb9
jmp 0xf0b9f
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
callq 0x69a95
cmpl $0x1, %eax
jne 0xf0805
leaq 0x5e2c(%rsp), %rsi
leaq 0x434e0(%rip), %rdi     # 0x133ce0
jmp 0xf0b9f
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
leaq 0xa9d0(%rsp), %rcx
callq 0x75f3c
cmpl $0x1, %eax
jne 0xf0843
leaq 0x1165a(%rsp), %rsi
leaq 0x434c8(%rip), %rdi     # 0x133d06
jmp 0xf0b9f
leaq 0x3b98(%rsp), %rdi
leaq 0xa9d0(%rsp), %rsi
leaq 0x9a0(%rsp), %rdx
callq 0x979d2
cmpl $0x1, %eax
jne 0xf0879
leaq 0xcca(%rsp), %rsi
leaq 0x434b7(%rip), %rdi     # 0x133d2b
jmp 0xf0b9f
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 0xa2df5
cmpl $0x1, %eax
jne 0xf08c4
leaq 0x19a(%rsp), %rsi
leaq 0x4348e(%rip), %rdi     # 0x133d4d
jmp 0xf0b9f
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 0xa6de6
cmpl $0x1, %eax
jne 0xf090f
leaq 0x6f9a(%rsp), %rsi
leaq 0x43462(%rip), %rdi     # 0x133d6c
jmp 0xf0b9f
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 0xb6460
addq $0x10, %rsp
cmpl $0x1, %eax
jne 0xf0963
leaq 0x15da(%rsp), %rsi
leaq 0x4342e(%rip), %rdi     # 0x133d8c
jmp 0xf0b9f
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 0xb9d13
cmpl $0x1, %eax
jne 0xf09ac
leaq 0x1e72(%rsp), %rsi
leaq 0x43405(%rip), %rdi     # 0x133dac
jmp 0xf0b9f
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 0xcab10
cmpl $0x1, %eax
jne 0xf09fd
leaq 0x95aa(%rsp), %rsi
leaq 0x433d3(%rip), %rdi     # 0x133dcb
jmp 0xf0b9f
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 0xea0fa
addq $0x20, %rsp
cmpl $0x1, %eax
jne 0xf0a56
leaq 0xa1d0(%rsp), %rsi
leaq 0x4339d(%rip), %rdi     # 0x133dee
jmp 0xf0b9f
leaq 0x7fa8(%rsp), %rdi
callq 0xcd6fc
cmpl $0x1, %eax
jne 0xf0a7c
leaq 0x95aa(%rsp), %rsi
leaq 0x43395(%rip), %rdi     # 0x133e0c
jmp 0xf0b9f
leaq 0x1de0(%rsp), %rdi
callq 0xc300a
cmpl $0x1, %eax
jne 0xf0aa2
leaq 0x1e72(%rsp), %rsi
leaq 0x43392(%rip), %rdi     # 0x133e2f
jmp 0xf0b9f
leaq 0x14f0(%rsp), %rdi
callq 0xb796a
cmpl $0x1, %eax
jne 0xf0ac8
leaq 0x15da(%rsp), %rsi
leaq 0x4338b(%rip), %rdi     # 0x133e4e
jmp 0xf0b9f
leaq 0x6630(%rsp), %rdi
callq 0xab3bf
cmpl $0x1, %eax
jne 0xf0aee
leaq 0x6f9a(%rsp), %rsi
leaq 0x43385(%rip), %rdi     # 0x133e6e
jmp 0xf0b9f
leaq 0x8(%rsp), %rdi
callq 0xa6046
cmpl $0x1, %eax
jne 0xf0b11
leaq 0x19a(%rsp), %rsi
leaq 0x43382(%rip), %rdi     # 0x133e8e
jmp 0xf0b9f
leaq 0x9a0(%rsp), %rdi
callq 0x99a1a
cmpl $0x1, %eax
jne 0xf0b34
leaq 0xcca(%rsp), %rsi
leaq 0x4337b(%rip), %rdi     # 0x133ead
jmp 0xf0b9f
leaq 0xa9d0(%rsp), %rdi
callq 0x7a3b2
cmpl $0x1, %eax
jne 0xf0b57
leaq 0x1165a(%rsp), %rsi
leaq 0x4337a(%rip), %rdi     # 0x133ecf
jmp 0xf0b9f
leaq 0x4dc8(%rsp), %rdi
callq 0x6dc22
cmpl $0x1, %eax
jne 0xf0b7a
leaq 0x5e2c(%rsp), %rsi
leaq 0x4337c(%rip), %rdi     # 0x133ef4
jmp 0xf0b9f
leaq 0x2678(%rsp), %rdi
callq 0x6474d
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x1, %ecx
jne 0xf0bab
leaq 0x3394(%rsp), %rsi
leaq 0x4337b(%rip), %rdi     # 0x133f1a
xorl %eax, %eax
callq 0x8030
movl $0x1, %eax
addq $0x11e60, %rsp          # imm = 0x11E60
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq