// File: /workspace/github_c_makefile_star2_O3/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 0x313a8
addq $0x40, %rsp
cmpl $0x1, %eax
jne 0xed3dd
leaq 0x438f7(%rip), %rdi     # 0x130cc7
leaq 0x77a0(%rsp), %rsi
jmp 0xed7db
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
callq 0x5e98e
cmpl $0x1, %eax
jne 0xed40b
leaq 0x3394(%rsp), %rsi
leaq 0x438e3(%rip), %rdi     # 0x130ce9
jmp 0xed7db
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
callq 0x67151
cmpl $0x1, %eax
jne 0xed441
leaq 0x5e2c(%rsp), %rsi
leaq 0x438d4(%rip), %rdi     # 0x130d10
jmp 0xed7db
leaq 0x3b98(%rsp), %rdi
leaq 0x2678(%rsp), %rsi
leaq 0x4dc8(%rsp), %rdx
leaq 0xa9d0(%rsp), %rcx
callq 0x73460
cmpl $0x1, %eax
jne 0xed47f
leaq 0x1165a(%rsp), %rsi
leaq 0x438bc(%rip), %rdi     # 0x130d36
jmp 0xed7db
leaq 0x3b98(%rsp), %rdi
leaq 0xa9d0(%rsp), %rsi
leaq 0x9a0(%rsp), %rdx
callq 0x94c20
cmpl $0x1, %eax
jne 0xed4b5
leaq 0xcca(%rsp), %rsi
leaq 0x438ab(%rip), %rdi     # 0x130d5b
jmp 0xed7db
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 0x9ff2c
cmpl $0x1, %eax
jne 0xed500
leaq 0x19a(%rsp), %rsi
leaq 0x43882(%rip), %rdi     # 0x130d7d
jmp 0xed7db
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 0xa3f4a
cmpl $0x1, %eax
jne 0xed54b
leaq 0x6f9a(%rsp), %rsi
leaq 0x43856(%rip), %rdi     # 0x130d9c
jmp 0xed7db
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 0xb32c8
addq $0x10, %rsp
cmpl $0x1, %eax
jne 0xed59f
leaq 0x15da(%rsp), %rsi
leaq 0x43822(%rip), %rdi     # 0x130dbc
jmp 0xed7db
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 0xb6983
cmpl $0x1, %eax
jne 0xed5e8
leaq 0x1e72(%rsp), %rsi
leaq 0x437f9(%rip), %rdi     # 0x130ddc
jmp 0xed7db
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 0xc72a4
cmpl $0x1, %eax
jne 0xed639
leaq 0x95aa(%rsp), %rsi
leaq 0x437c7(%rip), %rdi     # 0x130dfb
jmp 0xed7db
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 0xe6cd6
addq $0x20, %rsp
cmpl $0x1, %eax
jne 0xed692
leaq 0xa1d0(%rsp), %rsi
leaq 0x43791(%rip), %rdi     # 0x130e1e
jmp 0xed7db
leaq 0x7fa8(%rsp), %rdi
callq 0xc9e84
cmpl $0x1, %eax
jne 0xed6b8
leaq 0x95aa(%rsp), %rsi
leaq 0x43789(%rip), %rdi     # 0x130e3c
jmp 0xed7db
leaq 0x1de0(%rsp), %rdi
callq 0xbf89e
cmpl $0x1, %eax
jne 0xed6de
leaq 0x1e72(%rsp), %rsi
leaq 0x43786(%rip), %rdi     # 0x130e5f
jmp 0xed7db
leaq 0x14f0(%rsp), %rdi
callq 0xb4809
cmpl $0x1, %eax
jne 0xed704
leaq 0x15da(%rsp), %rsi
leaq 0x4377f(%rip), %rdi     # 0x130e7e
jmp 0xed7db
leaq 0x6630(%rsp), %rdi
callq 0xa839b
cmpl $0x1, %eax
jne 0xed72a
leaq 0x6f9a(%rsp), %rsi
leaq 0x43779(%rip), %rdi     # 0x130e9e
jmp 0xed7db
leaq 0x8(%rsp), %rdi
callq 0xa317e
cmpl $0x1, %eax
jne 0xed74d
leaq 0x19a(%rsp), %rsi
leaq 0x43776(%rip), %rdi     # 0x130ebe
jmp 0xed7db
leaq 0x9a0(%rsp), %rdi
callq 0x96c17
cmpl $0x1, %eax
jne 0xed770
leaq 0xcca(%rsp), %rsi
leaq 0x4376f(%rip), %rdi     # 0x130edd
jmp 0xed7db
leaq 0xa9d0(%rsp), %rdi
callq 0x778fb
cmpl $0x1, %eax
jne 0xed793
leaq 0x1165a(%rsp), %rsi
leaq 0x4376e(%rip), %rdi     # 0x130eff
jmp 0xed7db
leaq 0x4dc8(%rsp), %rdi
callq 0x6b2ba
cmpl $0x1, %eax
jne 0xed7b6
leaq 0x5e2c(%rsp), %rsi
leaq 0x43770(%rip), %rdi     # 0x130f24
jmp 0xed7db
leaq 0x2678(%rsp), %rdi
callq 0x61fd4
movl %eax, %ecx
xorl %eax, %eax
cmpl $0x1, %ecx
jne 0xed7e7
leaq 0x3394(%rsp), %rsi
leaq 0x4376f(%rip), %rdi     # 0x130f4a
xorl %eax, %eax
callq 0x8030
movl $0x1, %eax
addq $0x11e60, %rsp          # imm = 0x11E60
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
retq