
%% Declaration of exogenous processes 
var z varphi_u varphi_r lambda_f_t mu bu br Gh eps_zeta;
varexo  eps_z eps_varphi_u eps_varphi_r eps_lambda eps_mu eps_bu
        eps_br eps_g nu_zeta eps_B eps_m eps_T;
parameters rho_z rho_varphi rho_mu rho_b rho_g rho_zeta;

%% Declaration of model variables
parameters  alpha beta_u beta_r betabar zeta_p lambda_f chi_pu delta gamma
            adp qu zeta Csi_ratio C_ratio h sigma_u sigma_r Cu_ss
            Cr_ss zeta_w nu chi_wu rk Sdp RL R kappa lambda_w coef1 coef2
            G T B BL Y rho_B phi_T rho_r phi_pi phi_y zetaprime omega_u
            omega_r I KBAR lnPi mc_ss;
var mc rhk wh Kh Lh Yh X_pnu X_pnr X_pdu X_pdr Csi_u Csi_r pi uh Kbh Ih Cu
    Cr zetah rL r X_wnu X_wnr X_wdu X_wdr Bh Bh_L Th qh;

%% Calibration (mode of distribution of parameters)
    B = 0.16;
    G = 0.25;
    alpha = 0.33;
    delta = 0.025;
    lambda_f = 3.5;
    lambda_w = 3;
    Y = 1;
    
    gamma = 1.9922/400;
    lnPi = 2.2404/400;
    beta_u = 1/(1+0.4943/400);
    zeta = 0.4761/100;
    BL = B * 0.8222;
    Sdp = 4.4277;
    adp = 0.2093;
    h = 0.8370;
    sigma_u = 3.0151;
    sigma_r = 1.5635;
    zetaprime = 0.2420/100;
    omega_u = 0.9832;
    Csi_ratio = 0.7917;
    C_ratio = 0.7641;
    chi_wu = 0.5170;
    nu = 1.6814;
    zeta_w = 0.6860;
    zeta_p = 0.9260;
    phi_T = 1.2660;
    rho_r = 0.8547;
    phi_pi = 1.5644;
    phi_y = 0.2975;

    rho_z = 0.1286;
    rho_mu = 0.8293;
    rho_b = 0.9603;
    rho_varphi = 0.5200;
    rho_B = 0.9773;
    rho_zeta = 0.9614;
    rho_g = 0.7581;


%% Steady-state values
    omega_r = 1 - omega_u;
    R = exp(lnPi)*exp(gamma)/beta_u;
    RL = (1+zeta) * R;
    beta_r = beta_u/(1+zeta);
    betabar = (omega_u*beta_u*Csi_ratio + omega_r*beta_r)/(omega_u*Csi_ratio + omega_r);
    rk = exp(gamma)/betabar - (1-delta);
    mc_ss = 1/(1+lambda_f);
    w_til = (1+lambda_f)^(-1/(1-alpha)) * alpha^(alpha/(1-alpha)) * (1-alpha);
    w_ss = w_til * rk^(-alpha/(1-alpha));
    K_til = alpha/(1+lambda_f);
    K = K_til/rk;
    L = K^(-alpha/(1-alpha));
    KBAR = exp(gamma) * K_til/rk;
    I = (exp(gamma)-(1-delta))*K_til/rk;
    Cr_ss = (1-I-G)/(omega_u*C_ratio + omega_r);
    Cu_ss = C_ratio * Cr_ss;

%% Composite parameters
    kappa = RL - RL/30;
    chi_pu = (omega_u)/(omega_u + omega_r * ((1-beta_u*zeta_p)/(1-beta_r*zeta_p)) * Csi_ratio^(-1));
    qu = (betabar/beta_r - 1) * (1/zeta);
    coef1 = (BL/B)/(RL-kappa);
    coef2 = ((1-exp(-gamma)*(exp(lnPi))^(-1)*kappa)*RL)/(RL-kappa);


    %Letting this here because of kappa...
    T = G - (1 - (1/beta_u))*B - ( (1/(RL-kappa)) - (RL/(RL-kappa))*(1/(exp(gamma)*exp(lnPi))) ) * BL;
    
model;
%Exogenous processes (A.46-A.52)
    z = rho_z*z(-1)+eps_z;
    varphi_u = rho_varphi * varphi_u(-1) + eps_varphi_u;
    varphi_r = rho_varphi * varphi_r(-1) + eps_varphi_r;
    lambda_f_t = eps_lambda;
    mu = rho_mu * mu(-1) + eps_mu;
    bu = rho_b * bu(-1) + eps_bu;
    br = rho_b * br(-1) + eps_br;
    Gh = rho_g * Gh(-1) + eps_g;
    eps_zeta = rho_zeta * eps_zeta(-1) + nu_zeta;

%Log-linearized equations
    mc = alpha * rhk + (1-alpha) * wh;
    Kh = wh - rhk + Lh;
    Yh = alpha*Kh+(1-alpha)*Lh;
    X_pnu = (1-beta_u*zeta_p)*(Csi_u + Yh + lambda_f_t + mc) + (beta_u*zeta_p)*EXPECTATION(0)((1+lambda_f)/lambda_f * pi(+1) + X_pnu(+1));
    X_pnr = (1-beta_r*zeta_p)*(Csi_r + Yh + lambda_f_t + mc) + (beta_r*zeta_p)*EXPECTATION(0)((1+lambda_f)/lambda_f * pi(+1) + X_pnr(+1));
    X_pdu = (1-beta_u*zeta_p)*(Csi_u + Yh) + (beta_u*zeta_p)*EXPECTATION(0)(pi(+1)/lambda_f + X_pdu(+1));
    X_pdr = (1-beta_r*zeta_p)*(Csi_r + Yh) + (beta_r*zeta_p)*EXPECTATION(0)(pi(+1)/lambda_f + X_pdr(+1));
    pi = ((1-zeta_p)/zeta_p) * (chi_pu * (X_pnu-X_pdu) + (1-chi_pu)* (X_pnr-X_pdr));
    Kh = -z + uh + Kbh(-1);
    Kbh = (1-delta)*exp(-gamma)*(Kbh(-1)-z) + (1-(1-delta)*exp(-gamma))*(mu+Ih);
    rhk = adp/rk * uh;
    qh = betabar*exp(-gamma)*EXPECTATION(0)(rk*rhk(+1)+(1-delta)*qh(+1)) - EXPECTATION(0)(z(+1)) +
        EXPECTATION(0)(qu*(((1+zeta)/(1+qu*zeta)) * Csi_u(+1) - Csi_u) + (1-qu)*((1/(1+qu*zeta))*Csi_r(+1) - Csi_r));
    0 = qh + mu - exp(2*gamma) * Sdp * (z + Ih - Ih(-1)) + betabar*exp(2*gamma)*Sdp*EXPECTATION(0)(z(+1) + Ih(+1) - Ih);
    Csi_u = (1/(1-beta_u*h))* (bu - beta_u*h*EXPECTATION(0)(bu(+1)) - (sigma_u/(1-h))*((1+beta_u*h^2)*Cu - beta_u*h*EXPECTATION(0)(Cu(+1)) - h*Cu(-1)));
    Csi_r = (1/(1-beta_r*h))* (br - beta_r*h*EXPECTATION(0)(br(+1)) - (sigma_r/(1-h))*((1+beta_r*h^2)*Cr - beta_r*h*EXPECTATION(0)(Cr(+1)) - h*Cr(-1)));
    Csi_u = r + EXPECTATION(0)(Csi_u(+1)-z(+1)-pi(+1));
    zetah + Csi_u = (RL/(RL-kappa))*rL + EXPECTATION(0)(Csi_u(+1) - z(+1) - pi(+1) - (kappa/(RL-kappa)) * rL(+1)); 
            Csi_r = (RL/(RL-kappa))*rL + EXPECTATION(0)(Csi_r(+1) - z(+1) - pi(+1) - (kappa/(RL-kappa)) * rL(+1));
    X_wnu = (1-zeta_w*beta_u) * (bu + varphi_u + (1+nu)*Lh + ((1+lambda_w)/lambda_w)*(1+nu)*wh) + (zeta_w*beta_u)*EXPECTATION(0)( ((1+lambda_w)/lambda_w)*(1+nu)*(pi(+1)+z(+1)) + X_wnu(+1) );
    X_wnr = (1-zeta_w*beta_r) * (br + varphi_r + (1+nu)*Lh + ((1+lambda_w)/lambda_w)*(1+nu)*wh) + (zeta_w*beta_r)*EXPECTATION(0)( ((1+lambda_w)/lambda_w)*(1+nu)*(pi(+1)+z(+1)) + X_wnr(+1) );
    X_wdu = (1-zeta_w*beta_u) * (Csi_u + Lh + ((1+lambda_w)/lambda_w)*wh) + (zeta_w*beta_u)*EXPECTATION(0)((1/lambda_w)*(pi(+1)+z(+1)) + X_wdu(+1));
    X_wdr = (1-zeta_w*beta_r) * (Csi_r + Lh + ((1+lambda_w)/lambda_w)*wh) + (zeta_w*beta_r)*EXPECTATION(0)((1/lambda_w)*(pi(+1)+z(+1)) + X_wdr(+1));
    wh = (1-zeta_w)*(1+((1+lambda_w)/lambda_w)*nu)^(-1) * (chi_wu*(X_wnu-X_wdu)+(1-chi_wu)*(X_wnr-X_wdr)) + zeta_w *(wh(-1)-pi-z);
    Bh + coef1 * Bh_L = (1/beta_u)*(Bh(-1) + r(-1))+ coef1*(1/beta_r)*Bh_L(-1)
                      + coef2 * coef1 * rL + G/B * Gh - Y/B * Th - ((1/beta_u) + coef1 * (1/beta_r))*(z+pi);
    Bh_L - (RL/(RL-kappa))*rL = rho_B * (Bh_L(-1) - (RL/(RL-kappa))*rL(-1)) + eps_B;
    (Th-G*Gh)/(T-G) = phi_T * ((Bh(-1) + coef1*Bh_L(-1) - (RL/(RL-kappa))*coef1* rL(-1))/(1+coef1)) + eps_T;
    r = rho_r * r(-1) + (1-rho_r)*(phi_pi * pi + phi_y*(Yh - Yh(-4) + z + z(-1) + z(-2) + z(-3))) + eps_m;
    zetah = zetaprime * Bh_L + eps_zeta;
    Yh = (omega_u*Cu_ss/Y)*Cu + (omega_r*Cr_ss/Y)*Cr + I/Y*Ih + G/Y*Gh + exp(-gamma)*rk*KBAR/Y*uh;
end;

resid(1);
steady;
check;