open Proxy_protocol type var_c = C of principal type var_p = P of principal type var_w = W of principal type var_q = Q of string type var_x = X of string type var_d = D of string type var_o = O of string (* Proxy function for role c *) type result_c = string type msg0 = Request of (var_c * var_p * var_w * var_q * msg1) and msg1 = { hReply : (var_x -> result_c)} val c : principal -> msg0 -> result_c (* Proxy function for role p *) type result_p = string type msg3 = { hRequest : (var_c * var_p * var_w * var_q -> msg4)} and msg4 = Forward of (result_p) | Audit of (msg6) and msg6 = { hDetails : (var_d -> msg7)} and msg7 = Retry of (var_o * msg6) | Resume of (result_p) val p : principal -> msg3 -> result_p (* Proxy function for role w *) type result_w = string type msg9 = { hForward : (var_c * var_p * var_w * var_q -> msg10) ; hAudit : (var_c * var_p * var_w -> msg12)} and msg10 = Reply of (var_x * result_w) and msg12 = Details of (var_d * msg13) and msg13 = { hRetry : (var_o -> msg12) ; hResume : (var_q -> msg10)} val w : principal -> msg9 -> result_w