HTTP/2 Tutorial

This tutorial aims at creating an HTTP/2 session using Scapy. The frontpage of Google will be fetched. The favicon will also be loaded as a dependency of the frontpage. Finally, a Google query will be submitted. The first queries will be generated using some Scapy helpers. The last one will be generated by hand, to better illustrate the low level APIs.

This tutorial can be run without any privileges (no root, no CAP_NET_ADMIN, no CAP_NET_RAW). One can select "Cell -> Run All" to perform the three queries.

Building the socket

First, we need to build an TLS socket to the HTTP server, and to negotiate the HTTP/2 protocol as the next protocol. Doing so requires a fairly recent version of the Python ssl module. We indeed need support of ALPN (https://www.rfc-editor.org/rfc/rfc7301.txt). We build our TCP socket first.


In [99]:
import socket
dn = 'www.google.fr'

# Get the IP address of a Google HTTP endpoint
l = socket.getaddrinfo(dn, 443, socket.INADDR_ANY, socket.SOCK_STREAM, socket.IPPROTO_TCP)
assert len(l) > 0, 'No address found :('

s = socket.socket(l[0][0], l[0][1], l[0][2])
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if hasattr(socket, 'SO_REUSEPORT'):
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
ip_and_port = l[0][4]

We now build our SSL context and we wrap the previously defined socket in it.


In [100]:
import ssl
# Testing support for ALPN
assert(ssl.HAS_ALPN)

# Building the SSL context
ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
ssl_ctx.set_ciphers(':'.join([  # List from ANSSI TLS guide v.1.1 p.51
                'ECDHE-ECDSA-AES256-GCM-SHA384',
                'ECDHE-RSA-AES256-GCM-SHA384',
                'ECDHE-ECDSA-AES128-GCM-SHA256',
                'ECDHE-RSA-AES128-GCM-SHA256',
                'ECDHE-ECDSA-AES256-SHA384',
                'ECDHE-RSA-AES256-SHA384',
                'ECDHE-ECDSA-AES128-SHA256',
                'ECDHE-RSA-AES128-SHA256',
                'ECDHE-ECDSA-CAMELLIA256-SHA384',
                'ECDHE-RSA-CAMELLIA256-SHA384',
                'ECDHE-ECDSA-CAMELLIA128-SHA256',
                'ECDHE-RSA-CAMELLIA128-SHA256',
                'DHE-RSA-AES256-GCM-SHA384',
                'DHE-RSA-AES128-GCM-SHA256',
                'DHE-RSA-AES256-SHA256',
                'DHE-RSA-AES128-SHA256',
                'AES256-GCM-SHA384',
                'AES128-GCM-SHA256',
                'AES256-SHA256',
                'AES128-SHA256',
                'CAMELLIA128-SHA256'
            ]))     
ssl_ctx.set_alpn_protocols(['h2'])  # h2 is a RFC7540-hardcoded value
ssl_sock = ssl_ctx.wrap_socket(s, server_hostname=dn)

We then connect the socket to the TCP endpoint.


In [101]:
ssl_sock.connect(ip_and_port)
assert('h2' == ssl_sock.selected_alpn_protocol())

Reading the server settings and acknowledging them.

With HTTP/2, the server is the first to talk, sending its settings for the HTTP/2 session. Let's read them. For this, we wrap the TLS connection into a Scapy SuperSocket for easier management.


In [102]:
import scapy.supersocket as supersocket
import scapy.contrib.http2 as h2
import scapy.config
scapy.config.conf.debug_dissector = True
ss = supersocket.SSLStreamSocket(ssl_sock, basecls=h2.H2Frame)
srv_set = ss.recv()
srv_set.show()


###[ HTTP/2 Frame ]### 
  len       = 0x12
  type      = SetFrm
  flags     = set([])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Settings Frame ]### 
     \settings  \
      |###[ HTTP/2 Setting ]### 
      |  id        = Max concurrent streams
      |  value     = 100
      |###[ HTTP/2 Setting ]### 
      |  id        = Initial window size
      |  value     = 1048576
      |###[ HTTP/2 Setting ]### 
      |  id        = Max header list size
      |  value     = 16384

Let's make a note of the server settings for later usage. We define variables for the server settings. They are assigned the RFC-defined default values. These values are overwritten by the settings provided by the server, if they are provided.


In [103]:
srv_max_frm_sz = 1<<14
srv_hdr_tbl_sz = 4096
srv_max_hdr_tbl_sz = 0
srv_global_window = 1<<14
for setting in srv_set.payload.settings:
    if setting.id == h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE:
        srv_hdr_tbl_sz = setting.value
    elif setting.id == h2.H2Setting.SETTINGS_MAX_HEADER_LIST_SIZE:
        srv_max_hdr_lst_sz = setting.value
    elif setting.id == h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE:
        srv_global_window = setting.value

HTTP/2 is a very polite protocol. We need to acknowledge the server settings. For this, we first need to send a constant string, which is a connection preface. This serves the purpose of confirming to the server that the HTTP/2 protocol is understood by the client. Scapy builds the appropriate packet for us to send from this constant string.


In [104]:
import scapy.packet as packet

# We verify that the server window is large enough for us to send some data.
srv_global_window -= len(h2.H2_CLIENT_CONNECTION_PREFACE)
assert(srv_global_window >= 0)

ss.send(packet.Raw(h2.H2_CLIENT_CONNECTION_PREFACE))


Out[104]:
24

Then, we build the acknowledgment frame and we send our own settings in another frame. We will define very LARGE values (maximum values as defined in the RFC7540, in most cases), just so that we don't end up having to handle window management in this tutorial.


In [105]:
set_ack = h2.H2Frame(flags={'A'})/h2.H2SettingsFrame()
set_ack.show()


###[ HTTP/2 Frame ]### 
  len       = None
  type      = SetFrm
  flags     = set(['ACK (A)'])
  reserved  = 0
  stream_id = 0
###[ HTTP/2 Settings Frame ]### 
     \settings  \


In [106]:
own_set = h2.H2Frame()/h2.H2SettingsFrame()
max_frm_sz = (1 << 24) - 1
max_hdr_tbl_sz = (1 << 16) - 1
win_sz = (1 << 31) - 1
own_set.settings = [
    h2.H2Setting(id = h2.H2Setting.SETTINGS_ENABLE_PUSH, value=0),
    h2.H2Setting(id = h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE, value=win_sz),
    h2.H2Setting(id = h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE, value=max_hdr_tbl_sz),
    h2.H2Setting(id = h2.H2Setting.SETTINGS_MAX_FRAME_SIZE, value=max_frm_sz),
]

We then send the two frames and then read the acknowledgment of our settings from the server. We set up a loop because the first frames that we may read could be PING frames or window management frames.


In [107]:
h2seq = h2.H2Seq()
h2seq.frames = [
    set_ack,
    own_set
]
# We verify that the server window is large enough for us to send our frames.
srv_global_window -= len(str(h2seq))
assert(srv_global_window >= 0)
ss.send(h2seq)

# Loop until an acknowledgement for our settings is received
new_frame = None
while isinstance(new_frame, type(None)) or not (
        new_frame.type == h2.H2SettingsFrame.type_id 
        and 'A' in new_frame.flags
    ):
    if not isinstance(new_frame, type(None)):
        # If we received a frame about window management 
        if new_frame.type == h2.H2WindowUpdateFrame.type_id:
            # For this tutorial, we don't care about stream-specific windows, but we should :)
            if new_frame.stream_id == 0:
                srv_global_window += new_frame.payload.win_size_incr
        # If we received a Ping frame, we acknowledge the ping, 
        # just by setting the ACK flag (A), and sending back the query
        elif new_frame.type == h2.H2PingFrame.type_id:
            new_flags = new_frame.getfieldval('flags')
            new_flags.add('A')
            new_frame.flags = new_flags
            srv_global_window -= len(str(new_frame))
            assert(srv_global_window >= 0)
            ss.send(new_frame)
        else:
            assert new_frame.type != h2.H2ResetFrame.type_id \
                and new_frame.type != h2.H2GoAwayFrame.type_id, \
                "Error received; something is not right!"
    try:
        new_frame = ss.recv()
        new_frame.show()
    except:
        import time
        time.sleep(1)
        new_frame = None


###[ HTTP/2 Frame ]### 
  len       = 0x4
  type      = WinFrm
  flags     = set([])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Window Update Frame ]### 
     reserved  = 0L
     win_size_incr= 983041L

###[ HTTP/2 Frame ]### 
  len       = 0x0
  type      = SetFrm
  flags     = set(['ACK (A)'])
  reserved  = 0L
  stream_id = 0L

Build the form query with the helpers

We are now building a query for the frontpage https://www.google.fr/. We use the HTTP/2 Scapy Module helpers to build this query. The parse_txt_hdrs helper receives various parameters regarding the size of the header blocks and the frame to automatically split the values on multiple frames, if need be. It also receives two callbacks to know which flavour of HPack header encoding we should apply.

We either use the server settings if they were specified or the default values.

You may note that we say that cookies are sensitive, regardless of their content. We would do something a bit smarter, if we knew what is the name of the cookies that are sensitive, and those that are merely informative. In HTTP/2 cookies are split into multiple "cookie" headers, while in HTTP/1.1, they are all stored inside the same header.

As the client of this HTTP/2 connection, we need to use odd stream ids, per RFC7540. Since this is the first query, we will use the stream id 1.


In [108]:
tblhdr = h2.HPackHdrTable()
qry_frontpage = tblhdr.parse_txt_hdrs(
    ''':method GET
:path /
:authority www.google.fr
:scheme https
accept-encoding: gzip, deflate
accept-language: fr-FR
accept: text/html
user-agent: Scapy HTTP/2 Module
''',
    stream_id=1,
    max_frm_sz=srv_max_frm_sz,
    max_hdr_lst_sz=srv_max_hdr_lst_sz,
    is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],
    should_index=lambda x: x in [
            'x-requested-with', 
            'user-agent', 
            'accept-language',
            ':authority',
            'accept',
        ]
)
qry_frontpage.show()


###[ HTTP/2 Frame Sequence ]### 
  \frames    \
   |###[ HTTP/2 Frame ]### 
   |  len       = None
   |  type      = HdrsFrm
   |  flags     = set(['End Stream (ES)', 'End Headers (EH)'])
   |  reserved  = 0
   |  stream_id = 1
   |###[ HTTP/2 Headers Frame ]### 
   |     \hdrs      \
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 2
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 4
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 1
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = None
   |      |   |  len       = None
   |      |   |  data      = 'HPackZString(www.google.fr)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 7
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 16
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 17
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = None
   |      |   |  len       = None
   |      |   |  data      = 'HPackZString(fr-FR)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 19
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = None
   |      |   |  len       = None
   |      |   |  data      = 'HPackZString(text/html)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 58
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = None
   |      |   |  len       = None
   |      |   |  data      = 'HPackZString(Scapy HTTP/2 Module)'

The previous helper updated the HPackHdrTable structure with the headers that should be indexed. We don't need to look inside that table if we only use helpers. For the sake of this tutorial, though, we will.


In [109]:
for i in xrange(max(tblhdr._static_entries.keys()) + 1, max(tblhdr._static_entries.keys()) + 1 + len(tblhdr._dynamic_table)):
    print('Header: {} Value: {}'.format(tblhdr[i].name(), tblhdr[i].value()))


Header: user-agent Value: Scapy HTTP/2 Module
Header: accept Value: text/html
Header: accept-language Value: fr-FR
Header: :authority Value: www.google.fr

We also build a query for the favicon.


In [110]:
qry_icon = tblhdr.parse_txt_hdrs(
    ''':method GET
:path /favicon.ico
:authority www.google.fr
:scheme https
accept-encoding: gzip, deflate
accept-language: fr-FR
accept: image/x-icon; image/vnd.microsoft.icon
user-agent: Scapy HTTP/2 Module
''',
    stream_id=3,
    max_frm_sz=srv_max_frm_sz,
    max_hdr_lst_sz=srv_max_hdr_tbl_sz,
    is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],
    should_index=lambda x: x in [
            'x-requested-with', 
            'user-agent', 
            'accept-language',
            ':authority',
            'accept',
        ]
)
qry_icon.show()


###[ HTTP/2 Frame Sequence ]### 
  \frames    \
   |###[ HTTP/2 Frame ]### 
   |  len       = None
   |  type      = HdrsFrm
   |  flags     = set(['End Stream (ES)', 'End Headers (EH)'])
   |  reserved  = 0
   |  stream_id = 3
   |###[ HTTP/2 Headers Frame ]### 
   |     \hdrs      \
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 2
   |      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
   |      |  magic     = 0
   |      |  never_index= Don't Index
   |      |  index     = 4
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = None
   |      |   |  len       = None
   |      |   |  data      = 'HPackZString(/favicon.ico)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 65
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 7
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 16
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 64
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 19
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = None
   |      |   |  len       = None
   |      |   |  data      = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 63

You may note that several of the headers that are in common between the two queries (the one for the frontpage and the one for the /favicon.ico) are compressed in the second query. They are only referred to by an index number of the dynamic HPack Header Table. We now alter the favicon query to be dependent of the query for the form.


In [111]:
real_qry_icon = h2.H2Frame(
    stream_id=qry_icon.frames[0][h2.H2Frame].stream_id,
    flags={'+'}.union(qry_icon.frames[0][h2.H2Frame].flags),
) / h2.H2PriorityHeadersFrame(
    hdrs=qry_icon.frames[0][h2.H2HeadersFrame].hdrs,
    stream_dependency=1,
    weight=32,
    exclusive=0
)
real_qry_icon.show()


###[ HTTP/2 Frame ]### 
  len       = None
  type      = HdrsFrm
  flags     = set(['End Stream (ES)', 'End Headers (EH)', 'Priority (+)'])
  reserved  = 0
  stream_id = 3
###[ HTTP/2 Headers Frame with Priority ]### 
     exclusive = 0
     stream_dependency= 1
     weight    = 32
     \hdrs      \
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 2
      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
      |  magic     = 0
      |  never_index= Don't Index
      |  index     = 4
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = None
      |   |  len       = None
      |   |  data      = 'HPackZString(/favicon.ico)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 65
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 7
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 16
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 64
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 19
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = None
      |   |  len       = None
      |   |  data      = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 63

We can now send both queries to the server.


In [112]:
h2seq = h2.H2Seq()
h2seq.frames = [
    qry_frontpage.frames[0],
    real_qry_icon
]
srv_global_window -= len(str(h2seq))
assert(srv_global_window >= 0)
ss.send(h2seq)


Out[112]:
117

Let's read the answers!


In [113]:
# The stream variable will contain all read frames; we will read on until stream 1 and stream 3 are closed by the server.
stream = h2.H2Seq()
# Number of streams closed by the server
closed_stream = 0

new_frame = None
while True:
    if not isinstance(new_frame, type(None)):
        if new_frame.stream_id in [1, 3]:
            stream.frames.append(new_frame)
            if 'ES' in new_frame.flags:
                closed_stream += 1
        # If we read a PING frame, we acknowledge it by sending the same frame back, with the ACK flag set.
        elif new_frame.stream_id == 0 and new_frame.type == h2.H2PingFrame.type_id:
            new_flags = new_frame.getfieldval('flags')
            new_flags.add('A')
            new_frame.flags = new_flags
            ss.send(new_frame)
            
        # If two streams were closed, we don't need to perform the next operations
        if closed_stream >= 2:
            break
    try:
        new_frame = ss.recv()
        new_frame.show()
    except:
        import time
        time.sleep(1)
        new_frame = None

stream.show()


###[ HTTP/2 Frame ]### 
  len       = 0xe1
  type      = HdrsFrm
  flags     = set(['End Headers (EH)'])
  reserved  = 0L
  stream_id = 3L
###[ HTTP/2 Headers Frame ]### 
     \hdrs      \
      |###[ HPack Dynamic Size Update ]### 
      |  magic     = 1
      |  max_size  = 12288
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 8
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 59
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 11
      |   |  data      = 'HPackZString(Accept-Encoding)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 26
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 3
      |   |  data      = 'HPackZString(gzip)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 31
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 9
      |   |  data      = 'HPackZString(image/x-icon)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 33
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 22
      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 36
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 22
      |   |  data      = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 44
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 22
      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 0
      |  \hdr_name  \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 16
      |   |  data      = 'HPackZString(x-content-type-options)'
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 5
      |   |  data      = 'HPackZString(nosniff)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 54
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 3
      |   |  data      = 'HPackZString(sffe)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 28
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 3
      |   |  data      = 'HPackZString(1494)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 0
      |  \hdr_name  \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 12
      |   |  data      = 'HPackZString(x-xss-protection)'
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 10
      |   |  data      = 'HPackZString(1; mode=block)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 24
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 16
      |   |  data      = 'HPackZString(public, max-age=691200)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 21
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 5
      |   |  data      = 'HPackZString(472252)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 0
      |  \hdr_name  \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 5
      |   |  data      = 'HPackZString(alt-svc)'
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 28
      |   |  data      = 'HPackZString(quic=":443"; ma=2592000; v="35,34")'

###[ HTTP/2 Frame ]### 
  len       = 0x5d6
  type      = DataFrm
  flags     = set(['End Stream (ES)'])
  reserved  = 0L
  stream_id = 3L
###[ HTTP/2 Data Frame ]### 
     data      = '\x1f\x8b\x08\x00\x00\tn\x88\x02\xff\xbcX{PTU\x18?\xa6\x8d\x89\xa5\xf4G\xff5\x13\xf60\xffh\xcc1\x11\xc7L\xb3\x07>\xffp\x94\x10L\x1b\xd3L+kF\'\xb5\x19\xc7Rg\xc2\xb4@KtD _\x91\x80\x8e\x82\x8a\xa8\x83\nhI\xa9\xa8\x08B\x98\xaf|\xdf]`\xc1}\xb0{\xf7;\xbf\xe6\\\xeee\xee\xde\xbd\x97\xdd\xb5\xb53\xf3\rg\xcf\xfd\xbe\xefw\xcew\xbe\xd7\x81\xb1n\xec1\x16\x1b+\xfe\xc6\xb1y=\x18\xeb\xcf\x18\x8b\x8b\xeb\xf8\x9d\x1f\xcbXF\x0f\xc6\x060\xc6b\xc5:\xebXWF\x0f\x16r\x00\x18DD\x1b\x89\xa8\x81\x88\xbc*\xd5\x13Q&\xe7|\xa0\x95\x1c\xe7\xbc\x17\x11e!\xc4 \xa2\r\x00\x9e0\x91\xad\x10\xdf}\xe4\xc5\x81\xbfvb\xf1\x91\x19H\xd95\x1c)\x85\xc3\xb1\xf0P*v\xd7\xe5\xa2]vk:\x8e\xebuh\xb8v\xd7},(M\xc1\x94\xfc!\xa6\x94\xb17\x05\xdcq\xafs\x1f\xday\x15\\\xbf\x17\x0bJ\xa7*|\x02s\xfb\xf9\x1fQ{\xff\x0c.I\xd5(\xac\xcdF\xd6\x8e\xf1p\xa4\x8d\x86;w.\xc0\xb9\xa2C\xd8\x83\x886\x89\xf9\xeaKg1\xa1p,\x92\x0b\x87\xa1N\xaa\x0e>\xf7\x9d\x068W%\xc2\xf9\xed[\xf07\x9c\xd0\xf6\x90ID\x8db\xfe\xca\xc9V<]\xd6\x84\xf4\x0bE\x96\xb6k\xdf\xb3R\x91o/I\xd7\xe4\xc5\xbd\xf8\xc4<\xe6\xa8\x8c\xc7\xcbd\x94\xd8x\x80\x8c\xe07\x92\xe7\xd7E\x9a\xbcW\x93\xef}\xacC\xfe\xa0=\x0c\xf9\xc2\xa5z\xf9\xcbb\x1e\xff\x87\x1f1\xfb\xbc\xf8\xec\x177\xc2\x1d\xaa\x8f)w\xf7\xd39\x19\t\x93\xed\x18\x96(\xe1|\xad\xcf\x84\xd7T~#\xe7|\xb0\x98{\xbd\x1c\xc9\xb3\x9a\x10\xff\xb6\x84\xd7\xc7\xd9\xb0!\xc7\x89s5>\\\xa8\xf5ac\xae\x13\x93?h\xc2\x8d\x9b~\xa3\x8aA\xaa\xff\xe4\x8a\x1f\xf7$B\xca\xecfE\x87\x19\xcd_\xec\xd0co\xd2\xc5L\x0c\x11\x9d\xd0\xf6\x91\xb7\xdb\x8d\x19\x9f4c\xc4x\x1b\x86\x8f\x910\xed\xe3fl/p)\xdfT\xd9\n\xe1\xf3\x86\xb8\x8b\xd1\xf6\x11\xc2fYFYC,\r\x16<\xe2^\xc4\xdd\xaa\xd4\xa8\xfa\xe9 #\xbf\xa3/c\xe5\xdd\x19[\xde\xad\x83B\r\x8dO\xc8\x08\xd9\x01j\x8eyS\x9fgb\xd9C\x0f\xce\xf9S\x9c\xf3\xa9\xea\x19\xaa\x88H\xd2\xe5!I]\x136H\x06\xf0$\x8b\xd2\xe0\x9c\xbfHD9D\xe4\x8a\xc0\x7f]D\xb4\x99s\xfe\xc2\x7f\xc0\x15\xb9o\r\x11\xc9x\xc8\xa1\xde\xf1*c^\r\xf3\xcc5\x88\xd2 \xa2\xf3\x00\x9e\x0f\x07[\xad3\x92\x99\x1e\xc9y\x07{\xeb\xb7ae\xf9|\xcc)\x1e\xa7\xe4\xd4\xe4\x82\x04\xcc.J\xc4\xb2\xa3s\x90W\xb3\x01W\x9b\x1b\xac\xf6p\x8fs\xfej\x18\xe7\x0e\xc2\xb6\xb9\xeeb\xed\xefK\x91T0\xd4\xb2\x86\xe8\xe9\xebcsq\xa5\xb9\xdet\x0fVvP\xe3\xfc\xa2Q\xe6\xe4\x8d\xc3\x98\xbe{dX\xb8z\x12v)\xae\xc9\xb6\xba\x8b \x7f \xa2\xef\x8d\xbc\xc5\r;"\xc6\xd5hf^<\xfe\xcc\x18\to\xc5\x16\xb3=\xac2\xd8\xfd%\xa3\x9fW^/\xb5\xd4\xfd\xc5\xc1$l\xa9NGic!\x0e]\xde\xa5\xdc\xfb\xd2\xb2\x8f\x90\x94\x1f\xaf|_\xb25\x017W\x8f\xee\xacKZ]\xd5\xc7\x85>6\x8d\xf9U\xf8\xd9\xfb&6\x9f\xbbo"\xce\xdc\xae\xb4\xf4\xf3\xeb-\x8d\xc8/\x9e\x8dVC]t\xadK\x02\xf7\xba\x8d{\xd8\xac\x9e\xbd\x0f\x11\x05|\\yjm\x10\xf6\xa2\xc3\xd3\xd1\xe6u\x84\x0e6\xbf\x0f\x9e\x9dK\x82j\xb3\xaf\xaa (G\x89<\xc99O\xd5\xaf_ss\xf4*s\xe3\xb5\xa2\xb4N\xecYE\x89h\xf1\xd8\xc3\x8ew\xeey\xa0\x9cY\x8f\xef\xce\x9a\x19\xcc\xc7y\xb2\xc8\xad\xfa\xb5\xef\xae\x91\xd2o\x08\xeaW\xb2\x1f\x93\xf2G\xa0\xecJQ\xc49\xc7w*?\xc8\x06\xdcq7\xa8f\x12\xd1i\xfd\xda\x98j\x7f\'\xbe\xa0\x81\x95\xb7 \x93/\xf2\x9c\']\r\xc2\x97\xeb+\x8c\xf8\xa2f\x05\x18\xf6\xd9J9\x00?\xa5\xc6\xdf%\x8eY\x1ffE\xbe\xaaB#\xbe\xa4\xf5y\xda\xe8y4\x10\x7f\xd9\xdf\x145|c.\xd0\xf7\x99\xff\x07\xbe\xef\xb7<3\xfc\xa6\xae\xec\x9fz1z\xf6\x97\xeb\x8e\x9b\xd9?\xc0\xff\x12\xcf\x06\xfa_\xbf=^\xc82\x1e\xc9P\xfd/ \xfe\xd2t\xf1\xf7\xccz\x17\x86\x8c\xb3a\xff!\xcf\xa3\xc2\x17\xfd\xda4\xfd\xda\x157G\xcf\xc32\xe2\x96\xb4v\xf6\xd7c\xdf\xb3\xa3\xd9AQ\xc7\x17\xfd$\x80\xbeD\x14p\xc0\xcf\xd79\x83z\xfc\x0f\xe7\xb7\xa0\xad\x8d\x87\xd4\xe9t\xf1\xb0{D\xd1\xd3\xaa\xf5\' 0n\xdd\xf1\xe3\x8d\xf1\xb6\xa0=L\x9a\xde\x84\xaa3^K\x9d\xa7N{11\xc5\x8e\x1f2\x1f\x84\x83\x9f\xa3\xab\xbf/\x13Q\x80\xa3\x97\x1c\xf1X\xbewR\xe74c}\xb6\x13{\x0ex\xb0\xb7\xc4\x83\xccl\xa7\xf2\x96\xd1\xf3\xa4e\xb4i\xcfa3lY\xf4Z\x86\xfe#\xdd\xc8\xb7u\xa7\xcbr\x0f\xe1\xd0\x8a5mV\xf8kLz\xbf\xdeDTg\xe4\x15v\x189\xc1\x161\xf6\xa8\x896\x1c9\xden\x86]c\xf5N\xe3\x9c\xf7\'"\x9bQ\xe6\xf6]?\xbeZ\xd1\x8a\xa1\xef\x84\xc6\x15<\x8b\xbfiUdL\xb0%\xa3\xdd-\xde\x8963\xbb\t\xbf\xfc9\xcf\x85O\xbft(1)\xde\xe4\t\xefJH\x9cb\xc7\xbc\x85-\xd8\xbc\xcd\x85\x7fn\xf9\xadl.\x99\xbd3\xbb\xb0C]\x14\xf3LM\xa8s[\xf4\xe3\xe9\xc6\xb8\x88\x10W\x16}uW\xef\xf20l!bs\x8b1G\x85\xc0u\x8b\x9eV\xf4\xd5Q|\x07\xf7\x11\xb9Z}\x0b\x9f\x16uS\xf7\x7f\x04\xbb\xba\x96#\xfaI\xc1\x1b\xb6\x9d\xcb\xbb\x03\x8c\xc1\xcf\xd8\xa8v\xc6\x9es0\xd6\xf7:c=\xcb\x19\xeb.h9c\xdd\x04E\xba_MN\xd3#t\n\xdd\x02C`\tL\x81\xfdo\x00\x00\x00\xff\xff\xc6\xf9Yo6\x15\x00\x00'

###[ HTTP/2 Frame ]### 
  len       = 0x8
  type      = PingFrm
  flags     = set([])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Ping Frame ]### 
     opaque    = 0

###[ HTTP/2 Frame ]### 
  len       = 0x167
  type      = HdrsFrm
  flags     = set(['End Headers (EH)'])
  reserved  = 0L
  stream_id = 1L
###[ HTTP/2 Headers Frame ]### 
     \hdrs      \
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 8
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 33
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 22
      |   |  data      = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 36
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Literal
      |   |  len       = 2
      |   |  data      = 'HPackLiteralString(-1)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 24
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 13
      |   |  data      = 'HPackZString(private, max-age=0)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 31
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 22
      |   |  data      = 'HPackZString(text/html; charset=ISO-8859-1)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 0
      |  \hdr_name  \
      |   |###[ HPack Header String ]### 
      |   |  type      = Literal
      |   |  len       = 3
      |   |  data      = 'HPackLiteralString(p3p)'
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 81
      |   |  data      = 'HPackZString(CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.")'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 78
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 54
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Literal
      |   |  len       = 3
      |   |  data      = 'HPackLiteralString(gws)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 28
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 3
      |   |  data      = 'HPackZString(4420)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 72
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 0
      |  \hdr_name  \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 11
      |   |  data      = 'HPackZString(x-frame-options)'
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 9
      |   |  data      = 'HPackZString(SAMEORIGIN)'
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 55
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 165
      |   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 71

###[ HTTP/2 Frame ]### 
  len       = 0x122b
  type      = DataFrm
  flags     = set(['End Stream (ES)', 'Padded (P)'])
  reserved  = 0L
  stream_id = 1L
###[ HTTP/2 Padded Data Frame ]### 
     padlen    = 230
     data      = '\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xc5:\xebz\xdb\xb6\x92\xff\xfb\x144\xfcU\x96\xd6\xb4DR7R4\x9d\x93:n\xe2n\xda\xa4\'\xc9I\xcf\xa6\xa9>\x90\x84(\xc6\xbc\x99\x00e;\xb2\xdem\x1fg\xf3\x16;\x03^D\xc9N\xd2o\xff\xec\x97DC\x003\x03\xcc\x053\x03 \xa7\x07~\xea\x89\xbb\x8c)K\x11Gg\xa7\xf8\xab\x84\x82\xc5\xdcK3\xe6\x10"\x1b\x88\xe0\x90\xa5\x10\xd9l0\xe0\xde\x92\xc5\xb4\x9f\xe6\xc1\xe0=s_\xd3\x80\x11%\xa2I\xe0\x90EN\x80\x03\xa3\xfe\xd9i\xcc\x04U\xbc4\x11,\x11\x0e\x11\xecV\x0c\x90\xb5\xadxK\x9as&\x9cwo\x7f>1\x89\x82<O\xd8u\x11\xae\x1cr^\xa2\x9f\xbc\x85\xd9\xc8>\x8bA\x18\xc3L|\xe0\xe64\xf1\xc3$\x18\x04i\x1aD,\x18\xe8\xb7\xf5\xe7\x9c\x0b\x18\xa3\xb9?\xf7\xd2(\xcd\xe7\xbaa\xfaY?K\x82R\x88,O3\x87H6\xc0]\x84"bg\xcf%\xe5\xe9\xa0l\x9dr/\x0f3q\xd6]\x14\x89\'\xc24\xe9\xf6\xd67a\xe2\xa77\xfdr\ng}uq9;z\xf5\xf9\xe7\xdf\xdf\xff2?y9z\xf5_\xf4ul%"xu\xa4^]\xfc\xf1\x1a\x06\xa7cmj\xe8\xaa>\x1c\xeb\x966T\x87SM3FCu\xa4\x19\x96\xa9\x8f\x01\x0e\x8d\xc9t\x8a\xd0\xd4t\x03\xe0H7-\x0b\xe1pd\xc9\xf6\xd8\x1c\xe9\x08\xcd\xe1\x08\xf1\xc6\xe3\xe9\x08\xe9&\xc6d2A8\x9e\x9a\xd8?\x99\x9a\x13\r\xa19\x1eKh\x99C\xb3\x84\x92~jL4C\xc2\xe9\x14\xe9\xa7C\xe0%\xe1\xd40%\xb4\xc68/p\xb7\xa6\x12Zc9>\xd1\xac\x12ZC\xbd\x84r}Ss$\xf9\x03\x1cO$\x9cNF\x08-]\x93mk4\x92\xf3Y\xb0R\tM\xab\x1c\xb7\xc6\x08A\xdc\t\xcec\xea\xda\xb0\x86\xc8\xd744\xc9\xcf4\xf4\xc9XBC\x97\xe3\xc6D\x97\xe3\xa0\x069>\x02\rJ8\x94\xfa4a\xbd\xb2\x7f\xac\x8d%\xfexbH8\xd1t]B\xc3\xd2$4\'\x12\x7f:\xd5%\xfd\xd4\x92\xfa7\x91a\t\x87\x93\x12\x8e\xe4\xb89)\xf9[\x9aV\xc2R>\xd3\x1a\x96\xeb\xb6\x86\xa3\xb2=2\xe5<\xd6X\xea\xc5\xb4&V\xd9?\x1d\xe9\x15D\xfe\xc0\xc6\x9cH8\x1c\x1b\x12\x8e4\xbd\x84\xd2\xae\x16hf\xa2\x9aCM\xd3\xac\x12\x1aSC\xc2\xd1\xd4TA\xba\xc9\x04\xfc\x06\xe0t\x08\xf3!\x1c\x81^\x10\x9ac\xb3\x84\x96l\x9b\xda\xb8\x82\x13\x89o\x8eA~\x84\x16\xe8\x07\xa0\x05\x9c$D\x7f\xd45\x03&4\x87\xe8\xa8\xf0a\x18G*-\xc4\xb2\xe0,\x9fi\xea\x15\xf7\xf8\xec\xc8\xb3<K7\x17\xda\xdc\x18\x1dm\xecr\x0b\xf4\xaf^\xbct\x8e\x16\xf9\x91\xbd\xe9u{v{\xabT\x08\x91\xe7|\xf8XcG\xa1\xa3\xd5\xdf\x01\x13\x17\x97NC@{\xebE\x9awW4W\\\x9bv:\xdd\x03\x8a(O\x85\xc8C\xb7\x10\xec\xfe\xfe\xa0\xeb:\xbb}]\xc2B\x9f\xf4z=\xbbGa(\xa39\x04\x87\xdfR\x9f\xd99\x13E\x9e(\xee\xfd}\xbd\xce\x8b\xcbMk\xe6\x97_\x9b\xdaI\x8a(\xfa\xfb\xf3G\xdf[@3)\x866\xee\xb4\xf4Sb\xc80\xcag\xc4q\xaa\xd0\x12\xa5\x1eE\x8c>\x04(\x91B\xe8j8\xc4\xd1Cr\x05\x97\xdb`\xdc\xb40\xa8\xea\xf6\xd6"\xbf[7\xd4\xdd\x8b<\x071iO=\xd0ap\x03\xf3x\xcb\xae\xd7[o\x1a\x06"\x8c\xd9\xc3I\xba\t\xbbQ\x9eQ\xc1z(\xfd[\xc0\xe9\xf6\x1a\x92(\rv&U=\xd5W\x83\xde\x9a:[\x84wy\xd4\x1a\xb2\xc3E\x97\x90\x03\x07\xd4\x0e\xea\x06\xd6\x97\x18\x84mT?k\x88<u\xd1|\x876\xfb\xb0\xf8\xe8\xb8\xb6\xdbO\x13\x86B8\xf8\x15\xa5\xd4\x97\x1f\xd4Ms\xd1^\xb6\xcf"&\x98\x82T\x1b{\'dw:;\xcd\xfe\x8aE\x8ft\xf5\xa3\xe2\xf1^P\x1e,\x82\xe7\x9eC[.\xbd8\xd67m}\x80\xb8\x8f\xaa\xa4\x94\x90\x90\x96h\xfc\xfe\x9e\x10\xdb\xbb\xbf?\xd1\x0f@\x16\xceh\x0e6!\x1d\x16:\xa4w\x7f\xdf\x05t\xf9}\xdc\xde4]\xbf\xa7\x9e\xe8N\x1b?\x92\x04\xe0\xb5\xbe\xb3\xe3\xe4\x80\x8a\xbd\xec\xd8\xa9p\x8e\xa1\xc3\xa6\x0e\xccH\x06\xe4\xb8\x1b\x00\x0cX27\xb4\x11\xe9\x1d\x93\'\x14r\xbb\x13v<H\xb1\xc7\xf4\x98t<P19v\x8f\xd9\xf1\x02Z\x9fo\xb7+\x11\xd2\r\xec\xc1_e\x1d\x10\xf6\x05\xe3\x02\xf4\xd3\xe9\xb4\x1d\xbe\x8b\xb3\xef{ \xa1D\xfa\xe0\x1a\x149\xa3j\x10\xc5\xf1L\xdf\xf4T\n\xba\xe9\xd5;\x876\x1a\xbds\xd6\xcd\xf7\xed\x9e\x83\xd7(\x1fh?\xf4?:\x1f\xa0\xf3c\xc5\xe1@\xdf\xda\xe4\xba\x1d\x83\xd0mv\xcd\xb3\rV\xd7\xfd\xac\xe0\xcb\xee\x87\x0f\xf4#\x0e|l\xfb9\xf5\x9fF\xfb\x1bl\x9f\x0e\xe7\x07\x9aM\xaf\xef\xd1(\xea\x8ae\xc8{\xd2\xb3\xe9\xfe\xfeV1\x98,s\xb6\xe8C?\xbb}\x05{\xe2\x90\xc8\xbd\xa1\x9d:n\xe9,^\x8d\xc2\x0b\x97C\xccI\x82\xae{\xac\x83\xd2\xbb\x7f\xddwz\xd7\xce\xa0T\xba\x07JF\x7f\xf0vXu:\xb4\x9f\xb3,\xa2\x1e\xc4\xa9A\xe9)O\xc8\xb1\xd7t\x96\\\x16\x99\xf3\xe1\xaf\xce\xc7\xff\x18\x04*A\x17\x90&_\x12\x10\xe2tP\x15@\xa7\\\xdcA=t\x18\xb84W\x0f\x03L\n\x100\xa14\xe3\xe1g6\xd3\x87\xd9\xad\x9dQ\x1f\xcb\xb0\x13\x91f3=\xbbU\x0e\xc28\x83MI\x13ao$\xddz\xc9\xc2`)f\x86\x91\xddn*\x1e5\x91\x9b\n\x91\xc6\xb3\xe9.\x1dV\x89\'4\n\x83d\x96#\xe9\xa6\x1f\xb8K\x15~\xfc5\xecw\x9f\xe5\xcdd<\x8dB_9\xf4,\x7f\xba\xd0\xed\xd6\xca`*$\xaa\xe7\xd6\xec,\xe5!*\x7fF] \x82\x08n#\x0fc\x04\x12\xdc\x84\xbeX\xcetM\xfbq\xf3\x8f\x98\xf9!U\xc0\x80k \xd7\xdbK\xb7c\x9a\x07ar"W4\xeb\x8fYl\xafX.B\xb0v\xb5V`XI\xbc\x00\x97\x11\xb3\x88-\xc4fC\x91\x91\x8a\xbf\xa3\xb5\x14\xccg^\x9aKG\x98\x15`\xb4<\n\x13\xd6\x92~\x87@\xd6\xaf\xb3CM\xf3\xda\x180\x14*\xedq\xdf7\x991\xddCY\xec\xa0@\xf1\xd1\x1e\xff\x01L,M[Y\xd8M\xfd;U\xf8*U3\xb5\xbf,m\xbc\xa0q\x18\xdd\xcdh\x1e\xd2H\xe54\xe1\'`\xbap\xb1A\xdcu\xa9\rPl\nZ\x00yoN\xeef\xe04)\xe4\xa4\xc3 \rj\x0b\xcf\xc0E\x14\x13\xfei\x1b\xe1\xafQ\xd4\x93J\xa7}\x93\xc5\xb0L\xea\xcdceoH\x07\x7f\xd8@^\x8e\xabYj7144\xeb\xb2\x16i8\xf16\xfd\xeb\x96\x8e6}\xc1\x91W=\xb7\x86\x1d\xb5\xcb\x00ZD3\xcef\xf5\xc7\x86\xc5\xa5\x9c7\xe5\xacn\x1a\xf9\x95\x0b\xa1Jf\t,\x80F\x1b\x88\xd4\xa2\xf1\x83q\xe3.#k"}\x8c/BU\xa2 \xe5LGQ\x1f(\x0c\xb1x\x850}\x14\xc1\xe7k?\xe4\xb09\xeffa"U\xe1\xa6\xb7\xf6~\x17\x04\x90\xab\xca\r\xa5^5e\xb4\xf5K\xf4\xb6\x19\xb47a\x92\x15b\xc7\x82a\xb2\x84i\xda\x9ee\xc8\xdf\xe1\xae\x97\xe9\xfa\x8e\x97I3\xbb\xd4\xbb\n\xf2\x14\x1cuv\xb8X,\xec\x12\xd5\x85(r\xb5\xa1-B{\xdf\xb5\x13\xc8\xd7\x1b:[\xa2{\xa8tF!r\xae\xd8\xd77\xc0\xa6\xbf\x88\x14\xda\xb6,\x9d\xadB\xd8\xb2\xcc\xaf;\xc7c\x9d\x9a\xee\xdf\xdbO\x12kX\xce\xfe\x00K.\xed0\xc0\xf3\xa9"\x95Q\xe1U\xf3\x80\x98;;\x89\xbb\x91\xb7nG\xb91\x1a\x1e{a\xc1\xb5\x89vlc\xa0mv\xec"#e+<\xc9\xf8\x14q\xd7\xddQ0c\xcc.\xbduV\x066@\xb3\xb7\xee\x8b\x8b\xf3<O9\x84cX\xf5\x03M\xbb\xf2\xcd\xa1\xd6\xf0\xdcY\x14hVD\xea\xe1"\x8aZ\xcb}\xcc\xa34E7*\x16\xedU\x15P\xc1\xd5g\xee\x84\xae\xe6P\xe5\xa4\x86a\xe1q\xba\x07\x1ex\x02\x873\x10\x172\x0b\xa3\xe2\xa4^\xae\xd4\xb1\xdd\xecL\xcd\xf6\x8a\x9c\xc3w\x96\x86p\x8c\xcf\xdbk\xb6\xb7\x91\xa4\x10\xb8*\xf8*\xb7\xca\xf8\x91\xad\xf2X\xcc\xc5\x15\xd7\x0e\xd6V\'(G\xee\xde\xd9"\xf5\n\xbe\xae\xd9K\xf3o\xc3_\x95\xe8\x9a\x8c\x078W\n\xa6\xdeG\xae\x1a\xa00\xf7\x0bO\x0cB/m\xee\x1a\xa2\xd4\xcf\xfa\xd0A@\x07\x91C\xf8\x12\xfc\xc6+\x84\x02]\t\x01\xbe\xe55\x08n&\xc5\r\xa4F\x1c\x82>F\x1e\xbde\xc0\xdc\x8fE\xe6\xd1WT~$K\x8a\x90q(\xbdi\xc4\x99\xed\x83l1\x1c=\xfa8CU\x1a+\x8e\xf2\xf0\xe2"Q:\x1d\xa5\xfe\xeeb\xb9\xa1t\x1b\xe2r\xb2\xde\xba\xa9\xc9\xbb=Y\xeb\xc2?{\xf3\x03\xa2\x1e\xe0\x9cP_\xd7\x14\x8bNg\xfb\xdd\xbf\xeeK\x1d\x03\xdb\xa63p\xaf\xdb8\xd8l\xa1m~\x80?xn\xdc*\xde\x0fWJ\x085g\x9c\x04.9S\xea6&\xd4\xb3\xd3$u\xe1\xd7U\xbc\x88r\x0e}\xfa\xd9?\x99\x07Q\r\xfe\x9d\x0e\\\xc0\xa6\xdb\xa1\xcaz\xe5\xf1j0\xb8\xb9iJ\xf9E\x0ej\r\x96\xd9\x93%TsyGP\x17j3r&%\xe6\xa7\x03\xfaM>1$\x8d\x16#l\xb6\xf9D\xe4\xecW\xe8\xfa\x1e\x17\xdc~5\x17/\x8d\x07m\x16&9{\r\xc3\xdfc\x81\x02\xdd\x817\x17n\xc5"\x88\x9c\x9f\xffY\xb2\xd0\xc9\xd9\xbf\xd3\xe2-\x0c}\x8f\x0b\x98\xba-Nr\xc3w\xf5\x02\xce\xfb\xd4\x13\x05l3\xf1\xe5o\xe8&\x8c\xdaRa{\xf0D\xf2\x89\xc9\xd9sl~\x8f\x85\x9f\xc3\xfe\xdd\xd1\x8c$O\xc9\xd93\x1cyH.7py\xa5\xb8\x1f\xdd\xc9\xb7] \x11\xd1\x00`\x9a!\x01\x1f\xc0N,@\xf1\x05HY\x9c)\x9d\x9c^\x17\xa9\x8d\xf3\x9d\x0eJ\xb7\x1b\x80+6\xfe)\x0bXE\x16\x01\x0e\xd6\x8c\xb5o\xf2\x8c&\xa5\xbf&\xcd"C\x8c+\xd0\xdf\x1e]4\xa3\x8bGFY\xd3G[2<\x10\x01\x0e\x17"\xcd\xefP\x04p\x84\xd2l\xa4a<:{!\xc7\xc3\xeb\x82)\xef\x99+uw\x8f\xda\xab\x03[\x06\x80\xe5,\xf1\x18\x7fH\xfc\x9a\xe64\xfe\x1f\x91W[B\x12\n\x08\xd2L8s\x88\xb7\xe5B\xe7SmO\xc9\xd4\xf3 \xee\n\xde\xb6\xe1\x1b\x96\xafB\x8f\xbdL!\xc2W\xce\x95\xc14`OG\xe4\x05\xeb\xe0\xadn\x98\x14\xccy\xdcR\xedU\x9d\xa7I\xc2n\xc1`\x8f[\xa6F\\V~!\xd3\xae\xf6-\x8c\xb2\x90\xafQ\x94\n\xd3c\x98\xa0 \xd4\xc0\x19,\x82\x93\x93C\xe00@d`\x8a\x82\xcc\'\xdb8\x15\x05\xb4jU\x9eX\x97\x9d\x86\xacw\x15H\xf9\xbb\xe3uu\xabkM\x15iL\'\x98\xe2\x1f\xcf\xb6{7\xdc\x98\x05\xb6\x97\xdc\xd8\x9a\xdf,\xa1@\x9ao\xc9\xab\xfbncj\xdcZFy\xe5\xddS\x92\xf4\xa4\xcc\xceD\x91\xb7\xdb\x0e)/\xbb\x89"S(\x08\x02\xaa*%\\f\xc8\x96(\xd5\r\x0bi\x0e\xaeQ\xa7\x03?\xdd\xde\xae@U~\x9fN\xa7\xed\xdafR\x97:\xed\xba\xba9~A\x92\xa4\x98\xa9\xe5\xf1k\x8a\x9a\x90\x962\xb0r&\xb0\xd6\x9b\x9cf\x0e!g?\x83\xf0\x1e\xab\x8c\xd2\xfe\xdd\x9a\x1dO\x08\n\x95i\xce\xa9\x8f\xb9\xc0\x82\xc6\xb04L\xaf\x10?"\xa6x,\x8a*\xcb8D#\xb2\r;\xcc\xab\xda\x80\x96+\xabJ\x13\xb0&\xec\xf0\xab\xedM\x8c\xf1\x8f\xe4\xac\x93\xb8<\x83x |9T\xa1\x96~\xd2^\xf1\xa9,\xbc\xab\xf9CP/p\x05\xcf&\x97o^\x9d\x98\xe6\xd8:\xd1\xc1\x00\xe5\xfbI\xe8\xfb,i(*<\xdc\x84%\xf12\xfa\nf9\xcc\xd3"\xf7\xd8\x1eJ\xcde\x99\xeda\xbb\xe1\xcd7\xb9\xb9\xe1\xf2\xc1\xf8v\xbb\x10\x9f\x93=\xff\x1dn\x0f\xc3x\xdeP\xb4\x86\xe1\xae[`\xd9\xd7\xd4v\xf5\xde\x18\xd7\xc7A\x05\xdd\xe4a1\x07NY\xe0\xddg\x9c\xe1=\x9eCR(\x94\xea\xa5@)\xd7\x88\xd9\xf8rS\x06(\xb5W\xc7\xf46bI \xed\xa7\x8d\xccZ\xa9\xd7 \x07\xf8\xa7C\xc6S\xb2\xf5\xa5z\xcd\xed\xe3\'\n$#\xf2V\x05\xbb\x1dXd7Bo\xfb\x9a\xc5=\\S\xa5j\x91<\xafu\xcd\x0b7\x0e\x05i\xc2};\x13\xfc_\xe7\xfd\xe5\x88\x86\x8a\xcf\x94\x88\xe2\xebZ\xe2\xb5\'\xbe\xc4]\xedE\xa1w\x05\xce\xb9\x90\xd7S}\xdc@P\x93I\xea\x9e\xec\x815{W\xccwt[aP]*`\x91\xe6\xda\njR?M\xfd\x08"\xd3\xd1w\xa4\xa8\xf7J\xb5F8\xda\xe1qi/\xe04;gg\xb75yo@\xfd\x15\xca\xe0\xcf\xab\x0b\xac2}\xd08\xb3\xeb\xf7\t\x07,\xb5\xd55E\xf4/\xb2P\xd82\xc1\xf7\xc8\x02\xa2)$\xae4\xe2_\xe1\xf1\xaa\x10a\xc4\x15\xf0\x81\xa0\x80\xc4\x89i\x93\x97Y\x06\xe5\x18\x08\x8c82\x98\xd4\xba\xc7X\x19\xb8\xabZ\xbd\xf2\xf3\xd1\xdd\xa8\xa3jP\xcd\xdb\xb4\x817\x1e\x1c\xf3\x1ei\'\xa7\xca\r\xb7a\xd4\x1c\xfeh\xc7p|\xac7\x1d^8\x91v\xf4\xabk\x06\xa0I1\x12}\x85\x0f$\x1b\xb1;V\xedI\xdd\xc2\xe3\x15l\xb6\xf6u[\x1d\xd5$_\xc8{-M\xd6U\x13\xf5\xb1bz\x83whX=)Y\xe1\x82W\x85\x82\x86U\xc1\xb0%\xe1e\xf6\xdf\xc5\xf7\x8f`\x0eHHy\xc8wm\xb5\xad\x90\x8b\x9d\x1aB\xd7&\x96\xa6\x8f\xcc\x89i\xe2\x83\x98\xa1\x19\xa6aT\xa7-99_\xa2\xf8\xc7\xf5\x13.}l\xd1.\x94I}|x&g\xff\xad\xe0\x03p\xcaq\xa7<B\xf3x%\xc2\x99\xc0\x9a\xc9O\xa1\x94M\x9eT\x9f\xce\xbb7\xd2\x97x\x188\xf3\xf9\xab\x17\xc9\xafo/\xce\xaf\xae\xf4_\x9f\xaf\xfex\xf3\x9f\xc1\xf3\xd1s\xfdi\xfc\xe2z|\xf9\xe3\xf0Y\xa5S\x06\xb1\xbdzlF\xe1J/ke\xb7l?\xb7N\xf0O+\xbd\x9ahN\xa8\x9b\xb2;[14}\xa2\x9c(\x0f\xc5\xcdR4\t(\x1e\xb4\xbc\xa2\xde\x1d\x18\x00\xca\xa7E\x08\xae)BY\xd1\xcb\xca\xee\x9b\xa4\xe0\x071/\t}\x99\xba\xab-\x91mwy]+}\xef\xb5\xbc\xef\xf9\xa9\xd3\\\xc5\xaae\xe9\xa3m\xec\xfd\x83osS\x1eB\xa9\x97\xbfG4\xd5\xdd\xe9{!y\xe0U\xf9\x01\xbd\xbf?p{\xe5]y\x85R\x1f6U\xd0\xf4\xf9\x9b7\xfa9\xa4\x11({\xf0z\xdc\x93\x9f\xbf\xa6>{\xe25x\x17\x11C0\xf3\xe4\xe1Y\xa5\x8e\xdf\x87\x08\t=\xf5\xd4u\xbb\x9a\x96v:n\xa7\xd3\xa5\x07\xceV\xae\xbe\x94\xe6\xfe\xde\xdd\xe9,e\xdd\xbe\x88@Y\xd5%D\xc5\xbf\x83\x92%\xbe\xbb<\xe9T\x8f.\x90\xa3\xabW\x17\xc8\xc6\xf2\xd5e\xf7\xed\xe7\xea\xe2\xb2\xb7\xf7\xb2\xf0\x95\xc3\xf3\xed\'\xee\x93\xbd\x13\x0bv\x86\x8f_7\xd4\x9f\x8a\xd7u\x1b\xa3\xf1\xf2\xa5\x0fv\xccC\x035\xe7y/\x87\x8a\x92U\x1a\xec\x92\x927\xe9\xd9T\xde\x1b\xb8\xad{\x00V\xeb\xf9\xa7\xbbK\xbf[\xae\xb0\xd7\xa7Y\xc6\x12\xff|\x19F~\x97\xf66\xaa\xd6\xdbT\xc2\xfa\xd1\xa7l\xfb\xd6\xe2\xaa\xb4yk\x01\xd2\x02X{H`o\xb1\x1doO7_wD\xe0\x90\xc7\xf8"$\xd5\x07nT\xbf"\xf5\xea\x8f\xfe"\xcc\xb9@\x14t\xb2-Y\xc3i^{\xdb\xfc\xfe~\xdd\xbc1\xce\xfb\xf3gE\x9c]\xdczL\x9e*\xb7\x02\xb0\xdeZ,\xf3\xf4Fa\x9b\xd6\x84\xf8\x86\x96\xf3\xc6?\xca\xa6|i\xea\x8bF\xde\x9d^\\D\xc4\x9d\xfaA\xb6\xdbz\x91\xb5\xdb\xaa\xeb\x1e\r\x00s0\x1f\xc0\xcf\xd5\x9f\xb7C\x1fZ\xfde\xd6g\xc9\xfc\xdd\x9b\xfe\xfb\xdf\x86\x7fdo>\x9f\xfc\xf4\xdc\xec\xbf\x1a\xc48\xce\xdd\xf9\x92\xa9\xfe \x17\xd8\xfa4\xf0\x11\xe8\x03\xd9\xfa\xecA\x0c\xc89~>=\x7fki\xe9\xf3\x95\xff\x82N\xdf\xbe4\xde\xcf/\x7f\xffC\xe7\xe3\x9f^\xdf\xfe\xfb\xf2\x05{\xb7Z\xfe~\xa4\xfe\xffM\xdd\xb3\xb7\xa6\x82\xea\xa5VH\x16{\xce\x9a\xc8i\xc8lM\xa0\x10H\xc8\x0cO\x9e*\xf1\xda\xdfrK\x92\x19\x96\xb8y\x94\xa6\xf1\t\x94\xd1*\xf1\x975\x82\xbf\xbc\x16\xcd7\x07D\x18]Du\xcf2\xe5H\xdcd\x0b\x18\x0c\xb9\x0b\xc4\x86\xa9\x92O4&\x10\xf4\xc8\'\x9e&YM\x11\xc5\xf5W\xcc\x03\x8eK\xf3B\x17\xf8\x91\x8b\xc5\x82z,\xc7\x12.\xaf+\x1b\\\xc9]\x8c\x83\x9c\xd3;\xf6\x19*\x1d\xe6\xc19F\x08\xa6\xa4\xb9X\xa6\x01\xd4QP\x00\xcd\x001\xf2\xae\xee\x00\xf3\x97?\x0bM3&\x87C\xcb\xde/\tqr9S\xa2p\xbaJ\xc3\\\xc1\x84\x0b\xdd)\xbfB)\xaab\x08h8\ry\x88\x04\x19li\x189\x973\xf2"\x80\xc3\xa9\x0c\x1aTqAo\xca\x17\xf1\x05z3\xc85\xf1\x17\x86\x84\xab\x14\x12\xbc\x82K\x18\x9eW\t\xe6OR\xdfY\xfcI\xe4\xc0\xc5r\xe7\x8a\xa2D\x1e\xd0r\xac_N\x8a\xcb|S2f\xa8T\xee\x86\xb8\xc2m\xc9\x97\xe1]\xa8\xfc\x7f\\0\x88\xa7\xbf\xd9\xc3\xda{\xa3\x92\x04MV\xaa;]\xe5\xa0m\xe8\xcb\xaeK+\xc2\xe2\xe0T_\x8d\xe6\x0b@\xfc\xf0\x11\x98y\xd0\xa7k\xf8\x01\x8e3\x06(\xd2+ XY\xcb\xc4\xba\xf8\xed\xf5\xbf\x8c\xf3k\xfd_\xcf\x9e\x16\x93\xc2\x1fO\xde~\xbe\xba\xfb\x1d\'\xf2\x91\xf7\xf6\xf5\xba\x8c%\xe5\xfbp+$m\xa3@\xcc\xfcf\xb3\xc3w\xf7(LB\xb1\xf5el\x9579w\xdd\xa6S\xe2U\xba\x04\xd4\xcd\xa6\x1d\xc7>5\x11\xe5\x13\xec\xbaV\xe36|,\xbc\xb7\x86!\x00\xdb\xf2U\xb0\xbe\x0f/\x8b\x12L\x8cx\x89\x8d\xff\'\xf0\x7f\x01\xa9\x9a\xd7%#(\x00\x00'
     padding   = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

###[ HTTP/2 Frame Sequence ]### 
  \frames    \
   |###[ HTTP/2 Frame ]### 
   |  len       = 0xe1
   |  type      = HdrsFrm
   |  flags     = set(['End Headers (EH)'])
   |  reserved  = 0L
   |  stream_id = 3L
   |###[ HTTP/2 Headers Frame ]### 
   |     \hdrs      \
   |      |###[ HPack Dynamic Size Update ]### 
   |      |  magic     = 1
   |      |  max_size  = 12288
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 8
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 59
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 11
   |      |   |  data      = 'HPackZString(Accept-Encoding)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 26
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 3
   |      |   |  data      = 'HPackZString(gzip)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 31
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 9
   |      |   |  data      = 'HPackZString(image/x-icon)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 33
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 22
   |      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 36
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 22
   |      |   |  data      = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 44
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 22
   |      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 0
   |      |  \hdr_name  \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 16
   |      |   |  data      = 'HPackZString(x-content-type-options)'
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 5
   |      |   |  data      = 'HPackZString(nosniff)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 54
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 3
   |      |   |  data      = 'HPackZString(sffe)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 28
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 3
   |      |   |  data      = 'HPackZString(1494)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 0
   |      |  \hdr_name  \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 12
   |      |   |  data      = 'HPackZString(x-xss-protection)'
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 10
   |      |   |  data      = 'HPackZString(1; mode=block)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 24
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 16
   |      |   |  data      = 'HPackZString(public, max-age=691200)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 21
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 5
   |      |   |  data      = 'HPackZString(472252)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 0
   |      |  \hdr_name  \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 5
   |      |   |  data      = 'HPackZString(alt-svc)'
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 28
   |      |   |  data      = 'HPackZString(quic=":443"; ma=2592000; v="35,34")'
   |###[ HTTP/2 Frame ]### 
   |  len       = 0x5d6
   |  type      = DataFrm
   |  flags     = set(['End Stream (ES)'])
   |  reserved  = 0L
   |  stream_id = 3L
   |###[ HTTP/2 Data Frame ]### 
   |     data      = '\x1f\x8b\x08\x00\x00\tn\x88\x02\xff\xbcX{PTU\x18?\xa6\x8d\x89\xa5\xf4G\xff5\x13\xf60\xffh\xcc1\x11\xc7L\xb3\x07>\xffp\x94\x10L\x1b\xd3L+kF\'\xb5\x19\xc7Rg\xc2\xb4@KtD _\x91\x80\x8e\x82\x8a\xa8\x83\nhI\xa9\xa8\x08B\x98\xaf|\xdf]`\xc1}\xb0{\xf7;\xbf\xe6\\\xeee\xee\xde\xbd\x97\xdd\xb5\xb53\xf3\rg\xcf\xfd\xbe\xefw\xcew\xbe\xd7\x81\xb1n\xec1\x16\x1b+\xfe\xc6\xb1y=\x18\xeb\xcf\x18\x8b\x8b\xeb\xf8\x9d\x1f\xcbXF\x0f\xc6\x060\xc6b\xc5:\xebXWF\x0f\x16r\x00\x18DD\x1b\x89\xa8\x81\x88\xbc*\xd5\x13Q&\xe7|\xa0\x95\x1c\xe7\xbc\x17\x11e!\xc4 \xa2\r\x00\x9e0\x91\xad\x10\xdf}\xe4\xc5\x81\xbfvb\xf1\x91\x19H\xd95\x1c)\x85\xc3\xb1\xf0P*v\xd7\xe5\xa2]vk:\x8e\xebuh\xb8v\xd7},(M\xc1\x94\xfc!\xa6\x94\xb17\x05\xdcq\xafs\x1f\xday\x15\\\xbf\x17\x0bJ\xa7*|\x02s\xfb\xf9\x1fQ{\xff\x0c.I\xd5(\xac\xcdF\xd6\x8e\xf1p\xa4\x8d\x86;w.\xc0\xb9\xa2C\xd8\x83\x886\x89\xf9\xeaKg1\xa1p,\x92\x0b\x87\xa1N\xaa\x0e>\xf7\x9d\x068W%\xc2\xf9\xed[\xf07\x9c\xd0\xf6\x90ID\x8db\xfe\xca\xc9V<]\xd6\x84\xf4\x0bE\x96\xb6k\xdf\xb3R\x91o/I\xd7\xe4\xc5\xbd\xf8\xc4<\xe6\xa8\x8c\xc7\xcbd\x94\xd8x\x80\x8c\xe07\x92\xe7\xd7E\x9a\xbcW\x93\xef}\xacC\xfe\xa0=\x0c\xf9\xc2\xa5z\xf9\xcbb\x1e\xff\x87\x1f1\xfb\xbc\xf8\xec\x177\xc2\x1d\xaa\x8f)w\xf7\xd39\x19\t\x93\xed\x18\x96(\xe1|\xad\xcf\x84\xd7T~#\xe7|\xb0\x98{\xbd\x1c\xc9\xb3\x9a\x10\xff\xb6\x84\xd7\xc7\xd9\xb0!\xc7\x89s5>\\\xa8\xf5ac\xae\x13\x93?h\xc2\x8d\x9b~\xa3\x8aA\xaa\xff\xe4\x8a\x1f\xf7$B\xca\xecfE\x87\x19\xcd_\xec\xd0co\xd2\xc5L\x0c\x11\x9d\xd0\xf6\x91\xb7\xdb\x8d\x19\x9f4c\xc4x\x1b\x86\x8f\x910\xed\xe3fl/p)\xdfT\xd9\n\xe1\xf3\x86\xb8\x8b\xd1\xf6\x11\xc2fYFYC,\r\x16<\xe2^\xc4\xdd\xaa\xd4\xa8\xfa\xe9 #\xbf\xa3/c\xe5\xdd\x19[\xde\xad\x83B\r\x8dO\xc8\x08\xd9\x01j\x8eyS\x9fgb\xd9C\x0f\xce\xf9S\x9c\xf3\xa9\xea\x19\xaa\x88H\xd2\xe5!I]\x136H\x06\xf0$\x8b\xd2\xe0\x9c\xbfHD9D\xe4\x8a\xc0\x7f]D\xb4\x99s\xfe\xc2\x7f\xc0\x15\xb9o\r\x11\xc9x\xc8\xa1\xde\xf1*c^\r\xf3\xcc5\x88\xd2 \xa2\xf3\x00\x9e\x0f\x07[\xad3\x92\x99\x1e\xc9y\x07{\xeb\xb7ae\xf9|\xcc)\x1e\xa7\xe4\xd4\xe4\x82\x04\xcc.J\xc4\xb2\xa3s\x90W\xb3\x01W\x9b\x1b\xac\xf6p\x8fs\xfej\x18\xe7\x0e\xc2\xb6\xb9\xeeb\xed\xefK\x91T0\xd4\xb2\x86\xe8\xe9\xebcsq\xa5\xb9\xdet\x0fVvP\xe3\xfc\xa2Q\xe6\xe4\x8d\xc3\x98\xbe{dX\xb8z\x12v)\xae\xc9\xb6\xba\x8b \x7f \xa2\xef\x8d\xbc\xc5\r;"\xc6\xd5hf^<\xfe\xcc\x18\to\xc5\x16\xb3=\xac2\xd8\xfd%\xa3\x9fW^/\xb5\xd4\xfd\xc5\xc1$l\xa9NGic!\x0e]\xde\xa5\xdc\xfb\xd2\xb2\x8f\x90\x94\x1f\xaf|_\xb25\x017W\x8f\xee\xacKZ]\xd5\xc7\x85>6\x8d\xf9U\xf8\xd9\xfb&6\x9f\xbbo"\xce\xdc\xae\xb4\xf4\xf3\xeb-\x8d\xc8/\x9e\x8dVC]t\xadK\x02\xf7\xba\x8d{\xd8\xac\x9e\xbd\x0f\x11\x05|\\yjm\x10\xf6\xa2\xc3\xd3\xd1\xe6u\x84\x0e6\xbf\x0f\x9e\x9dK\x82j\xb3\xaf\xaa (G\x89<\xc99O\xd5\xaf_ss\xf4*s\xe3\xb5\xa2\xb4N\xecYE\x89h\xf1\xd8\xc3\x8ew\xeey\xa0\x9cY\x8f\xef\xce\x9a\x19\xcc\xc7y\xb2\xc8\xad\xfa\xb5\xef\xae\x91\xd2o\x08\xeaW\xb2\x1f\x93\xf2G\xa0\xecJQ\xc49\xc7w*?\xc8\x06\xdcq7\xa8f\x12\xd1i\xfd\xda\x98j\x7f\'\xbe\xa0\x81\x95\xb7 \x93/\xf2\x9c\']\r\xc2\x97\xeb+\x8c\xf8\xa2f\x05\x18\xf6\xd9J9\x00?\xa5\xc6\xdf%\x8eY\x1ffE\xbe\xaaB#\xbe\xa4\xf5y\xda\xe8y4\x10\x7f\xd9\xdf\x145|c.\xd0\xf7\x99\xff\x07\xbe\xef\xb7<3\xfc\xa6\xae\xec\x9fz1z\xf6\x97\xeb\x8e\x9b\xd9?\xc0\xff\x12\xcf\x06\xfa_\xbf=^\xc82\x1e\xc9P\xfd/ \xfe\xd2t\xf1\xf7\xccz\x17\x86\x8c\xb3a\xff!\xcf\xa3\xc2\x17\xfd\xda4\xfd\xda\x157G\xcf\xc32\xe2\x96\xb4v\xf6\xd7c\xdf\xb3\xa3\xd9AQ\xc7\x17\xfd$\x80\xbeD\x14p\xc0\xcf\xd79\x83z\xfc\x0f\xe7\xb7\xa0\xad\x8d\x87\xd4\xe9t\xf1\xb0{D\xd1\xd3\xaa\xf5\' 0n\xdd\xf1\xe3\x8d\xf1\xb6\xa0=L\x9a\xde\x84\xaa3^K\x9d\xa7N{11\xc5\x8e\x1f2\x1f\x84\x83\x9f\xa3\xab\xbf/\x13Q\x80\xa3\x97\x1c\xf1X\xbewR\xe74c}\xb6\x13{\x0ex\xb0\xb7\xc4\x83\xccl\xa7\xf2\x96\xd1\xf3\xa4e\xb4i\xcfa3lY\xf4Z\x86\xfe#\xdd\xc8\xb7u\xa7\xcbr\x0f\xe1\xd0\x8a5mV\xf8kLz\xbf\xdeDTg\xe4\x15v\x189\xc1\x161\xf6\xa8\x896\x1c9\xden\x86]c\xf5N\xe3\x9c\xf7\'"\x9bQ\xe6\xf6]?\xbeZ\xd1\x8a\xa1\xef\x84\xc6\x15<\x8b\xbfiUdL\xb0%\xa3\xdd-\xde\x8963\xbb\t\xbf\xfc9\xcf\x85O\xbft(1)\xde\xe4\t\xefJH\x9cb\xc7\xbc\x85-\xd8\xbc\xcd\x85\x7fn\xf9\xadl.\x99\xbd3\xbb\xb0C]\x14\xf3LM\xa8s[\xf4\xe3\xe9\xc6\xb8\x88\x10W\x16}uW\xef\xf20l!bs\x8b1G\x85\xc0u\x8b\x9eV\xf4\xd5Q|\x07\xf7\x11\xb9Z}\x0b\x9f\x16uS\xf7\x7f\x04\xbb\xba\x96#\xfaI\xc1\x1b\xb6\x9d\xcb\xbb\x03\x8c\xc1\xcf\xd8\xa8v\xc6\x9es0\xd6\xf7:c=\xcb\x19\xeb.h9c\xdd\x04E\xba_MN\xd3#t\n\xdd\x02C`\tL\x81\xfdo\x00\x00\x00\xff\xff\xc6\xf9Yo6\x15\x00\x00'
   |###[ HTTP/2 Frame ]### 
   |  len       = 0x167
   |  type      = HdrsFrm
   |  flags     = set(['End Headers (EH)'])
   |  reserved  = 0L
   |  stream_id = 1L
   |###[ HTTP/2 Headers Frame ]### 
   |     \hdrs      \
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 8
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 33
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 22
   |      |   |  data      = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 36
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Literal
   |      |   |  len       = 2
   |      |   |  data      = 'HPackLiteralString(-1)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 24
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 13
   |      |   |  data      = 'HPackZString(private, max-age=0)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 31
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 22
   |      |   |  data      = 'HPackZString(text/html; charset=ISO-8859-1)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 0
   |      |  \hdr_name  \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Literal
   |      |   |  len       = 3
   |      |   |  data      = 'HPackLiteralString(p3p)'
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 81
   |      |   |  data      = 'HPackZString(CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.")'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 78
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 54
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Literal
   |      |   |  len       = 3
   |      |   |  data      = 'HPackLiteralString(gws)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 28
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 3
   |      |   |  data      = 'HPackZString(4420)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 72
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 0
   |      |  \hdr_name  \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 11
   |      |   |  data      = 'HPackZString(x-frame-options)'
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 9
   |      |   |  data      = 'HPackZString(SAMEORIGIN)'
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 55
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 165
   |      |   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 71
   |###[ HTTP/2 Frame ]### 
   |  len       = 0x122b
   |  type      = DataFrm
   |  flags     = set(['End Stream (ES)', 'Padded (P)'])
   |  reserved  = 0L
   |  stream_id = 1L
   |###[ HTTP/2 Padded Data Frame ]### 
   |     padlen    = 230
   |     data      = '\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xc5:\xebz\xdb\xb6\x92\xff\xfb\x144\xfcU\x96\xd6\xb4DR7R4\x9d\x93:n\xe2n\xda\xa4\'\xc9I\xcf\xa6\xa9>\x90\x84(\xc6\xbc\x99\x00e;\xb2\xdem\x1fg\xf3\x16;\x03^D\xc9N\xd2o\xff\xec\x97DC\x003\x03\xcc\x053\x03 \xa7\x07~\xea\x89\xbb\x8c)K\x11Gg\xa7\xf8\xab\x84\x82\xc5\xdcK3\xe6\x10"\x1b\x88\xe0\x90\xa5\x10\xd9l0\xe0\xde\x92\xc5\xb4\x9f\xe6\xc1\xe0=s_\xd3\x80\x11%\xa2I\xe0\x90EN\x80\x03\xa3\xfe\xd9i\xcc\x04U\xbc4\x11,\x11\x0e\x11\xecV\x0c\x90\xb5\xadxK\x9as&\x9cwo\x7f>1\x89\x82<O\xd8u\x11\xae\x1cr^\xa2\x9f\xbc\x85\xd9\xc8>\x8bA\x18\xc3L|\xe0\xe64\xf1\xc3$\x18\x04i\x1aD,\x18\xe8\xb7\xf5\xe7\x9c\x0b\x18\xa3\xb9?\xf7\xd2(\xcd\xe7\xbaa\xfaY?K\x82R\x88,O3\x87H6\xc0]\x84"bg\xcf%\xe5\xe9\xa0l\x9dr/\x0f3q\xd6]\x14\x89\'\xc24\xe9\xf6\xd67a\xe2\xa77\xfdr\ng}uq9;z\xf5\xf9\xe7\xdf\xdf\xff2?y9z\xf5_\xf4ul%"xu\xa4^]\xfc\xf1\x1a\x06\xa7cmj\xe8\xaa>\x1c\xeb\x966T\x87SM3FCu\xa4\x19\x96\xa9\x8f\x01\x0e\x8d\xc9t\x8a\xd0\xd4t\x03\xe0H7-\x0b\xe1pd\xc9\xf6\xd8\x1c\xe9\x08\xcd\xe1\x08\xf1\xc6\xe3\xe9\x08\xe9&\xc6d2A8\x9e\x9a\xd8?\x99\x9a\x13\r\xa19\x1eKh\x99C\xb3\x84\x92~jL4C\xc2\xe9\x14\xe9\xa7C\xe0%\xe1\xd40%\xb4\xc68/p\xb7\xa6\x12Zc9>\xd1\xac\x12ZC\xbd\x84r}Ss$\xf9\x03\x1cO$\x9cNF\x08-]\x93mk4\x92\xf3Y\xb0R\tM\xab\x1c\xb7\xc6\x08A\xdc\t\xcec\xea\xda\xb0\x86\xc8\xd744\xc9\xcf4\xf4\xc9XBC\x97\xe3\xc6D\x97\xe3\xa0\x069>\x02\rJ8\x94\xfa4a\xbd\xb2\x7f\xac\x8d%\xfexbH8\xd1t]B\xc3\xd2$4\'\x12\x7f:\xd5%\xfd\xd4\x92\xfa7\x91a\t\x87\x93\x12\x8e\xe4\xb89)\xf9[\x9aV\xc2R>\xd3\x1a\x96\xeb\xb6\x86\xa3\xb2=2\xe5<\xd6X\xea\xc5\xb4&V\xd9?\x1d\xe9\x15D\xfe\xc0\xc6\x9cH8\x1c\x1b\x12\x8e4\xbd\x84\xd2\xae\x16hf\xa2\x9aCM\xd3\xac\x12\x1aSC\xc2\xd1\xd4TA\xba\xc9\x04\xfc\x06\xe0t\x08\xf3!\x1c\x81^\x10\x9ac\xb3\x84\x96l\x9b\xda\xb8\x82\x13\x89o\x8eA~\x84\x16\xe8\x07\xa0\x05\x9c$D\x7f\xd45\x03&4\x87\xe8\xa8\xf0a\x18G*-\xc4\xb2\xe0,\x9fi\xea\x15\xf7\xf8\xec\xc8\xb3<K7\x17\xda\xdc\x18\x1dm\xecr\x0b\xf4\xaf^\xbct\x8e\x16\xf9\x91\xbd\xe9u{v{\xabT\x08\x91\xe7|\xf8XcG\xa1\xa3\xd5\xdf\x01\x13\x17\x97NC@{\xebE\x9awW4W\\\x9bv:\xdd\x03\x8a(O\x85\xc8C\xb7\x10\xec\xfe\xfe\xa0\xeb:\xbb}]\xc2B\x9f\xf4z=\xbbGa(\xa39\x04\x87\xdfR\x9f\xd99\x13E\x9e(\xee\xfd}\xbd\xce\x8b\xcbMk\xe6\x97_\x9b\xdaI\x8a(\xfa\xfb\xf3G\xdf[@3)\x866\xee\xb4\xf4Sb\xc80\xcag\xc4q\xaa\xd0\x12\xa5\x1eE\x8c>\x04(\x91B\xe8j8\xc4\xd1Cr\x05\x97\xdb`\xdc\xb40\xa8\xea\xf6\xd6"\xbf[7\xd4\xdd\x8b<\x071iO=\xd0ap\x03\xf3x\xcb\xae\xd7[o\x1a\x06"\x8c\xd9\xc3I\xba\t\xbbQ\x9eQ\xc1z(\xfd[\xc0\xe9\xf6\x1a\x92(\rv&U=\xd5W\x83\xde\x9a:[\x84wy\xd4\x1a\xb2\xc3E\x97\x90\x03\x07\xd4\x0e\xea\x06\xd6\x97\x18\x84mT?k\x88<u\xd1|\x876\xfb\xb0\xf8\xe8\xb8\xb6\xdbO\x13\x86B8\xf8\x15\xa5\xd4\x97\x1f\xd4Ms\xd1^\xb6\xcf"&\x98\x82T\x1b{\'dw:;\xcd\xfe\x8aE\x8ft\xf5\xa3\xe2\xf1^P\x1e,\x82\xe7\x9eC[.\xbd8\xd67m}\x80\xb8\x8f\xaa\xa4\x94\x90\x90\x96h\xfc\xfe\x9e\x10\xdb\xbb\xbf?\xd1\x0f@\x16\xceh\x0e6!\x1d\x16:\xa4w\x7f\xdf\x05t\xf9}\xdc\xde4]\xbf\xa7\x9e\xe8N\x1b?\x92\x04\xe0\xb5\xbe\xb3\xe3\xe4\x80\x8a\xbd\xec\xd8\xa9p\x8e\xa1\xc3\xa6\x0e\xccH\x06\xe4\xb8\x1b\x00\x0cX27\xb4\x11\xe9\x1d\x93\'\x14r\xbb\x13v<H\xb1\xc7\xf4\x98t<P19v\x8f\xd9\xf1\x02Z\x9fo\xb7+\x11\xd2\r\xec\xc1_e\x1d\x10\xf6\x05\xe3\x02\xf4\xd3\xe9\xb4\x1d\xbe\x8b\xb3\xef{ \xa1D\xfa\xe0\x1a\x149\xa3j\x10\xc5\xf1L\xdf\xf4T\n\xba\xe9\xd5;\x876\x1a\xbds\xd6\xcd\xf7\xed\x9e\x83\xd7(\x1fh?\xf4?:\x1f\xa0\xf3c\xc5\xe1@\xdf\xda\xe4\xba\x1d\x83\xd0mv\xcd\xb3\rV\xd7\xfd\xac\xe0\xcb\xee\x87\x0f\xf4#\x0e|l\xfb9\xf5\x9fF\xfb\x1bl\x9f\x0e\xe7\x07\x9aM\xaf\xef\xd1(\xea\x8ae\xc8{\xd2\xb3\xe9\xfe\xfeV1\x98,s\xb6\xe8C?\xbb}\x05{\xe2\x90\xc8\xbd\xa1\x9d:n\xe9,^\x8d\xc2\x0b\x97C\xccI\x82\xae{\xac\x83\xd2\xbb\x7f\xddwz\xd7\xce\xa0T\xba\x07JF\x7f\xf0vXu:\xb4\x9f\xb3,\xa2\x1e\xc4\xa9A\xe9)O\xc8\xb1\xd7t\x96\\\x16\x99\xf3\xe1\xaf\xce\xc7\xff\x18\x04*A\x17\x90&_\x12\x10\xe2tP\x15@\xa7\\\xdcA=t\x18\xb84W\x0f\x03L\n\x100\xa14\xe3\xe1g6\xd3\x87\xd9\xad\x9dQ\x1f\xcb\xb0\x13\x91f3=\xbbU\x0e\xc28\x83MI\x13ao$\xddz\xc9\xc2`)f\x86\x91\xddn*\x1e5\x91\x9b\n\x91\xc6\xb3\xe9.\x1dV\x89\'4\n\x83d\x96#\xe9\xa6\x1f\xb8K\x15~\xfc5\xecw\x9f\xe5\xcdd<\x8dB_9\xf4,\x7f\xba\xd0\xed\xd6\xca`*$\xaa\xe7\xd6\xec,\xe5!*\x7fF] \x82\x08n#\x0fc\x04\x12\xdc\x84\xbeX\xcetM\xfbq\xf3\x8f\x98\xf9!U\xc0\x80k \xd7\xdbK\xb7c\x9a\x07ar"W4\xeb\x8fYl\xafX.B\xb0v\xb5V`XI\xbc\x00\x97\x11\xb3\x88-\xc4fC\x91\x91\x8a\xbf\xa3\xb5\x14\xccg^\x9aKG\x98\x15`\xb4<\n\x13\xd6\x92~\x87@\xd6\xaf\xb3CM\xf3\xda\x180\x14*\xedq\xdf7\x991\xddCY\xec\xa0@\xf1\xd1\x1e\xff\x01L,M[Y\xd8M\xfd;U\xf8*U3\xb5\xbf,m\xbc\xa0q\x18\xdd\xcdh\x1e\xd2H\xe54\xe1\'`\xbap\xb1A\xdcu\xa9\rPl\nZ\x00yoN\xeef\xe04)\xe4\xa4\xc3 \rj\x0b\xcf\xc0E\x14\x13\xfei\x1b\xe1\xafQ\xd4\x93J\xa7}\x93\xc5\xb0L\xea\xcdceoH\x07\x7f\xd8@^\x8e\xabYj7144\xeb\xb2\x16i8\xf16\xfd\xeb\x96\x8e6}\xc1\x91W=\xb7\x86\x1d\xb5\xcb\x00ZD3\xcef\xf5\xc7\x86\xc5\xa5\x9c7\xe5\xacn\x1a\xf9\x95\x0b\xa1Jf\t,\x80F\x1b\x88\xd4\xa2\xf1\x83q\xe3.#k"}\x8c/BU\xa2 \xe5LGQ\x1f(\x0c\xb1x\x850}\x14\xc1\xe7k?\xe4\xb09\xeffa"U\xe1\xa6\xb7\xf6~\x17\x04\x90\xab\xca\r\xa5^5e\xb4\xf5K\xf4\xb6\x19\xb47a\x92\x15b\xc7\x82a\xb2\x84i\xda\x9ee\xc8\xdf\xe1\xae\x97\xe9\xfa\x8e\x97I3\xbb\xd4\xbb\n\xf2\x14\x1cuv\xb8X,\xec\x12\xd5\x85(r\xb5\xa1-B{\xdf\xb5\x13\xc8\xd7\x1b:[\xa2{\xa8tF!r\xae\xd8\xd77\xc0\xa6\xbf\x88\x14\xda\xb6,\x9d\xadB\xd8\xb2\xcc\xaf;\xc7c\x9d\x9a\xee\xdf\xdbO\x12kX\xce\xfe\x00K.\xed0\xc0\xf3\xa9"\x95Q\xe1U\xf3\x80\x98;;\x89\xbb\x91\xb7nG\xb91\x1a\x1e{a\xc1\xb5\x89vlc\xa0mv\xec"#e+<\xc9\xf8\x14q\xd7\xddQ0c\xcc.\xbduV\x066@\xb3\xb7\xee\x8b\x8b\xf3<O9\x84cX\xf5\x03M\xbb\xf2\xcd\xa1\xd6\xf0\xdcY\x14hVD\xea\xe1"\x8aZ\xcb}\xcc\xa34E7*\x16\xedU\x15P\xc1\xd5g\xee\x84\xae\xe6P\xe5\xa4\x86a\xe1q\xba\x07\x1ex\x02\x873\x10\x172\x0b\xa3\xe2\xa4^\xae\xd4\xb1\xdd\xecL\xcd\xf6\x8a\x9c\xc3w\x96\x86p\x8c\xcf\xdbk\xb6\xb7\x91\xa4\x10\xb8*\xf8*\xb7\xca\xf8\x91\xad\xf2X\xcc\xc5\x15\xd7\x0e\xd6V\'(G\xee\xde\xd9"\xf5\n\xbe\xae\xd9K\xf3o\xc3_\x95\xe8\x9a\x8c\x078W\n\xa6\xdeG\xae\x1a\xa00\xf7\x0bO\x0cB/m\xee\x1a\xa2\xd4\xcf\xfa\xd0A@\x07\x91C\xf8\x12\xfc\xc6+\x84\x02]\t\x01\xbe\xe55\x08n&\xc5\r\xa4F\x1c\x82>F\x1e\xbde\xc0\xdc\x8fE\xe6\xd1WT~$K\x8a\x90q(\xbdi\xc4\x99\xed\x83l1\x1c=\xfa8CU\x1a+\x8e\xf2\xf0\xe2"Q:\x1d\xa5\xfe\xeeb\xb9\xa1t\x1b\xe2r\xb2\xde\xba\xa9\xc9\xbb=Y\xeb\xc2?{\xf3\x03\xa2\x1e\xe0\x9cP_\xd7\x14\x8bNg\xfb\xdd\xbf\xeeK\x1d\x03\xdb\xa63p\xaf\xdb8\xd8l\xa1m~\x80?xn\xdc*\xde\x0fWJ\x085g\x9c\x04.9S\xea6&\xd4\xb3\xd3$u\xe1\xd7U\xbc\x88r\x0e}\xfa\xd9?\x99\x07Q\r\xfe\x9d\x0e\\\xc0\xa6\xdb\xa1\xcaz\xe5\xf1j0\xb8\xb9iJ\xf9E\x0ej\r\x96\xd9\x93%TsyGP\x17j3r&%\xe6\xa7\x03\xfaM>1$\x8d\x16#l\xb6\xf9D\xe4\xecW\xe8\xfa\x1e\x17\xdc~5\x17/\x8d\x07m\x16&9{\r\xc3\xdfc\x81\x02\xdd\x817\x17n\xc5"\x88\x9c\x9f\xffY\xb2\xd0\xc9\xd9\xbf\xd3\xe2-\x0c}\x8f\x0b\x98\xba-Nr\xc3w\xf5\x02\xce\xfb\xd4\x13\x05l3\xf1\xe5o\xe8&\x8c\xdaRa{\xf0D\xf2\x89\xc9\xd9sl~\x8f\x85\x9f\xc3\xfe\xdd\xd1\x8c$O\xc9\xd93\x1cyH.7py\xa5\xb8\x1f\xdd\xc9\xb7] \x11\xd1\x00`\x9a!\x01\x1f\xc0N,@\xf1\x05HY\x9c)\x9d\x9c^\x17\xa9\x8d\xf3\x9d\x0eJ\xb7\x1b\x80+6\xfe)\x0bXE\x16\x01\x0e\xd6\x8c\xb5o\xf2\x8c&\xa5\xbf&\xcd"C\x8c+\xd0\xdf\x1e]4\xa3\x8bGFY\xd3G[2<\x10\x01\x0e\x17"\xcd\xefP\x04p\x84\xd2l\xa4a<:{!\xc7\xc3\xeb\x82)\xef\x99+uw\x8f\xda\xab\x03[\x06\x80\xe5,\xf1\x18\x7fH\xfc\x9a\xe64\xfe\x1f\x91W[B\x12\n\x08\xd2L8s\x88\xb7\xe5B\xe7SmO\xc9\xd4\xf3 \xee\n\xde\xb6\xe1\x1b\x96\xafB\x8f\xbdL!\xc2W\xce\x95\xc14`OG\xe4\x05\xeb\xe0\xadn\x98\x14\xccy\xdcR\xedU\x9d\xa7I\xc2n\xc1`\x8f[\xa6F\\V~!\xd3\xae\xf6-\x8c\xb2\x90\xafQ\x94\n\xd3c\x98\xa0 \xd4\xc0\x19,\x82\x93\x93C\xe00@d`\x8a\x82\xcc\'\xdb8\x15\x05\xb4jU\x9eX\x97\x9d\x86\xacw\x15H\xf9\xbb\xe3uu\xabkM\x15iL\'\x98\xe2\x1f\xcf\xb6{7\xdc\x98\x05\xb6\x97\xdc\xd8\x9a\xdf,\xa1@\x9ao\xc9\xab\xfbncj\xdcZFy\xe5\xddS\x92\xf4\xa4\xcc\xceD\x91\xb7\xdb\x0e)/\xbb\x89"S(\x08\x02\xaa*%\\f\xc8\x96(\xd5\r\x0bi\x0e\xaeQ\xa7\x03?\xdd\xde\xae@U~\x9fN\xa7\xed\xdafR\x97:\xed\xba\xba9~A\x92\xa4\x98\xa9\xe5\xf1k\x8a\x9a\x90\x962\xb0r&\xb0\xd6\x9b\x9cf\x0e!g?\x83\xf0\x1e\xab\x8c\xd2\xfe\xdd\x9a\x1dO\x08\n\x95i\xce\xa9\x8f\xb9\xc0\x82\xc6\xb04L\xaf\x10?"\xa6x,\x8a*\xcb8D#\xb2\r;\xcc\xab\xda\x80\x96+\xabJ\x13\xb0&\xec\xf0\xab\xedM\x8c\xf1\x8f\xe4\xac\x93\xb8<\x83x |9T\xa1\x96~\xd2^\xf1\xa9,\xbc\xab\xf9CP/p\x05\xcf&\x97o^\x9d\x98\xe6\xd8:\xd1\xc1\x00\xe5\xfbI\xe8\xfb,i(*<\xdc\x84%\xf12\xfa\nf9\xcc\xd3"\xf7\xd8\x1eJ\xcde\x99\xeda\xbb\xe1\xcd7\xb9\xb9\xe1\xf2\xc1\xf8v\xbb\x10\x9f\x93=\xff\x1dn\x0f\xc3x\xdeP\xb4\x86\xe1\xae[`\xd9\xd7\xd4v\xf5\xde\x18\xd7\xc7A\x05\xdd\xe4a1\x07NY\xe0\xddg\x9c\xe1=\x9eCR(\x94\xea\xa5@)\xd7\x88\xd9\xf8rS\x06(\xb5W\xc7\xf46bI \xed\xa7\x8d\xccZ\xa9\xd7 \x07\xf8\xa7C\xc6S\xb2\xf5\xa5z\xcd\xed\xe3\'\n$#\xf2V\x05\xbb\x1dXd7Bo\xfb\x9a\xc5=\\S\xa5j\x91<\xafu\xcd\x0b7\x0e\x05i\xc2};\x13\xfc_\xe7\xfd\xe5\x88\x86\x8a\xcf\x94\x88\xe2\xebZ\xe2\xb5\'\xbe\xc4]\xedE\xa1w\x05\xce\xb9\x90\xd7S}\xdc@P\x93I\xea\x9e\xec\x815{W\xccwt[aP]*`\x91\xe6\xda\njR?M\xfd\x08"\xd3\xd1w\xa4\xa8\xf7J\xb5F8\xda\xe1qi/\xe04;gg\xb75yo@\xfd\x15\xca\xe0\xcf\xab\x0b\xac2}\xd08\xb3\xeb\xf7\t\x07,\xb5\xd55E\xf4/\xb2P\xd82\xc1\xf7\xc8\x02\xa2)$\xae4\xe2_\xe1\xf1\xaa\x10a\xc4\x15\xf0\x81\xa0\x80\xc4\x89i\x93\x97Y\x06\xe5\x18\x08\x8c82\x98\xd4\xba\xc7X\x19\xb8\xabZ\xbd\xf2\xf3\xd1\xdd\xa8\xa3jP\xcd\xdb\xb4\x817\x1e\x1c\xf3\x1ei\'\xa7\xca\r\xb7a\xd4\x1c\xfeh\xc7p|\xac7\x1d^8\x91v\xf4\xabk\x06\xa0I1\x12}\x85\x0f$\x1b\xb1;V\xedI\xdd\xc2\xe3\x15l\xb6\xf6u[\x1d\xd5$_\xc8{-M\xd6U\x13\xf5\xb1bz\x83whX=)Y\xe1\x82W\x85\x82\x86U\xc1\xb0%\xe1e\xf6\xdf\xc5\xf7\x8f`\x0eHHy\xc8wm\xb5\xad\x90\x8b\x9d\x1aB\xd7&\x96\xa6\x8f\xcc\x89i\xe2\x83\x98\xa1\x19\xa6aT\xa7-99_\xa2\xf8\xc7\xf5\x13.}l\xd1.\x94I}|x&g\xff\xad\xe0\x03p\xcaq\xa7<B\xf3x%\xc2\x99\xc0\x9a\xc9O\xa1\x94M\x9eT\x9f\xce\xbb7\xd2\x97x\x188\xf3\xf9\xab\x17\xc9\xafo/\xce\xaf\xae\xf4_\x9f\xaf\xfex\xf3\x9f\xc1\xf3\xd1s\xfdi\xfc\xe2z|\xf9\xe3\xf0Y\xa5S\x06\xb1\xbdzlF\xe1J/ke\xb7l?\xb7N\xf0O+\xbd\x9ahN\xa8\x9b\xb2;[14}\xa2\x9c(\x0f\xc5\xcdR4\t(\x1e\xb4\xbc\xa2\xde\x1d\x18\x00\xca\xa7E\x08\xae)BY\xd1\xcb\xca\xee\x9b\xa4\xe0\x071/\t}\x99\xba\xab-\x91mwy]+}\xef\xb5\xbc\xef\xf9\xa9\xd3\\\xc5\xaae\xe9\xa3m\xec\xfd\x83osS\x1eB\xa9\x97\xbfG4\xd5\xdd\xe9{!y\xe0U\xf9\x01\xbd\xbf?p{\xe5]y\x85R\x1f6U\xd0\xf4\xf9\x9b7\xfa9\xa4\x11({\xf0z\xdc\x93\x9f\xbf\xa6>{\xe25x\x17\x11C0\xf3\xe4\xe1Y\xa5\x8e\xdf\x87\x08\t=\xf5\xd4u\xbb\x9a\x96v:n\xa7\xd3\xa5\x07\xceV\xae\xbe\x94\xe6\xfe\xde\xdd\xe9,e\xdd\xbe\x88@Y\xd5%D\xc5\xbf\x83\x92%\xbe\xbb<\xe9T\x8f.\x90\xa3\xabW\x17\xc8\xc6\xf2\xd5e\xf7\xed\xe7\xea\xe2\xb2\xb7\xf7\xb2\xf0\x95\xc3\xf3\xed\'\xee\x93\xbd\x13\x0bv\x86\x8f_7\xd4\x9f\x8a\xd7u\x1b\xa3\xf1\xf2\xa5\x0fv\xccC\x035\xe7y/\x87\x8a\x92U\x1a\xec\x92\x927\xe9\xd9T\xde\x1b\xb8\xad{\x00V\xeb\xf9\xa7\xbbK\xbf[\xae\xb0\xd7\xa7Y\xc6\x12\xff|\x19F~\x97\xf66\xaa\xd6\xdbT\xc2\xfa\xd1\xa7l\xfb\xd6\xe2\xaa\xb4yk\x01\xd2\x02X{H`o\xb1\x1doO7_wD\xe0\x90\xc7\xf8"$\xd5\x07nT\xbf"\xf5\xea\x8f\xfe"\xcc\xb9@\x14t\xb2-Y\xc3i^{\xdb\xfc\xfe~\xdd\xbc1\xce\xfb\xf3gE\x9c]\xdczL\x9e*\xb7\x02\xb0\xdeZ,\xf3\xf4Fa\x9b\xd6\x84\xf8\x86\x96\xf3\xc6?\xca\xa6|i\xea\x8bF\xde\x9d^\\D\xc4\x9d\xfaA\xb6\xdbz\x91\xb5\xdb\xaa\xeb\x1e\r\x00s0\x1f\xc0\xcf\xd5\x9f\xb7C\x1fZ\xfde\xd6g\xc9\xfc\xdd\x9b\xfe\xfb\xdf\x86\x7fdo>\x9f\xfc\xf4\xdc\xec\xbf\x1a\xc48\xce\xdd\xf9\x92\xa9\xfe \x17\xd8\xfa4\xf0\x11\xe8\x03\xd9\xfa\xecA\x0c\xc89~>=\x7fki\xe9\xf3\x95\xff\x82N\xdf\xbe4\xde\xcf/\x7f\xffC\xe7\xe3\x9f^\xdf\xfe\xfb\xf2\x05{\xb7Z\xfe~\xa4\xfe\xffM\xdd\xb3\xb7\xa6\x82\xea\xa5VH\x16{\xce\x9a\xc8i\xc8lM\xa0\x10H\xc8\x0cO\x9e*\xf1\xda\xdfrK\x92\x19\x96\xb8y\x94\xa6\xf1\t\x94\xd1*\xf1\x975\x82\xbf\xbc\x16\xcd7\x07D\x18]Du\xcf2\xe5H\xdcd\x0b\x18\x0c\xb9\x0b\xc4\x86\xa9\x92O4&\x10\xf4\xc8\'\x9e&YM\x11\xc5\xf5W\xcc\x03\x8eK\xf3B\x17\xf8\x91\x8b\xc5\x82z,\xc7\x12.\xaf+\x1b\\\xc9]\x8c\x83\x9c\xd3;\xf6\x19*\x1d\xe6\xc19F\x08\xa6\xa4\xb9X\xa6\x01\xd4QP\x00\xcd\x001\xf2\xae\xee\x00\xf3\x97?\x0bM3&\x87C\xcb\xde/\tqr9S\xa2p\xbaJ\xc3\\\xc1\x84\x0b\xdd)\xbfB)\xaab\x08h8\ry\x88\x04\x19li\x189\x973\xf2"\x80\xc3\xa9\x0c\x1aTqAo\xca\x17\xf1\x05z3\xc85\xf1\x17\x86\x84\xab\x14\x12\xbc\x82K\x18\x9eW\t\xe6OR\xdfY\xfcI\xe4\xc0\xc5r\xe7\x8a\xa2D\x1e\xd0r\xac_N\x8a\xcb|S2f\xa8T\xee\x86\xb8\xc2m\xc9\x97\xe1]\xa8\xfc\x7f\\0\x88\xa7\xbf\xd9\xc3\xda{\xa3\x92\x04MV\xaa;]\xe5\xa0m\xe8\xcb\xaeK+\xc2\xe2\xe0T_\x8d\xe6\x0b@\xfc\xf0\x11\x98y\xd0\xa7k\xf8\x01\x8e3\x06(\xd2+ XY\xcb\xc4\xba\xf8\xed\xf5\xbf\x8c\xf3k\xfd_\xcf\x9e\x16\x93\xc2\x1fO\xde~\xbe\xba\xfb\x1d\'\xf2\x91\xf7\xf6\xf5\xba\x8c%\xe5\xfbp+$m\xa3@\xcc\xfcf\xb3\xc3w\xf7(LB\xb1\xf5el\x9579w\xdd\xa6S\xe2U\xba\x04\xd4\xcd\xa6\x1d\xc7>5\x11\xe5\x13\xec\xbaV\xe36|,\xbc\xb7\x86!\x00\xdb\xf2U\xb0\xbe\x0f/\x8b\x12L\x8cx\x89\x8d\xff\'\xf0\x7f\x01\xa9\x9a\xd7%#(\x00\x00'
   |     padding   = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Now, I don't know about you, but I can't read this :) Let's use the helpers to help us out.

First we need to create a new Header table that is meaningful for headers received from the server. We set the various sizes to the values we defined in our settings.


In [114]:
srv_tblhdr = h2.HPackHdrTable(dynamic_table_max_size=max_hdr_tbl_sz, dynamic_table_cap_size=max_hdr_tbl_sz)

Let's now convert all received headers into their textual representation, and stuff the data frames into a buffer per stream.


In [115]:
# Structure used to store textual representation of the stream headers
stream_txt = {}
# Structure used to store data from each stream
stream_data = {}

# For each frame we previously received
for frame in stream.frames:
    # If this frame is a header
    if frame.type == h2.H2HeadersFrame.type_id:
        # Convert this header block into its textual representation.
        # For the sake of simplicity of this tutorial, we assume 
        # that the header block is not large enough to require a Continuation frame
        stream_txt[frame.stream_id] = srv_tblhdr.gen_txt_repr(frame)
    # If this frame is data
    if frame.type == h2.H2DataFrame.type_id:
        if frame.stream_id not in stream_data:
            stream_data[frame.stream_id] = []
        stream_data[frame.stream_id].append(frame)

Now, we can print the headers from the Favicon response.


In [116]:
print(stream_txt[3])


:status 200
vary: Accept-Encoding
content-encoding: gzip
content-type: image/x-icon
date: Thu, 08 Dec 2016 06:23:59 GMT
expires: Fri, 16 Dec 2016 06:23:59 GMT
last-modified: Thu, 08 Dec 2016 01:00:57 GMT
x-content-type-options: nosniff
server: sffe
content-length: 1494
x-xss-protection: 1; mode=block
cache-control: public, max-age=691200
age: 472252
alt-svc: quic=":443"; ma=2592000; v="35,34"

So, we received a 200 status code, meaning that we received the favicon. We also can see that the favicon is GZipped. Let's uncompress it and display it in this notebook.


In [117]:
import zlib
img = zlib.decompress(stream_data[3][0].data, 16+zlib.MAX_WBITS)
from IPython.core.display import HTML
HTML('<img src="data:image/x-icon;base64,{}" />'.format(img.encode('base64')))


Out[117]:

Let's now read the frontpage response.


In [118]:
print(stream_txt[1])


:status 200
date: Tue, 13 Dec 2016 17:34:51 GMT
expires: -1
cache-control: private, max-age=0
content-type: text/html; charset=ISO-8859-1
p3p: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
content-encoding: gzip
server: gws
content-length: 4420
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
set-cookie: NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly
alt-svc: quic=":443"; ma=2592000; v="35,34"

So, we received a status code 200, which means that we received a page. Let's "visualize it".


In [119]:
data = ''
for frgmt in stream_data[1]:
    data += frgmt.payload.data

HTML(zlib.decompress(data, 16+zlib.MAX_WBITS).decode('UTF-8', 'ignore'))


Out[119]:
Google


 

Recherche avanceOutils linguistiques

© 2016 - Confidentialit - Conditions

Throwing a query!

Let's now query Google! For this, we will build a new query without the helpers, to explore the low-level parts of the HTTP/2 Scapy module. First, we will get the cookie that we were given. For this, we will search for the set-cookie header that we received.


In [120]:
from io import BytesIO
sio = BytesIO(stream_txt[1])
cookie = [val[len('set-cookie: '):].strip() for val in sio if val.startswith('set-cookie: ')]
print(cookie)


['NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly']

Now, we build the query by hand. Let's create the Header frame, so that we can later stuff all the header "lines" in it. This is a new stream, and we already used the stream ids 1 and 3, so we will use the stream id 5, which is the next available. We will set the "End Stream" and "End Headers" flags. The End Stream flag means that they are no more frames (except header frames...) after this one in this stream. The End Headers flag means that there are no Continuation frames after this frame. Continuation frames can be used to add more headers than one could fit in previous H2HeaderFrame and Continuation frames...

Our frame will contain little headers and we set very large limits for this tutorial, so we will skip all the checks, but they should be done! The helpers does them, by the way.


In [121]:
hdrs_frm = h2.H2Frame(flags={'ES', 'EH'}, stream_id=5)/h2.H2HeadersFrame()

Then, we have to specify the pseudo headers. These headers are the equivalent of "GET / HTTP/1.1\nHost: www.google.fr" of old. For this, we specify that this is a GET query over HTTPS, along with the path, and the "authority", which is the new "Host:".The GET Method and the HTTPS scheme are part of the static HPack table, according to RFC7541. Let's get the index of these headers and put them into HPackIndexedHdr packets.


In [122]:
get_hdr_idx = tblhdr.get_idx_by_name_and_value(':method', 'GET')
get_hdr = h2.HPackIndexedHdr(index = get_hdr_idx)
get_hdr.show()
hdrs_frm.payload.hdrs.append(get_hdr)

https_hdr_idx = tblhdr.get_idx_by_name_and_value(':scheme', 'https')
https_hdr = h2.HPackIndexedHdr(index = https_hdr_idx)
https_hdr.show()
hdrs_frm.payload.hdrs.append(https_hdr)


###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 2

###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 7

For the path, we will use "/search?q=scapy". The path might be a sensitive value, since it may contain values that we might not want to leak via side-channel attacks (here the query topic). For this reason, we will specify the path using a HPackLitHdrFldWithoutIndexing, which means that we don't want indexing. We also need to set the never_index bit, so that if there are intermediaries between us and the HTTP server, they will not try to compress this header. Before setting this header, though, we have to choose whether we want to compress the string "/search?q=scapy" using Huffman encoding. Let's compress it and compare its wire-length with the uncompressed version.


In [123]:
z_str = h2.HPackZString('/search?q=scapy')
unz_str = h2.HPackLiteralString('/search?q=scapy')

print(len(str(z_str)), len(str(unz_str)))


(12, 15)

So the compressed version is smaller. Let's use it, since HTTP/2 is all about performances and compression.

":path" is the pseudo-header to define the query path. While we don't want to compress the value of the query path, the name can be compressed. As it happens, the ":path" header name is in the static header table. For this reason, we will search of its index, and then build the header.


In [124]:
path_hdr_idx = tblhdr.get_idx_by_name(':path')
path_str = h2.HPackHdrString(data = z_str)
path_hdr = h2.HPackLitHdrFldWithoutIndexing(
    never_index=1, 
    index=path_hdr_idx,
    hdr_value=path_str
)
path_hdr.show()
hdrs_frm.payload.hdrs.append(path_hdr)


###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
  magic     = 0
  never_index= Never Index
  index     = 4
  \hdr_value \
   |###[ HPack Header String ]### 
   |  type      = None
   |  len       = None
   |  data      = 'HPackZString(/search?q=scapy)'

The final missing pseudo-header is the new "Host" header, called ":authority". ":authority" is in the static header table, so we could use it. As it happens, we can do better because we previously indexed ":authority" with the value "www.google.fr". Let's search for the index of this entry in the dynamic table. With luck, the server header table size is large enough so that the value is still inside it.


In [125]:
host_hdr_idx = tblhdr.get_idx_by_name_and_value(':authority', dn)
assert(not isinstance(host_hdr_idx, type(None)))
print(host_hdr_idx)


66

So, the ":authority www.google.fr" header is still in the dynamic table. Let's add it to the header list.


In [126]:
host_hdr = h2.HPackIndexedHdr(index=host_hdr_idx)
host_hdr.show()
hdrs_frm.payload.hdrs.append(host_hdr)


###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 66

Now that we added all the pseudo-headers, let's add the "real" ones. The compression header is in the static table, so we just need to look it up.


In [127]:
z_hdr_idx = tblhdr.get_idx_by_name_and_value('accept-encoding', 'gzip, deflate')
z_hdr = h2.HPackIndexedHdr(index = z_hdr_idx)
z_hdr.show()
hdrs_frm.payload.hdrs.append(z_hdr)


###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 16

We also need to create the header for our new cookie. Cookie are sensitive. We don't want it to be indexed and we don't want any intermediate to index it. As such, we will use a HPackLitHdrFldWithoutIndexing and with the never_index bit set, here as well. The name "cookie", though, happens to be in the RFC7541 static headers table, so we will use it.


In [128]:
cookie_hdr_idx = tblhdr.get_idx_by_name('cookie')
cookie_str = h2.HPackHdrString(data = h2.HPackZString(cookie[0]))
cookie_hdr = h2.HPackLitHdrFldWithoutIndexing(
    never_index = 1,
    index = cookie_hdr_idx,
    hdr_value = cookie_str
)
cookie_hdr.show()
hdrs_frm.payload.hdrs.append(cookie_hdr)


###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
  magic     = 0
  never_index= Never Index
  index     = 32
  \hdr_value \
   |###[ HPack Header String ]### 
   |  type      = None
   |  len       = None
   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'

Also, we need to specify that we read French. Once more, the "accept-language" header is in the HPack static table, but "fr-Fr" might not be. Let's see if we did index that earlier.


In [129]:
acceptlang_hdr_idx = tblhdr.get_idx_by_name_and_value('accept-language', 'fr-FR')
print(acceptlang_hdr_idx)


65

Excellent! This is an entry of the dynamic table and we can use it in this session! Let's use it with an HPackIndexedHdr packet.


In [130]:
acceptlang_hdr = h2.HPackIndexedHdr(index = acceptlang_hdr_idx)
acceptlang_hdr.show()
hdrs_frm.payload.hdrs.append(acceptlang_hdr)


###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 65

Let's do the same thing quickly for the other headers.


In [131]:
accept_hdr_idx = tblhdr.get_idx_by_name_and_value('accept', 'text/html')
accept_hdr = h2.HPackIndexedHdr(index = accept_hdr_idx)
accept_hdr.show()
hdrs_frm.payload.hdrs.append(accept_hdr)
ua_hdr_idx = tblhdr.get_idx_by_name_and_value('user-agent', 'Scapy HTTP/2 Module')
ua_hdr = h2.HPackIndexedHdr(index = ua_hdr_idx)
ua_hdr.show()
hdrs_frm.payload.hdrs.append(ua_hdr)


###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 64

###[ HPack Indexed Header Field ]### 
  magic     = 1
  index     = 63

Now, we forget a piece in our previous queries regarding privacy: I want to add a Do Not Track header (https://tools.ietf.org/html/draft-mayer-do-not-track-00). Let's add this header into every subsequent queries. For this reason, I want to have it indexed. It is worth noting that the "DNT" header is not part of the HPack static table (how curious?). Finally, the value of this header is just 1. We might actually save a few bits by NOT compressing this value.


In [132]:
dnt_name_str = h2.HPackLiteralString('dnt')
dnt_val_str = h2.HPackLiteralString('1')
dnt_name = h2.HPackHdrString(data = dnt_name_str)
dnt_value = h2.HPackHdrString(data = dnt_val_str)
dnt_hdr = h2.HPackLitHdrFldWithIncrIndexing(
    hdr_name = dnt_name,
    hdr_value = dnt_value
)
dnt_hdr.show()
hdrs_frm.payload.hdrs.append(dnt_hdr)


###[ HPack Literal Header With Incremental Indexing ]### 
  magic     = 1
  index     = 0
  \hdr_name  \
   |###[ HPack Header String ]### 
   |  type      = None
   |  len       = None
   |  data      = 'HPackLiteralString(dnt)'
  \hdr_value \
   |###[ HPack Header String ]### 
   |  type      = None
   |  len       = None
   |  data      = 'HPackLiteralString(1)'

We are not done yet with the DNT header, though. We also need to insert it into the HPack Dynamic table, so that later lookups will find it.


In [133]:
tblhdr.register(dnt_hdr)

Phew! We made it! Let's see what we got so far.


In [134]:
hdrs_frm.show2()


###[ HTTP/2 Frame ]### 
  len       = 0xc5
  type      = HdrsFrm
  flags     = set(['End Stream (ES)', 'End Headers (EH)'])
  reserved  = 0L
  stream_id = 5L
###[ HTTP/2 Headers Frame ]### 
     \hdrs      \
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 2
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 7
      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
      |  magic     = 0
      |  never_index= Never Index
      |  index     = 4
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 12
      |   |  data      = 'HPackZString(/search?q=scapy)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 66
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 16
      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
      |  magic     = 0
      |  never_index= Never Index
      |  index     = 32
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 165
      |   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 65
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 64
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 63
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 0
      |  \hdr_name  \
      |   |###[ HPack Header String ]### 
      |   |  type      = Literal
      |   |  len       = 3
      |   |  data      = 'HPackLiteralString(dnt)'
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Literal
      |   |  len       = 1
      |   |  data      = 'HPackLiteralString(1)'

Oh! Just for comparison, we would have got about the same result using the helpers (modulo some safety checks that we did not do here...).


In [135]:
tblhdr.parse_txt_hdrs(
    ''':method GET
:scheme https
:path /search?q=scapy
:authority www.google.fr
accept-encoding: gzip, deflate
cookie: {}
accept-language: fr-FR
accept: text/html
user-agent: Scapy HTTP/2 Module
dnt: 1
'''.format(cookie),
    stream_id=5,
    max_frm_sz=srv_max_frm_sz,
    max_hdr_lst_sz=srv_max_hdr_lst_sz,
    is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie', ':path'],
    should_index=lambda x: x in [
            'x-requested-with', 
            'user-agent', 
            'accept-language',
            'host',
            'accept',
            ':authority',
            'dnt'
        ]
).show2()


###[ HTTP/2 Frame Sequence ]### 
  \frames    \
   |###[ HTTP/2 Frame ]### 
   |  len       = 0xdc
   |  type      = HdrsFrm
   |  flags     = set(['End Stream (ES)', 'End Headers (EH)'])
   |  reserved  = 0L
   |  stream_id = 5L
   |###[ HTTP/2 Headers Frame ]### 
   |     \hdrs      \
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 2
   |      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
   |      |  magic     = 0
   |      |  never_index= Never Index
   |      |  index     = 4
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 30
   |      |   |  data      = 'HPackZString(/?gfe_rd=cr&ei=2B1IWOeIDujt8weIvIH4BQ)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 67
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 7
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 16
   |      |###[ HPack Literal Header With Incremental Indexing ]### 
   |      |  magic     = 1
   |      |  index     = 17
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 4
   |      |   |  data      = 'HPackZString(en-US)'
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 66
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 65
   |      |###[ HPack Indexed Header Field ]### 
   |      |  magic     = 1
   |      |  index     = 63
   |      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### 
   |      |  magic     = 0
   |      |  never_index= Never Index
   |      |  index     = 32
   |      |  \hdr_value \
   |      |   |###[ HPack Header String ]### 
   |      |   |  type      = Compressed
   |      |   |  len       = 171
   |      |   |  data      = "HPackZString(['NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly'])"

Let's now send our query to Google and read the answer!


In [137]:
srv_global_window -= len(str(hdrs_frm))
assert(srv_global_window >= 0)
ss.send(hdrs_frm)

h2seq = h2.H2Seq()

new_frame = None
while isinstance(new_frame, type(None)) or 'ES' not in new_frame.flags:
    # As previously, if we receive a ping, we ackownledge it.
    if not isinstance(new_frame, type(None)) and new_frame.stream_id == 0:
        if new_frame.type == h2.H2PingFrame.type_id:
            new_frame.flags.add('A')
            srv_global_window -= len(str(new_frame))
            assert(srv_global_window >= 0)
            ss.send(new_frame)
            
        assert new_frame.type != h2.H2ResetFrame.type_id \
            and new_frame.type != h2.H2GoAwayFrame.type_id, \
            "Error received; something is not right!"
        
    try:
        new_frame = ss.recv()
        new_frame.show()
        if new_frame.stream_id == 5:
            h2seq.frames.append(new_frame)
    except:
        import time
        time.sleep(1)
        new_frame = None


###[ HTTP/2 Frame ]### 
  len       = 0x8
  type      = PingFrm
  flags     = set([])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Ping Frame ]### 
     opaque    = 2

###[ HTTP/2 Frame ]### 
  len       = 0x8
  type      = PingFrm
  flags     = set(['ACK (A)'])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Ping Frame ]### 
     opaque    = 2

###[ HTTP/2 Frame ]### 
  len       = 0x8
  type      = PingFrm
  flags     = set(['ACK (A)'])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Ping Frame ]### 
     opaque    = 2

###[ HTTP/2 Frame ]### 
  len       = 0x8
  type      = PingFrm
  flags     = set(['ACK (A)'])
  reserved  = 0L
  stream_id = 0L
###[ HTTP/2 Ping Frame ]### 
     opaque    = 2

###[ HTTP/2 Frame ]### 
  len       = 0x21
  type      = HdrsFrm
  flags     = set(['End Headers (EH)'])
  reserved  = 0L
  stream_id = 5L
###[ HTTP/2 Headers Frame ]### 
     \hdrs      \
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 8
      |###[ HPack Literal Header With Incremental Indexing ]### 
      |  magic     = 1
      |  index     = 33
      |  \hdr_value \
      |   |###[ HPack Header String ]### 
      |   |  type      = Compressed
      |   |  len       = 22
      |   |  data      = 'HPackZString(Tue, 13 Dec 2016 17:36:19 GMT)'
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 70
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 69
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 68
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 83
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 66
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 75
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 64
      |###[ HPack Indexed Header Field ]### 
      |  magic     = 1
      |  index     = 72

###[ HTTP/2 Frame ]### 
  len       = 0x1640
  type      = DataFrm
  flags     = set(['Padded (P)'])
  reserved  = 0L
  stream_id = 5L
###[ HTTP/2 Padded Data Frame ]### 
     padlen    = 40
     data      = '\x1f\x8b\x08\x00\x00\x00\x00\x00\x02\xff\xa4;\t\x97\x9bF\x93\x7f\x053/c\xe9\r\x928t!\r\xe3u\x92\x89\xe3\xc4I\x9c\xc4\xd9/\xdf\xfay\xf5\x1ah\x04\x19\x042\xb4\xe6\xb0F\xffw\xf7_lU7\xa0\xe6\x90\xaf5\xcf\xd3\xa2\xbb\xba\xba\xeb\xaej\xe0\xf2\x89\x9fz\xecaK\x95\x90m\xe2\xabK\xfc\xabD\x8cnr/\xddRGU\xf9\r\x028j\xc8\xd8v1\x1a\xe5^H7d\x98f\xeb\xd1\x9f\x94d^\xf8\x07\xcdw1\xcb_\x935U\x95\x98$kG\r2\x15pQ\xe2_]n(#\x8a\x97&\x8c&\xccQ\x19\xbdg#\\d\xa9x!\xc9r\xca\x9c\xbf\xde\xfc0\x98\xab\nb\x1f\xd0\xf7\xbb\xe8\xd6Q\xbf\x13\xe0\x837\xb0\xae\xdaD1\x8a6\xb0R>r3\x92\xf8Q\xb2\x1e\xad\xd3t\x1d\xd3\xf5\xc8\xb8/\x7f\xaer\x06c$\xf3W^\x1a\xa7\xd9\xca0\xe7\xfev\xb8M\xd6\x82\x9cm\x96n\x1d\x95\xa3\x01\xecq\x94\xdc(aF\x83\x0e\xd4\x00\xe9\xef<6\x8a\xbc\xb4\xc2\x1d\xa7\x80\x0b:T%\xa3\xb1\xa3\xe6a\x9a1o\xc7\x14\xe8J\x00\x1d\x8bXL\xafr\x8fl\x1f\x94\x81\xf2\x07\x05n\x01\x8f\xa8\xf2\x82O\xbf\x1c\x89\xf1\xcb\x9c=@s\xb6vI\xa6\x9d\xadw9\xcd\xf6\x01P8\xc8\xa3\x0ftaX\xdb\xfb\xe5\x96\xf8\xb8\x87\x01K\xb7\x0bc{\xaf<\x896[X\x8a$ly\xe0\xf3\xf6!\x8d\xd6![\x98\xe6\xf6\xfeP\xe0(\'\xb9)c\xe9f1\xab\xcfC\xee\x0fH\x1c\xad\x93E\x86S\x0f\xc3\xb5\x1bj\xf0\xc7\xdf\xbbi\xe6\xd3\xacZ,O\xe3\xc8W\xce<\xdb\x9f\x05\xc6R\xda\x19,\x85\x93\xca\xb5\xf5\xe56\xcd#\x16\xa5\xc9\x82\xb80i\xc7\xe8\x12q\x98c\xa0\xe0.\xf2Y\xb80t\xfd\x9b\xc3\x7fl\xa8\x1f\x11\x85\xc4\xf1\x1e\xa6\x1b\xf2\xd6\x97\x1b\x92\xad\xa3d\xc0w\xb4\x18N\xe8fyK3\x16y$.\xf6\n\x08\x0b\x8a\x838%l\x11\xd3\x80\x1d\x0e\x04\x11i\xf8w\xbc\xe7\x84\xf9\xd4K3\xc2\xf7\xb2K\x80\x18\x10,\x95\xa8\xafM\xe0z\xb18\xd3uO\x86\x80\xa1H\x91\xc7}\x7fN\xcdY\x03$\xa8\x81\xd8\xba.\x8f+\x97#!\xdaB\xc2CPEy\xdf%\xb5\x05\xa3\x97)\xd0\n\xa3w\x8b0\xf2}\x9a\x1c\x86\xab\x87\xd0\x97U\x81s\xfc\x9f\xbd\xe0\xa55\xa6\x9b\x83\x9b\xfa\x0f\x1a\xf35?\xba\xd5\x86[\x8d\x08\xe8\x80l\xa2\xf8aA\xb2\x88\xc4ZN\x92|\x00\xfa\x10\x05KF\xb6\x83\x10X\x1b#{\x07b\xd3\x190\xb3gN&Z\xf9_\xefs\xac{\xb1\xb9\x85~ J\xb4Y\x17J\x01\xb7M\xee/e\xf9\x95:\x87\x03\x0b\xec\xa8+2\xb0,\x0f"\r\xff\xe62a3\x1c\xba\xd3\x86\xef\x17\xc4c\xd1-\xc5_\xb7\x11(\x13\xf5\xb5!\x03\x05\xde\x95,6\x0c\x0f\x85\x17\xb7\xc4\x9c\xa4\t\x05\x8e\xfd\xb5\xf1\x15\xb2@;\xae\xe4zm|\xf7\xadu8\x0b\xd2\x94\x956\xb1\xd0\x959\x1a\n\xf6)d\x7f\x17\xc2J\x83|K<\nx\xee2\xb2=\x84\x96\xbc\xbfiI\xc9\x9d\xa05I\xb3\r\x89\x97%\x8b\x96\x15\xda\xc3YFs\x05&\xfbQ\xbe\x8d\xc9\xc3"JP\xf5\x0eC\x10d\xc1\'\x94t\xb7\xa1\x0c\xc0<t\x10\xeap\xadq\xb9\xa2o\xd4\x18qc\xe0G\xce\xfc}\x8b\x97\x85\x8cJ\x0b7\xad\xa3\x05!>}\xf9!\x85n\xe3\x90\xc6J\x1ci;\xfc\xbb\x8f\xa3\x1c\x90\xa0>\n\x96\x85\x86\x96\xc60\xa6\xc1X\x17=\x1b\xf7:\xf1\x95\xd0\xdc\xb7\xe9?\x0ci9\x05D\xad\xe8\x8a>\x9c\x81\xc9\x1e\xceP\xfa\t\xb9\x05\xcevJ\xa9\x1a\x07\xac\x85\x90fS\xbc>\xc6\xe3\xc3\x19\xcc(]\x13\xcc\x8a\xc96\xa7\x8b\xf2G\xcd\x94@\x9bd\xf7\xc6]\x04\xceV\x80\x87R\xbf\x07!\x84f\x87a\x92\xbaY\x97\n\x0cY~r\xbd\xc30W`V)e\xa1|^\xeeV=n\x9cz7\xa5i\x8cu\x14\x97\x08(+.P\xdc\n*\xc6\xa0T\x8a\x99d<\x858Q\xeb\x1a\xb3$C\x94=\xb3\xe7U\x12C\x17q\xc6\\_;#\xe0\xc9\xeb\xbb\xd9\x00\x83\x8eJx\xe0\x10rd\xb1\x8a\xb9\xa8&M\xfd]\xbd|\x03\xa6\xb8\xfa\xe9\x8d\xdfP\xbay9\t\xec\x94\xc93\xc5\x9a\x8d@V\xa3yh6I\xb6\x9a.d^\x8a2\x02/\x9e\xb0\xc5\x00\x97C\x8f\x90kC\xb7\xa6\x92n\x1a\xfb\x07\xbai\xf5\x15;(\x14^\xa8\xed&\xda\xd0\xca\xa1\x10\xdd\'\xee\xf2\xc44\xdc\xf8\xfd \x87Y0m\x15\xdf\xf9{\x11\x9a\x06f=\x9a\xb6\\w\x9ez\xa7\xd4\x1f\xc7\xca\xd5\xe7:^\x80\xfa\xf9w\'\xc1a\xac\x05~\xb3\xf6\xcb>:\x9b\x19\x86{8[\xdd~\xebv(\x07\xd5\xf1*\xed\x833\x15\x99X\x8f\xb4\xbc\xa7R\xa1\t\xcc6Ae\x95\t2{\xb5\xb1\\\xc9\xf5X&\xef\xa4/*\x1af\xb3\xd9\xb2\xe1+%k\x148~\xd4\xfd\x13\xe0\xe3N\xf0W\xe1iR\xea1\x86\x9b\xd6\xea\xcdM\xf4\xc9\t\x8b\x92\xae\xc3\xd9m\xfa\x11V\xd5\xf8\x80\x7f\x80\xb7\xbf>x\x12\x0fx\xa8\x93U\xb9\x16\xfb\n]\x9e\x14\x0bA\x02\xbao\xa8\xfd\x18w\x9c\x97[\x18\x14\xb9\x11\xa0(:\x84\xb6\xf2]-\x8f\x1e\x88\x0b\x9b\xd2\xa5K\xbc\x9bu\x96B^S\xf6\x06Ap\x0c)\x90\x89\x12\x8c\xa1\xcbFp\xe0\xded\xf5\x9a\xba`\xc6\xbf\xf3\xbf\x7f\xe5n-_x\x8e\xf9B\xcd\x12x\xa2\x80>\x12\xe75\x0c\x7fR\xe2\x93\x18s\x7f?\x88\x01\x08\x95\xf6\xf7\xda\x00\xa6|\xbb\xcdAZ\x93w\x97\x86\x85\xcc\xf8\x84\x86\xa2 *\xd1p\xed\x14\x7f\xc6|\x1b\xd9o^\xc9M\xf4\xe1<v\xe1(\x1f\xccapC\xee\x0b>[s\xbdt*\x95\xd5\xd28\x8e\xb6y\x94/\xdba\xa0i\xdau\xf5\x13\xdawk\xbb\xfbZ7\xdfl\x07\xaeB^\xd3\xe9\x14fma[\x1d\xc8\xb2\x9b\xca\xb2L\x03/\xb4\x87\xdf\xdc\xca\x05\xcc\xf0Bg\xf4KP\xa58\xb6\x05\x1d\xff\x1c;<\x9d;\t\xe8\x90\xe3\xc2p\xf5\xdd\xcf\xebc:;v-\x1b\x13\xb2\xdc]\x11)12\xf4\x9ak+ \xbc\xbd \xccj8>!\x1d\xd3\x9e4\xaa\x0b0\xe5\xd9\xbc\xde\'\xd8?\x99\x99\x9d\xf8\x15\x1e\xe1\x1aIW\x1b\x8ev\xc7?y\x9dc\xf9R\xda\x87o\xe3\xd5F\x06>\xa3\xb2%n[2\x08fr\xcd|1\x0b\xf3\x15\x8fk\xb5\xb89\xe6\x81s\xf5\xc3\xef~\x13>\xdf\xb9\x01\xc4\x9c\x95\xc7\xb2\xb8\x91\xc8/\xe5\xc8_$9\xc8D\x8bgR"#f$hVq<\xf1[y\xe1q)n\x06\xba"\x06\xdc\xee\x813\xd8f\xcev\x01\x94+\xb4\x89\x91\xfb\x85<\xbeQ\xe0\x8f_\xd4\x16\xe6D/z\x1bF?\xb0*\xe8\xd5\x07\xcbm\xe2\x9aT\x95^\x81a\xf5\xfb\xeb*a(\xcb\x9c\x06FQ\xd5\xac>\xec*\xb5\x9f\x8c\xf1\xc2\xc0\xb7\xf3j\x8c\xee\xf0\xb2b\xf2\xb7\r\xc0\xf62\x06\xf7\x13\xc4\xc3L\xba\xc3\x1do\x02(\xbd\xd3 k&\xfd\x85`\x0c\xbaQ\xa4\xac\x98\x0bw\xb8b\xaf\xa2&\x03L\xee\x15\xf3&%\xb8\xee\xea\xa7k\xda\xe8\'\xc3 \x86\x01\xef{\x85h\xc34\x8f!\x05\xa8g%\x9d\tA\xbd\xbc) \xbd]\x96\xc3\xed6\x8dxR{\xc6\x88\x9f+]\x90\xc5\x90HPj\xe3ErQ\x8c\xf3\x8c\xa4k\xfc\x93#E\xe1\xd6=\x18\xa2;\xad\x0f\xb5\xa8\xac*\xf6C\x0b\xd9\xd4\xf8\xee0t\xe3\xf5\xa9d\xc9\x03`\r\xff4\x8b@}:5\x8d\x8e\\PP\x8b3\xea\xa0\x87\xe1\xcd\xad\xac\x0c\\\xae7\xb7yC\x99\xb1O\xc3~\xd0\xabx\xdb\xcc\xb7\xeb\x1a\xc8\xa1Y3L\xf1\xca\xa9q\x12PV]\xc7\x92\x8c\xdb\xf2\\\x14Y\x87a\xd0\xe2\xed\xf6\'W\x0e\x06\xe1x\x985R\xf8e#\xeav\xd4ZXQ6L\x03\xa3\xe7k\xb7\x81j \xc8k\x9f\xcc\xb4ce3)\x01|/\x12\xaf*4\x81\x1c\x13L\xcb\x18ZX\xf6\xe2P\xbdD\x1d\xe0i\xe3\x02V\xf7\x0eh\x1fr\n)q\x8c\x9b\xf6)\xd3\x05\xee\xe4[\x88\xef\x8d\xe1\xa2w\x95B\x00k\x15\xd6\xc7\xa1\xd39\xfc\x11\xc4U\xa2}K\xb1:\xd9\xcb:\xb3Z\x17/\xac6\xb1(<V\xde\xc3\xdb\xc8\xa7\xa9\x9b\xdew\x86\x00t\xc1\x9f*\xaf\x0bk\xd3\xaa\x0e,\x9cvU7\xc7\x11Z\xe0{J\xb3<m\x88g\x9bd\xcf\x034\xe4w\x0f\xe9\x8e-\x82\xe8\x9e\xfa\xf2\xa9\x9eT\xf4\x97\xd9\x8bi6\x8f\x7fJ\xa0\x8aL\x0c\x9d\xca\xb8\xf8\xaf\x8b\xca\xae\x99\xa1\xac\x9e_\x9f:\x93\xa4\x01^\xcd"\xb3t\xda"\xfe\xa1\xe7\xe7I\x8dt\xaa\x81\xb5j\xf3\xf0\xa4,d\xa5\x18\x8e\x97P\x16\xc18\x89\xb2\xc3\x998>\xc0S\xe5\xeal\xac\x1e!\xb8\xadvF\xdec\xb1]\r\xe6\xdb\x95\x97\xb0\x1a\xc4T\xd4\xe8\xab\x84\x1c\xabU\xc1\x13N\xb0\xf0\t*O\xda\xd5Z}\'\x9c\xd5*\x88+\xb6\x1d]P\xc99\x9f\xe2U&!\x93i\xfb\x90\x99\'@\xbb\x98\xfd\xc9\x08\xabdb\xdbv\x93\xdbM\x9b\xef:I\xd9\xe4\xf1\xfa\xea\xa8\xddENo4\x165k\x99\x88d\xe0R\xdc\xe79\x92\x8e\x95iQ\x9d\xfer\xebk\xc3`\xb3m1w\xe8\xc5iNW.K\xf6\xcd\xea\xfc,\x88!\xd6jgn\xd0\n\xb9r"Yy)\xc3,+\x86\x86\xad\xd5R\xca\xa4\x99[\x9fm\xf22^,\x86\x96\x859\x84\x9cE,K\xaf\xca\r\x0b\x0b\xed\x7fw;Z\xe9\xac\xb5\xa3\xa6h\xf0\x94k\r,\xacl[\xc7y\xc7\x02\x1bxrR3\x84?Z6\x8eqZ\xc7\xbd\x13\xbbQ\x03Ox%\x0f\x12\x13N\xc1\x9e\xd7L\xae\xa3>\xedR\x94\xd5_\x7f\xbb\x1a\xe1\x8d\xec\xec\xeb\xd9\xcd\xb2\x9bK\x1f;\xf9n\x06?y\xcfm"J\xb9\xcb\xa7"\xe2\xaeK\t\xba\ty\x196\xad\xcf\x92\xacO\x98q\xdb\xa8kGP\xd2\xd9*w\'\x90/\xae~\n\xfdZ\x0e\xe5\xc6P\xc1|\xf6\xb6j\x07\xfb\xb2?\\\xe5\xf7\xde\'\x95\xafn\x91X\x96\x86>\n\x0b\x9aZ\xf5\xce3\x9d\xbc~\xc09\xb6\x9a\xbc\x04c\x00\x15\x82\x14\xaf<\xf2\xe7\tpuW\x84\xaa\xe2V\x8ai\xa2\xa7ij\xab\xbfw\xbe\x04\xce-\xbb\x13\xb4f\xb2xb+\x95\x80\xbb,\xee\x95\xcf\xfd`\xb1U\x9c\xaeS\xd3\xb4\xf1ia_I\xd2AF\xb7\x94t\x1c\xf6\x1d=\xcd\x17#S\x06\x86\x85\xcc\x18\xcc\xc7RM(=1\xc3\x9f5[<\x88\xc7H_\xb1\x92\x8d\x91p`\x8e\'\xd2JV\xb5\xd2t\xd2\xbd\x92\xc2\x9f-\xf1_\xa0K_C\xa2\xfee\x8b\xae\x92o\x9b\x19\xe7\xd1$y\xc4\xd91\xaeZB\xae,\x033\xdf\x92\x8c\xb6\x8fa;\xf3O\xc0~\x05$\xedOb\x01\x98\xdf\xf4}\xed\xdcM^\xa3}F\xa7\xf8$\x0fi\xd9\xb4\xcf\x1f\xd6\x19\x85\xbd\xd4\x0e\xfb\xaa\x94\x07\xff~\xbe{\xe3\x1eL_V\x0f\\\xb9\xb95}\x98\xfe\x11\x06\xb5\xbd0\x7f\xf0t\x14\x88.\xa8\x97L} *\xe7\xcd\xc0\xcf\xd2\xad\x9f\xde%\x83\rMv\x8dRG>G\xc1\xd3\xc8v\x9a\xeb{x\xb5\x9e\x07\xf0s\xaf\xae0Q=\x19\x13q\x8d\xecX\xda\x15\xfd>\xf0\'\x03\xf7\x0b<\x00\xfb\xf7\x8d\xdb|\xbc\xd5\xed\x9b\x01\xb0p\xa2\xed\xb3TJ)\xfa\xd9\xff\xba\xa9\x02\x90eY\xa7$$\x88/w\x8fO\xd8\x8dSQ\xa2,\xc9\x9b\xa8\xc1\xc8\x02w\xbd\xae\x9dD\x05\x06^\xcb\xd3!z\x82W\xa9\x063\x9e\xac\xa1\xed\xe1{\x11\xfb\x92#F\xfd\xa4r\xdcH\xb6\xc6\xe5\xa4\x13\x8f\xac\xec\xfa\xb9\xbc!=\x9d\x17N\xde\xec\xc8\xfd:\x82\xbc\xf0b\xd6\xac\\\x8e?\xc3*\xc5\xde\xfd\x18t\xcc\x03H\x0c\x82$2[\xb8(\xbb4\x8b\x9f\xee\xb5\xcd.\x8fb\xd8^u\xec\xa8WHK\xd9\xb70\xb96^\xcb\xeeZ\x83\xe8x\xc1\xe0\xfd \x0f\t\x18\x02\xd8gN\xd1\xbb\x19\xe2\xa4Y\xe1\x8f\xd2u\x8d_C\xa3\xbf\x84`\xee\xdeDl\xf0%S6\xe9\x87/\x80\x17\x04\xb12\xd3\x10*/\x979\x11Q\xa2d\xbb\xabN\x1d\xb2\xa2\x1e=\x82\x15]\x02x\xdf\xea\x04\xfc\xb2\x0c\xf8Ly\xb1\xea\xd0D\x17E\t?\xb5m\xa7_\xddo\x0b\xb42\x11L\x91\xa6\x05\xa9\xa8\x80\x1dG\x0c\xc7\x92sy\x07\xfb\x18\xb8\x19%7\x0b\xfew\xc0\x1f&\xc0\x8e\x17A\xea\xed\xf2\xd2\xc3\x17\x15;r\xca\xfd(-\xe5\xd6\xa6\xb5Te*\xaaH\x9e\xf1\xf8y\x9d\x91\xb2M\xce\xf0\xea\xb0\x80\x12\xab\xdd4 <\xf8\xad\x8cU\xe7\xbcv\xe5\r\x0exd]p\x95@:H6Xg\xc4\x8f\xc0\x8f\xf7\x80\x13\xda\xd9\xd8\xb7\xf5\x00\x92\x9d\xf1l>\xa3~\x7f\xd915\xff\xda\x99\xe9\xd7N,t\xbe\x9a&\xd0hH\xb2\x82(\xf8\x0f\xe1\xd2\xb4 K7\xbd\x02g_ci\xaf\xc4\xfb\x11\xc4_\xb7\xad\xcf\x9b\xd5r\x08\x96>\xb3\x8f\x11\x1d\'\xefr^\x8d\xb6\xe3\x86@VI{vLq\xe6\xc2\xf1\xb8\x1d1\xe7s%lMf\x84\xce\xbfF\xc2\xa7g~B\xc2\xa7\'\xfe\xff$\\\xe0\xfdZ\twl\xab\x8c\xa5|\xe4\x0bE_\xa1k\x89\xde\x0c&\xae;\xe3\x82\x93\x9dF-\x13<.U\x99=\xe4\xba\x16\xafu\xa4A\x91\x06/D3\xb8?\xe5?\x8b\x1c\xc3\xa7\x01\xd9\xc5\xacp\xa7\x93.w\xdav)\xe0C?\xea+9\x1de=\xf4EA\xc6\xfa\xf28f\xf5?;JZ\xb2$k\xcc\xfd\x8a\xe4\xbeFo\xeeF^\xbaoc\xe9L\xae\xcb\xc2d"W\xff<\xe5l\x9cB\x15+L:\xde\xd6;\xbe\xec\xe7e\xd1\x96]\xf5\x82]\xe2\xe1\xfez\xfd\xfd\x1dx\xf9\xf4n(^\x1bu\xf67\xd7/\x17Oo>\xfc\xf0\xfb\xbf~\x1d\x84\xd7\xde\xcf\x0fd\xfc\xf3/\xeb\xff|\xfeT\xbb\xb9\xfe\xfb5\x8c\x99\xfalnj\xb3\x89>3\r\xcd\xb0&\x86\xad[\x9a5\xd3uslic\xdd\xb4\xe7\xc6\x04Z\xcb\x9c\xcef\xd8\xceu\xc3\x84vl\xccm\x1b[kl\xf3\xfb\xc9|l`;\xb7\xc6\x087\x99\xcc\xc68ojN\xa7Sl\'\xe0\xf9\xb0\x9d\xcd\xa7:\xb6\xf3\xc9\xa4h\xc5\xbd=\xb7\xe6\xa2\xe5xf\xe6T7y;\x9b!\x9e\x99\x058y;3\xe7\xbc\xb5\'\xb8>\xacb\xcfxkO\xf8\xf8T\xb7Ek[\x86h\xf9>g\xf31\xc7\x0f\xedd\xca\xdb\xd9t\x8c\xadm\xe8\xfc\xde\x1e\x8f\xf9z6\xec\x98\xb7\xf3\x99\x18\x9f\xdb\xa2\xb5\'\xd8\x02\xf9S\\on\xe8V\xd9"\xfe\xb9\xa9s\xbcs\xd3\x98Nxk\x1a|\xdc\x9c\x1a|\x1c\xd8\xc2\xc7\xc7\xc0Q\xdeZ\x9c\xbfs\xd87\xef\x9f\xe8\x13\x0e?\x99\x9a\xbc\x9d\xea\x86\xc1[\xd3\xd6y;\x9fr\xf8\xd9\xcc\xe0\xf3g6\x97\xc7\x1c\x11\x8a\xd6\x9a\x8av\xcc\xc7\xe7S\x81\xdf\xd6u\xd1\n:\xe7\xb6%\xf6m[\xe3\xe2~,\xee\xc7s\xbe\x9e=\xe1|\x9a\xdbS[\x8c\xcf\xc6F\xd1\xda\xa2\x9d >@;\x9f\xf2\xd6\x9a\x98\xbc\x1d\xeb\x86h\xb9\xdcm\xe0\xd4T\x9b[\xe0ml\xd1\x9a3\x8b\xb7\x10\x025\xa0v:\x05\xbd\x82vf\xc1\xba\xd8\x8e\x81O\xd8\xce\'s\xd1\xda\xfc~\xaeO\x8av\xca\xe1\xe7\x13\xe0\x07\xb66\xf0\x0bZ\x1b0\xf1\x16\xf5\xd5\xd0MXpn\xa1"\xc3\x0f\xd3|\xaa\x81i\x85\xf8\x8e\xf2B\xd7nr/_<\xf5l\xcf6\xe6\x81\xbe2\xc7O\x0fKa\'\xc3\x9b\x1f_9O\x83\xec\xe9\xf2\xd0\xef\xf5\x97\xb2=\x15\x00\xb1\xe7\xbc}WB\xc7\x91\xa3\x97\xbf\xd7\x94]\xbft\xaa\t\xa4\xbf\x0f\xd2\xacwK2\xc5]\x92\xf3\xf3\xde\x13\x82 \xcf\x19\xcb"\x17\xca\x8e\xc7\xc7\'=\xd7\xa9\xf7\xf5T\x1a\xf9j\x1f\x02U\x9f\xc0\x90\xf0\x1e\xbf\xa6>\x14\xa4\x94\xed\xb2Dq\x1f\x1f\xcb}^\xbf<H+\xbf:\xb5\xb4\x93\xec\xe2\xf8\xf3\xd7\x8f?\xb5\x81jQ|_>w$\xfe\x08\x08\xfe\x96~\xbeP\x1d\xa7\xf0?\xe0\xebxA:\xdcf)\x83j1\xae0l\xe2\xf6t\x05\xb7[A\xdcI\x10Ds\xfb{\x96=\xec\xab\xd9\xbd\xeb,\x032I_{b\xc0\xe0\x01\xd6\xf1\xc2\x9e\xd7\xdf\x1f*\x04,\xda\xd0\xf6"\xbd\x84\xde)\xdf\x13F\xfbH\xfd\x1b\x80\xe9\xf5\xab)P/\xd6\x16\xd5<\xcd\xd7\xd6\xfd=q\x8e\x00\x7fe\xb14\xb4\x8c\x82\x9e\xaa>q\x80\xed\xc0n@\xfd\x12s\x80%\xb2\x9fV\x93<-\xa8~GK\xfa6x\xe7\xb8Kw\x08\xe1\x18\x89p\xf0\x17\xd4+>\xffA X3y\xdb>\x8d)\xa3\n\xce:,k~\xfd\xfc\xbcv;\xbc\xa5qG\xd70\xdeu\xf7\x02\xf3`\x13y\xe69DR\xe9\xe0\xc28\xc8\xfc\x00r;Y"(TU\x89\xb4\xfc\xf1QU\x97\xde\xe3\xe3\xc0x\x02\xb4\xe4\xfc\x03\x8d\x9ezN#G\xed?>\xf6\x00\x9c\xff\xbe\x90\x8d\xa6\xe7\xf7\xb5\x81\xe1\xc8\xf01\x9f\x00Z\xeb;5%\x07P\xec\xa5\x17N\x01s\x81\x89;q`Eu\xa4^\xf4\xd6\xd0\xaei\xb22\xf5\xb1\xda\xbfP\x9f\x11\xf6\xb0u\xa2s\x8f\x01$\xb9P\xcf=`\xb1z\xe1^\xd0\x8b\x00\xee>\xdc\x1fw\xc2\xb8\x1a,G\xff->3\x89\x86\x8c\xe6\x0c\xf8s~.+|\x0fWoj\xa0JT\xae\x83{`\xe4\x82h\xebx\x83/@\xf75\x02\xbc\xe9\x97\x96C*\x8e>8\xfb\xea\xf7}C\xc1K\x90\xb7d\x18\xf9\xef\x9c\xb7\xd0\xf9\xae\xc0\xf0\xc48\xca\xe4\xbd\xec\x83Pm\xea\xe29:\xab\xf7\xc3\xed.\x0f{o\xdf\x92w8\xf0N\xd6s\xe2?\x8f\x9b\x06\xd6\x9c\x87\xeb\xc3\x9cC\x7f\x08Y^\xdcca\x94\xd7\xbd\xa2p2o\xdb~\xd2\xab\x18\x07\x19\xe2\rx\x16XO\xd5T\xdf\x8b\xd5\xfe\xa1\xda<\xdc:O\x0c\xe9\xce\xab\xb9\xb1c\xff3\xd2\xeb/\\\xb1+\x02;*\xa1\x14\x0f\x96\x04\x03|r\x04\x95\xa79O\xf0\x8c@\xf8B\x02z\x02*\x16F\x01\xeb\xa1\x83\x03\xa3?\x14F\x01\x85\xf7\xf5-\xb8\xbaWQ\xce(\x98\xe4\xb3\x9e\x0f\xd5\xfc\x06zZC=\xf5\xfb\xdf~)>\x10z\x054Q\xa0\xca\x03\xe9\xf7\xb5\x13\xb8J\xd29P\x7fQB1F\xbc\x90\x03V\xa6)\xf5\xf5T\xe1\x0f`Z\xbf\xc1}\xc8\xf9D\xb2W$}\x8a\xf8:\x8a\x7f\xd9\xf4\x0f\xb9%\xa2W\xbdj\xc2]5\xc5F\x8e\xac\x0e\x8e\x11\x03\xbc_\xe1\xf7\xafc\x8a\x1c\xd0|\x1eC4\n\xa1\x8e^\xae\x87^\x18\xc5>\xc6\x84|\x18\xd3d\xcd\xc2%\xbd\xb8\x10\x18CG\x1e~K\xdf-\x07\xc6eOU\xd4\x8bp\xe8\xc5$\xcf\x7f%\x1bz\x01\xf7\xfd!?\x82\xf8\r\x1c\xa7\xd2<\xe5U\n\xbb\x0f\xfb\x07\x15\xcb\x15\x08%\xfe\x90\xa7\xb9\xc3"\x8f\x06\xe9\xd4;\xd0\x07\x1d\xddUO\r\xb7d\x03\xbav~K\xd1\xda\x83F\x8c\xf3\t#\x03\x18\xc28\xb7ha\xe2K\x1e4\xd0iU\xa0\x04DPUl\xd4w\x9a\xe7\xa0\x04\x96\xee[\xfd]\x04\x8a\x07\x11\xd4\x1b\xd2{\xea\xfd\xc9\xf9\xfb\xf8(\xdf\xf5Td\x08\xb8\x1a\x00\xeeW*x\x03\xdeV0\rH\xbc9j#\xa8c9\xf0\xf8x\x9bB-\xa8;\x8eC\x9eyoo\xde=\xf3\x1cl\x16\xa2\x01\xdf\xb1\xe0-9\xa9\x16#\xf1\xe1\x1b>wS8\xd7\x1d5\xcc\xb3\xad\xaa\xb8k^\x9a8*\x1e\x97\xc3?U\x11\x95\x86\xa8D\x1cU/;x\xc5\xc1\xef\xa1\x06\x11]xwu\xe9G\xb7J\x04.\xd9%\xd9\xd5%~\xc3\x00\xcb\x14k\xac]\xe3\xaa\xfa\xda\xecr\xe4^)\x97\xe48T|\xe0&\x92\x83\xd1\xe8\xee\xae\nDA6\x12^\xffY\x08\xce(;g\xee\xc6\x89r/<\xcf\xd3]\xe6Q\']\x9f3\xe2B6\xa1^\xf1\xb8\x9a_\x8e\xc8Gqo\xc86\x97\x90\xe3m\x89\x1a\xf1\xc4\xea\xd5/\xd0\xf5),\xa8\x0c%\x16/\xdd\x8cd\x14s\xf5\xea5\x0c\x7f\n\x05\x12\x89\xef\xad\xec\\\x81B\xbc\xda\x90?[\xc7\xce\x0f\x7f\x08L\x86z\xf5\xeft\xf7\x06 >\x85\x0c\xf2\n\x99\xaa\xe4.\x0f\xb7\xf2\x9e\x12\xf5\xea\xb9\xc7vP\x87\xb3\xff\xfd\x0c\x16E\xb1L\x1c\xde\x8f\x9eq<\x1b\xf5\xea\x05\xde~\n\x85\x9fA\xf1[c\x10\x9f\x9e\xaaW\xdf\xe3H{:73\xe1\xa6\x9a\x8f)\xd4\x8fjG\x94\xb0x\x04m\xba\xc5\t\xf9\x08\xd4p\x07\xfc\xdf\x01\x95\xbb+\xe5<#\xefw\xe9\x12\xd7\xbb\x1c\t\x8d\x1c\x81\x96\x1eU\x15S~E(4\x16\xe9\xa5\xda\xe2cE\xa1\xcaI\xb5\xc9\x08}&\xf4\xcb\xa3A5\x1at\x8c\xd2\xaa\x8fH4\xb4H\x00\x03ei\xf6\x80$\x80>\x08\xb1\xa9\x15\xe2\xf1\xd5\x8f|<z\xbf\xa3\xca\xbf\xa8\xcby\xf7\x88\xdc+?\x0b\xddBC\xc1%{4oO~M2\xb2\xf9\x1f\x96\x15\x96\xc1\'2|!\x9e9+0_\xb1\xd1\xd5Lo0\x99x^\xbaKX.\xcb\xf0O\x9a\xddF\x1e}\x95\x82\xc1\x17\xca\xb5\x85e@\x9e\x0e\xcbv\xf4\x1c\x9f\xf5D\xc9\x8e:\x1f\xb3\xe3o\xac\x1f\xde\x7fc}\xcf\xbf@\x95\xf7\t13\xa1\xf7 \xc2nY\x95\x80a\xa1)\xe2q\xcd\xc7 \x8a\xe7\x05%H\xf1\xb5\x12x\xfcM\x02\xbe\x8e\x9fwq\x1f\xe6\xd18.\x8e\xd6\xab\xfb\xe2MH~_hf\xebh\x07?\xa6\x85-\xb2\xb0P\x1f\xd5\xb0L\x0c\xab,\x94;\'3\xab\xddi\xce\xe6\xc7\xce\xe2\xc7\x88#\xc3\xff~\xe9\x96\xf9S8U\xb9\xe5\xa7g`\x1b\xe9\xf6\xe8c\xd5\xf2\xe1\x1a~\xc9l\x1c\x15ltG\xdd\xd2\xf4\xab\xbd\x7f\xd5\xf3\xf1\xb1\xf4F\xb8u<;\xb6[\x8f\xc7\xd5j?\x10\x10\xf0\xf3aG}\x91Bh(\xbe)V~L7\xc8,.V\xdc\xaa\x90\xc7\x88\xf9\x1d\xb4B\x04B\x83\x01\x16\xd5\xe9\xae\xa4\xd0\xf88\x01\xf0\xe2\xdb\xec\xe5p\xd7\xcb\xae\x0b}\xd9x\xc2\x02I\x05\xcfk\x80[B\'\x05\x05,\xc7\x90GY\x98\xc2\xcd\x8b\xeb7\xaa\x82\xaf\xb99\xea:WK\xf5\xf9r\xb5\x91\x0f\xebt\xf93\xcb\xa6\x1a\xf9\xb2\x16\xab\xfc\xa1`\xb5\xec\'\xd6j\xea\x8dx\x00\xa7V*8\x99\x1c\x99)\x0e\xc1\x0b=:\xa5\xda\xc5G\x9a\x00\xc5\x9f\xd4Ix9"\xb0p\xb5\xb0\xdfB\xdeUd\x07\x9d\xc33J\xf0\x16[\xacI\x1d5\xc5<\x02\xb9\x9b\xbba\x8a\xf37\xe4^d2 c}</\x99\xfc^\x95\x12U\xb5\xa6$\xdc2F\x9c\x13\r\xe5\xa9\xb1\xcc\xcf\xd5\x06\x0b]\x17z \xa9ci"uV$\xc8\x9b\x16\x9bpY\xf2\xa2\xdcG\xbes7\x11\xee\x84\xbb\xf3RK]\xfee\xfdW\x9b\xd5\xc0\xc2Gw\x03\xa3\xf6\xb5\x85\xf4f\x8d\xd5\xb2\xad*\x82\x8c\x04!\x15\x07N\xf1\x07\xcd\xe1\x84u]\x9d\'n\xbe]\x1eg\xfd\x1f\x00\x00\x00\xff\xff'
     padding   = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

###[ HTTP/2 Frame ]### 
  len       = 0x15b2
  type      = DataFrm
  flags     = set(['Padded (P)'])
  reserved  = 0L
  stream_id = 5L
###[ HTTP/2 Padded Data Frame ]### 
     padlen    = 189
     data      = '\xdc=\xdbv\xea\xc6\x92\xef\xf3\x15\n\x99\xec\x93\xacc\xee\x17\x03\xfb\xe0,\x19\x9b\x8b16\x18\xe3[\x92\xe5%\xa4\x06\xb5\x11\x92\xac\x0b\x18\x92\xfcK\xde\xe7\x13\xe6e^\xe7/\xce\xdb,\xff\xc5TuK a\xecmc\xd8;{\xaf\xec`]Z\xdd]\xd5\xd5U\xd5U\xddU@7/\xb27%D&\x9f\xda\x9e\x17\xd8\x85\x17y2\xcb\x17\xf3:4H\x8e\x1e\xbe\xc7]v\x02nT\x13p\xfb\x97\x80\xfb\xb8"{\xe7\x06J\xf3%F\x1f\xc1\x02\x91\xbd\xb9\x12\xe1}z\x04\x1f\xf8\xac\xd0S\x1c\xefK\x8cX?H#\xf3#%<\xa0\x03\xbb1\xad\x91R\xa2c\xddfw\x9eB\xa9\xe9#~?\xd74\xd9K\xa9t\xc5.p\xcd\x90\x90\xd4n\xe3p\x02\xaay\xa1w\x90\x1a\xd7\xda\xa2zQN\x9d\x19\x8dZ\xfb\xa8*\x8aF\xfbV\xec\xd6\xf7\xdbA\x8d\xf4\xcbt\x7fL\x95u{\x0f\xd4rA\x95G\xe3\x0b\xf6\x1e\x94\xd8u{?YVw\xbf\x0c\x04\xb6j\x98k\x82P\x16#{\x1d\xf8\xdc\x04\x1e\xbf&\x00/\xadx\x82@\xb9\xa3R\xf2)tkt\xb9\xbdX;}\x19|\xf7\x86\xebRL\x19\xe8\xfd\x98\x8e\xad\xd0l]\xc0\xf0~\x0e\xb8\x99z8\xd3fKwf\xa6\xb8\xa3=\x13\x06:\xe2\xdfQ@\xac+s\x81\xab\x10{\x88;\x8f<\x15g\x1e\xf1\xe3v\xdf\xdd\xc1\x1f\xef8\x92\x7f\xed\xc7\xb6\x90\xf0\x9e\xbf\xe1\x97\xcf\x9d\x9d\x1a\xee\xf7BG\xa0\xd8\x81\xd5\xe5}\xed\xaf?\xd4\xbapVz\xca\x0cS*\xf9\x16\xdb\x15:0h\xbd\xa9\xb9\xf9\x02d\x04\x8f\xf5#\x9c\xf2U (\x9a)X\x07j~\x89\x11Q<\x1d\xaf\xa7\xb0\x98:\xc1\x97N\xcfa\xcf\x16\xf7\x86\xed\xe9\xb4\xd6-\x97>\x82Fl\xc1\x94\xa6P1~\x1b*\xeb\xf2\xb2\xb2\x83\x07/`\xc9dM+gAB\xbf\x7f/\x81;\x1e}\xdb%h\xa38o\x83=\x95\xadR\xf8\xc1\xdbH\xdf\x9ct\xeb\x07\xc0,[\x00\xda_E\xa1bI\xb0\x88\xe43\x00\xe1\x8c\xbb\xda\x9e\x0f\xf1\xdb0\xe6\x10\x8e3\x8c\xb7\xe4\x92\x17\xd0\x06\x1f`\x99\xdb$\x8b\xc9\xb4\r\xa4iV\xd1o\x81=\xd3\xac\x12\xbb\xf7n\xd7E\x18\x08v\x81\xe8B\x1fP\xf6\x7f\x12\xb5\xdf\x83\xb4{\x05\xb1\x86\x1e\'\x81\xea\n\xed\xf7\x1f\xd1\xbeJ\x9eG\x1a~\xa0n\t]Pwq\x1d\x9d\xc7\xc7\x8c\xd04\xa8n\x0b\xca?\\\x9d\x08*q\xad\x00==\x07\x8b\xb2EX\xd6\xd1\x80\x96a!B*\xf3\x17\x83\xc5\xfe40\x93-\x023\xd9\xd4\xc0\xd8d$Q\xfd\x15C3\xda"4\xa3\xcd@#\x8c\x0c\xfa\x8aq\x99n\x11\x92\xe9\x86 \x91\xf4w1_\x1a\x14W\xd6#\xda\x93%\xe7%\xe6Ko\x93\xdb\xe2\xba\xb4\x98|\x07R\x9a\x86#\xfc\x1b\x06\xd6Y\x85\x0f~\x15Z_\xae\xb6\x91-\xceC\x86W\x99\xb6\xa7\r\x04N\x13F\xf6\x0e\xf51\xb5\x0c]H\x16\x12\x1f\xbeO\xe6\x12\x1f\x13\x89\xc4_\x01$\x06\xcd\xc6\xf8e\xa0\x1d\xff\xccddo\xa9\xd8\\\xf7\xf2\x1fP\xfe\xa1\xa1\x85\xfa3@#^\xda\xbf\xe3\x82\xd0\x1b\x08\xd7\xd2`\x14\x02fc\x9b\xc8\n\x19\xb3\xf8\x86\xa6e\xdc\x11\xd9\xb1\xe3l\x90\xe2>\xba\xbb\xafGwe0\xe86E\x91/\x03\xecAI\xac\xb4\xef\xca\'\xb5\xda0}x\x9d\xbfI\xb6\xba\xbb\x07w\xb2\xa8\r\xab\x9939}ag\x0b\xd8\xd3\xde^\x07\xdbcN\x9c\xa8\xd0!\xf2\x01\xef\x8fg\xe1K\x87Q\x1d\xc6\xfcp\xbcl\x19\xf3\xcf\xba2U\x17\x0f\xbd\xef=\x07%4l\xfb\r\xc7\xff\x15geC+\x0c}\xbf\x176l\x857\xd6E\x04C\x975*\x0fK\x9e\xeb.\x86\x8e;\xcf?\x16a[\x1a\xa3\xe4\xc1\x94t\x05\xfd\x82}I\xb3\x89\xf7T\x95l\xd30]P\xb5\xd1\xce\x1d\xc1\xb8 \xccA\xc9\x8cq\xbe\xbf\x10n>\x85\xee\xdd\xfdD\xbdr.\x8aKV\xa5\xdb\xd3D\xc0\xce\xb3\xbc\xe8\x08\x06\xf4\xf2\r\xe6\x91e\xafhD\xb0\x0c\x86Tv\xbd\xe8_\x14\xe77N\x97\xc5\xf4\xc7\xa3&\xa1\x85\xd8\r\xdc\xaf&7\xd2\x93%Y\xf5\xfd8\xe8*\xf1\xc2\\2w@\xc8\x9e\xcf\n\x16E\x9bVNT\xad\x962\x87G\xc5W\x11\xed\x0f\xa9lj\x9f]\xfe\x90\xca\xa9\x1a\xd4\xd4\xb7\xe0Jv\xb0NM\x1f\xaeA\xd4uqp\xf5\x94\xa8\x0fm9g4\xaeN\xf7{\xb4\xad\xe8\xd3q\xf2x&f\xf6\xc9A\xe20;\xc0\xc9/0\x08V\x89\x91\x17\x11\xe61\xca\x10s\xbc/1#\x1aQ\x8a/\xc3\xfe\xcf\x05s\x05\x9e\\Z\x87_\xd6&\x83\xeb&\x12\x14WHm:\xa2\x9aDCzJ\x90[\x06~CfMgiZS[\x90\x04\xd3\x98\xc0\xb2\r\x04\x0f;`\xc47\xea\xc2"H\x1e\x12G\x18I:5]\x8d9\xe9\x04\x00k`I\xa3\x98Pw\xd8\x97,\x98\x9c!\xf4\x01d"\x18\x96\xf0\xaf\x9e\xb5\xf7\x1f\xe8\xd4S\xfc\xefm\xc1\xe8C\x0b\x13\nOtw\xd4#\x16>\xf0\xb7\x80\xd9;\xa0\x9f\xe8\x8a\xe0\xa8d\x04s\x16\xffBQ\x8b\xec\xc0\x18\x99\x0eha\xdc\x8e\x19\x8b\xc5\xfcI\x83\xbe\xa2\x00\'0lmM\x1e\xaa\x18\xf2:|41\xa8\xd7\xabt \xae \xbb\xfa\xa4.[\x86\x9a\xbd\x16\xfb\xd5\xb3h}\xb7z]Q\x8e\xa9|ry\x88\x16\x1el\xf4\x1f \xfc\xbd\xed$\x0c\x9f\xdf1G]TX\x1b\x00\xd7\x06b\x88a\xa8\xc6uA\x99\x0e\xf6\x9f\x82R\x19)\xd1\xdd\x06\xed\xe5\xa5\xccq\x99\xea\xc9\xa1\x9c\xa8\x1ee\x13\xfb\xf5N\x06@\xe9b\xa3\xef\xea9\x19\x19\xef\xe9t\xad<(\xaf\x90e\x17v.\xe1\xce&m[\xad\xa52\x83\xb3j\xbes\xa4\xe4n\xbb\xd5\xec\x04\xd4\x8c\xb6\x0b\xe2@\xc0\x96\x85\xa2\x80^\xdb\x05\xa5\xbf\x03\x14\x07T\xebu\xa9\xa8\xd6\x19\x1c\xac\xa0\xa26\x9dM\x1aW jnv5\xcd\xb0\xef\x1e*\x85D\xfb>Y\xbdIL<*\xc2F\x9f\xd8\xae\x9eX\xe16\xa3i\xbc\x9b\xc8@\xef\xe87\xc5\xc3\xb7\x13\x98\xf0\xe1\xfb|*\x99\xfa(\x84\xd8\xd58\x15K\xc6\x92Q\xe8mx&}9\xf5$\x8c\xa1\xafVY\xa9\x1f\x88\xfb\xdf\xac\xb2R\x1f\xb65\xbb%\xf7\xa4\x8b\xee+\x95\x95\xf0\xa8nGu\xa1\xab\xe6E>=\xa8;U\xf1\xa0s{vY\xef\xcb\'\x8dQ2Q\xbd\x99\x1d\xf7\xda_Hu\tcb3\x8a\xcc\x1d@\xbeAE\xe6\xc3\xf7\xe9\xc2G\x9b\xab3\x01\x05\xc6V\x89\xa6\xa1\x9ab\xb9\xc8\xefA\x0b\x81w#\xaaK\x1a(\x1d\xb6\x8d[\xd1\x853\x8c\xc1lZtL5\x82\xbd\x91,PS\x08\x86\xa7\xe1\xba\x0c(7\xbe\x82\xe2+4\xa0\xb2\x18\xc2\x84\xb0F\xa1\xb4kS} \xd8\xaeb\x08*\xb1HQ\xf8O~\x13d\x12\xc2%\xd1\x804\x99\xae\x14dg+\xb5\x9b\xf7\xf0st\x02\x19&\xd1Y)\xcb0F6\x9b\x122\xac\xda\x01\xe4\xb8\xa7\xcb\x91YT#v\xd4\x94\xee]\x80\'\n\xa8\'\x92\x1b\x95\xc6D\x8e.\x86\xf7\xcdl^k\x8a\xf5er\x1e\xda\xc3kRKM\xaf*\xbaD\x0e\xdb\'G\x83l\xb7pz\x99\x1b\xcb\xcc\x83\xe4\xf5\xc6\xb3\xb9\xb3\xde\xa01\x03z#`o\x84\xa5\x05\xe8)@V\x9eC\xb6).\xff\x02\xde`d^\x81\xb3\xe0H\x7f\xb5\xfc\xff\xe8N,\x7f\xb3\xfc\xbf\x93=P\x86\xb6}~ig8\xff\xdf\xcc<\xd9\x8eX0\x9e\xce\xa3\xea\xb1y<\x99\xb9\xd9D\xbe3k\xd7\xecV\xb4\xdb\xcfL\xeeo$5\xbf+nM,l\x0eO\x9b\x11\x1a&\xe0e\x03B#\x95\x10tc\x1c\x13R\x89d\x1a\x19\x0c\xe3\xbe\xb8I9\xc8k\x88\xed\x08\xcc\xdc\xac\x00t\xb0<v-\xa15uT\\\x01\x83\x08!\x0e\x06\xf0Ag\x01[\xf8Z;\x02\xd1\xc7\xc6\x14/\xacG\x990\xc7\xa4\x0e\x0b]X=3!\xe2\xa3\xc9\x82O\x96\x19]L\xe8P\xe0\x7f>\xdb\x1b\xa3M\x17\x84\xd8#\x80f\x13\xa8a+"\xa2o\xc5&tHML\x85\xc1d>\xde\xc5;\xeb\xf3~\xbb)6\x97i\xf6\xbcN\xc7\xc7m\x9a\xb8\xea\x0f&\xd7\xbax\xd0R\x9b7\x8d\x9bl\')\x8bK6\x08_\xd3\xbf\xc4>=B\x9f6\xcd\xdaW\xc3\x1b\xec\xc3W\xcb\xb7\x8f\xcf\xc5\x83o\x96o7m\xe5\xc0\xd6\x12\xed\x93Ky\xc1\xb7_ \xde\xed0\xe4\xf1S\xe2\xae\x94\'\xd5\xcb|F\xbf==\xcd]\xd5\xb5C\xb3\xa9\xf6\xad\xf1\x90\xe4\xe4\xe8\xf6\x19\xf2\x0b\x08\xd8\x0c\xa7\x9d\x00\xc0\x9b\xb63z\x1cU3\x06T\xa6\x04\x93\x81\xf4@y\x06\x16\x1a\xb2/2\xb3aH\x0f|\x94-\xea\xa0\xfb\xddd\xfc7&\xd45\xceT\xb1B\xa8\x9d%(\x81\xf7\x0e\xd4&\xb9\xb8\xf9}GP\x98n\xce\x96\x02\xc8\x8d\x81\xef\xa2\x99\xd2\x92\xfaT\x06\xdd\xdc\xc2~\xd8d\x80\xb6\x03\xaf\x95\x9d\xb5\xcd\x8c\x9f$\xc8\xb48\x06Y\xc1\xb2h(\xe4v]\xf5\x1a\xedEMfu\\\xa6\xc4\x9a\xbb_=\xbdJX\xe3h\xf7\xf8\xbe\x7f\xefv\xf5\\\xa5Ro\x1fYwh\xec\x9e7\x8e\x98\xf5\x94\xd4g\x8d]\x9f\x86\xe5\xf0\x81\xe0n\xdf[%\x96\xdau\x1d\xaaQ\x9b\r\xdb\xbb!cF\xc8\'s\xec\xac\xd7\x12\xaf\x065gVO\x11\xda\xb7\xc5d\xe7\xd8\xbe?\x11\xd5\x9c\x88ka\xde\x15t\xa6.:\xb2\x19(O\x0c\x07F\x8b8\xb7V\xac\x9c\x8e\x89\x85>\xff\xc3\x8f]\xac\t\xe2\t3Y>\x91\x91\x0333\xbeq\xfb\xa7\xa94\xcd\x9fh\x9d\xc3\xc6\xedY\xaa\xda\xd7Ng\xe70x\xac\x1f\xa8DX\x8fl\x9f\x88\xbcb\xcb\xda\xbb\xcc~\xa0\xb49\xaec\xd8\n\xd1\xa9l0&\xcc\xee\xa3\n\x89\xe2\x93\xf8;V\x83\xa9\xa6\xd8^\x86\xf6h v\xef\xb2n\xe3\xce\xack\x83\xd3\x93#Q\xdd\xddMWf\xf6\x85\xda^\xe2\x16\x7f\x08\xc7\x00\xfa9v\x06\xc7\xf4\x04:\xb3I\xa3\xde\'\x01\xff&\x96t\'3\xb4\xb2|\xa3\xaa\x81\x9e=:(\xec\x0f*\x07N\xd8\xff\xf8:\x9a\xde\x8e\xa2\x90}J\xf3\x87\xc6}&\xf3pQ6\xedf\xed|b\x99\xc9Yn7uqQ\xbdl\xa8\xdb5\xe8\xbd\x0e\x0f\x9b\xd1\x17rM\xe4\xc8\xef_\x99\xe5\x04il\xb1\x95Y\xe2S+3\x03\xb9>3\x08\t\x1d\xb6%\xc5S\x14L\tVj*\x08\x04\xd3$\xc2>\x88\x04\x85\xc6\x842\xf0P&%\x1c\xec\x98\xb7\x84C\xbe\x12^\x9d\xed\xcc\x97s\xca#z0\xe1\xe2\x11\xd7z\xe8\x8e\xb4\x88L\xc6\x06\xb5\x82\xa6\xaa\xad,\xcd\x06\xd4Q\xdd\x9eG\xf5h\x93}\x0f\x13.4\xc5\xee\xb2T}\xc8]ej\xd3;\xe3\xd8\xd1k\xe5\xeb\xb3\x199)\xd4k\xd3\x87V\xf5n\x12\xd9\xabR\xa7\xe6\xf6@rzm\x07\xf9`14\x10En\x12eJY\xb4\'\xd9DY\xe5<f\xc8\xd9\xecZ\xee)\x82\xbe\tf\xdd\xba\x13+\xdf,\xb3v\xb2\xe5\xcai~\xfc`e\xea\x8bu\xdc3\x94\xbe\x15\xd6\xac\x8a+f\xc29\x1d\xe7\xa7\xe7N\xf3"=j\xbb\x8e\x1a\xcd\xbb\x92b\x1dw\xcf\x9c\xd3\x95\xac\xf9\xf5\xab\x9e\x85\xdd?\xba\xc6\x9cY\xb5\xe1B`}\xe7\xfc\nWN\x925}-\xd7a\xfd\xf3hf\x11\ts\x89\xd40\']d\xef\x97\xd6A\xe57\xafZ\xff\x00\x19o\xe3U\xac\xcb"\xa6\x11\x9b\x11}\x18\x85\xf1t\x81\x1bO\xd9\xe0\xb6\xbc\xbd\x1e\xa0Ss\xcb\xe0\xc3-\x7f\xcfu\xf68hz8\xe6\x89\n\xf0\xf1\x1e\xb1\xa8w\xab\x10\xf6\x87!/f*\xfd\xb58\xa0\nJ\xf7\xf5\xb2\x1a:\x9eN\xeb\x83}3}\xdd\x87\xef\xcej\x0f\x99\xa9S\xd1\xc8\xd5)\xcd\x02\x07D\xbds\xd1\x13.$BN\x88\x1b\x00\x90{\x9b\x19\x88,\xb5.;RgX\xd3M\xf3\xbag0\x8an\t\x86\xb5\x10\xce\x18\xc6\x12\xc1\xde"\xda\xbeZ\x86\xd8\x9e\x89\xd5o\x96!&\xedl\x938\xa7\x0f\xd9\xcc\xf5\x82!\xbeo\xfe<\x99A\xf39\x14\x9cE\xdb\xe1\xae\x95\xa7\xb3\xac\xd6,\xb4\xadB2\x7f/\xba\x93\x165\xb4j#\xa9\xb5\x86\x9di\xe3h\xba\xbdMx\x9f\x87\x13mDiV\xab\x80\xb3\r(\xcd\x9e[\xc2\x97\x0f\x01VU\x14d\xebqn\x16\xf1\\\x19\x86\xcbll\\\xaa\x8c\x88\x10{\xc5\x7f\xc9T\x8cK\x9et,\x19\x13\x9eo\x10\xd8\x12\x14\xce\t\xff+\xab\x92> \x0bc\x1e^]"t\xaad\r\x851\xb1\xec\xa5\x0f7\xa5@{k@h\x7f\xd4#S\xcb\xd0y\xd8\x10\x98\xe11S5\xe3\xf6\xd4v\xc8\x88x\x0e\xaa\x07o\x83C\x9e;\xa9\x98\x0b\x0b\x85\xf2:&\x1e\x904\xf5\xa6(//\xfe\xd2d<n4\x1er\x89:!\xe9\x9b}Z?=\xbf;\xd0\x0ef\x8d\x07\x904h\xdd\xc0\xd8\xaa!\\\xec\xa0F\xc0s\xbd\xf3]M\xc7D\xe8i\xc6\x00Qx\xaeRbmN\xc8\xbc\x02S(hB\x9b\x9d\xf2!g\xf7\x02e_\xad\x94\xe9\x9c\x8b\xb5oV\xca4\x07\x9d^\x85\xe6.\x86W\x87!\x1b\xc9;\xe7\xc7vd\xc8\xf1\xd3\xf9S\xcd\xb4\x9c\xde\xb0>\x12E\xb5#w\xee$w\x9c\xba\x9e\xe5.\xaf\xa7jf\xbb\x1b\xb9\xdf\x89\xa0\xcd\x08\x88& d\x03\x02"Y\x80\xc5\xbc\xe90\xb3J&hVi\xa1W\x1b(H\x97(:O4I\xc0\xf4\x15\x84\xf9\xa8\x81\xa0F8\xf3\xec\xf06\xa6\x0f\x03\xe7\xa3\xff\xbf\xa0\xd9\xf2\x8f?\xc1\x8c4\xd9(\x98\x06\xb5\x81a\x15\xa1Zv\xc1wO\xb1\xe8C|{\x16\x1f,a\x02\xab>\xe1\xc7)\xb6\xdd\x14\xcb;c\n\x8cn\xe4\x95\xa8\xb7~\x82\x96]4\xebC\xb5\xb8\xad\xaa\x08z\xb6\xae\xbc\xd5\xd0\xf2y\x96<\x9e\x9e\xc15\xff\x98e\x18\x0e\xcc}\xe6M8\x83\x19RN\xc3\x8fX@:\x89W\xce\x98\x02\x11]\xa8\x11\xec\x8a\xe8\xec\x8f\x89\x01\xb0@L\xae\xbf\xc8i5\xc5\xc1\xf2\xe2\xf6\xfe\xaa\xd3~h\xcd\xae\xcfG\xa3\xa3\xa3\xe3\xd3\xab\xd6\xee\xe5iFI9\x17\xb5e[;\xfa\xd6\xbc.\x84\x163|o\\\x93lJ\xde<\x83,\x941\x88 DOh\xf5\xf2\x03\xc7P\x08?_\xad\x9c\xe9\x1e\xe0\xe6\x95oT\xceL\x8e\x8f\xe4]\xe9\xf0|\xd8M\xcc\xe5\xcc\x0bS\xc3\x9b\x1cK\xd3\xc3\x9f \xc1)2\x9f$K\xd3d;\x12\xa8\xf3t\x1a\xd5\x1a\xddkz^;?\xc9\xb5\xd2e\xe3h\xbf\x91/O\xa6\xa9\x94\xd5\xb1[\xdb\x93@\x1b\xe7*\x9b\x91G\xe7\x80\x9eM\xc8\xa3]a$Q\x90F\x89|P\x1a\xfd\xd7s<\xe9\xbfq\xc9Q>=\x11*g|\xa3P\xf2\xa3\x00u4\xfd:\x90e\xe9\x92\xab\x08\xc7\xb4/\xab\xd4\x99\xc5\x84tLh\xbbL\xa6\x10\xdb\x89\xca\x9e\x9d\x1f\xf9[\xa8\x91\x9f\x85\x16\xba\xff\xfd\x13\x04\x83G\xfd\xd1\x92\x80?@3\x85\xdcn\xf6cL\xa8\xa3u\xce\xb4\x1e\x1d2\xdf\x00\xb6q\xa3?\xcc\x15T\xf0c#I1\x8d\x89\xa4\xb2\xb1\x960\x9b\x02\xe8\x13\x9e\x86\xc15\x90\xb5O`\xa8\x97Mq\xb8\xac[5\x1a\xc6\x904N\xaf\x0f\xfbV\xdeN4.G\xe3\xf4\xfd\x89\x06\xf7xZ\xe6\x97\x9a1\x11\xce\x8d\xdf\xbaa\xdf\xfa\x92\x8fV\xd6\x0cW\xf1d\xf7>\xc0\xb0)I\xf1\x02>B\xab\x91\x05Z\xbeZ\xb9p1\x13\x8f\xbeY\xb9P\x16\x9b\x1a\x89V\x9b\x15W\x9e\xcb\x857\xd0\xfav\xb8\xfc\xcd\x8a\xb9\xa0+\x8d.\xd9M:\'\xe9\xecQK\xee6;V#\x17\x9d\xe6o\xb3\xed\xed9i\xdf\x80\x88\xcd\xf0o\t\x00\xdf\x04\xff\xce\xcf\xd7\x13a\x0e\xfe\xe2v/\xe5qL4\xc34\x1f\x17[\xb9\x84{\x97\x06|\xb1\xdc\xf7\x1a\xdc!\xbb3w\xd1\xda:\xed\xf7\xf9\x86Z,\xc9\xbc\xb8=\n5q\xee\xc3\xf7}y\xa1\x1em\xfe\x06\xfd\xbdX\x15.4\xf8\x07\x8a\xfbI\xde\x1d7V\xa2 0\xfd`|$\xab\x08,K]N\xb0\xbe\xfb4+K\x98\xfd,e\x08\x0f\xa7#M"\xf7\x9b\x87)\x04Xl\xdb\x90\xe9#\\\xfd\xfb\xafH\x90\xe9EBAN_\x1f\xa5r\x1el)\x1c?\xc1\x9cS\xee\xfeH^\xe2\xcc,!Z\x9e\xb1e\xe9e\x9a\xe6{\tx\xf0\xf2u\xe2r%\xdb\xf5\xfa\x15\x1d\x88\x11\x0e\'\x92\x92W\x19\xf7\xe9"\x89\x9a\xabC@\xac\x0c\x17\x9a\xe4\xf1B7\t\x1c\xf7V\xae\x0b\xdbt\xb0\x1f\x80\x8d\xd7\xf5\x14\xb4``\xd8\xed\r\x93\xe3\xd9\x1d\xd7\x84\xe5\xba<(\x07`\xf1k\xfb\xdb\x0c\x14g.\xffL\xaf\x0b^gp\x10\x00\xcfcU\xe9/5X\x8c\xf3\xad\x0b\n\x1d\x1c\x06@aU\xfd}\x86\t~\xd7\x85k:\xa8\x04\x87\x08.\xbe\xd4\xf0\x84\xce \xaf\t\xceMyP\r\x80\x13\xaa\xf2\xef3\\\xca\xbaTx\xd3\x19\xd4\x82\xa3\xa5\xac\xa0\xc1Uq\x7f\xe7\x92\x17\x83\xe9\xf4a\x1d\x1c\xf1\x85\x9e\x07>\x0f\xf9\xf3\xa6\x00\xdfX\x15\x06\x19d\xe1p\xc3T\x01x\xf5\xee\x99\xad\xd0G]oI9\x971\xaa\xf0\x93\xa0\xc0\x8b\x0c|\xd1\x14K\xac\xecE\xf9Mq\x0c\xfb\xda\xc6\x1e\x87\xdc\x0f\x13\xf9\xa6z\xb3\xe9`\xbd\x89p\xbd\xc9p\xc5su\xb4\xaf\xad\x19\xe6\x89\xd0\xd2\x8a\x0cq\x9c\x02\x1c\xd0SK\xc9\x84O\x0e\'o\xc5\xd0n\xe69HR\x9c*>#\x18\xa9m\x80\x91\xfe\xec`\xa4\xb7\x01F\xe6\xb3\x83\x91\xd9\x06\x18\xd9\xcf\x0eFv\x1b`\xe4>;\x18\xb9m\x80\xb1\xfb\xd9\xc1\xd8\xdd\x06\x18\xf9\xcf\x0eF~\x1b`\x14>;\x18\x85m\x80\x91L\x04\xe1X\x88\xeeP\xaa\x19\x9e\x98\xd6s\x04~f\t\xf9|G\xde\x84\x81B.\x80\x81\xdddP\x07\x08\xba<W\xa5\xc6\xe0\x8a!*\x11\x91\xbd\x8eK\xf1X\xd8\xdc\xc4(\xad\xd2\xc2\x16\xca\xa3|\xc0\x15\xa7\x1e\xe2*\xacD&\x0b,=y\xe2c\x000O-\x0b\xe8\x95\x922\xc6`\xc3\xca\xed\xab1\x1c0\x85\x08\x12~\xfc\xc8\xado\x0bU\xd55M\xc3r\xd0&\xc9+\x8d\xf7\xa8\x1e\x97t{B\xac\x989\xfd\x99_\x95\x92\xe9Lf\xb7\xc0\xea\xe6iR\xf6D\x8cC\x86g\x005\t\xf7\xf4\xfbI\xaax\x8e"\xafr\xc704;\xde\'D\xc1Q\x80\xb6\xac1\x99\xc6\xd1\x10\xf7\xb3\xc9\xb7\xe6\xd4\x95R\xb2\x90\xe3\n\xb2K\xaci\x00 \xaf\x9dC~ |\xeeLG\x85~an3\xc3\x96j\x1f\xc3}m5\x861\xcf\x860\xbfz\x19\xd9\x18\x0e_v\t\xd5\xb8\xb1\x8b\'fY\x02\xd0O\xa4$a"\x8d\x96\xdb\xd3\xa8L\x9d\xc7g\n\x99\x06\xbe&v\x1c\xa3\xa4H\xf2\x14Z(\x1bz\x1f\xf0\xa8;\x94\x85\xdd\xff\xd4\x87\x18u\xc5\xe6\x9f)\xd4\x0b\xda\xbd\xba?=\xc3u\x98\xc53\xb2\xf7?\xb8I\xcd\xe4\xc7\xbf\x16@<M\x89\xe1\x85\x0f\xb7T\xfb\xd6KQ\x13\xd6\xeb\x83\x94\x8d\xd1\xd4\x17\x14\xfer\xd2\xbc\xe5\x1cy\x04\x93\xf1AK+3\'\xcfs\xc6\x1e\xd6\x85\x92_\x94\'\x8e}\x92\xa4\x0fslF\xe2\x0fwv\xfc6\x0e?\xc3\x12\\\xc6T3F\xf4\xdbn\'vy\x92\xbe2;\xb3\xe8~5\x1f;\x8d\x8fJv\xefV%;J\x1c\x18\xca]\x1c\xa8.\xee\x94f2`\xd3\xb2Kb\xf9\xbc\x900\xaac\xa5&\xed\x9e\x1f\xa7.o\xeb\xed\xab\xa4\x9d\xddo=\\\xd7k\xa4;f\x87\xea^\x99"\xd0\xeb\xbf\xb4\xc8\xd5(\xc91\xf9\xc7\xdf#\xd2\x80\xe8\x91"\xfa9v"r\xf0Z\xc3t\xe6\x91bD%\xd4\xd2\x0cc\x84\xc9\xc1ML\xeb\xa8\xfaE\x14\xf5\xde\x99_\xdbP\x14\xde\x02\x0b\xf1\x9e\xb0\x141\xc5\xc8<Y\x01\xbc\xa4v\x0f>N\xe5w"w\xd2(RL\xc0_\xdb\xd0M\xff\x0bm\xe4_\x8d\xec\x01\xd4\xf7{D\xa6=\xa8/r\xd8\xefK2\tOi\xec\xc9t\x84/m[\x9a\x92\x19\x8f\'#\x13\xc7\xc18\x85\x8e\x8a\xfb\x1fM\xe0.E(\xa8\xc9\xc3)\x94<\xfa\xd5M$R9fP\xa6HvP\x1f\xeed\x94\xb12m\xc4Z\x02\x1e+\xb1c@\xa6\xe6\xda\xf0\xd8\xb0\x87\x08\xc5)Z\x9b\xf9\x19[\x89\xda\x14?0a\x9c\xe1M\x99\xb5h\xbb\x83\x01\xb1\x99\x17M\xe2\xe6\xe9G\xe7Q@&f\xd1\xd1#\xdb)96p\x13\x0ev!]\xf6&\xc6\xaf\x11?_\xd8\xaf\x11\xf6\xe2P\r\xa5\x07\xe3\x85\xe3\x12\x7f\x17\xe3\x8db7;\xbcb\x82H\xb5{\x14{\xb8\xe0\xa7xB\x8a\xa5\xaf\xc1\x97\x18\xb26\xf8\x92\xcf\xb4\xc8\x9f;\x11\x1d\x87\x8c\xa3\xdb\x18[\x80mxf\xdeCa\xc6\xea\xe0[\xe8\xa1\xa9\xf8E\xac>\x94\xfe\x85\xbf\x13<\xd3-\xd6\xcf\xee}\x13\xe1\xfc\x01\xb3D\xcd\xefB\x06\x8f\xf9Sn#\x9d\xdf\xfav\xb8\xc5\x03\xf8]\xdc(\xfd\xc8ox\x03\x1dJ&\xf0\x82D\x8aY\xf8\xeb\x18C\xe8\xf2\xb8\xa0\xea\x85\xc3\x93\xd6E\xaa|\x9f\xbc8\x10\xdd\x9c\xabds\xe7\xb3\xe1\xb4\x1d\xf9\xf3\xa7\x17\xd3c\x86s\xe5\xca\x8aQ\xfa\xddK\xd9\x90\xd8\xe1r8\xf1\xe7\x934\xa8\x92\x9f\xf2\x98b\x18\x90K,\xb6\xd3\x0b=\xab\xb1:0_\xf0w\xd2\x1f\x7f|\xd7\xfb\t?\x93\xfd">Fv\x80\xb1\x95;\x9dd\xd9\x18\x99\x92\x13)\x95d\xf4\xb4\xc1e\xd3P\xc8\xcf\xf2\xbc\x9c\x97\x9f\xb3(\xc7\x90\xc3\xedH%%\xc6\xe7\xa7\xdf\xb4\x7f\xef5+}\xf8\xd0\xfb\xf0\xe1G\xe9\xbb\xd2\x02\xae\x18\x83\xe6\x8f?z\xa1\x87\x1c\xd6E\xea[\x96T\x13\xd0\x0e\xff\xe2\xbcJL\xb0\xfb\xf3\x07/\xbbn\x8fN\xbc\xf4\xba=\xaa\xb2\xf4\xba\xe1$\xbf\xc0\x1f\x97\x93\x98.1\xc9\xb8\xc7\xa3Q\x08\xec\xfd?\x00\x00\x00\xff\xff'
     padding   = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

###[ HTTP/2 Frame ]### 
  len       = 0x5b
  type      = DataFrm
  flags     = set(['End Stream (ES)', 'Padded (P)'])
  reserved  = 0L
  stream_id = 5L
###[ HTTP/2 Padded Data Frame ]### 
     padlen    = 80
     data      = '\x03\x00\x1d\x82P[\x14\xaa\x00\x00'
     padding   = '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'

Let's display the answer in human-readable format. We assume, once more for the sake of simplicity that we received very few headers.


In [141]:
stream_txt = srv_tblhdr.gen_txt_repr(h2seq.frames[0])
data = ''
for frgmt in h2seq.frames[1:]:
    data += frgmt.payload.data
print(stream_txt)
HTML(zlib.decompress(data, 16+zlib.MAX_WBITS).decode("utf-8", "ignore"))


:status 200
date: Tue, 13 Dec 2016 17:36:19 GMT
p3p: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
server: gws
content-length: 4420
expires: Fri, 16 Dec 2016 06:23:59 GMT
set-cookie: NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly
alt-svc: quic=":443"; ma=2592000; v="35,34"
date: Tue, 13 Dec 2016 17:36:19 GMT
cache-control: private, max-age=0
Out[141]:
scapy - Recherche Google

 
Environ 190 000rsultats