(* 1. *)

rates={v1->k1f (s-x[t]/Keq1),v2->((((V2f )/(Kx ))(x[t]-(p/Keq2)))/((1+(p/Kp)+((x[t])/Kx))))};
parameterset={k1f->10,Keq1->10,Keq2->10,Kp->1,Kx->0.3,V2f->100,s->10,p->1};
initVal={x[0]==0};

ODEs={(*??*)}

arg1=Join[ODEs,initVal]/.rates/.parameterset

tc=NDSolve[(*??*)]

xSSv1=(*??*)
jSSv1=(*??*)
jSSv2=(*??*)

(* 2. *)

(* perturbation control analysis *)
(* v1 *)
multiplier = 1.01
newrates={v1->multiplier*k1f (s-((x[t])/Keq1)),v2->((V2f (-(p/Keq2)+x[t]))/(Kx (1+(p/Kp)+((x[t])/Kx))))};
tcPert=NDSolve[Join[ODEs,initVal]/.newrates/.parameterset,x[t],{t,0,tEnd}][[1]];

xSSv1Pert = (*??*)
jSSv1Pert =(*??*)

CJv1=(*??*)

(* v2 *)
multiplier = 1.01
newrates={v1->k1f (s-((x[t])/Keq1)),v2->multiplier*((V2f (-(p/Keq2)+x[t]))/(Kx (1+(p/Kp)+((x[t])/Kx))))};
tcPert=NDSolve[Join[ODEs,initVal]/.newrates/.parameterset,x[t],{t,0,tEnd}][[1]];

xSSv2Pert =(*??*)
jSSv2Pert = (*??*)

CJv2=(*??*)

(* 3. *)

(* 4. *)

elas=D[(*??*)]*(*??*)

(* 5. *)

tcP=NDSolve[Join[ODEs,initVal]/.rates/.Kx->(*??*)/.parameterset,x[t],{t,0,tEnd}][[1]];
jSSv2Pert=(*??*)
RJKx=(*??*)

(* 6. *)

Clear[CJv1,CJv2]
CJv1=??
CJv2=??

(* 7. *)

elas1=(*??*)
elas2=(*??*)
CJv1=(*??*)
CJv2=(*??*)