#include "cell.cuh"
#include <stdlib.h>
#include <stdio.h>

__host__ __device__ Cell::Cell(){

  // Cell Geometry
  pi = 2*acos(0.0);

  // future function "initial conditions"
  V = -8.12e1;          // mV
  h = 9.65e-1;
  d = 1.37e-4;
  xr = 3.29e-5;
  Nai = 1.12e1;         // Initial Intracellular Na (mM)
  Ki = 1.39e2;          // Initial Intracellular Ki (mM)
  Ca_rel = 1.49;
  oi = 9.99e-1;
  ui = 9.99e-1;
  /*
    [Cmdn-Ca2+]i=2.05e-3
    [Csqn-Ca2+]i=6.51
  */

  v = 1.0;             // Activation gate v of Ca release from jsr
  m = 2.91e-3;
  j = 9.78e-1;
  f = 9.99e-1;
  xs = 1.87e-2;
  Cai = 1.02e-4;       // Initial Intracellular Ca
  Ca_up = 1.49;
  oa = 3.04e-2;        /* Paralpha_meters Transient Outward Current ito */
  ua = 4.96e-3;        /* Paralpha_meters Ultra-Rapidly activation K Current ikur */
  fca = 7.75e-1;
  /*
    [Trpn-Ca2+]i=1.18e-2
  */
  u = 0.0;          // Activation gate u of Ca release from jsr // Gates Irel
  w = 9.99e-1;      // Inactivation gate w of Ca release from jsr// Gates Irel
  Itot = 0.0;       // mA Current Total
}

__device__ __host__
db Cell::getItot(db dt){
  compute_currents();
  compute_concentrations(dt);
  compute_gates(dt);
  return Itot;
}

/* Calculates All Currents */
__device__ __host__
void Cell::compute_currents(){
  ECa = ((R*TEMP)/(zca*F)) * log(Cao/Cai);
  ENa = ((R*TEMP)/(zna*F)) * log(Nao/Nai);
  EK = ((R*TEMP)/(zk*F)) * log(Ko/Ki);
  ENC = (F*V) / (R*TEMP);

  comp_ical ();     // Calculates Currents through L-Type Ca Channel
  comp_inaca ();    // Calculates Na-Ca Exchanger Current
  comp_ibna ();     // Calculates Na Background Current
  comp_ibca ();     // Calculates Ca Background Current
  comp_ina ();      // Calculates Fast Na Current
  comp_ikr ();      // Calculates Rapidly Activating K Current
  comp_ipca ();     // Calculates Sarcolemmal Ca Pump Current
  comp_iks ();      // Calculates Slowly Activating K Current
  comp_inak ();     // Calculates Na-K Pump Current
  comp_ik1 ();      // Calculates Time-Independant K Current
  comp_itr();
  comp_ito ();      // Calculates Transient Outward Current
  comp_ikur ();     // Calculates Ultra-Rapidly activation K Current
  comp_itot();      // Calulates Total Current
}


__device__ __host__
void Cell::compute_concentrations(db dt){

  //////////DUDAS SOBRE USO///////////////////////
  // Calsequestrin concentration
  //db Ca_csqn = Csqn_max*(Ca_rel/(Ca_rel+Km_csqn));    // Equation 75, Uso?
  //db Ca_Trpn = Trpn_max*(Cai/(Cai+Kmtrpn));           // Equation 74, no se usa
  //db Ca_Cmdn = Cmdn_max*(Cai/(Cai+kmcmdn));           // Equation 73, no se usa
  //////////////////////////////////////////////////

  comp_iupleak();      // Ca leak current by the NSR
  comp_iup();          // Ca uptake current by the NSR
  comp_irel();         // Ca release current from JSR

  // Intracellular ion concentrations
  conc_nai(dt);        // Equation 21
  conc_ki(dt);         // Equation 22
  conc_cai(dt);        // Equation 23
  conc_ca_up(dt);      // Equation 26
  conc_ca_rel(dt);     // Equation 27
}

__device__ __host__
void Cell::conc_nai(db dt){
  // Compute Intracellular Nai Concentration
  db invViF  = 1.0/(Vi*F);
  db totINa = INa+IbNa+3.0*(INaK+INaca);
  db dNai = dt*(-totINa*invViF);                       // Equation 21
  Nai = dNai + Nai;
}

__device__ __host__
void Cell::conc_ki(db dt){
  // Compute Intracellular Ki Concentration
  // En el paper aparece en IbK, pero no esta.
  db invViF  = 1.0/(Vi*F);
  db totIK = 2.0*INaK-IK1-Ito-IKur-IKr-IKs;//-IbK;
  db dKi = dt*(totIK*invViF);                          // Equation 22
  Ki = dKi + Ki;
}

__device__ __host__
void Cell::conc_cai(db dt){
  // Compute Intracellular Cai Concentration
  db invViF2 = 1.0 / (2.0*Vi*F);
  db b1_left = ((2.0*INaca -IpCa-ICal-IbCa)*invViF2);         // left Ecuation 24
  db b1_right = ((Vup*(Iup_leak-Iup)+(Irel*Vrel))/Vi);        // right Ecuation 24
  db b1cai = b1_left + b1_right;                              // Ecuation 24
  db b2_left=1.0+((Trpn_max*Kmtrpn)/pow((Cai + Kmtrpn),2.0)); // left Ecuation 25
  db b2_right= (Cmdn_max*kmcmdn)/pow((Cai + kmcmdn),2.0);     // right Ecuation 25
  db b2cai = b2_left + b2_right;                              // Ecuation 25
  db dcai = dt*(b1cai/b2cai);                                 // Equation 23

  Cai = dcai + Cai;
}

__device__ __host__
void Cell::conc_ca_up(db dt){
  // Compute Ca2+ concentration in uptake compartment Ca_up //nsr
  db dCa_up = dt*(Iup - Iup_leak - Itr*(Vrel/Vup));            // Equation 26
  Ca_up = dCa_up + Ca_up;
}

__device__ __host__
void Cell::conc_ca_rel(db dt){
  // Compute Ca2+ concentration release compartment Ca_rel //jsr
  db dCa_rel = dt*(Itr-Irel)/(1.0+(Csqn_max*Km_csqn)/pow((Ca_rel+Km_csqn),2.0));  // Equation 27
  Ca_rel = dCa_rel + Ca_rel;
}

/* Calculates Fast Na Current  INa*/
__device__ __host__
void Cell::comp_ina(){
  // Probable explicación de multiplicacion por Cap = 100.
  // Las unidades de la conductancia G son Siemens, pero en el paper
  // de CRN, las unidades son nS/pF, eso muestra que la conductancia que
  // nos estan dando ya fue divida por la capacitancia, y si luego lo volvemos a
  // dividir por Cap en el calculo de B, las unidades quedarian nS/pF^2. e
  // Y la corrient tambien quedaria en pA/pF^2.
  // Al multiplicar por Cap, estamos dejando solo en Siemens, para luego si dividir
  // en el calculo de B por Cap.
  // Cap quedan en Siemnes, par

  INa = CAP*GNa*pow(m,3.0)*h*j*(V-ENa);                         // Equation 29
}

/* Calculates Time-Independant K Current IK1*/
__device__ __host__
void Cell::comp_ik1 (){
  IK1 = CAP*(GK1*(V-EK)) / (1.0+exp(0.07*(V+80.0)));            // Equation 35
}

/* Calculates Transient Outward Current  Ito*/
__device__ __host__
void Cell::comp_ito (){
  Ito = CAP*Gto*pow(oa,3.0)*oi*(V-EK);                          //Equation 36
}

/* Calculates Ultra-Rapidly activation K Current IKur*/
__device__ __host__
void Cell::comp_ikur (){
  db GKur = 0.005+(0.05/(1.0+exp(-(V-15.0)/13.0)));             // Equation 42
  IKur = CAP*GKur*pow(ua,3.0)*ui*(V-EK);                        // Equation 41
}

/* Calculates Rapidly Activating K Current Ikr*/
__device__ __host__
void Cell::comp_ikr (){
  db r = 1.0/(1.0+exp((V+15.0)/22.4));
  IKr = CAP*GKr*xr*r*(V-EK);                                    // Equation 47
}

/* Calculates Slowly Activating K Current  IKs*/
__device__ __host__
void Cell::comp_iks (){
  IKs = CAP*GKs*pow(xs,2.0)*(V-EK);                             // Equation 50
}

/* Calculates Currents through L-Type Ca Channel */
__device__ __host__
void Cell::comp_ical (){
  ICal = CAP*GCaL*d*f*fca*(V-65.0);  // ICal  Equation 53
}

/* Calculates Na-K Pump Current */
__device__ __host__
void Cell::comp_inak (){
  db sigma = (exp(Nao/67.3)-1.0)/7.0;                                     // Equation 59
  db fNaK= 1.0/(1.0+0.1245*exp(-0.1*ENC)+0.0365*sigma*exp(-ENC));         // Equation 58
  INaK = CAP*INaK_max*fNaK*(1.0/(1.0+pow((KmNai/Nai),1.5)))*(Ko/(Ko+KmKo));   // Equation 57
}

/* Calculates Na-Ca Exchanger Current */
__device__ __host__
void Cell::comp_inaca (){
  db phif = exp(gamma*ENC);
  db phir = exp((gamma-1.0)*ENC);
  db nmr  = (phif*pow(Nai,3.0)*Cao)-(phir*pow(Nao,3.0)*Cai);
  db dnm  = (pow(KmNa,3.0)+pow(Nao,3.0))*(KmCa+Cao)*(1.0+(ksat*phir));
  INaca = CAP*INaCa_max*(nmr/dnm);                                             // Equation 60
}

/* Calculates Sarcolemmal Ca Pump Current */
__device__ __host__
void Cell::comp_ipca (){
  IpCa = CAP*(IpCa_max*Cai)/(0.0005+Cai);  // IpCa Equation 63
}

/* Calculates Ca Background Current */
__device__ __host__
void Cell::comp_ibca (){
  IbCa = CAP*GbCa*(V-ECa);                // IbCa  Equation 61
}

/* Calculates Na Background Current ibna */
__device__ __host__
void Cell::comp_ibna (){
  IbNa = CAP*GbNa*(V-ENa);                // IbNa  Equation 62
}

// Compute Ca2+ Release Current From JSR Irel
__device__ __host__
void Cell::comp_irel(){
  db krel = 30.0;  // Rate constant of Ca release from JSR due to overload (ms^-1)
  Irel = krel*pow(u,2.0)*v*w*(Ca_rel-Cai);   // Equation 64
}

// Compute Transfer Current From NSR to JSR Itr
__device__ __host__
void Cell::comp_itr(){
  db tautr = 180.0;               // Time constant of Ca transfer from NSR to JSR(ms) ecu 69
  Itr = (Ca_up - Ca_rel)/tautr;   // Equation 69 for dCa_rel, dCa_up
}

// Compute Ca2+ Uptake Current by NSR Iup
__device__ __host__
void Cell::comp_iup(){
  db Kup= 0.00092;                   // Half-saturation concentration of iup (mM)
  Iup = Iup_max / (1.0+(Kup/Cai));   // Equation 71
}

// Compute Ca2+ Leak Current by the NSR Iup_leak
__device__ __host__
void Cell::comp_iupleak(){
  db Ca_up_max = 15.0;                      //  Max. [Ca] in NSR (m)M
  Iup_leak = (Ca_up/Ca_up_max)*Iup_max;     // Equation 72
}

__device__ __host__
void Cell::comp_itot(){
  db IK,INat,ICa;
  IK = IKr + IKs + IK1 + IKur;
  INat = INa + IbNa + INaK + INaca;
  ICa = ICal + IbCa + IpCa;
  Itot = IK + INat + ICa + Ito;
}

__device__ __host__
void Cell::compute_gates(db dt){
  // Compute gates

  gates_irel(dt);   //u,v,w
  gates_ical(dt);   // d,f,fca
  gates_ina(dt);    // h,j,m
  gates_ikr(dt);    // xr
  gates_iks(dt);    // xs
  gates_ito(dt);    // oa, oi
  gates_ikur(dt);   // ua, ui
}

__device__ __host__
void Cell::gates_irel(db dt){
  // Gates for Irel Current
  db fn = (Vrel * (10e-12) * Irel) -((5.0e-13/F) * (0.5*ICal-0.2*INaca));   // Equation 68
  db tauu = 8.0;                                                            // Equation 65
  db u_inf = 1.0/(1.0+exp(-(fn-3.4175e-13)/13.67e-16));
  db tauv = 1.91+(2.09/(1.0+exp(-(fn-3.4175e-13)/13.67e-16)));              // Equation 66
  db v_inf = 1.0-(1.0/(1.0+exp(-(fn-6.835e-14)/13.67e-16)));
  db tauw = 6.0*(1.0-exp(-(V-7.9)/5.0))/((1.0+0.3*exp(-(V-7.9)/5.0))*(V-7.9));
  db w_inf = 1.0-(1.0/(1.0+exp(-(V-40.0)/17.0)));                           // Equation 67
  //Compute Gates
  u = u_inf+(u-u_inf)*exp(-dt/tauu);   // Activation gate u of Ca release from jsr
  v = v_inf+(v-v_inf)*exp(-dt/tauv);   // Activation gate v of Ca release from jsr
  w = w_inf+(w-w_inf)*exp(-dt/tauw);   // Inactivation gate w of Ca release from jsr
}

__device__ __host__
void Cell::gates_ina(db dt){
  // Gates: m,h,j.
  db alpha_m,beta_m,alpha_h,beta_h,alpha_j,beta_j,tau_m, m_inf, tau_h;
  db h_inf, tau_j, j_inf;

  alpha_m = ((V == -47.13)? 3.2 : 0.32*(V+47.13)/(1.0-exp(-0.1*(V+47.13))));  // Equation 30
  beta_m = 0.08 * exp(-V/11.0);

  if (V < -40.0){ // Equation 31,32,33
    alpha_h = 0.135 * exp(-(80.0+V)/6.8);
    beta_h = 3.56 * exp(0.079*V) + 3.1e5 *exp(0.35*V);
    alpha_j = ( (-127140 * exp(0.2444*V)) - (3.474e-5 * exp(-0.04391*V))) * ((V+37.78)/(1.0+exp(0.311*(V+79.23))));
    beta_j = (0.1212 * exp(-0.01052*V))/(1 + exp(-0.1378 * (V+40.14)));
  } else {
    alpha_h = 0.0;
    beta_h = 1.0 / (0.13 * (1.0+exp(-(V+10.66)/11.1)));
    alpha_j = 0.0;
    beta_j = (0.3 * exp(-2.535e-7*V))/(1.0+exp(-0.1*(V+32.0)));
  }

  tau_m = (1.0 / (alpha_m+beta_m));          // Equation 34
  m_inf = alpha_m * tau_m;
  tau_h = (1.0 / (alpha_h+beta_h));
  h_inf = alpha_h * tau_h;
  tau_j = (1.0 / (alpha_j+beta_j));
  j_inf= alpha_j*tau_j;

  // Update gates
  m = m_inf +(m-m_inf)*exp(-dt/tau_m);       // Equation 77
  h = h_inf +(h-h_inf)*exp(-dt/tau_h);
  j = j_inf+(j-j_inf)*exp(-dt/tau_j);
}

__device__ __host__
void Cell::gates_ito(db dt){
  //ACTUALIZO COMPUERTAS
  db alpha_oa, beta_oa,tau_oa,oa_inf,alpha_oi,beta_oi,tau_oi, oi_inf;

  // Gates: oa,oi.
  alpha_oa = 0.65/(exp(-(V+10.0)/8.5)+exp(-(V-30.0)/59.0));   // Equation 37
  beta_oa = 0.65/(2.5+exp((V+82.0)/17.0));
  tau_oa = 1.0/((alpha_oa+beta_oa)*Kq10);                     // Equation 38
  oa_inf = 1.0/(1.0+exp(-(V+20.47)/17.54));

  alpha_oi= 1.0/(18.53+exp((V+113.7)/10.95));                 // Equation 39
  beta_oi = 1.0/(35.56+exp(-(V+1.26)/7.44));
  tau_oi = 1.0/((alpha_oi+beta_oi)*Kq10);                     // Equation 40
  oi_inf = 1.0/(1.0+exp((V+43.1)/5.3));

  // Updates gates
  oa = oa_inf+(oa-oa_inf)*exp(-dt/tau_oa);                    // Equation 77
  oi = oi_inf+(oi-oi_inf)*exp(-dt/tau_oi);
}

__device__ __host__
void Cell::gates_ikur(db dt){
  //ACTUALIZO COMPUERTAS
  db alpha_ua, beta_ua,tau_ua,ua_inf,alpha_ui,beta_ui, tau_ui;
  db ui_inf;

  // Gates: uo,ui.
  alpha_ua = 0.65/(exp(-(V+10.0)/8.5)+exp(-(V-30.0)/59.0));   // Equation 43
  beta_ua = 0.65/(2.5+exp((V+82.0)/17.0));
  tau_ua = 1.0/((alpha_ua+beta_ua)*Kq10);                     // Equation 44
  ua_inf = 1.0/(1.0+exp(-(V+30.3)/9.6));

  alpha_ui = 1.0/(21.0+exp(-(V-185.0)/28.0));                 // Equation 45
  beta_ui = exp((V-158.0)/16.0);
  tau_ui = 1.0/((alpha_ui+beta_ui)*Kq10);                     // Equation 46
  ui_inf = 1.0/(1.0+exp((V-99.45)/27.48));

  // Updates gates
  ua = ua_inf+(ua-ua_inf)*exp(-dt/tau_ua);
  ui = ui_inf+(ui-ui_inf)*exp(-dt/tau_ui);
}

__device__ __host__
void Cell::gates_ikr(db dt){
  //ACTUALIZO COMPUERTAS
  db alpha_xr, beta_xr, tau_xr, xr_inf;

  alpha_xr = 0.0003 * (( V + 14.1)/(1.0-exp(-(V + 14.1)/5.0)));
  beta_xr = 7.3898e-5*((V -3.3328)/(exp((V-3.3328)/5.1237)-1.0));
  tau_xr = 1.0 / (alpha_xr + beta_xr);
  xr_inf = 1.0 / (1.0 + exp(-(V + 14.1) / 6.5) );

  xr = xr_inf + (xr-xr_inf)*exp(-dt/tau_xr);

}

__device__ __host__
void Cell::gates_iks(db dt){
  //ACTUALIZO COMPUERTAS
  db alpha_xs,beta_xs,tau_xs,xs_inf;

  // Gate: xs
  alpha_xs = 4.0e-5 * ((V-19.9) / (1.0-exp(-(V-19.9)/17.0)));    // Equation 51
  beta_xs = 3.5e-5 * ((V-19.9) / (exp((V-19.9)/9.0)-1.0));
  tau_xs = 0.5 / (alpha_xs+beta_xs);                             // Equation 52
  xs_inf = pow(1.0 + (exp(-(V-19.9)/12.7)),-0.5);

  // Update gate
  xs = xs_inf+(xs-xs_inf)*exp(-dt/tau_xs);                       // Equation 77
}

__device__ __host__
void Cell::gates_ical(db dt){
  //ACTUALIZO COMPUERTAS
  db d_inf, tau_d, f_inf, tau_f, fca_inf, tau_fca;

  tau_d = (1.0 - exp((V+10.0)/-6.24))/ (0.035*(V+10.0)*(1.0+exp((V+10.0)/-6.24))); //Equation 54
  d_inf = 1.0/(1.0+exp((V+10.0)/-8.0));                        // Equation 54
  tau_f = 9.0/(0.0197*exp((-1.0)*pow(0.0337,2.0)*pow((V+10.0),2.0))+0.02);
  f_inf = 1.0/(1.0+exp((V+28.0)/6.9));                         // Equation 55
  fca_inf = 1.0/(1.0+(Cai/0.00035));                           // Equation 56
  tau_fca = 2.0;
  d = d_inf + (d - d_inf)*exp(-dt/tau_d);
  f = f_inf + (f - f_inf)*exp(-dt/tau_f);
  fca = fca_inf + (fca - fca_inf)*exp(-dt/tau_fca);
}

	.file	"tmpxft_00211dae_00000000-6_cell.cudafe1.cpp"
	.text
#APP

#NO_APP
	.type	_ZL26__cudaUnregisterBinaryUtilv, @function
_ZL26__cudaUnregisterBinaryUtilv:
.LFB2065:
	.cfi_startproc
	endbr64
	movq	_ZL20__cudaFatCubinHandle(%rip), %rdi
	jmp	__cudaUnregisterFatBinary@PLT
	.cfi_endproc
.LFE2065:
	.size	_ZL26__cudaUnregisterBinaryUtilv, .-_ZL26__cudaUnregisterBinaryUtilv
	.align 2
	.globl	_ZN4CellC2Ev
	.type	_ZN4CellC2Ev, @function
_ZN4CellC2Ev:
.LFB2028:
	.cfi_startproc
	endbr64
	movq	.LC0(%rip), %rax
	movsd	.LC8(%rip), %xmm0
	movsd	.LC7(%rip), %xmm1
	movq	%rax, (%rdi)
	movq	.LC1(%rip), %rax
	movsd	%xmm1, 152(%rdi)
	movq	%rax, 8(%rdi)
	movq	.LC2(%rip), %rax
	movsd	%xmm0, 136(%rdi)
	movq	%rax, 48(%rdi)
	movq	.LC3(%rip), %rax
	movsd	%xmm0, 120(%rdi)
	movq	%rax, 80(%rdi)
	movq	.LC4(%rip), %rax
	movsd	%xmm0, 88(%rdi)
	movq	%rax, 64(%rdi)
	movq	.LC5(%rip), %rax
	movsd	%xmm1, 144(%rdi)
	movq	%rax, 24(%rdi)
	movq	.LC6(%rip), %rax
	movq	%rax, 32(%rdi)
	movq	.LC9(%rip), %rax
	movq	%rax, 168(%rdi)
	movq	.LC10(%rip), %rax
	movq	%rax, 40(%rdi)
	movq	.LC11(%rip), %rax
	movq	%rax, 56(%rdi)
	movq	.LC12(%rip), %rax
	movq	%rax, 72(%rdi)
	movq	.LC13(%rip), %rax
	movq	%rax, 16(%rdi)
	movq	.LC14(%rip), %rax
	movq	%rax, 128(%rdi)
	movq	.LC15(%rip), %rax
	movq	$0x000000000, 160(%rdi)
	movq	%rax, 112(%rdi)
	movq	.LC16(%rip), %rax
	movq	$0x000000000, 184(%rdi)
	movq	%rax, 96(%rdi)
	movsd	%xmm0, 176(%rdi)
	ret
	.cfi_endproc
.LFE2028:
	.size	_ZN4CellC2Ev, .-_ZN4CellC2Ev
	.globl	_ZN4CellC1Ev
	.set	_ZN4CellC1Ev,_ZN4CellC2Ev
	.align 2
	.globl	_ZN4Cell8conc_naiEd
	.type	_ZN4Cell8conc_naiEd, @function
_ZN4Cell8conc_naiEd:
.LFB2033:
	.cfi_startproc
	endbr64
	movaps	%xmm0, %xmm2
	movsd	272(%rdi), %xmm0
	addsd	248(%rdi), %xmm0
	mulsd	.LC18(%rip), %xmm0
	movsd	232(%rdi), %xmm1
	addsd	240(%rdi), %xmm1
	addsd	%xmm1, %xmm0
	mulsd	.LC21(%rip), %xmm0
	mulsd	%xmm2, %xmm0
	addsd	24(%rdi), %xmm0
	movsd	%xmm0, 24(%rdi)
	ret
	.cfi_endproc
.LFE2033:
	.size	_ZN4Cell8conc_naiEd, .-_ZN4Cell8conc_naiEd
	.align 2
	.globl	_ZN4Cell7conc_kiEd
	.type	_ZN4Cell7conc_kiEd, @function
_ZN4Cell7conc_kiEd:
.LFB2034:
	.cfi_startproc
	endbr64
	movaps	%xmm0, %xmm1
	movsd	272(%rdi), %xmm0
	addsd	%xmm0, %xmm0
	subsd	208(%rdi), %xmm0
	subsd	192(%rdi), %xmm0
	subsd	216(%rdi), %xmm0
	subsd	200(%rdi), %xmm0
	subsd	264(%rdi), %xmm0
	mulsd	.LC20(%rip), %xmm0
	mulsd	%xmm1, %xmm0
	addsd	32(%rdi), %xmm0
	movsd	%xmm0, 32(%rdi)
	ret
	.cfi_endproc
.LFE2034:
	.size	_ZN4Cell7conc_kiEd, .-_ZN4Cell7conc_kiEd
	.align 2
	.globl	_ZN4Cell8conc_caiEd
	.type	_ZN4Cell8conc_caiEd, @function
_ZN4Cell8conc_caiEd:
.LFB2035:
	.cfi_startproc
	endbr64
	movsd	16(%rdi), %xmm2
	movsd	.LC22(%rip), %xmm5
	movaps	%xmm0, %xmm3
	movsd	248(%rdi), %xmm0
	movsd	.LC23(%rip), %xmm4
	addsd	%xmm2, %xmm5
	movsd	320(%rdi), %xmm1
	movsd	.LC26(%rip), %xmm6
	addsd	%xmm0, %xmm0
	mulsd	296(%rdi), %xmm6
	subsd	280(%rdi), %xmm0
	subsd	312(%rdi), %xmm1
	mulsd	.LC25(%rip), %xmm1
	addsd	%xmm2, %xmm4
	subsd	256(%rdi), %xmm0
	subsd	288(%rdi), %xmm0
	mulsd	%xmm5, %xmm5
	mulsd	.LC24(%rip), %xmm0
	mulsd	%xmm4, %xmm4
	addsd	%xmm6, %xmm1
	divsd	.LC27(%rip), %xmm1
	addsd	%xmm1, %xmm0
	movsd	.LC28(%rip), %xmm1
	divsd	%xmm5, %xmm1
	movsd	.LC29(%rip), %xmm5
	divsd	%xmm4, %xmm5
	addsd	.LC9(%rip), %xmm1
	addsd	%xmm5, %xmm1
	divsd	%xmm1, %xmm0
	mulsd	%xmm3, %xmm0
	addsd	%xmm2, %xmm0
	movsd	%xmm0, 16(%rdi)
	ret
	.cfi_endproc
.LFE2035:
	.size	_ZN4Cell8conc_caiEd, .-_ZN4Cell8conc_caiEd
	.align 2
	.globl	_ZN4Cell10conc_ca_upEd
	.type	_ZN4Cell10conc_ca_upEd, @function
_ZN4Cell10conc_ca_upEd:
.LFB2036:
	.cfi_startproc
	endbr64
	movsd	.LC30(%rip), %xmm1
	mulsd	304(%rdi), %xmm1
	movaps	%xmm0, %xmm2
	movsd	312(%rdi), %xmm0
	subsd	320(%rdi), %xmm0
	subsd	%xmm1, %xmm0
	mulsd	%xmm2, %xmm0
	addsd	144(%rdi), %xmm0
	movsd	%xmm0, 144(%rdi)
	ret
	.cfi_endproc
.LFE2036:
	.size	_ZN4Cell10conc_ca_upEd, .-_ZN4Cell10conc_ca_upEd
	.align 2
	.globl	_ZN4Cell11conc_ca_relEd
	.type	_ZN4Cell11conc_ca_relEd, @function
_ZN4Cell11conc_ca_relEd:
.LFB2037:
	.cfi_startproc
	endbr64
	movsd	152(%rdi), %xmm3
	movsd	.LC31(%rip), %xmm1
	movaps	%xmm0, %xmm2
	movsd	304(%rdi), %xmm0
	subsd	296(%rdi), %xmm0
	addsd	%xmm3, %xmm1
	mulsd	%xmm2, %xmm0
	movaps	%xmm1, %xmm2
	mulsd	%xmm1, %xmm2
	movsd	.LC32(%rip), %xmm1
	divsd	%xmm2, %xmm1
	addsd	.LC9(%rip), %xmm1
	divsd	%xmm1, %xmm0
	addsd	%xmm3, %xmm0
	movsd	%xmm0, 152(%rdi)
	ret
	.cfi_endproc
.LFE2037:
	.size	_ZN4Cell11conc_ca_relEd, .-_ZN4Cell11conc_ca_relEd
	.align 2
	.globl	_ZN4Cell8comp_inaEv
	.type	_ZN4Cell8comp_inaEv, @function
_ZN4Cell8comp_inaEv:
.LFB2038:
	.cfi_startproc
	endbr64
	movsd	.LC18(%rip), %xmm1
	movsd	40(%rdi), %xmm0
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	call	pow@PLT
	mulsd	.LC33(%rip), %xmm0
	movsd	8(%rbx), %xmm1
	mulsd	48(%rbx), %xmm0
	subsd	328(%rbx), %xmm1
	mulsd	56(%rbx), %xmm0
	mulsd	%xmm1, %xmm0
	movsd	%xmm0, 232(%rbx)
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2038:
	.size	_ZN4Cell8comp_inaEv, .-_ZN4Cell8comp_inaEv
	.align 2
	.globl	_ZN4Cell8comp_ik1Ev
	.type	_ZN4Cell8comp_ik1Ev, @function
_ZN4Cell8comp_ik1Ev:
.LFB2039:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movsd	8(%rdi), %xmm0
	movaps	%xmm0, %xmm1
	subsd	336(%rdi), %xmm1
	addsd	.LC36(%rip), %xmm0
	mulsd	.LC34(%rip), %xmm1
	mulsd	.LC35(%rip), %xmm1
	mulsd	.LC37(%rip), %xmm0
	movsd	%xmm1, 8(%rsp)
	call	exp@PLT
	addsd	.LC9(%rip), %xmm0
	movsd	8(%rsp), %xmm1
	divsd	%xmm0, %xmm1
	movsd	%xmm1, 208(%rbx)
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2039:
	.size	_ZN4Cell8comp_ik1Ev, .-_ZN4Cell8comp_ik1Ev
	.align 2
	.globl	_ZN4Cell8comp_itoEv
	.type	_ZN4Cell8comp_itoEv, @function
_ZN4Cell8comp_itoEv:
.LFB2040:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movsd	.LC18(%rip), %xmm1
	movq	%rdi, %rbx
	movsd	128(%rdi), %xmm0
	call	pow@PLT
	mulsd	.LC38(%rip), %xmm0
	movsd	8(%rbx), %xmm1
	mulsd	136(%rbx), %xmm0
	subsd	336(%rbx), %xmm1
	mulsd	%xmm1, %xmm0
	movsd	%xmm0, 192(%rbx)
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2040:
	.size	_ZN4Cell8comp_itoEv, .-_ZN4Cell8comp_itoEv
	.align 2
	.globl	_ZN4Cell9comp_ikurEv
	.type	_ZN4Cell9comp_ikurEv, @function
_ZN4Cell9comp_ikurEv:
.LFB2041:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movsd	8(%rdi), %xmm3
	movaps	%xmm3, %xmm0
	movsd	%xmm3, 8(%rsp)
	subsd	.LC39(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC40(%rip), %xmm0
	call	exp@PLT
	movsd	.LC18(%rip), %xmm1
	movsd	%xmm0, (%rsp)
	movsd	112(%rbx), %xmm0
	call	pow@PLT
	movsd	(%rsp), %xmm2
	addsd	.LC9(%rip), %xmm2
	movsd	.LC41(%rip), %xmm1
	movaps	%xmm0, %xmm4
	movsd	8(%rsp), %xmm3
	movsd	.LC42(%rip), %xmm0
	subsd	336(%rbx), %xmm3
	divsd	%xmm2, %xmm1
	addsd	%xmm1, %xmm0
	mulsd	.LC35(%rip), %xmm0
	mulsd	%xmm4, %xmm0
	mulsd	120(%rbx), %xmm0
	mulsd	%xmm3, %xmm0
	movsd	%xmm0, 216(%rbx)
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2041:
	.size	_ZN4Cell9comp_ikurEv, .-_ZN4Cell9comp_ikurEv
	.align 2
	.globl	_ZN4Cell8comp_ikrEv
	.type	_ZN4Cell8comp_ikrEv, @function
_ZN4Cell8comp_ikrEv:
.LFB2042:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movsd	8(%rdi), %xmm2
	movaps	%xmm2, %xmm0
	movsd	%xmm2, 8(%rsp)
	addsd	.LC39(%rip), %xmm0
	divsd	.LC43(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm3
	movsd	.LC44(%rip), %xmm1
	mulsd	64(%rbx), %xmm1
	movsd	8(%rsp), %xmm2
	addsd	%xmm3, %xmm0
	subsd	336(%rbx), %xmm2
	divsd	%xmm0, %xmm3
	mulsd	%xmm3, %xmm1
	mulsd	%xmm2, %xmm1
	movsd	%xmm1, 200(%rbx)
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2042:
	.size	_ZN4Cell8comp_ikrEv, .-_ZN4Cell8comp_ikrEv
	.align 2
	.globl	_ZN4Cell8comp_iksEv
	.type	_ZN4Cell8comp_iksEv, @function
_ZN4Cell8comp_iksEv:
.LFB2043:
	.cfi_startproc
	endbr64
	movsd	72(%rdi), %xmm0
	movsd	8(%rdi), %xmm1
	subsd	336(%rdi), %xmm1
	mulsd	%xmm0, %xmm0
	mulsd	.LC45(%rip), %xmm0
	mulsd	%xmm0, %xmm1
	movsd	%xmm1, 264(%rdi)
	ret
	.cfi_endproc
.LFE2043:
	.size	_ZN4Cell8comp_iksEv, .-_ZN4Cell8comp_iksEv
	.align 2
	.globl	_ZN4Cell9comp_icalEv
	.type	_ZN4Cell9comp_icalEv, @function
_ZN4Cell9comp_icalEv:
.LFB2044:
	.cfi_startproc
	endbr64
	movsd	.LC46(%rip), %xmm0
	mulsd	80(%rdi), %xmm0
	mulsd	88(%rdi), %xmm0
	movsd	8(%rdi), %xmm1
	mulsd	96(%rdi), %xmm0
	subsd	.LC47(%rip), %xmm1
	mulsd	%xmm1, %xmm0
	movsd	%xmm0, 256(%rdi)
	ret
	.cfi_endproc
.LFE2044:
	.size	_ZN4Cell9comp_icalEv, .-_ZN4Cell9comp_icalEv
	.align 2
	.globl	_ZN4Cell9comp_inakEv
	.type	_ZN4Cell9comp_inakEv, @function
_ZN4Cell9comp_inakEv:
.LFB2045:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movsd	344(%rdi), %xmm1
	movaps	%xmm1, %xmm0
	movsd	%xmm1, (%rsp)
	mulsd	.LC48(%rip), %xmm0
	call	exp@PLT
	movsd	(%rsp), %xmm1
	xorps	.LC19(%rip), %xmm1
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm1, %xmm0
	call	exp@PLT
	movsd	.LC49(%rip), %xmm1
	movsd	%xmm0, (%rsp)
	movsd	.LC50(%rip), %xmm0
	divsd	24(%rbx), %xmm0
	call	pow@PLT
	movsd	8(%rsp), %xmm2
	movsd	(%rsp), %xmm3
	mulsd	.LC51(%rip), %xmm2
	movaps	%xmm0, %xmm4
	mulsd	.LC52(%rip), %xmm3
	movaps	%xmm2, %xmm0
	movsd	.LC9(%rip), %xmm2
	addsd	%xmm2, %xmm0
	addsd	%xmm2, %xmm4
	movaps	%xmm2, %xmm1
	addsd	%xmm3, %xmm0
	divsd	%xmm4, %xmm2
	divsd	%xmm0, %xmm1
	mulsd	.LC53(%rip), %xmm1
	mulsd	%xmm2, %xmm1
	mulsd	.LC54(%rip), %xmm1
	movsd	%xmm1, 272(%rbx)
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2045:
	.size	_ZN4Cell9comp_inakEv, .-_ZN4Cell9comp_inakEv
	.align 2
	.globl	_ZN4Cell10comp_inacaEv
	.type	_ZN4Cell10comp_inacaEv, @function
_ZN4Cell10comp_inacaEv:
.LFB2046:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$16, %rsp
	.cfi_def_cfa_offset 32
	movsd	344(%rdi), %xmm1
	movaps	%xmm1, %xmm0
	movsd	%xmm1, 8(%rsp)
	mulsd	.LC55(%rip), %xmm0
	call	exp@PLT
	movsd	8(%rsp), %xmm1
	mulsd	.LC56(%rip), %xmm1
	movsd	%xmm0, (%rsp)
	movaps	%xmm1, %xmm0
	call	exp@PLT
	movsd	.LC18(%rip), %xmm1
	movsd	%xmm0, 8(%rsp)
	movsd	24(%rbx), %xmm0
	call	pow@PLT
	movsd	8(%rsp), %xmm2
	mulsd	(%rsp), %xmm0
	movsd	.LC58(%rip), %xmm1
	mulsd	.LC57(%rip), %xmm0
	mulsd	%xmm2, %xmm1
	mulsd	16(%rbx), %xmm1
	mulsd	.LC59(%rip), %xmm2
	addsd	.LC9(%rip), %xmm2
	mulsd	.LC60(%rip), %xmm2
	subsd	%xmm1, %xmm0
	divsd	%xmm2, %xmm0
	mulsd	.LC61(%rip), %xmm0
	movsd	%xmm0, 248(%rbx)
	addq	$16, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2046:
	.size	_ZN4Cell10comp_inacaEv, .-_ZN4Cell10comp_inacaEv
	.align 2
	.globl	_ZN4Cell9comp_ipcaEv
	.type	_ZN4Cell9comp_ipcaEv, @function
_ZN4Cell9comp_ipcaEv:
.LFB2047:
	.cfi_startproc
	endbr64
	movsd	16(%rdi), %xmm1
	movsd	.LC62(%rip), %xmm0
	mulsd	%xmm1, %xmm0
	addsd	.LC22(%rip), %xmm1
	mulsd	.LC35(%rip), %xmm0
	divsd	%xmm1, %xmm0
	movsd	%xmm0, 280(%rdi)
	ret
	.cfi_endproc
.LFE2047:
	.size	_ZN4Cell9comp_ipcaEv, .-_ZN4Cell9comp_ipcaEv
	.align 2
	.globl	_ZN4Cell9comp_ibcaEv
	.type	_ZN4Cell9comp_ibcaEv, @function
_ZN4Cell9comp_ibcaEv:
.LFB2048:
	.cfi_startproc
	endbr64
	movsd	8(%rdi), %xmm0
	subsd	352(%rdi), %xmm0
	mulsd	.LC63(%rip), %xmm0
	movsd	%xmm0, 288(%rdi)
	ret
	.cfi_endproc
.LFE2048:
	.size	_ZN4Cell9comp_ibcaEv, .-_ZN4Cell9comp_ibcaEv
	.align 2
	.globl	_ZN4Cell9comp_ibnaEv
	.type	_ZN4Cell9comp_ibnaEv, @function
_ZN4Cell9comp_ibnaEv:
.LFB2049:
	.cfi_startproc
	endbr64
	movsd	8(%rdi), %xmm0
	subsd	328(%rdi), %xmm0
	mulsd	.LC64(%rip), %xmm0
	movsd	%xmm0, 240(%rdi)
	ret
	.cfi_endproc
.LFE2049:
	.size	_ZN4Cell9comp_ibnaEv, .-_ZN4Cell9comp_ibnaEv
	.align 2
	.globl	_ZN4Cell9comp_irelEv
	.type	_ZN4Cell9comp_irelEv, @function
_ZN4Cell9comp_irelEv:
.LFB2050:
	.cfi_startproc
	endbr64
	movsd	160(%rdi), %xmm0
	movsd	152(%rdi), %xmm1
	subsd	16(%rdi), %xmm1
	mulsd	%xmm0, %xmm0
	mulsd	.LC65(%rip), %xmm0
	mulsd	168(%rdi), %xmm0
	mulsd	176(%rdi), %xmm0
	mulsd	%xmm1, %xmm0
	movsd	%xmm0, 296(%rdi)
	ret
	.cfi_endproc
.LFE2050:
	.size	_ZN4Cell9comp_irelEv, .-_ZN4Cell9comp_irelEv
	.align 2
	.globl	_ZN4Cell8comp_itrEv
	.type	_ZN4Cell8comp_itrEv, @function
_ZN4Cell8comp_itrEv:
.LFB2051:
	.cfi_startproc
	endbr64
	movsd	144(%rdi), %xmm0
	subsd	152(%rdi), %xmm0
	divsd	.LC66(%rip), %xmm0
	movsd	%xmm0, 304(%rdi)
	ret
	.cfi_endproc
.LFE2051:
	.size	_ZN4Cell8comp_itrEv, .-_ZN4Cell8comp_itrEv
	.align 2
	.globl	_ZN4Cell8comp_iupEv
	.type	_ZN4Cell8comp_iupEv, @function
_ZN4Cell8comp_iupEv:
.LFB2052:
	.cfi_startproc
	endbr64
	movsd	.LC67(%rip), %xmm0
	divsd	16(%rdi), %xmm0
	addsd	.LC9(%rip), %xmm0
	movsd	.LC42(%rip), %xmm1
	divsd	%xmm0, %xmm1
	movsd	%xmm1, 312(%rdi)
	ret
	.cfi_endproc
.LFE2052:
	.size	_ZN4Cell8comp_iupEv, .-_ZN4Cell8comp_iupEv
	.align 2
	.globl	_ZN4Cell12comp_iupleakEv
	.type	_ZN4Cell12comp_iupleakEv, @function
_ZN4Cell12comp_iupleakEv:
.LFB2053:
	.cfi_startproc
	endbr64
	movsd	144(%rdi), %xmm0
	divsd	.LC39(%rip), %xmm0
	mulsd	.LC42(%rip), %xmm0
	movsd	%xmm0, 320(%rdi)
	ret
	.cfi_endproc
.LFE2053:
	.size	_ZN4Cell12comp_iupleakEv, .-_ZN4Cell12comp_iupleakEv
	.align 2
	.globl	_ZN4Cell22compute_concentrationsEd
	.type	_ZN4Cell22compute_concentrationsEd, @function
_ZN4Cell22compute_concentrationsEd:
.LFB2032:
	.cfi_startproc
	endbr64
	movaps	%xmm0, %xmm7
	call	_ZN4Cell12comp_iupleakEv
	call	_ZN4Cell8comp_iupEv
	call	_ZN4Cell9comp_irelEv
	movaps	%xmm7, %xmm0
	call	_ZN4Cell8conc_naiEd
	movaps	%xmm7, %xmm0
	call	_ZN4Cell7conc_kiEd
	movaps	%xmm7, %xmm0
	call	_ZN4Cell8conc_caiEd
	movaps	%xmm7, %xmm0
	call	_ZN4Cell10conc_ca_upEd
	movaps	%xmm7, %xmm0
	jmp	_ZN4Cell11conc_ca_relEd
	.cfi_endproc
.LFE2032:
	.size	_ZN4Cell22compute_concentrationsEd, .-_ZN4Cell22compute_concentrationsEd
	.align 2
	.globl	_ZN4Cell9comp_itotEv
	.type	_ZN4Cell9comp_itotEv, @function
_ZN4Cell9comp_itotEv:
.LFB2054:
	.cfi_startproc
	endbr64
	movsd	200(%rdi), %xmm0
	movsd	232(%rdi), %xmm1
	addsd	264(%rdi), %xmm0
	addsd	240(%rdi), %xmm1
	addsd	208(%rdi), %xmm0
	addsd	272(%rdi), %xmm1
	addsd	216(%rdi), %xmm0
	addsd	248(%rdi), %xmm1
	addsd	%xmm1, %xmm0
	movsd	256(%rdi), %xmm1
	addsd	288(%rdi), %xmm1
	addsd	280(%rdi), %xmm1
	addsd	%xmm1, %xmm0
	addsd	192(%rdi), %xmm0
	movsd	%xmm0, 184(%rdi)
	ret
	.cfi_endproc
.LFE2054:
	.size	_ZN4Cell9comp_itotEv, .-_ZN4Cell9comp_itotEv
	.align 2
	.globl	_ZN4Cell16compute_currentsEv
	.type	_ZN4Cell16compute_currentsEv, @function
_ZN4Cell16compute_currentsEv:
.LFB2031:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movsd	.LC57(%rip), %xmm0
	movq	%rdi, %rbx
	divsd	16(%rdi), %xmm0
	call	log@PLT
	mulsd	.LC68(%rip), %xmm0
	movsd	%xmm0, 352(%rbx)
	movsd	.LC69(%rip), %xmm0
	divsd	24(%rbx), %xmm0
	call	log@PLT
	mulsd	.LC70(%rip), %xmm0
	movsd	%xmm0, 328(%rbx)
	movsd	.LC71(%rip), %xmm0
	divsd	32(%rbx), %xmm0
	call	log@PLT
	mulsd	.LC70(%rip), %xmm0
	movq	%rbx, %rdi
	movsd	%xmm0, 336(%rbx)
	movsd	.LC72(%rip), %xmm0
	mulsd	8(%rbx), %xmm0
	divsd	.LC73(%rip), %xmm0
	movsd	%xmm0, 344(%rbx)
	call	_ZN4Cell9comp_icalEv
	call	_ZN4Cell10comp_inacaEv
	movq	%rbx, %rdi
	call	_ZN4Cell9comp_ibnaEv
	call	_ZN4Cell9comp_ibcaEv
	call	_ZN4Cell8comp_inaEv
	movq	%rbx, %rdi
	call	_ZN4Cell8comp_ikrEv
	movq	%rbx, %rdi
	call	_ZN4Cell9comp_ipcaEv
	call	_ZN4Cell8comp_iksEv
	call	_ZN4Cell9comp_inakEv
	movq	%rbx, %rdi
	call	_ZN4Cell8comp_ik1Ev
	movq	%rbx, %rdi
	call	_ZN4Cell8comp_itrEv
	call	_ZN4Cell8comp_itoEv
	movq	%rbx, %rdi
	call	_ZN4Cell9comp_ikurEv
	movq	%rbx, %rdi
	popq	%rbx
	.cfi_def_cfa_offset 8
	jmp	_ZN4Cell9comp_itotEv
	.cfi_endproc
.LFE2031:
	.size	_ZN4Cell16compute_currentsEv, .-_ZN4Cell16compute_currentsEv
	.align 2
	.globl	_ZN4Cell10gates_irelEd
	.type	_ZN4Cell10gates_irelEd, @function
_ZN4Cell10gates_irelEd:
.LFB2056:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 112
	movsd	.LC76(%rip), %xmm2
	movsd	.LC74(%rip), %xmm1
	mulsd	248(%rdi), %xmm2
	movsd	%xmm0, 48(%rsp)
	movsd	.LC75(%rip), %xmm0
	mulsd	256(%rdi), %xmm0
	mulsd	296(%rdi), %xmm1
	subsd	%xmm2, %xmm0
	mulsd	.LC77(%rip), %xmm0
	subsd	%xmm0, %xmm1
	movaps	%xmm1, %xmm0
	movsd	%xmm1, 16(%rsp)
	subsd	.LC78(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC79(%rip), %xmm0
	movq	%xmm0, %r14
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm7
	divsd	%xmm0, %xmm7
	movq	%r14, %xmm0
	movsd	%xmm7, 8(%rsp)
	call	exp@PLT
	movsd	16(%rsp), %xmm1
	subsd	.LC80(%rip), %xmm1
	xorps	.LC19(%rip), %xmm1
	movsd	%xmm0, 72(%rsp)
	movaps	%xmm1, %xmm0
	divsd	.LC79(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm1
	movaps	%xmm2, %xmm7
	divsd	%xmm0, %xmm1
	subsd	%xmm1, %xmm7
	movsd	8(%rbx), %xmm1
	movaps	%xmm1, %xmm5
	subsd	.LC81(%rip), %xmm5
	movsd	%xmm1, 24(%rsp)
	movsd	%xmm7, 16(%rsp)
	movaps	%xmm5, %xmm0
	movsd	%xmm5, 64(%rsp)
	xorps	.LC19(%rip), %xmm0
	divsd	.LC82(%rip), %xmm0
	movq	%xmm0, %r14
	call	exp@PLT
	movsd	%xmm0, 32(%rsp)
	movq	%r14, %xmm0
	call	exp@PLT
	movsd	24(%rsp), %xmm1
	subsd	.LC83(%rip), %xmm1
	xorps	.LC19(%rip), %xmm1
	movsd	%xmm0, 56(%rsp)
	movaps	%xmm1, %xmm0
	divsd	.LC84(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	movsd	48(%rsp), %xmm4
	xorps	.LC19(%rip), %xmm4
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm1
	movaps	%xmm2, %xmm3
	movsd	%xmm4, 48(%rsp)
	divsd	%xmm0, %xmm1
	movsd	160(%rbx), %xmm0
	subsd	8(%rsp), %xmm0
	movsd	%xmm0, 40(%rsp)
	movaps	%xmm4, %xmm0
	mulsd	.LC85(%rip), %xmm0
	subsd	%xmm1, %xmm3
	movsd	%xmm3, 24(%rsp)
	call	exp@PLT
	mulsd	40(%rsp), %xmm0
	movsd	72(%rsp), %xmm6
	addsd	8(%rsp), %xmm0
	movsd	.LC9(%rip), %xmm2
	movsd	48(%rsp), %xmm1
	addsd	%xmm2, %xmm6
	movsd	%xmm0, 160(%rbx)
	movsd	168(%rbx), %xmm0
	subsd	16(%rsp), %xmm0
	movaps	%xmm1, %xmm4
	movsd	%xmm1, 40(%rsp)
	movsd	%xmm0, 8(%rsp)
	movsd	.LC86(%rip), %xmm0
	divsd	%xmm6, %xmm0
	addsd	.LC87(%rip), %xmm0
	divsd	%xmm0, %xmm4
	movaps	%xmm4, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	movsd	56(%rsp), %xmm3
	addsd	16(%rsp), %xmm0
	mulsd	.LC89(%rip), %xmm3
	movsd	.LC9(%rip), %xmm2
	movsd	64(%rsp), %xmm5
	movsd	40(%rsp), %xmm1
	movsd	%xmm0, 168(%rbx)
	movsd	176(%rbx), %xmm0
	movaps	%xmm2, %xmm4
	subsd	24(%rsp), %xmm0
	subsd	32(%rsp), %xmm4
	mulsd	.LC88(%rip), %xmm4
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm3, %xmm0
	addsd	%xmm2, %xmm0
	mulsd	%xmm5, %xmm0
	divsd	%xmm0, %xmm4
	divsd	%xmm4, %xmm1
	movaps	%xmm1, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	addsd	24(%rsp), %xmm0
	movsd	%xmm0, 176(%rbx)
	addq	$88, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2056:
	.size	_ZN4Cell10gates_irelEd, .-_ZN4Cell10gates_irelEd
	.align 2
	.globl	_ZN4Cell9gates_inaEd
	.type	_ZN4Cell9gates_inaEd, @function
_ZN4Cell9gates_inaEd:
.LFB2057:
	.cfi_startproc
	endbr64
	pushq	%r15
	.cfi_def_cfa_offset 16
	.cfi_offset 15, -16
	pushq	%r14
	.cfi_def_cfa_offset 24
	.cfi_offset 14, -24
	pushq	%rbp
	.cfi_def_cfa_offset 32
	.cfi_offset 6, -32
	movq	%xmm0, %rbp
	pushq	%rbx
	.cfi_def_cfa_offset 40
	.cfi_offset 3, -40
	movq	%rdi, %rbx
	subq	$72, %rsp
	.cfi_def_cfa_offset 112
	movsd	8(%rdi), %xmm7
	ucomisd	.LC91(%rip), %xmm7
	movsd	%xmm7, 8(%rsp)
	jp	.L44
	movsd	.LC90(%rip), %xmm6
	movsd	%xmm6, 16(%rsp)
	je	.L38
.L44:
	movsd	8(%rsp), %xmm1
	addsd	.LC92(%rip), %xmm1
	movaps	%xmm1, %xmm0
	movsd	%xmm1, 16(%rsp)
	mulsd	.LC48(%rip), %xmm0
	call	exp@PLT
	movsd	16(%rsp), %xmm1
	mulsd	.LC93(%rip), %xmm1
	movaps	%xmm0, %xmm2
	movsd	.LC9(%rip), %xmm0
	subsd	%xmm2, %xmm0
	divsd	%xmm0, %xmm1
	movsd	%xmm1, 16(%rsp)
.L38:
	movsd	8(%rsp), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC94(%rip), %xmm0
	call	exp@PLT
	mulsd	.LC95(%rip), %xmm0
	movq	%xmm0, %r15
	movsd	.LC96(%rip), %xmm0
	comisd	8(%rsp), %xmm0
	movsd	8(%rsp), %xmm0
	jbe	.L46
	addsd	.LC36(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC97(%rip), %xmm0
	call	exp@PLT
	movsd	.LC98(%rip), %xmm3
	mulsd	%xmm0, %xmm3
	movsd	8(%rsp), %xmm0
	mulsd	.LC99(%rip), %xmm0
	movsd	%xmm3, 40(%rsp)
	call	exp@PLT
	movsd	%xmm0, 24(%rsp)
	movsd	8(%rsp), %xmm0
	mulsd	.LC55(%rip), %xmm0
	call	exp@PLT
	movsd	24(%rsp), %xmm1
	mulsd	.LC101(%rip), %xmm0
	mulsd	.LC100(%rip), %xmm1
	addsd	%xmm0, %xmm1
	movsd	8(%rsp), %xmm0
	mulsd	.LC102(%rip), %xmm0
	movq	%xmm1, %r14
	call	exp@PLT
	movsd	%xmm0, 32(%rsp)
	movsd	8(%rsp), %xmm0
	mulsd	.LC103(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 24(%rsp)
	movsd	8(%rsp), %xmm0
	addsd	.LC104(%rip), %xmm0
	mulsd	.LC105(%rip), %xmm0
	call	exp@PLT
	movsd	32(%rsp), %xmm2
	movsd	24(%rsp), %xmm1
	mulsd	.LC106(%rip), %xmm2
	addsd	.LC9(%rip), %xmm0
	mulsd	.LC107(%rip), %xmm1
	subsd	%xmm1, %xmm2
	movsd	8(%rsp), %xmm1
	addsd	.LC108(%rip), %xmm1
	divsd	%xmm0, %xmm1
	movsd	8(%rsp), %xmm0
	mulsd	.LC109(%rip), %xmm0
	mulsd	%xmm1, %xmm2
	movsd	%xmm2, 32(%rsp)
	call	exp@PLT
	movsd	%xmm0, 24(%rsp)
	movsd	8(%rsp), %xmm0
	addsd	.LC110(%rip), %xmm0
	mulsd	.LC111(%rip), %xmm0
	call	exp@PLT
	movsd	24(%rsp), %xmm1
	mulsd	.LC112(%rip), %xmm1
	addsd	.LC9(%rip), %xmm0
	movsd	32(%rsp), %xmm2
	movsd	40(%rsp), %xmm3
	divsd	%xmm0, %xmm1
	jmp	.L42
.L46:
	addsd	.LC113(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC114(%rip), %xmm0
	call	exp@PLT
	addsd	.LC9(%rip), %xmm0
	mulsd	.LC115(%rip), %xmm0
	movsd	.LC9(%rip), %xmm7
	divsd	%xmm0, %xmm7
	movsd	8(%rsp), %xmm0
	mulsd	.LC116(%rip), %xmm0
	movq	%xmm7, %r14
	call	exp@PLT
	movsd	%xmm0, 24(%rsp)
	movsd	8(%rsp), %xmm0
	addsd	.LC117(%rip), %xmm0
	mulsd	.LC48(%rip), %xmm0
	call	exp@PLT
	movsd	24(%rsp), %xmm1
	mulsd	.LC89(%rip), %xmm1
	xorps	%xmm2, %xmm2
	addsd	.LC9(%rip), %xmm0
	movaps	%xmm2, %xmm3
	divsd	%xmm0, %xmm1
.L42:
	movq	%r15, %xmm0
	addsd	16(%rsp), %xmm0
	addsd	%xmm2, %xmm1
	movsd	.LC9(%rip), %xmm6
	movsd	.LC9(%rip), %xmm5
	movsd	16(%rsp), %xmm4
	divsd	%xmm0, %xmm6
	movq	%r14, %xmm0
	addsd	%xmm3, %xmm0
	divsd	%xmm0, %xmm5
	movsd	40(%rbx), %xmm0
	mulsd	%xmm6, %xmm4
	subsd	%xmm4, %xmm0
	movsd	%xmm4, 40(%rsp)
	movsd	%xmm0, 24(%rsp)
	mulsd	%xmm5, %xmm3
	movsd	%xmm5, 56(%rsp)
	movsd	%xmm3, 8(%rsp)
	movsd	.LC9(%rip), %xmm3
	divsd	%xmm1, %xmm3
	movq	%rbp, %xmm1
	xorps	.LC19(%rip), %xmm1
	movaps	%xmm1, %xmm0
	movsd	%xmm1, 32(%rsp)
	divsd	%xmm6, %xmm0
	mulsd	%xmm3, %xmm2
	movsd	%xmm3, 48(%rsp)
	movsd	%xmm2, 16(%rsp)
	call	exp@PLT
	mulsd	24(%rsp), %xmm0
	movsd	40(%rsp), %xmm4
	movsd	32(%rsp), %xmm1
	movsd	56(%rsp), %xmm5
	addsd	%xmm4, %xmm0
	movsd	%xmm0, 40(%rbx)
	movsd	48(%rbx), %xmm0
	subsd	8(%rsp), %xmm0
	movsd	%xmm0, 24(%rsp)
	movaps	%xmm1, %xmm0
	divsd	%xmm5, %xmm0
	call	exp@PLT
	movsd	32(%rsp), %xmm1
	movsd	48(%rsp), %xmm3
	mulsd	24(%rsp), %xmm0
	divsd	%xmm3, %xmm1
	addsd	8(%rsp), %xmm0
	movsd	%xmm0, 48(%rbx)
	movsd	56(%rbx), %xmm0
	subsd	16(%rsp), %xmm0
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm1, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	addsd	16(%rsp), %xmm0
	movsd	%xmm0, 56(%rbx)
	addq	$72, %rsp
	.cfi_def_cfa_offset 40
	popq	%rbx
	.cfi_def_cfa_offset 32
	popq	%rbp
	.cfi_def_cfa_offset 24
	popq	%r14
	.cfi_def_cfa_offset 16
	popq	%r15
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2057:
	.size	_ZN4Cell9gates_inaEd, .-_ZN4Cell9gates_inaEd
	.align 2
	.globl	_ZN4Cell9gates_itoEd
	.type	_ZN4Cell9gates_itoEd, @function
_ZN4Cell9gates_itoEd:
.LFB2058:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 112
	movsd	8(%rdi), %xmm6
	movsd	%xmm0, 72(%rsp)
	movq	%xmm6, %r14
	movaps	%xmm6, %xmm0
	addsd	.LC50(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC118(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 24(%rsp)
	movq	%r14, %xmm0
	subsd	.LC65(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC119(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 32(%rsp)
	movq	%r14, %xmm0
	addsd	.LC120(%rip), %xmm0
	divsd	.LC84(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 64(%rsp)
	movq	%r14, %xmm0
	addsd	.LC121(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC122(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm7
	divsd	%xmm0, %xmm7
	movq	%r14, %xmm0
	addsd	.LC123(%rip), %xmm0
	divsd	.LC124(%rip), %xmm0
	movsd	%xmm7, 8(%rsp)
	call	exp@PLT
	movsd	%xmm0, 56(%rsp)
	movq	%r14, %xmm0
	addsd	.LC125(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC126(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 48(%rsp)
	movq	%r14, %xmm0
	addsd	.LC127(%rip), %xmm0
	divsd	.LC128(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	movsd	24(%rsp), %xmm7
	movsd	.LC129(%rip), %xmm3
	addsd	32(%rsp), %xmm7
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm5
	movsd	64(%rsp), %xmm6
	addsd	.LC130(%rip), %xmm6
	movsd	72(%rsp), %xmm1
	xorps	.LC19(%rip), %xmm1
	divsd	%xmm0, %xmm5
	movsd	128(%rbx), %xmm0
	subsd	8(%rsp), %xmm0
	movsd	%xmm1, 24(%rsp)
	movsd	%xmm0, 40(%rsp)
	movaps	%xmm3, %xmm0
	divsd	%xmm7, %xmm0
	movsd	%xmm5, 16(%rsp)
	divsd	%xmm6, %xmm3
	addsd	%xmm3, %xmm0
	mulsd	.LC18(%rip), %xmm0
	movaps	%xmm2, %xmm3
	divsd	%xmm0, %xmm3
	movaps	%xmm1, %xmm0
	divsd	%xmm3, %xmm0
	call	exp@PLT
	mulsd	40(%rsp), %xmm0
	movsd	48(%rsp), %xmm4
	addsd	8(%rsp), %xmm0
	addsd	.LC132(%rip), %xmm4
	movsd	.LC9(%rip), %xmm2
	movsd	56(%rsp), %xmm5
	addsd	.LC131(%rip), %xmm5
	movsd	24(%rsp), %xmm1
	movsd	%xmm0, 128(%rbx)
	movsd	136(%rbx), %xmm0
	movaps	%xmm4, %xmm3
	subsd	16(%rsp), %xmm0
	movaps	%xmm2, %xmm4
	divsd	%xmm3, %xmm4
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm2, %xmm0
	divsd	%xmm5, %xmm0
	addsd	%xmm4, %xmm0
	mulsd	.LC18(%rip), %xmm0
	divsd	%xmm0, %xmm2
	divsd	%xmm2, %xmm1
	movaps	%xmm1, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	addsd	16(%rsp), %xmm0
	movsd	%xmm0, 136(%rbx)
	addq	$88, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2058:
	.size	_ZN4Cell9gates_itoEd, .-_ZN4Cell9gates_itoEd
	.align 2
	.globl	_ZN4Cell10gates_ikurEd
	.type	_ZN4Cell10gates_ikurEd, @function
_ZN4Cell10gates_ikurEd:
.LFB2059:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 112
	movsd	8(%rdi), %xmm7
	movsd	%xmm0, 72(%rsp)
	movq	%xmm7, %r14
	movaps	%xmm7, %xmm0
	addsd	.LC50(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC118(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 24(%rsp)
	movq	%r14, %xmm0
	subsd	.LC65(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC119(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 32(%rsp)
	movq	%r14, %xmm0
	addsd	.LC120(%rip), %xmm0
	divsd	.LC84(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 64(%rsp)
	movq	%r14, %xmm0
	addsd	.LC133(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC134(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm7
	divsd	%xmm0, %xmm7
	movq	%r14, %xmm0
	subsd	.LC135(%rip), %xmm0
	xorps	.LC19(%rip), %xmm0
	divsd	.LC136(%rip), %xmm0
	movsd	%xmm7, 8(%rsp)
	call	exp@PLT
	movsd	%xmm0, 56(%rsp)
	movq	%r14, %xmm0
	subsd	.LC137(%rip), %xmm0
	mulsd	.LC138(%rip), %xmm0
	call	exp@PLT
	movsd	%xmm0, 48(%rsp)
	movq	%r14, %xmm0
	subsd	.LC139(%rip), %xmm0
	divsd	.LC140(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm2
	movsd	.LC129(%rip), %xmm3
	movsd	64(%rsp), %xmm5
	addsd	.LC130(%rip), %xmm5
	addsd	%xmm2, %xmm0
	movaps	%xmm2, %xmm6
	movsd	72(%rsp), %xmm1
	xorps	.LC19(%rip), %xmm1
	divsd	%xmm0, %xmm6
	movsd	112(%rbx), %xmm0
	subsd	8(%rsp), %xmm0
	movsd	%xmm0, 40(%rsp)
	movaps	%xmm3, %xmm0
	divsd	%xmm5, %xmm3
	movsd	%xmm6, 16(%rsp)
	movsd	24(%rsp), %xmm6
	addsd	32(%rsp), %xmm6
	movsd	%xmm1, 24(%rsp)
	divsd	%xmm6, %xmm0
	addsd	%xmm3, %xmm0
	mulsd	.LC18(%rip), %xmm0
	movaps	%xmm2, %xmm3
	divsd	%xmm0, %xmm3
	movaps	%xmm1, %xmm0
	divsd	%xmm3, %xmm0
	call	exp@PLT
	mulsd	40(%rsp), %xmm0
	movsd	56(%rsp), %xmm4
	addsd	8(%rsp), %xmm0
	movsd	.LC9(%rip), %xmm2
	addsd	.LC141(%rip), %xmm4
	movsd	24(%rsp), %xmm1
	movsd	%xmm0, 112(%rbx)
	movsd	120(%rbx), %xmm0
	subsd	16(%rsp), %xmm0
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm2, %xmm0
	divsd	%xmm4, %xmm0
	addsd	48(%rsp), %xmm0
	mulsd	.LC18(%rip), %xmm0
	divsd	%xmm0, %xmm2
	divsd	%xmm2, %xmm1
	movaps	%xmm1, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	addsd	16(%rsp), %xmm0
	movsd	%xmm0, 120(%rbx)
	addq	$88, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2059:
	.size	_ZN4Cell10gates_ikurEd, .-_ZN4Cell10gates_ikurEd
	.align 2
	.globl	_ZN4Cell9gates_ikrEd
	.type	_ZN4Cell9gates_ikrEd, @function
_ZN4Cell9gates_ikrEd:
.LFB2060:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$64, %rsp
	.cfi_def_cfa_offset 80
	movsd	8(%rdi), %xmm1
	movq	.LC19(%rip), %xmm7
	movsd	%xmm0, 56(%rsp)
	movaps	%xmm1, %xmm2
	addsd	.LC142(%rip), %xmm2
	movsd	%xmm1, 24(%rsp)
	movaps	%xmm2, %xmm4
	movsd	%xmm2, 48(%rsp)
	xorps	%xmm7, %xmm4
	movaps	%xmm4, %xmm0
	movsd	%xmm4, 16(%rsp)
	divsd	.LC82(%rip), %xmm0
	call	exp@PLT
	movsd	24(%rsp), %xmm1
	subsd	.LC143(%rip), %xmm1
	movsd	%xmm0, 8(%rsp)
	movsd	%xmm1, 40(%rsp)
	movaps	%xmm1, %xmm0
	divsd	.LC144(%rip), %xmm0
	call	exp@PLT
	movsd	16(%rsp), %xmm4
	divsd	.LC145(%rip), %xmm4
	movsd	%xmm0, 32(%rsp)
	movaps	%xmm4, %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm4
	movsd	56(%rsp), %xmm3
	movq	.LC19(%rip), %xmm7
	movsd	32(%rsp), %xmm6
	addsd	%xmm4, %xmm0
	movaps	%xmm4, %xmm5
	movsd	48(%rsp), %xmm2
	movsd	40(%rsp), %xmm1
	xorps	%xmm7, %xmm3
	subsd	%xmm4, %xmm6
	divsd	%xmm0, %xmm5
	movsd	64(%rbx), %xmm0
	divsd	%xmm6, %xmm1
	subsd	%xmm5, %xmm0
	movsd	%xmm5, 24(%rsp)
	movsd	%xmm0, 16(%rsp)
	movaps	%xmm3, %xmm0
	movaps	%xmm4, %xmm3
	subsd	8(%rsp), %xmm3
	divsd	%xmm3, %xmm2
	mulsd	.LC147(%rip), %xmm1
	mulsd	.LC146(%rip), %xmm2
	addsd	%xmm1, %xmm2
	divsd	%xmm2, %xmm4
	divsd	%xmm4, %xmm0
	call	exp@PLT
	mulsd	16(%rsp), %xmm0
	movsd	24(%rsp), %xmm5
	addsd	%xmm5, %xmm0
	movsd	%xmm0, 64(%rbx)
	addq	$64, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2060:
	.size	_ZN4Cell9gates_ikrEd, .-_ZN4Cell9gates_ikrEd
	.align 2
	.globl	_ZN4Cell9gates_iksEd
	.type	_ZN4Cell9gates_iksEd, @function
_ZN4Cell9gates_iksEd:
.LFB2061:
	.cfi_startproc
	endbr64
	pushq	%rbx
	.cfi_def_cfa_offset 16
	.cfi_offset 3, -16
	movq	%rdi, %rbx
	subq	$48, %rsp
	.cfi_def_cfa_offset 64
	movsd	8(%rdi), %xmm2
	subsd	.LC148(%rip), %xmm2
	movq	.LC19(%rip), %xmm6
	movsd	%xmm0, 40(%rsp)
	movaps	%xmm2, %xmm1
	movsd	%xmm2, 16(%rsp)
	xorps	%xmm6, %xmm1
	movaps	%xmm1, %xmm0
	movsd	%xmm1, 8(%rsp)
	divsd	.LC84(%rip), %xmm0
	call	exp@PLT
	movsd	16(%rsp), %xmm2
	movsd	%xmm0, (%rsp)
	movsd	%xmm2, 32(%rsp)
	movaps	%xmm2, %xmm0
	divsd	.LC149(%rip), %xmm0
	call	exp@PLT
	movsd	8(%rsp), %xmm1
	divsd	.LC150(%rip), %xmm1
	movsd	%xmm0, 24(%rsp)
	movaps	%xmm1, %xmm0
	call	exp@PLT
	addsd	.LC9(%rip), %xmm0
	movsd	.LC151(%rip), %xmm1
	call	pow@PLT
	movsd	40(%rsp), %xmm3
	movq	.LC19(%rip), %xmm6
	movaps	%xmm0, %xmm5
	movsd	72(%rbx), %xmm0
	movsd	32(%rsp), %xmm2
	xorps	%xmm6, %xmm3
	movsd	24(%rsp), %xmm4
	movsd	%xmm5, 16(%rsp)
	subsd	.LC9(%rip), %xmm4
	subsd	%xmm5, %xmm0
	movaps	%xmm2, %xmm1
	divsd	%xmm4, %xmm2
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm3, %xmm0
	movsd	.LC9(%rip), %xmm3
	subsd	(%rsp), %xmm3
	divsd	%xmm3, %xmm1
	mulsd	.LC153(%rip), %xmm2
	mulsd	.LC152(%rip), %xmm1
	addsd	%xmm2, %xmm1
	movsd	.LC75(%rip), %xmm2
	divsd	%xmm1, %xmm2
	divsd	%xmm2, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	movsd	16(%rsp), %xmm5
	addsd	%xmm5, %xmm0
	movsd	%xmm0, 72(%rbx)
	addq	$48, %rsp
	.cfi_def_cfa_offset 16
	popq	%rbx
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2061:
	.size	_ZN4Cell9gates_iksEd, .-_ZN4Cell9gates_iksEd
	.align 2
	.globl	_ZN4Cell10gates_icalEd
	.type	_ZN4Cell10gates_icalEd, @function
_ZN4Cell10gates_icalEd:
.LFB2062:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	subq	$88, %rsp
	.cfi_def_cfa_offset 112
	movsd	8(%rdi), %xmm2
	movsd	%xmm0, 72(%rsp)
	movaps	%xmm2, %xmm5
	addsd	.LC50(%rip), %xmm5
	movsd	%xmm2, 24(%rsp)
	movaps	%xmm5, %xmm6
	divsd	.LC154(%rip), %xmm6
	movaps	%xmm6, %xmm0
	movq	%xmm6, %r14
	movsd	%xmm5, 8(%rsp)
	call	exp@PLT
	movsd	%xmm0, 40(%rsp)
	movq	%r14, %xmm0
	call	exp@PLT
	movsd	%xmm0, 48(%rsp)
	movsd	8(%rsp), %xmm0
	mulsd	.LC155(%rip), %xmm0
	call	exp@PLT
	movsd	.LC9(%rip), %xmm3
	addsd	%xmm3, %xmm0
	movaps	%xmm3, %xmm7
	divsd	%xmm0, %xmm7
	movsd	8(%rsp), %xmm0
	mulsd	%xmm0, %xmm0
	mulsd	.LC156(%rip), %xmm0
	movsd	%xmm7, 16(%rsp)
	call	exp@PLT
	movsd	24(%rsp), %xmm2
	addsd	.LC136(%rip), %xmm2
	movsd	%xmm0, 64(%rsp)
	movaps	%xmm2, %xmm0
	divsd	.LC157(%rip), %xmm0
	call	exp@PLT
	movsd	16(%rbx), %xmm2
	movsd	.LC9(%rip), %xmm3
	divsd	.LC158(%rip), %xmm2
	movsd	72(%rsp), %xmm1
	xorps	.LC19(%rip), %xmm1
	addsd	%xmm3, %xmm0
	movaps	%xmm3, %xmm5
	addsd	%xmm3, %xmm2
	movaps	%xmm3, %xmm6
	divsd	%xmm0, %xmm5
	movsd	80(%rbx), %xmm0
	subsd	16(%rsp), %xmm0
	movsd	%xmm0, 56(%rsp)
	movsd	8(%rsp), %xmm0
	mulsd	.LC159(%rip), %xmm0
	divsd	%xmm2, %xmm6
	movaps	%xmm3, %xmm2
	addsd	48(%rsp), %xmm3
	subsd	40(%rsp), %xmm2
	movsd	%xmm1, 40(%rsp)
	mulsd	%xmm3, %xmm0
	movsd	%xmm5, 24(%rsp)
	divsd	%xmm0, %xmm2
	movaps	%xmm1, %xmm0
	movsd	%xmm6, 32(%rsp)
	divsd	%xmm2, %xmm0
	call	exp@PLT
	movsd	56(%rsp), %xmm2
	movsd	64(%rsp), %xmm4
	mulsd	.LC160(%rip), %xmm4
	movsd	40(%rsp), %xmm1
	mulsd	%xmm0, %xmm2
	movsd	88(%rbx), %xmm0
	subsd	24(%rsp), %xmm0
	addsd	16(%rsp), %xmm2
	movsd	%xmm1, 16(%rsp)
	movsd	%xmm0, 8(%rsp)
	movsd	.LC161(%rip), %xmm0
	movsd	%xmm2, 80(%rbx)
	movsd	.LC149(%rip), %xmm2
	addsd	%xmm4, %xmm0
	divsd	%xmm0, %xmm2
	movaps	%xmm1, %xmm0
	divsd	%xmm2, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	movsd	16(%rsp), %xmm1
	addsd	24(%rsp), %xmm0
	mulsd	.LC75(%rip), %xmm1
	movsd	%xmm0, 88(%rbx)
	movsd	96(%rbx), %xmm0
	subsd	32(%rsp), %xmm0
	movsd	%xmm0, 8(%rsp)
	movaps	%xmm1, %xmm0
	call	exp@PLT
	mulsd	8(%rsp), %xmm0
	addsd	32(%rsp), %xmm0
	movsd	%xmm0, 96(%rbx)
	addq	$88, %rsp
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2062:
	.size	_ZN4Cell10gates_icalEd, .-_ZN4Cell10gates_icalEd
	.align 2
	.globl	_ZN4Cell13compute_gatesEd
	.type	_ZN4Cell13compute_gatesEd, @function
_ZN4Cell13compute_gatesEd:
.LFB2055:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	movq	%xmm0, %r14
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	pushq	%rax
	.cfi_def_cfa_offset 32
	call	_ZN4Cell10gates_irelEd
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	call	_ZN4Cell10gates_icalEd
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	call	_ZN4Cell9gates_inaEd
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	call	_ZN4Cell9gates_ikrEd
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	call	_ZN4Cell9gates_iksEd
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	call	_ZN4Cell9gates_itoEd
	popq	%rdx
	.cfi_def_cfa_offset 24
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	jmp	_ZN4Cell10gates_ikurEd
	.cfi_endproc
.LFE2055:
	.size	_ZN4Cell13compute_gatesEd, .-_ZN4Cell13compute_gatesEd
	.align 2
	.globl	_ZN4Cell7getItotEd
	.type	_ZN4Cell7getItotEd, @function
_ZN4Cell7getItotEd:
.LFB2030:
	.cfi_startproc
	endbr64
	pushq	%r14
	.cfi_def_cfa_offset 16
	.cfi_offset 14, -16
	movq	%xmm0, %r14
	pushq	%rbx
	.cfi_def_cfa_offset 24
	.cfi_offset 3, -24
	movq	%rdi, %rbx
	pushq	%rax
	.cfi_def_cfa_offset 32
	call	_ZN4Cell16compute_currentsEv
	movq	%r14, %xmm0
	movq	%rbx, %rdi
	call	_ZN4Cell22compute_concentrationsEd
	movq	%r14, %xmm0
	call	_ZN4Cell13compute_gatesEd
	movsd	184(%rbx), %xmm0
	popq	%rdx
	.cfi_def_cfa_offset 24
	popq	%rbx
	.cfi_def_cfa_offset 16
	popq	%r14
	.cfi_def_cfa_offset 8
	ret
	.cfi_endproc
.LFE2030:
	.size	_ZN4Cell7getItotEd, .-_ZN4Cell7getItotEd
	.section	.text.startup,"ax",@progbits
	.type	_ZL24__sti____cudaRegisterAllv, @function
_ZL24__sti____cudaRegisterAllv:
.LFB2088:
	.cfi_startproc
	endbr64
	pushq	%rax
	.cfi_def_cfa_offset 16
	leaq	_ZL15__fatDeviceText(%rip), %rdi
	call	__cudaRegisterFatBinary@PLT
	movq	%rax, %rdi
	movq	%rax, _ZL20__cudaFatCubinHandle(%rip)
	call	__cudaRegisterFatBinaryEnd@PLT
	leaq	_ZL26__cudaUnregisterBinaryUtilv(%rip), %rdi
	popq	%rdx
	.cfi_def_cfa_offset 8
	jmp	atexit@PLT
	.cfi_endproc
.LFE2088:
	.size	_ZL24__sti____cudaRegisterAllv, .-_ZL24__sti____cudaRegisterAllv
	.section	.init_array,"aw"
	.align 8
	.quad	_ZL24__sti____cudaRegisterAllv
	.section	.nvFatBinSegment,"aw"
	.align 8
	.type	_ZL15__fatDeviceText, @object
	.size	_ZL15__fatDeviceText, 24
_ZL15__fatDeviceText:
	.long	1180844977
	.long	1
	.quad	fatbinData
	.quad	0
	.local	_ZL20__cudaFatCubinHandle
	.comm	_ZL20__cudaFatCubinHandle,8,8
	.section	.rodata.cst8,"aM",@progbits,8
	.align 8
.LC0:
	.long	1413754136
	.long	1074340347
	.align 8
.LC1:
	.long	-858993459
	.long	-1068217140
	.align 8
.LC2:
	.long	-1374389535
	.long	1072619847
	.align 8
.LC3:
	.long	167950401
	.long	1059190005
	.align 8
.LC4:
	.long	1684946594
	.long	1057046467
	.align 8
.LC5:
	.long	1717986918
	.long	1076258406
	.align 8
.LC6:
	.long	0
	.long	1080123392
	.align 8
.LC7:
	.long	1030792151
	.long	1073207050
	.align 8
.LC8:
	.long	-652835029
	.long	1072691150
	.align 8
.LC9:
	.long	0
	.long	1072693248
	.align 8
.LC10:
	.long	1520074825
	.long	1063769782
	.align 8
.LC11:
	.long	-1477468750
	.long	1072647110
	.align 8
.LC12:
	.long	-1044536046
	.long	1066608151
	.align 8
.LC13:
	.long	-1474170215
	.long	1058716954
	.align 8
.LC14:
	.long	1999736773
	.long	1067393325
	.align 8
.LC15:
	.long	-593736279
	.long	1064587503
	.align 8
.LC16:
	.long	-858993459
	.long	1072221388
	.align 8
.LC18:
	.long	0
	.long	1074266112
	.section	.rodata.cst16,"aM",@progbits,16
	.align 16
.LC19:
	.long	0
	.long	-2147483648
	.long	0
	.long	0
	.section	.rodata.cst8
	.align 8
.LC20:
	.long	-1800976046
	.long	1051292043
	.align 8
.LC21:
	.long	-1800976046
	.long	-1096191605
	.align 8
.LC22:
	.long	-755914244
	.long	1061184077
	.align 8
.LC23:
	.long	-985437296
	.long	1063485240
	.align 8
.LC24:
	.long	-1800976046
	.long	1050243467
	.align 8
.LC25:
	.long	2061584302
	.long	1083266580
	.align 8
.LC26:
	.long	1374389535
	.long	1079516856
	.align 8
.LC27:
	.long	0
	.long	1087025664
	.align 8
.LC28:
	.long	-674825261
	.long	1057118622
	.align 8
.LC29:
	.long	1859274164
	.long	1059009012
	.align 8
.LC30:
	.long	1493901669
	.long	1068909256
	.align 8
.LC31:
	.long	-1717986918
	.long	1072273817
	.align 8
.LC32:
	.long	0
	.long	1075838976
	.align 8
.LC33:
	.long	0
	.long	1082679296
	.align 8
.LC34:
	.long	1889785610
	.long	1068960317
	.align 8
.LC35:
	.long	0
	.long	1079574528
	.align 8
.LC36:
	.long	0
	.long	1079246848
	.align 8
.LC37:
	.long	515396076
	.long	1068624773
	.align 8
.LC38:
	.long	-1202590842
	.long	1076921630
	.align 8
.LC39:
	.long	0
	.long	1076756480
	.align 8
.LC40:
	.long	0
	.long	1076494336
	.align 8
.LC41:
	.long	-1717986918
	.long	1068079513
	.align 8
.LC42:
	.long	1202590843
	.long	1064598241
	.align 8
.LC43:
	.long	1717986918
	.long	1077306982
	.align 8
.LC44:
	.long	-1202590843
	.long	1074234654
	.align 8
.LC45:
	.long	-858993459
	.long	1076481228
	.align 8
.LC46:
	.long	1546188226
	.long	1076413071
	.align 8
.LC47:
	.long	0
	.long	1079001088
	.align 8
.LC48:
	.long	-1717986918
	.long	-1078355559
	.align 8
.LC49:
	.long	0
	.long	1073217536
	.align 8
.LC50:
	.long	0
	.long	1076101120
	.align 8
.LC51:
	.long	1683627180
	.long	1069539131
	.align 8
.LC52:
	.long	-1494918662
	.long	1067627643
	.align 8
.LC53:
	.long	0
	.long	1078853632
	.align 8
.LC54:
	.long	1680639377
	.long	1072237345
	.align 8
.LC55:
	.long	1717986918
	.long	1071015526
	.align 8
.LC56:
	.long	-858993459
	.long	-1075524404
	.align 8
.LC57:
	.long	-858993459
	.long	1073532108
	.align 8
.LC58:
	.long	0
	.long	1095036768
	.align 8
.LC59:
	.long	-1717986918
	.long	1069128089
	.align 8
.LC60:
	.long	-234881025
	.long	1097118953
	.align 8
.LC61:
	.long	0
	.long	1090750464
	.align 8
.LC62:
	.long	-1717986918
	.long	1070700953
	.align 8
.LC63:
	.long	1752346656
	.long	1069346193
	.align 8
.LC64:
	.long	1539316279
	.long	1068581152
	.align 8
.LC65:
	.long	0
	.long	1077805056
	.align 8
.LC66:
	.long	0
	.long	1080459264
	.align 8
.LC67:
	.long	-188291366
	.long	1062086020
	.align 8
.LC68:
	.long	657002461
	.long	1076541052
	.align 8
.LC69:
	.long	0
	.long	1080131584
	.align 8
.LC70:
	.long	657002461
	.long	1077589628
	.align 8
.LC71:
	.long	-1717986918
	.long	1075157401
	.align 8
.LC72:
	.long	398572965
	.long	1079516966
	.align 8
.LC73:
	.long	-1305670058
	.long	1084498653
	.align 8
.LC74:
	.long	988365449
	.long	1041273660
	.align 8
.LC75:
	.long	0
	.long	1071644672
	.align 8
.LC76:
	.long	-1717986918
	.long	1070176665
	.align 8
.LC77:
	.long	-1909312626
	.long	1022842498
	.align 8
.LC78:
	.long	-1302244565
	.long	1029180523
	.align 8
.LC79:
	.long	-1092980266
	.long	1020829740
	.align 8
.LC80:
	.long	-182802193
	.long	1026768162
	.align 8
.LC81:
	.long	-1717986918
	.long	1075812761
	.align 8
.LC82:
	.long	0
	.long	1075052544
	.align 8
.LC83:
	.long	0
	.long	1078198272
	.align 8
.LC84:
	.long	0
	.long	1076953088
	.align 8
.LC85:
	.long	0
	.long	1069547520
	.align 8
.LC86:
	.long	-343597384
	.long	1073789009
	.align 8
.LC87:
	.long	687194767
	.long	1073647452
	.align 8
.LC88:
	.long	0
	.long	1075314688
	.align 8
.LC89:
	.long	858993459
	.long	1070805811
	.align 8
.LC90:
	.long	-1717986918
	.long	1074370969
	.align 8
.LC91:
	.long	-687194767
	.long	-1069051741
	.align 8
.LC92:
	.long	-687194767
	.long	1078431907
	.align 8
.LC93:
	.long	1202590843
	.long	1070889697
	.align 8
.LC94:
	.long	0
	.long	1076232192
	.align 8
.LC95:
	.long	1202590843
	.long	1068792545
	.align 8
.LC96:
	.long	0
	.long	-1069285376
	.align 8
.LC97:
	.long	858993459
	.long	1075524403
	.align 8
.LC98:
	.long	343597384
	.long	1069631406
	.align 8
.LC99:
	.long	274877907
	.long	1068775768
	.align 8
.LC100:
	.long	1202590843
	.long	1074559713
	.align 8
.LC101:
	.long	0
	.long	1091759040
	.align 8
.LC102:
	.long	-879609302
	.long	1070549119
	.align 8
.LC103:
	.long	468666831
	.long	-1079608481
	.align 8
.LC104:
	.long	1374389535
	.long	1079234232
	.align 8
.LC105:
	.long	-1958505087
	.long	1070851948
	.align 8
.LC106:
	.long	0
	.long	-1057027520
	.align 8
.LC107:
	.long	1335323887
	.long	1057109689
	.align 8
.LC108:
	.long	171798692
	.long	1078125527
	.align 8
.LC109:
	.long	2141298895
	.long	-1081767038
	.align 8
.LC110:
	.long	-2061584302
	.long	1078202859
	.align 8
.LC111:
	.long	783402035
	.long	-1077828754
	.align 8
.LC112:
	.long	-1807322238
	.long	1069483766
	.align 8
.LC113:
	.long	-2061584302
	.long	1076187627
	.align 8
.LC114:
	.long	858993459
	.long	1076245299
	.align 8
.LC115:
	.long	171798692
	.long	1069589463
	.align 8
.LC116:
	.long	-899517060
	.long	-1097792744
	.align 8
.LC117:
	.long	0
	.long	1077936128
	.align 8
.LC118:
	.long	0
	.long	1075904512
	.align 8
.LC119:
	.long	0
	.long	1078820864
	.align 8
.LC120:
	.long	0
	.long	1079279616
	.align 8
.LC121:
	.long	-343597384
	.long	1077180497
	.align 8
.LC122:
	.long	1889785610
	.long	1076988477
	.align 8
.LC123:
	.long	-858993459
	.long	1079798988
	.align 8
.LC124:
	.long	1717986918
	.long	1076225638
	.align 8
.LC125:
	.long	-1030792151
	.long	1072965877
	.align 8
.LC126:
	.long	1546188227
	.long	1075692175
	.align 8
.LC127:
	.long	-858993459
	.long	1078299852
	.align 8
.LC128:
	.long	858993459
	.long	1075131187
	.align 8
.LC129:
	.long	-858993459
	.long	1071959244
	.align 8
.LC130:
	.long	0
	.long	1074003968
	.align 8
.LC131:
	.long	343597384
	.long	1077053358
	.align 8
.LC132:
	.long	343597384
	.long	1078052782
	.align 8
.LC133:
	.long	-858993459
	.long	1077824716
	.align 8
.LC134:
	.long	858993459
	.long	1076048691
	.align 8
.LC135:
	.long	0
	.long	1080500224
	.align 8
.LC136:
	.long	0
	.long	1077673984
	.align 8
.LC137:
	.long	0
	.long	1080279040
	.align 8
.LC138:
	.long	0
	.long	1068498944
	.align 8
.LC139:
	.long	-858993459
	.long	1079565516
	.align 8
.LC140:
	.long	1202590843
	.long	1077639905
	.align 8
.LC141:
	.long	0
	.long	1077215232
	.align 8
.LC142:
	.long	858993459
	.long	1076638515
	.align 8
.LC143:
	.long	199286483
	.long	1074440595
	.align 8
.LC144:
	.long	913969041
	.long	1075084971
	.align 8
.LC145:
	.long	0
	.long	1075445760
	.align 8
.LC146:
	.long	810889825
	.long	1060350250
	.align 8
.LC147:
	.long	-116139214
	.long	1058234165
	.align 8
.LC148:
	.long	1717986918
	.long	1077143142
	.align 8
.LC149:
	.long	0
	.long	1075970048
	.align 8
.LC150:
	.long	1717986918
	.long	1076455014
	.align 8
.LC151:
	.long	0
	.long	-1075838976
	.align 8
.LC152:
	.long	-1998362383
	.long	1057290421
	.align 8
.LC153:
	.long	-674825262
	.long	1057118622
	.align 8
.LC154:
	.long	-1889785610
	.long	-1072106046
	.align 8
.LC155:
	.long	0
	.long	-1077936128
	.align 8
.LC156:
	.long	-635231848
	.long	-1085105299
	.align 8
.LC157:
	.long	-1717986918
	.long	1075550617
	.align 8
.LC158:
	.long	-1917273401
	.long	1060564998
	.align 8
.LC159:
	.long	515396076
	.long	1067576197
	.align 8
.LC160:
	.long	-1628651599
	.long	1066675260
	.align 8
.LC161:
	.long	1202590843
	.long	1066695393
	.ident	"GCC: (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0"
	.section	.note.GNU-stack,"",@progbits
	.section	.note.gnu.property,"a"
	.align 8
	.long	1f - 0f
	.long	4f - 1f
	.long	5
0:
	.string	"GNU"
1:
	.align 8
	.long	0xc0000002
	.long	3f - 2f
2:
	.long	0x3
3:
	.align 8
4:

//header cell class

#include <hip/hip_runtime.h>
#include <math.h>
#define db double
//----------------------------parameters---------------------------------------
#define R 8.3143                  // universal gas constant [j/kmol*k];
#define TEMP 310.0                // temperature [k];
#define F 96.4867                 // faraday"s constant [c/mol]
#define RTF (R*TEMP)/F            // j/c
#define invRTF 1.0/RTF
#define CAP 100.0                 // capacitancia valor para courtemanche? 0.1
//-----------------------------intracellular volume--------------------------
#define Vi 13668.0                // micro_m^3
#define Vup 1109.52               // micro_m^3
#define Vrel 96.48                // micro_m^3
//----------------------------cell geometry--------------------------------
#define LENGTHCELL 0.01           // cm
#define RADIUSCELL 0.0008         // cm

#define Ri 200.0                  // Intracell Resistance - 200 Ohm x cm = 0.2 K Ohms x cm, Tesis Catalina, page 99 y 115 Resistivida no resistencia
#define Rix 0.2                   // Specific resistance of intracell liquid
#define Riy 0.2                   // Specific resistance of intracell liquid

//-----------------------------External Concentration-----------------------
#define Ko 5.4                    // Extracellular K concentration [mm]
#define Nao 140.0                 // Extracellular Na concentration [mm]
#define Cao 1.8                   // Extracellular Ca concentration [mm]

//------------------------------Maximal Conductances------------------------
#define GNa 7.8
#define GK1 0.09
#define Gto 0.1652
#define GKr 0.0294
#define GKs 0.129
#define GCaL 0.1238
#define GbCa 0.00113
#define GbNa 0.000674

//-------------------------------Maximal Currents------------------------------
#define INaK_max 0.6                // Max Current through Na-K pump [pA/pF]
#define INaCa_max 1600.0            // Max. INaCa [pA/pF]
#define IpCa_max 0.275              // Max. ca current through sarcolemmal ca pump [pA/pF]
#define Kq10 3.0                    // Temperature Scaling factor for IKur and Ito kinetics
#define gamma 0.35                  // Voltage dependance for INaCa

//-------------------------Half-saturation constant for currents-----------------
#define KmNai 10.0                  // Nai half-saturation constant of INaK[mm]
#define KmKo 1.5                    // Ko half-saturation constant of
#define KmNa 87.5                   // Nao half-saturation constant of
#define KmCa 1.38                   // Cao half-saturation constant of
#define ksat 0.1                    // Saturation factor for INaCa

//-------------------------Ion Valences------------------------------------
#define zna 1.0                     // Na valence
#define zk 1.0                      // K valence
#define zca 2.0                     // Ca valence

//-------------------------Myoplasmic Ca Ion Concentration Changes--------------
#define Csqn_max 10.0               // Total calsequestrin concentration in SR release compartment [mm]
#define Km_csqn 0.8                 // Ca_rel half-saturation constant of Iup [mm]
#define Cmdn_max 0.050              // Total calmodulin concentration in myoplasm [mm]
#define Trpn_max 0.070              // Total troponin concentration in myoplasm [mm]
#define kmcmdn 0.00238              // Cai Half-saturation constant for calmodulin [mm]
#define Kmtrpn 0.0005               // Cai half-saturation constant for troponin [mm]
#define Iup_max 0.005                      // Maximal Iup [mm/ms]

class Cell{
public:
    db pi;

    // future function "initial conditions"
    db V;           // mV
    db Cai;         // Initial Intracellular Ca
    db Nai;         // Initial Intracellular Na (mM)
    db Ki;          // Initial Intracellular Ki (mM)
    db m;
    db h;
    db j;
    db xr ;
    db xs ;
    db d;
    db f;
    db fca;
    db yach;

    /* Paraers Ultra-Rapidly activation K Current ikur */
    db ua;
    db ui;

    /* Paraers Transient Outward Current ito */
    db oa;
    db oi;
    db Ca_up;       // (nsr) Ca2+ concentration in uptake compartment
    db Ca_rel;      // (jsr) Ca2+ concentration release compartment
    db u;           // Activation gate u of Ca release from jsr
    db v;           // Activation gate v of Ca release from jsr
    db w;           // Inactivation gate w of Ca release from jsr
    db Itot;        // mA

    //currents
    db Ito;      /* Transient Outward Potassium Current */
    db IKr;      /* Rapidly Activating Potassium Current */
    db IK1;      /* Time-Independent Potassium Current */
    db IKur;     /* Ultra-Rapidly Activating Potassium Current */
    db ikach;    /* Acetylcholine-Activated Potassium Current */
    db INa;      /* Fast Sodium Current (time dependant) */
    db IbNa;     /* Na Background Current */
    db INaca;    /* Sodium-Calcium Exchanger */
    db ICal;     /* Current through L-type Ca Channel */
    db IKs;      /* Slowly Activating Potassium Current */
    db INaK;     /* Sodium-Potassium Pump */
    db IpCa;     /* Sarcolemmal Ca Pump */
    db IbCa;     /* Ca Background Current */
    db Irel;
    db Itr;
    db Iup;
    db Iup_leak;

    /* Equilibrium Potencial - Nerst Equation */
    db ENa;
    db EK;
    db ENC;
    db ECa;


    __device__ __host__ Cell();

    // main functions
    __device__ __host__ void init();
    __device__ __host__ void compute_currents();
    __device__ __host__ void compute_concentrations(db dt);
    __device__ __host__ void compute_gates(db dt);

    /* Ion Current Functions */
    __device__ __host__ void comp_ina ();        /* Calculates Fast Na Current */
    __device__ __host__ void comp_ical ();       /* Calculates Currents through L-Type Ca Channel */
    __device__ __host__ void comp_ikr ();        /* Calculates Rapidly Activating K Current */
    __device__ __host__ void comp_iks ();        /* Calculates Slowly Activating K Current */
    __device__ __host__ void comp_ik1 ();        /* Calculates Time-Independant K Current */
    __device__ __host__ void comp_ikach();       /* Calculates Acetylcholine-sensitive potassium*/
    __device__ __host__ void comp_ikur ();       /* Calculates Ultra-Rapidly activation K Current*/
    __device__ __host__ void comp_ito ();        /* Calculates Transient Outward Current */
    __device__ __host__ void comp_inaca ();      /* Calculates Na-Ca Exchanger Current */
    __device__ __host__ void comp_inak ();       /* Calculates Na-K Pump Current */
    __device__ __host__ void comp_ipca ();       /* Calculates Sarcolemmal Ca Pump Current */
    __device__ __host__ void comp_ibca ();       /* Calculates Ca Background Current */
    __device__ __host__ void comp_ibna ();       /* Calculates Na Background Current */
    __device__ __host__ void comp_irel();        // Compute Ca2+ Release Current From JSR Irel
    __device__ __host__ void comp_itr();         // Time constant of Ca transfer from NSR to JSR(ms)
    __device__ __host__ void comp_iup();         // Compute Ca2+ Uptake Current by NSR Iup
    __device__ __host__ void comp_iupleak();     // Compute Ca2+ Leak Current by the NSR Iup_leak
    __device__ __host__ void comp_itot ();       /* Calculates Total Current */
    __device__ __host__ db getItot(db dt);       /* Return Itot */
    __device__ __host__ void conc_nai(db dt);    /* Calculates new myoplasmic Na ion concentration */
    __device__ __host__ void conc_ki(db dt);     /* Calculates new myoplasmic K ion concentration */
    __device__ __host__ void conc_cai(db dt);    /* Calculates new myoplasmic Ca ion concentration */
    __device__ __host__ void conc_ca_up(db dt);
    __device__ __host__ void conc_ca_rel(db dt);
    __device__ __host__ void gates_ina(db dt);
    __device__ __host__ void gates_ito(db dt);
    __device__ __host__ void gates_ikur(db dt);
    __device__ __host__ void gates_ikr(db dt);
    __device__ __host__ void gates_iks(db dt);
    __device__ __host__ void gates_ical(db dt);
    __device__ __host__ void gates_irel(db dt);
    __device__ __host__ void comp_itot2(db Istim);

    // device main functions
   __device__  __host__ void d_compute_currents();
    // device Ion Current functions


};

	.text
	.file	"cell.hip"
	.type	__hip_cuid_,@object             # @__hip_cuid_
	.bss
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               # 0x0
	.size	__hip_cuid_, 1

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym __hip_cuid_

	.text
	.p2alignl 7, 3214868480
	.fill 96, 4, 3214868480
	.type	__hip_cuid_,@object             ; @__hip_cuid_
	.section	.bss,"aw",@nobits
	.globl	__hip_cuid_
__hip_cuid_:
	.byte	0                               ; 0x0
	.size	__hip_cuid_, 1

	.ident	"AMD clang version 18.0.0git (https://github.com/RadeonOpenCompute/llvm-project roc-6.3.2 25012 e5bf7e55c91490b07c49d8960fa7983d864936c4)"
	.section	".note.GNU-stack","",@progbits
	.addrsig
	.addrsig_sym __hip_cuid_
	.amdgcn_target "amdgcn-amd-amdhsa--gfx1100"
	.amdgpu_metadata
---
amdhsa.kernels:  []
amdhsa.target:   amdgcn-amd-amdhsa--gfx1100
amdhsa.version:
  - 1
  - 2
...

	.end_amdgpu_metadata
