anchor.diff:  %% Single HEADERS frame headers block.
   frame(State, {headers, StreamID, IsFin, head_fin, HeaderBlock}) ->
   	%% @todo We probably need to validate StreamID here and in 4 next clauses.
  -	stream_init(State, StreamID, IsFin, HeaderBlock);
  +	stream_decode_init(State, StreamID, IsFin, HeaderBlock);
   %% HEADERS frame starting a headers block. Enter continuation mode.
   frame(State, {headers, StreamID, IsFin, head_nofin, HeaderBlockFragment}) ->
   	State#state{parse_state={continuation, StreamID, IsFin, HeaderBlockFragment}};
  
positive.code: 	Authority = case {Scheme, Port} of
  		{<<"http">>, 80} -> Host;
  		{<<"https">>, 443} -> Host;
  		_ -> [Host, $:, integer_to_binary(Port)]
  	end,
  	PathWithQs = case Qs of
  		<<>> -> Path;
  		_ -> [Path, $?, Qs]
  	end,
  	Headers = Headers0#{<<":method">> => Method,
  			<<":scheme">> => Scheme,
  			<<":authority">> => Authority,
  			<<":path">> => PathWithQs},
  	{HeaderBlock, EncodeState} = headers_encode(Headers, EncodeState0),
  	Transport:send(Socket, cow_http2:push_promise(StreamID, PromisedStreamID, HeaderBlock)),
  	%% @todo iolist_to_binary(HeaderBlock) isn't optimal. Need a shortcut.
  	State = stream_init(State0#state{server_streamid=PromisedStreamID + 2, encode_state=EncodeState},
  		PromisedStreamID, fin, iolist_to_binary(HeaderBlock)),
  	commands(State, Stream, Tail);
  commands(State=#state{socket=Socket, transport=Transport, remote_window=ConnWindow},
  		Stream=#stream{id=StreamID, remote_window=StreamWindow},
  
negative.code: frame(State, {headers, StreamID, IsFin, head_fin,
  		_IsExclusive, _DepStreamID, _Weight, HeaderBlock}) ->
  	%% @todo Handle priority.
  	stream_decode_init(State, StreamID, IsFin, HeaderBlock);
  %% HEADERS frame starting a headers block. Enter continuation mode.
  frame(State, {headers, StreamID, IsFin, head_nofin,
  		_IsExclusive, _DepStreamID, _Weight, HeaderBlockFragment}) ->
  