{
 "metadata": {
  "name": "",
  "signature": "sha256:50ffc723dfcf9f5650b542c1b77933eeaa2df6f665494225ce2aba661b86885e"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "HTTP/2 Tutorial"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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.\n",
      "\n",
      "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."
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Building the socket"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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).\n",
      "We build our TCP socket first."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import socket\n",
      "dn = 'www.google.fr'\n",
      "\n",
      "# Get the IP address of a Google HTTP endpoint\n",
      "l = socket.getaddrinfo(dn, 443, socket.INADDR_ANY, socket.SOCK_STREAM, socket.IPPROTO_TCP)\n",
      "assert len(l) > 0, 'No address found :('\n",
      "\n",
      "s = socket.socket(l[0][0], l[0][1], l[0][2])\n",
      "s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)\n",
      "s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)\n",
      "ip_and_port = l[0][4]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 99
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We now build our SSL context and we wrap the previously defined socket in it."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import ssl\n",
      "# Testing support for ALPN\n",
      "assert(ssl.HAS_ALPN)\n",
      "\n",
      "# Building the SSL context\n",
      "ssl_ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)\n",
      "ssl_ctx.set_ciphers(':'.join([  # List from ANSSI TLS guide v.1.1 p.51\n",
      "                'ECDHE-ECDSA-AES256-GCM-SHA384',\n",
      "                'ECDHE-RSA-AES256-GCM-SHA384',\n",
      "                'ECDHE-ECDSA-AES128-GCM-SHA256',\n",
      "                'ECDHE-RSA-AES128-GCM-SHA256',\n",
      "                'ECDHE-ECDSA-AES256-SHA384',\n",
      "                'ECDHE-RSA-AES256-SHA384',\n",
      "                'ECDHE-ECDSA-AES128-SHA256',\n",
      "                'ECDHE-RSA-AES128-SHA256',\n",
      "                'ECDHE-ECDSA-CAMELLIA256-SHA384',\n",
      "                'ECDHE-RSA-CAMELLIA256-SHA384',\n",
      "                'ECDHE-ECDSA-CAMELLIA128-SHA256',\n",
      "                'ECDHE-RSA-CAMELLIA128-SHA256',\n",
      "                'DHE-RSA-AES256-GCM-SHA384',\n",
      "                'DHE-RSA-AES128-GCM-SHA256',\n",
      "                'DHE-RSA-AES256-SHA256',\n",
      "                'DHE-RSA-AES128-SHA256',\n",
      "                'AES256-GCM-SHA384',\n",
      "                'AES128-GCM-SHA256',\n",
      "                'AES256-SHA256',\n",
      "                'AES128-SHA256',\n",
      "                'CAMELLIA128-SHA256'\n",
      "            ]))     \n",
      "ssl_ctx.set_alpn_protocols(['h2'])  # h2 is a RFC7540-hardcoded value\n",
      "ssl_sock = ssl_ctx.wrap_socket(s, server_hostname=dn)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 100
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We then connect the socket to the TCP endpoint."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "ssl_sock.connect(ip_and_port)\n",
      "assert('h2' == ssl_sock.selected_alpn_protocol())"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 101
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Reading the server settings and acknowledging them."
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import scapy.supersocket as supersocket\n",
      "import scapy.contrib.http2 as h2\n",
      "import scapy.config\n",
      "scapy.config.conf.debug_dissector = True\n",
      "ss = supersocket.SSLStreamSocket(ssl_sock, basecls=h2.H2Frame)\n",
      "srv_set = ss.recv()\n",
      "srv_set.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x12\n",
        "  type      = SetFrm\n",
        "  flags     = set([])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Settings Frame ]### \n",
        "     \\settings  \\\n",
        "      |###[ HTTP/2 Setting ]### \n",
        "      |  id        = Max concurrent streams\n",
        "      |  value     = 100\n",
        "      |###[ HTTP/2 Setting ]### \n",
        "      |  id        = Initial window size\n",
        "      |  value     = 1048576\n",
        "      |###[ HTTP/2 Setting ]### \n",
        "      |  id        = Max header list size\n",
        "      |  value     = 16384\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 102
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's make a note of the server settings for later usage.\n",
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "srv_max_frm_sz = 1<<14\n",
      "srv_hdr_tbl_sz = 4096\n",
      "srv_max_hdr_tbl_sz = 0\n",
      "srv_global_window = 1<<14\n",
      "for setting in srv_set.payload.settings:\n",
      "    if setting.id == h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE:\n",
      "        srv_hdr_tbl_sz = setting.value\n",
      "    elif setting.id == h2.H2Setting.SETTINGS_MAX_HEADER_LIST_SIZE:\n",
      "        srv_max_hdr_lst_sz = setting.value\n",
      "    elif setting.id == h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE:\n",
      "        srv_global_window = setting.value"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 103
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import scapy.packet as packet\n",
      "\n",
      "# We verify that the server window is large enough for us to send some data.\n",
      "srv_global_window -= len(h2.H2_CLIENT_CONNECTION_PREFACE)\n",
      "assert(srv_global_window >= 0)\n",
      "\n",
      "ss.send(packet.Raw(h2.H2_CLIENT_CONNECTION_PREFACE))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 104,
       "text": [
        "24"
       ]
      }
     ],
     "prompt_number": 104
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "set_ack = h2.H2Frame(flags={'A'})/h2.H2SettingsFrame()\n",
      "set_ack.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = None\n",
        "  type      = SetFrm\n",
        "  flags     = set(['ACK (A)'])\n",
        "  reserved  = 0\n",
        "  stream_id = 0\n",
        "###[ HTTP/2 Settings Frame ]### \n",
        "     \\settings  \\\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 105
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "own_set = h2.H2Frame()/h2.H2SettingsFrame()\n",
      "max_frm_sz = (1 << 24) - 1\n",
      "max_hdr_tbl_sz = (1 << 16) - 1\n",
      "win_sz = (1 << 31) - 1\n",
      "own_set.settings = [\n",
      "    h2.H2Setting(id = h2.H2Setting.SETTINGS_ENABLE_PUSH, value=0),\n",
      "    h2.H2Setting(id = h2.H2Setting.SETTINGS_INITIAL_WINDOW_SIZE, value=win_sz),\n",
      "    h2.H2Setting(id = h2.H2Setting.SETTINGS_HEADER_TABLE_SIZE, value=max_hdr_tbl_sz),\n",
      "    h2.H2Setting(id = h2.H2Setting.SETTINGS_MAX_FRAME_SIZE, value=max_frm_sz),\n",
      "]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 106
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "h2seq = h2.H2Seq()\n",
      "h2seq.frames = [\n",
      "    set_ack,\n",
      "    own_set\n",
      "]\n",
      "# We verify that the server window is large enough for us to send our frames.\n",
      "srv_global_window -= len(str(h2seq))\n",
      "assert(srv_global_window >= 0)\n",
      "ss.send(h2seq)\n",
      "\n",
      "# Loop until an acknowledgement for our settings is received\n",
      "new_frame = None\n",
      "while isinstance(new_frame, type(None)) or not (\n",
      "        new_frame.type == h2.H2SettingsFrame.type_id \n",
      "        and 'A' in new_frame.flags\n",
      "    ):\n",
      "    if not isinstance(new_frame, type(None)):\n",
      "        # If we received a frame about window management \n",
      "        if new_frame.type == h2.H2WindowUpdateFrame.type_id:\n",
      "            # For this tutorial, we don't care about stream-specific windows, but we should :)\n",
      "            if new_frame.stream_id == 0:\n",
      "                srv_global_window += new_frame.payload.win_size_incr\n",
      "        # If we received a Ping frame, we acknowledge the ping, \n",
      "        # just by setting the ACK flag (A), and sending back the query\n",
      "        elif new_frame.type == h2.H2PingFrame.type_id:\n",
      "            new_flags = new_frame.getfieldval('flags')\n",
      "            new_flags.add('A')\n",
      "            new_frame.flags = new_flags\n",
      "            srv_global_window -= len(str(new_frame))\n",
      "            assert(srv_global_window >= 0)\n",
      "            ss.send(new_frame)\n",
      "        else:\n",
      "            assert new_frame.type != h2.H2ResetFrame.type_id \\\n",
      "                and new_frame.type != h2.H2GoAwayFrame.type_id, \\\n",
      "                \"Error received; something is not right!\"\n",
      "    try:\n",
      "        new_frame = ss.recv()\n",
      "        new_frame.show()\n",
      "    except:\n",
      "        import time\n",
      "        time.sleep(1)\n",
      "        new_frame = None"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x4\n",
        "  type      = WinFrm\n",
        "  flags     = set([])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Window Update Frame ]### \n",
        "     reserved  = 0L\n",
        "     win_size_incr= 983041L\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x0\n",
        "  type      = SetFrm\n",
        "  flags     = set(['ACK (A)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 107
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Build the form query with the helpers"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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.\n",
      "\n",
      "We either use the server settings if they were specified or the default values.\n",
      "\n",
      "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.\n",
      "\n",
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "tblhdr = h2.HPackHdrTable()\n",
      "qry_frontpage = tblhdr.parse_txt_hdrs(\n",
      "    ''':method GET\n",
      ":path /\n",
      ":authority www.google.fr\n",
      ":scheme https\n",
      "accept-encoding: gzip, deflate\n",
      "accept-language: fr-FR\n",
      "accept: text/html\n",
      "user-agent: Scapy HTTP/2 Module\n",
      "''',\n",
      "    stream_id=1,\n",
      "    max_frm_sz=srv_max_frm_sz,\n",
      "    max_hdr_lst_sz=srv_max_hdr_lst_sz,\n",
      "    is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],\n",
      "    should_index=lambda x: x in [\n",
      "            'x-requested-with', \n",
      "            'user-agent', \n",
      "            'accept-language',\n",
      "            ':authority',\n",
      "            'accept',\n",
      "        ]\n",
      ")\n",
      "qry_frontpage.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame Sequence ]### \n",
        "  \\frames    \\\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = None\n",
        "   |  type      = HdrsFrm\n",
        "   |  flags     = set(['End Stream (ES)', 'End Headers (EH)'])\n",
        "   |  reserved  = 0\n",
        "   |  stream_id = 1\n",
        "   |###[ HTTP/2 Headers Frame ]### \n",
        "   |     \\hdrs      \\\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 2\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 4\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 1\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = None\n",
        "   |      |   |  len       = None\n",
        "   |      |   |  data      = 'HPackZString(www.google.fr)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 7\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 16\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 17\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = None\n",
        "   |      |   |  len       = None\n",
        "   |      |   |  data      = 'HPackZString(fr-FR)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 19\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = None\n",
        "   |      |   |  len       = None\n",
        "   |      |   |  data      = 'HPackZString(text/html)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 58\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = None\n",
        "   |      |   |  len       = None\n",
        "   |      |   |  data      = 'HPackZString(Scapy HTTP/2 Module)'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 108
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "for i in xrange(max(tblhdr._static_entries.keys()) + 1, max(tblhdr._static_entries.keys()) + 1 + len(tblhdr._dynamic_table)):\n",
      "    print('Header: {} Value: {}'.format(tblhdr[i].name(), tblhdr[i].value()))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Header: user-agent Value: Scapy HTTP/2 Module\n",
        "Header: accept Value: text/html\n",
        "Header: accept-language Value: fr-FR\n",
        "Header: :authority Value: www.google.fr\n"
       ]
      }
     ],
     "prompt_number": 109
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We also build a query for the favicon."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "qry_icon = tblhdr.parse_txt_hdrs(\n",
      "    ''':method GET\n",
      ":path /favicon.ico\n",
      ":authority www.google.fr\n",
      ":scheme https\n",
      "accept-encoding: gzip, deflate\n",
      "accept-language: fr-FR\n",
      "accept: image/x-icon; image/vnd.microsoft.icon\n",
      "user-agent: Scapy HTTP/2 Module\n",
      "''',\n",
      "    stream_id=3,\n",
      "    max_frm_sz=srv_max_frm_sz,\n",
      "    max_hdr_lst_sz=srv_max_hdr_tbl_sz,\n",
      "    is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie'],\n",
      "    should_index=lambda x: x in [\n",
      "            'x-requested-with', \n",
      "            'user-agent', \n",
      "            'accept-language',\n",
      "            ':authority',\n",
      "            'accept',\n",
      "        ]\n",
      ")\n",
      "qry_icon.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame Sequence ]### \n",
        "  \\frames    \\\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = None\n",
        "   |  type      = HdrsFrm\n",
        "   |  flags     = set(['End Stream (ES)', 'End Headers (EH)'])\n",
        "   |  reserved  = 0\n",
        "   |  stream_id = 3\n",
        "   |###[ HTTP/2 Headers Frame ]### \n",
        "   |     \\hdrs      \\\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 2\n",
        "   |      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "   |      |  magic     = 0\n",
        "   |      |  never_index= Don't Index\n",
        "   |      |  index     = 4\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = None\n",
        "   |      |   |  len       = None\n",
        "   |      |   |  data      = 'HPackZString(/favicon.ico)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 65\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 7\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 16\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 64\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 19\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = None\n",
        "   |      |   |  len       = None\n",
        "   |      |   |  data      = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 63\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 110
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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 refered to by an index number of the dynamic HPack Header Table.\n",
      "We now alter the favicon query to be dependent of the query for the form."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "real_qry_icon = h2.H2Frame(\n",
      "    stream_id=qry_icon.frames[0][h2.H2Frame].stream_id,\n",
      "    flags={'+'}.union(qry_icon.frames[0][h2.H2Frame].flags),\n",
      ") / h2.H2PriorityHeadersFrame(\n",
      "    hdrs=qry_icon.frames[0][h2.H2HeadersFrame].hdrs,\n",
      "    stream_dependency=1,\n",
      "    weight=32,\n",
      "    exclusive=0\n",
      ")\n",
      "real_qry_icon.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = None\n",
        "  type      = HdrsFrm\n",
        "  flags     = set(['End Stream (ES)', 'End Headers (EH)', 'Priority (+)'])\n",
        "  reserved  = 0\n",
        "  stream_id = 3\n",
        "###[ HTTP/2 Headers Frame with Priority ]### \n",
        "     exclusive = 0\n",
        "     stream_dependency= 1\n",
        "     weight    = 32\n",
        "     \\hdrs      \\\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 2\n",
        "      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "      |  magic     = 0\n",
        "      |  never_index= Don't Index\n",
        "      |  index     = 4\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = None\n",
        "      |   |  len       = None\n",
        "      |   |  data      = 'HPackZString(/favicon.ico)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 65\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 7\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 16\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 64\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 19\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = None\n",
        "      |   |  len       = None\n",
        "      |   |  data      = 'HPackZString(image/x-icon; image/vnd.microsoft.icon)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 63\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 111
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "We can now send both queries to the server."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "h2seq = h2.H2Seq()\n",
      "h2seq.frames = [\n",
      "    qry_frontpage.frames[0],\n",
      "    real_qry_icon\n",
      "]\n",
      "srv_global_window -= len(str(h2seq))\n",
      "assert(srv_global_window >= 0)\n",
      "ss.send(h2seq)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 112,
       "text": [
        "117"
       ]
      }
     ],
     "prompt_number": 112
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's read the answers!"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# The stream variable will contain all read frames; we will read on until stream 1 and stream 3 are closed by the server.\n",
      "stream = h2.H2Seq()\n",
      "# Number of streams closed by the server\n",
      "closed_stream = 0\n",
      "\n",
      "new_frame = None\n",
      "while True:\n",
      "    if not isinstance(new_frame, type(None)):\n",
      "        if new_frame.stream_id in [1, 3]:\n",
      "            stream.frames.append(new_frame)\n",
      "            if 'ES' in new_frame.flags:\n",
      "                closed_stream += 1\n",
      "        # If we read a PING frame, we acknowledge it by sending the same frame back, with the ACK flag set.\n",
      "        elif new_frame.stream_id == 0 and new_frame.type == h2.H2PingFrame.type_id:\n",
      "            new_flags = new_frame.getfieldval('flags')\n",
      "            new_flags.add('A')\n",
      "            new_frame.flags = new_flags\n",
      "            ss.send(new_frame)\n",
      "            \n",
      "        # If two streams were closed, we don't need to perform the next operations\n",
      "        if closed_stream >= 2:\n",
      "            break\n",
      "    try:\n",
      "        new_frame = ss.recv()\n",
      "        new_frame.show()\n",
      "    except:\n",
      "        import time\n",
      "        time.sleep(1)\n",
      "        new_frame = None\n",
      "\n",
      "stream.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0xe1\n",
        "  type      = HdrsFrm\n",
        "  flags     = set(['End Headers (EH)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 3L\n",
        "###[ HTTP/2 Headers Frame ]### \n",
        "     \\hdrs      \\\n",
        "      |###[ HPack Dynamic Size Update ]### \n",
        "      |  magic     = 1\n",
        "      |  max_size  = 12288\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 8\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 59\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 11\n",
        "      |   |  data      = 'HPackZString(Accept-Encoding)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 26\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackZString(gzip)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 31\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 9\n",
        "      |   |  data      = 'HPackZString(image/x-icon)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 33\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 22\n",
        "      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 36\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 22\n",
        "      |   |  data      = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 44\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 22\n",
        "      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 0\n",
        "      |  \\hdr_name  \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 16\n",
        "      |   |  data      = 'HPackZString(x-content-type-options)'\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 5\n",
        "      |   |  data      = 'HPackZString(nosniff)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 54\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackZString(sffe)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 28\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackZString(1494)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 0\n",
        "      |  \\hdr_name  \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 12\n",
        "      |   |  data      = 'HPackZString(x-xss-protection)'\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 10\n",
        "      |   |  data      = 'HPackZString(1; mode=block)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 24\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 16\n",
        "      |   |  data      = 'HPackZString(public, max-age=691200)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 21\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 5\n",
        "      |   |  data      = 'HPackZString(472252)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 0\n",
        "      |  \\hdr_name  \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 5\n",
        "      |   |  data      = 'HPackZString(alt-svc)'\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 28\n",
        "      |   |  data      = 'HPackZString(quic=\":443\"; ma=2592000; v=\"35,34\")'\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x5d6\n",
        "  type      = DataFrm\n",
        "  flags     = set(['End Stream (ES)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 3L\n",
        "###[ HTTP/2 Data Frame ]### \n",
        "     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'\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x8\n",
        "  type      = PingFrm\n",
        "  flags     = set([])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Ping Frame ]### \n",
        "     opaque    = 0\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x167\n",
        "  type      = HdrsFrm\n",
        "  flags     = set(['End Headers (EH)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 1L\n",
        "###[ HTTP/2 Headers Frame ]### \n",
        "     \\hdrs      \\\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 8\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 33\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 22\n",
        "      |   |  data      = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 36\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Literal\n",
        "      |   |  len       = 2\n",
        "      |   |  data      = 'HPackLiteralString(-1)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 24\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 13\n",
        "      |   |  data      = 'HPackZString(private, max-age=0)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 31\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 22\n",
        "      |   |  data      = 'HPackZString(text/html; charset=ISO-8859-1)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 0\n",
        "      |  \\hdr_name  \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Literal\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackLiteralString(p3p)'\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 81\n",
        "      |   |  data      = 'HPackZString(CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\")'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 78\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 54\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Literal\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackLiteralString(gws)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 28\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackZString(4420)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 72\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 0\n",
        "      |  \\hdr_name  \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 11\n",
        "      |   |  data      = 'HPackZString(x-frame-options)'\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 9\n",
        "      |   |  data      = 'HPackZString(SAMEORIGIN)'\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 55\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 165\n",
        "      |   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 71\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x122b\n",
        "  type      = DataFrm\n",
        "  flags     = set(['End Stream (ES)', 'Padded (P)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 1L\n",
        "###[ HTTP/2 Padded Data Frame ]### \n",
        "     padlen    = 230\n",
        "     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'\n",
        "     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'\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "###[ HTTP/2 Frame Sequence ]### \n",
        "  \\frames    \\\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = 0xe1\n",
        "   |  type      = HdrsFrm\n",
        "   |  flags     = set(['End Headers (EH)'])\n",
        "   |  reserved  = 0L\n",
        "   |  stream_id = 3L\n",
        "   |###[ HTTP/2 Headers Frame ]### \n",
        "   |     \\hdrs      \\\n",
        "   |      |###[ HPack Dynamic Size Update ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  max_size  = 12288\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 8\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 59\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 11\n",
        "   |      |   |  data      = 'HPackZString(Accept-Encoding)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 26\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 3\n",
        "   |      |   |  data      = 'HPackZString(gzip)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 31\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 9\n",
        "   |      |   |  data      = 'HPackZString(image/x-icon)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 33\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 22\n",
        "   |      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 06:23:59 GMT)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 36\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 22\n",
        "   |      |   |  data      = 'HPackZString(Fri, 16 Dec 2016 06:23:59 GMT)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 44\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 22\n",
        "   |      |   |  data      = 'HPackZString(Thu, 08 Dec 2016 01:00:57 GMT)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 0\n",
        "   |      |  \\hdr_name  \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 16\n",
        "   |      |   |  data      = 'HPackZString(x-content-type-options)'\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 5\n",
        "   |      |   |  data      = 'HPackZString(nosniff)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 54\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 3\n",
        "   |      |   |  data      = 'HPackZString(sffe)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 28\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 3\n",
        "   |      |   |  data      = 'HPackZString(1494)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 0\n",
        "   |      |  \\hdr_name  \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 12\n",
        "   |      |   |  data      = 'HPackZString(x-xss-protection)'\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 10\n",
        "   |      |   |  data      = 'HPackZString(1; mode=block)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 24\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 16\n",
        "   |      |   |  data      = 'HPackZString(public, max-age=691200)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 21\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 5\n",
        "   |      |   |  data      = 'HPackZString(472252)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 0\n",
        "   |      |  \\hdr_name  \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 5\n",
        "   |      |   |  data      = 'HPackZString(alt-svc)'\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 28\n",
        "   |      |   |  data      = 'HPackZString(quic=\":443\"; ma=2592000; v=\"35,34\")'\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = 0x5d6\n",
        "   |  type      = DataFrm\n",
        "   |  flags     = set(['End Stream (ES)'])\n",
        "   |  reserved  = 0L\n",
        "   |  stream_id = 3L\n",
        "   |###[ HTTP/2 Data Frame ]### \n",
        "   |     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'\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = 0x167\n",
        "   |  type      = HdrsFrm\n",
        "   |  flags     = set(['End Headers (EH)'])\n",
        "   |  reserved  = 0L\n",
        "   |  stream_id = 1L\n",
        "   |###[ HTTP/2 Headers Frame ]### \n",
        "   |     \\hdrs      \\\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 8\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 33\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 22\n",
        "   |      |   |  data      = 'HPackZString(Tue, 13 Dec 2016 17:34:51 GMT)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 36\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Literal\n",
        "   |      |   |  len       = 2\n",
        "   |      |   |  data      = 'HPackLiteralString(-1)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 24\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 13\n",
        "   |      |   |  data      = 'HPackZString(private, max-age=0)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 31\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 22\n",
        "   |      |   |  data      = 'HPackZString(text/html; charset=ISO-8859-1)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 0\n",
        "   |      |  \\hdr_name  \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Literal\n",
        "   |      |   |  len       = 3\n",
        "   |      |   |  data      = 'HPackLiteralString(p3p)'\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 81\n",
        "   |      |   |  data      = 'HPackZString(CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\")'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 78\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 54\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Literal\n",
        "   |      |   |  len       = 3\n",
        "   |      |   |  data      = 'HPackLiteralString(gws)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 28\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 3\n",
        "   |      |   |  data      = 'HPackZString(4420)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 72\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 0\n",
        "   |      |  \\hdr_name  \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 11\n",
        "   |      |   |  data      = 'HPackZString(x-frame-options)'\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 9\n",
        "   |      |   |  data      = 'HPackZString(SAMEORIGIN)'\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 55\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 165\n",
        "   |      |   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 71\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = 0x122b\n",
        "   |  type      = DataFrm\n",
        "   |  flags     = set(['End Stream (ES)', 'Padded (P)'])\n",
        "   |  reserved  = 0L\n",
        "   |  stream_id = 1L\n",
        "   |###[ HTTP/2 Padded Data Frame ]### \n",
        "   |     padlen    = 230\n",
        "   |     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'\n",
        "   |     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'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 113
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now, I don't know about you, but I can't read this :) Let's use the helpers to help us out.\n",
      "\n",
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "srv_tblhdr = h2.HPackHdrTable(dynamic_table_max_size=max_hdr_tbl_sz, dynamic_table_cap_size=max_hdr_tbl_sz)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 114
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's now convert all received headers into their textual representation, and stuff the data frames into a buffer per stream."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "# Structure used to store textual representation of the stream headers\n",
      "stream_txt = {}\n",
      "# Structure used to store data from each stream\n",
      "stream_data = {}\n",
      "\n",
      "# For each frame we previously received\n",
      "for frame in stream.frames:\n",
      "    # If this frame is a header\n",
      "    if frame.type == h2.H2HeadersFrame.type_id:\n",
      "        # Convert this header block into its textual representation.\n",
      "        # For the sake of simplicity of this tutorial, we assume \n",
      "        # that the header block is not large enough to require a Continuation frame\n",
      "        stream_txt[frame.stream_id] = srv_tblhdr.gen_txt_repr(frame)\n",
      "    # If this frame is data\n",
      "    if frame.type == h2.H2DataFrame.type_id:\n",
      "        if frame.stream_id not in stream_data:\n",
      "            stream_data[frame.stream_id] = []\n",
      "        stream_data[frame.stream_id].append(frame)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 115
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Now, we can print the headers from the Favicon response."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print(stream_txt[3])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        ":status 200\n",
        "vary: Accept-Encoding\n",
        "content-encoding: gzip\n",
        "content-type: image/x-icon\n",
        "date: Thu, 08 Dec 2016 06:23:59 GMT\n",
        "expires: Fri, 16 Dec 2016 06:23:59 GMT\n",
        "last-modified: Thu, 08 Dec 2016 01:00:57 GMT\n",
        "x-content-type-options: nosniff\n",
        "server: sffe\n",
        "content-length: 1494\n",
        "x-xss-protection: 1; mode=block\n",
        "cache-control: public, max-age=691200\n",
        "age: 472252\n",
        "alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n"
       ]
      }
     ],
     "prompt_number": 116
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import zlib\n",
      "img = zlib.decompress(stream_data[3][0].data, 16+zlib.MAX_WBITS)\n",
      "from IPython.core.display import HTML\n",
      "HTML('<img src=\"data:image/x-icon;base64,{}\" />'.format(img.encode('base64')))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<img src=\"data:image/x-icon;base64,AAABAAIAEBAAAAEAIABoBAAAJgAAACAgAAABACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAA\n",
        "AAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///zD9/f2W/f392P39/fn9/f35\n",
        "/f391/39/ZT+/v4uAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Cf39/Zn/////////////////\n",
        "//////////////////////////39/ZX///8IAAAAAAAAAAAAAAAA/v7+Cf39/cH/////+v35/7TZ\n",
        "p/92ul3/WKs6/1iqOv9yuFn/rNWd//j79v///////f39v////wgAAAAAAAAAAP39/Zn/////7PXp\n",
        "/3G3WP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP+Or1j//vDo///////9/f2VAAAAAP///zD/////\n",
        "+vz5/3G3V/9TqDT/WKo6/6LQkf/U6cz/1urO/6rUm/+Zo0r/8IZB//adZ////v7///////7+/i79\n",
        "/f2Y/////4nWzf9Lqkj/Vqo4/9Xqzv///////////////////////ebY//SHRv/0hUL//NjD////\n",
        "///9/f2U/f392v////8sxPH/Ebzt/43RsP/////////////////////////////////4roL/9IVC\n",
        "//i1jf///////f391/39/fr/////Cr37/wW8+/+16/7/////////////////9IVC//SFQv/0hUL/\n",
        "9IVC//SFQv/3pnX///////39/fn9/f36/////wu++/8FvPv/tuz+//////////////////SFQv/0\n",
        "hUL/9IVC//SFQv/0hUL/96p7///////9/f35/f392/////81yfz/CrL5/2uk9v//////////////\n",
        "/////////////////////////////////////////f392P39/Zn/////ks/7/zdS7P84Rur/0NT6\n",
        "///////////////////////9/f////////////////////////39/Zb+/v4y//////n5/v9WYu3/\n",
        "NUPq/ztJ6/+VnPT/z9L6/9HU+v+WnfT/Ul7t/+Hj/P////////////////////8wAAAAAP39/Z3/\n",
        "////6Or9/1hj7v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9sdvD////////////9/f2YAAAAAAAA\n",
        "AAD///8K/f39w//////5+f7/paz2/11p7v88Suv/Okfq/1pm7v+iqfX/+fn+///////9/f3B/v7+\n",
        "CQAAAAAAAAAAAAAAAP///wr9/f2d///////////////////////////////////////////9/f2Z\n",
        "/v7+CQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/jL9/f2Z/f392/39/fr9/f36/f392v39/Zj/\n",
        "//8wAAAAAAAAAAAAAAAAAAAAAPAPAADAAwAAgAEAAIABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAIABAACAAQAAwAMAAPAPAAAoAAAAIAAAAEAAAAABACAAAAAAAAAQAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/g3+/v5X\n",
        "/f39mf39/cj9/f3q/f39+f39/fn9/f3q/f39yP39/Zn+/v5W////DAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+\n",
        "/iT9/f2c/f399f/////////////////////////////////////////////////////9/f31/f39\n",
        "mv7+/iMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAP7+/gn9/f2K/f39+///////////////////////////////////////////////////////\n",
        "/////////////////////f39+v39/Yf///8IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAD+/v4k/f390v//////////////////////////////////////////////\n",
        "//////////////////////////////////////////////////39/dD///8iAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////MP39/er//////////////////////////+r05v+v\n",
        "16H/gsBs/2WxSf9Wqjj/Vqk3/2OwRv99vWX/pdKV/97u2P////////////////////////////39\n",
        "/ej+/v4vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/iT9/f3q////////////////////\n",
        "/+v15/+Pxnv/VKk2/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/36+Z//d7tf/\n",
        "//////////////////////39/ej///8iAAAAAAAAAAAAAAAAAAAAAAAAAAD///8K/f390///////\n",
        "///////////////E4bn/XKw+/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1Oo\n",
        "NP9TqDT/U6g0/1apN/+x0pv///////////////////////39/dD///8IAAAAAAAAAAAAAAAAAAAA\n",
        "AP39/Yv/////////////////////sdij/1OoNP9TqDT/U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/\n",
        "U6g0/1OoNP9TqDT/U6g0/1OoNP9TqDT/YKU1/8qOPv/5wZ////////////////////////39/YcA\n",
        "AAAAAAAAAAAAAAD+/v4l/f39+////////////////8Lgt/9TqDT/U6g0/1OoNP9TqDT/U6g0/1Oo\n",
        "NP9utlT/n86N/7faqv+426v/pdKV/3u8ZP9UqDX/U6g0/3egN//jiUH/9IVC//SFQv/82MP/////\n",
        "/////////////f39+v7+/iMAAAAAAAAAAP39/Z3////////////////q9Ob/W6w+/1OoNP9TqDT/\n",
        "U6g0/1OoNP9nskz/zOXC/////////////////////////////////+Dv2v+osWP/8YVC//SFQv/0\n",
        "hUL/9IVC//WQVP/++fb//////////////////f39mgAAAAD+/v4O/f399v///////////////4LH\n",
        "j/9TqDT/U6g0/1OoNP9TqDT/dblc//L58P//////////////////////////////////////////\n",
        "///8+v/3p3f/9IVC//SFQv/0hUL/9IVC//rIqf/////////////////9/f31////DP7+/ln/////\n",
        "///////////f9v7/Cbz2/zOwhv9TqDT/U6g0/2KwRv/v9+z/////////////////////////////\n",
        "//////////////////////////738//1kFT/9IVC//SFQv/0hUL/9plg////////////////////\n",
        "///+/v5W/f39nP///////////////4jf/f8FvPv/Bbz7/yG1s/9QqDz/vN2w////////////////\n",
        "//////////////////////////////////////////////////rHqP/0hUL/9IVC//SFQv/0hUL/\n",
        "/vDn//////////////////39/Zn9/f3L////////////////R878/wW8+/8FvPv/Bbz7/y7C5P/7\n",
        "/fr//////////////////////////////////////////////////////////////////ere//SF\n",
        "Qv/0hUL/9IVC//SFQv/718H//////////////////f39yP39/ez///////////////8cwvv/Bbz7\n",
        "/wW8+/8FvPv/WNL8///////////////////////////////////////0hUL/9IVC//SFQv/0hUL/\n",
        "9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//rIqv/////////////////9/f3q/f39+v//////\n",
        "/////////we9+/8FvPv/Bbz7/wW8+/993P3///////////////////////////////////////SF\n",
        "Qv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/+cGf////////////////\n",
        "//39/fn9/f36////////////////B737/wW8+/8FvPv/Bbz7/33c/f//////////////////////\n",
        "////////////////9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/6\n",
        "xaX//////////////////f39+f39/e3///////////////8cwvv/Bbz7/wW8+/8FvPv/WdP8////\n",
        "///////////////////////////////////0hUL/9IVC//SFQv/0hUL/9IVC//SFQv/0hUL/9IVC\n",
        "//SFQv/0hUL/9IVC//vVv//////////////////9/f3q/f39y////////////////0bN/P8FvPv/\n",
        "Bbz7/wW8+/8hrvn/+/v/////////////////////////////////////////////////////////\n",
        "//////////////////////////////////////////////////////////39/cj9/f2c////////\n",
        "////////ht/9/wW8+/8FvPv/FZP1/zRJ6/+zuPf/////////////////////////////////////\n",
        "////////////////////////////////////////////////////////////////////////////\n",
        "/f39mf7+/lr////////////////d9v7/B7n7/yB38f81Q+r/NUPq/0hV7P/u8P3/////////////\n",
        "////////////////////////////////////////////////////////////////////////////\n",
        "///////////////////+/v5X////D/39/ff///////////////9tkPT/NUPq/zVD6v81Q+r/NUPq\n",
        "/2Fs7//y8v7////////////////////////////////////////////09f7/////////////////\n",
        "/////////////////////////////////f399f7+/g0AAAAA/f39n////////////////+Tm/P89\n",
        "Suv/NUPq/zVD6v81Q+r/NUPq/1Bc7f/IzPn/////////////////////////////////x8v5/0xY\n",
        "7P+MlPP////////////////////////////////////////////9/f2cAAAAAAAAAAD+/v4n/f39\n",
        "/P///////////////7W69/81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v9ZZe7/k5v0/6609/+vtff/\n",
        "lJv0/1pm7v81Q+r/NUPq/zVD6v+GjvL//v7//////////////////////////////f39+/7+/iQA\n",
        "AAAAAAAAAAAAAAD9/f2N/////////////////////6Cn9f81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD\n",
        "6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v+BivL/////////////////////\n",
        "///////9/f2KAAAAAAAAAAAAAAAAAAAAAP7+/gv9/f3V/////////////////////7W69/8+S+v/\n",
        "NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/P0zr/7q/+P//\n",
        "/////////////////////f390v7+/gkAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3r////////\n",
        "/////////////+Xn/P94gfH/NkTq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NUPq/zVD6v81Q+r/NkTq\n",
        "/3Z/8f/l5/z///////////////////////39/er+/v4kAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAP7+/jL9/f3r///////////////////////////k5vz/nqX1/2p08P9IVez/OEbq/zdF6v9G\n",
        "U+z/aHLv/5qh9f/i5Pz////////////////////////////9/f3q////MAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7+/ib9/f3V////////////////////////////////////\n",
        "/////////////////////////////////////////////////////////////f390v7+/iQAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wr9/f2N/f39/P//////\n",
        "/////////////////////////////////////////////////////////////////////f39+/39\n",
        "/Yv+/v4JAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAD+/v4n/f39n/39/ff/////////////////////////////////////////////////////\n",
        "/f399v39/Z3+/v4lAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v7+Dv7+/lr9/f2c/f39y/39/e39/f36/f39+v39\n",
        "/ez9/f3L/f39nP7+/ln+/v4OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n",
        "AP/AA///AAD//AAAP/gAAB/wAAAP4AAAB8AAAAPAAAADgAAAAYAAAAEAAAAAAAAAAAAAAAAAAAAA\n",
        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABgAAAAcAAAAPAAAAD4AAAB/AAAA/4\n",
        "AAAf/AAAP/8AAP//wAP/\n",
        "\" />"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 117,
       "text": [
        "<IPython.core.display.HTML at 0x7f26f59bfc10>"
       ]
      }
     ],
     "prompt_number": 117
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's now read the frontpage response."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "print(stream_txt[1])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        ":status 200\n",
        "date: Tue, 13 Dec 2016 17:34:51 GMT\n",
        "expires: -1\n",
        "cache-control: private, max-age=0\n",
        "content-type: text/html; charset=ISO-8859-1\n",
        "p3p: CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\"\n",
        "content-encoding: gzip\n",
        "server: gws\n",
        "content-length: 4420\n",
        "x-xss-protection: 1; mode=block\n",
        "x-frame-options: SAMEORIGIN\n",
        "set-cookie: NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly\n",
        "alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n"
       ]
      }
     ],
     "prompt_number": 118
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "So, we received a status code 200, which means that we received a page. Let's \"visualize it\"."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "data = ''\n",
      "for frgmt in stream_data[1]:\n",
      "    data += frgmt.payload.data\n",
      "\n",
      "HTML(zlib.decompress(data, 16+zlib.MAX_WBITS).decode('UTF-8', 'ignore'))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "html": [
        "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"fr\"><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\"><meta content=\"/images/branding/googleg/1x/googleg_standard_color_128dp.png\" itemprop=\"image\"><title>Google</title><script>(function(){window.google={kEI:'OzFQWJ_-L4OZaPm9ntgO',kEXPI:'750721,1351903,3700243,4029815,4032677,4038012,4041899,4043492,4045841,4048347,4055745,4062666,4065787,4067860,4068550,4069838,4069841,4072602,4072775,4073405,4073728,4073959,4074597,4074955,4076095,4076931,4076999,4078438,4078456,4078764,4079106,4079442,4079626,4079894,4079954,4080167,4081037,4081039,4082056,4082165,4082217,4082619,4083476,4084298,4084343,4084956,4085057,4085627,4086011,4086290,4086863,4087718,4087977,4088429,4088436,4088448,4088643,4089003,4089106,4089337,4089346,4089481,4089538,4089696,4089741,4089749,4090086,4090352,4090401,4090445,4090806,8300096,8300272,8300478,8506615,8507381,8507419,8507858,8507899,8508059,8508065,8508590,8508957,8509066,8509243,10200083,13500022',authuser:0,kscs:'c9c918f0_24'};google.kHL='fr';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute(\"eid\")));)a=a.parentNode;return b||google.kEI};google.getLEI=function(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute(\"leid\")));)a=a.parentNode;return b};google.https=function(){return\"https:\"==window.location.protocol};google.ml=function(){return null};google.wl=function(a,b){try{google.ml(Error(a),!1,b)}catch(c){}};google.time=function(){return(new Date).getTime()};google.log=function(a,b,c,d,g){a=google.logUrl(a,b,c,d,g);if(\"\"!=a){b=new Image;var e=google.lc,f=google.li;e[f]=b;b.onerror=b.onload=b.onabort=function(){delete e[f]};window.google&&window.google.vel&&window.google.vel.lu&&window.google.vel.lu(a);b.src=a;google.li=f+1}};google.logUrl=function(a,b,c,d,g){var e=\"\",f=google.ls||\"\";c||-1!=b.search(\"&ei=\")||(e=\"&ei=\"+google.getEI(d),-1==b.search(\"&lei=\")&&(d=google.getLEI(d))&&(e+=\"&lei=\"+d));a=c||\"/\"+(g||\"gen_204\")+\"?atyp=i&ct=\"+a+\"&cad=\"+b+e+f+\"&zx=\"+google.time();/^http:/i.test(a)&&google.https()&&(google.ml(Error(\"a\"),!1,{src:a,glmm:1}),a=\"\");return a};google.y={};google.x=function(a,b){google.y[a.id]=[a,b];return!1};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};}).call(this);var a=window.location,b=a.href.indexOf(\"#\");if(0<=b){var c=a.href.substring(b+1);/(^|&)q=/.test(c)&&-1==c.indexOf(\"#\")&&a.replace(\"/search?\"+c.replace(/(^|&)fp=[^&]*/g,\"\")+\"&cad=h\")};</script><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important}\n",
        "</style><style>body,td,a,p,.h{font-family:arial,sans-serif}body{margin:0;overflow-y:scroll}#gog{padding:3px 8px 0}td{line-height:.8em}.gac_m td{line-height:17px}form{margin-bottom:20px}.h{color:#36c}.q{color:#00c}.ts td{padding:0}.ts{border-collapse:collapse}em{font-weight:bold;font-style:normal}.lst{height:25px;width:496px}.gsfi,.lst{font:18px arial,sans-serif}.gsfs{font:17px arial,sans-serif}.ds{display:inline-box;display:inline-block;margin:3px 0 4px;margin-left:4px}input{font-family:inherit}a.gb1,a.gb2,a.gb3,a.gb4{color:#11c !important}body{background:#fff;color:black}a{color:#11c;text-decoration:none}a:hover,a:active{text-decoration:underline}.fl a{color:#36c}a:visited{color:#551a8b}a.gb1,a.gb4{text-decoration:underline}a.gb3:hover{text-decoration:none}#ghead a.gb2:hover{color:#fff !important}.sblc{padding-top:5px}.sblc a{display:block;margin:2px 0;margin-left:13px;font-size:11px}.lsbb{background:#eee;border:solid 1px;border-color:#ccc #999 #999 #ccc;height:30px}.lsbb{display:block}.ftl,#fll a{display:inline-block;margin:0 12px}.lsb{background:url(/images/nav_logo229.png) 0 -261px repeat-x;border:none;color:#000;cursor:pointer;height:30px;margin:0;outline:0;font:15px arial,sans-serif;vertical-align:top}.lsb:active{background:#ccc}.lst:focus{outline:none}</style><script></script><link href=\"/images/branding/product/ico/googleg_lodp.ico\" rel=\"shortcut icon\"></head><body bgcolor=\"#fff\"><script>(function(){var src='/images/nav_logo229.png';var iesg=false;document.body.onload = function(){window.n && window.n();if (document.images){new Image().src=src;}\n",
        "if (!iesg){document.f&&document.f.q.focus();document.gbqf&&document.gbqf.q.focus();}\n",
        "}\n",
        "})();</script><div id=\"mngb\"> <div id=gbar><nobr><b class=gb1>Recherche</b> <a class=gb1 href=\"https://www.google.fr/imghp?hl=fr&tab=wi\">Images</a> <a class=gb1 href=\"https://maps.google.fr/maps?hl=fr&tab=wl\">Maps</a> <a class=gb1 href=\"https://play.google.com/?hl=fr&tab=w8\">Play</a> <a class=gb1 href=\"https://www.youtube.com/?gl=FR&tab=w1\">YouTube</a> <a class=gb1 href=\"https://news.google.fr/nwshp?hl=fr&tab=wn\">Actualits</a> <a class=gb1 href=\"https://mail.google.com/mail/?tab=wm\">Gmail</a> <a class=gb1 href=\"https://drive.google.com/?tab=wo\">Drive</a> <a class=gb1 style=\"text-decoration:none\" href=\"https://www.google.fr/intl/fr/options/\"><u>Plus</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href=\"http://www.google.fr/history/optout?hl=fr\" class=gb4>Historique Web</a> | <a  href=\"/preferences?hl=fr\" class=gb4>Paramtres</a> | <a target=_top id=gb_70 href=\"https://accounts.google.com/ServiceLogin?hl=fr&passive=true&continue=https://www.google.fr/\" class=gb4>Connexion</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div> </div><center><br clear=\"all\" id=\"lgpd\"><div id=\"lga\"><div style=\"padding:28px 0 3px\"><div style=\"height:110px;width:276px;background:url(/images/branding/googlelogo/1x/googlelogo_white_background_color_272x92dp.png) no-repeat\" title=\"Google\" align=\"left\" id=\"hplogo\" onload=\"window.lol&&lol()\"><div style=\"color:#777;font-size:16px;font-weight:bold;position:relative;top:70px;left:218px\" nowrap=\"\">France</div></div></div><br></div><form action=\"/search\" name=\"f\"><table cellpadding=\"0\" cellspacing=\"0\"><tr valign=\"top\"><td width=\"25%\">&nbsp;</td><td align=\"center\" nowrap=\"\"><input name=\"ie\" value=\"ISO-8859-1\" type=\"hidden\"><input value=\"fr\" name=\"hl\" type=\"hidden\"><input name=\"source\" type=\"hidden\" value=\"hp\"><input name=\"biw\" type=\"hidden\"><input name=\"bih\" type=\"hidden\"><div class=\"ds\" style=\"height:32px;margin:4px 0\"><input style=\"color:#000;margin:0;padding:5px 8px 0 6px;vertical-align:top\" autocomplete=\"off\" class=\"lst\" value=\"\" title=\"Recherche Google\" maxlength=\"2048\" name=\"q\" size=\"57\"></div><br style=\"line-height:0\"><span class=\"ds\"><span class=\"lsbb\"><input class=\"lsb\" value=\"Recherche Google\" name=\"btnG\" type=\"submit\"></span></span><span class=\"ds\"><span class=\"lsbb\"><input class=\"lsb\" value=\"J'ai de la chance\" name=\"btnI\" onclick=\"if(this.form.q.value)this.checked=1; else top.location='/doodles/'\" type=\"submit\"></span></span></td><td class=\"fl sblc\" align=\"left\" nowrap=\"\" width=\"25%\"><a href=\"/advanced_search?hl=fr&amp;authuser=0\">Recherche avance</a><a href=\"/language_tools?hl=fr&amp;authuser=0\">Outils linguistiques</a></td></tr></table><input id=\"gbv\" name=\"gbv\" type=\"hidden\" value=\"1\"></form><div id=\"gac_scont\"></div><div style=\"font-size:83%;min-height:3.5em\"><br></div><span id=\"footer\"><div style=\"font-size:10pt\"><div style=\"margin:19px auto;text-align:center\" id=\"fll\"><a href=\"/intl/fr/ads/\">Solutions publicitaires</a><a href=\"/services/\">Solutions d'entreprise</a><a href=\"https://plus.google.com/106901486880272202822\" rel=\"publisher\">+Google</a><a href=\"/intl/fr/about.html\"> propos de Google</a><a href=\"https://www.google.fr/setprefdomain?prefdom=US&amp;sig=__OHnMTECkk1MGvXSKgG4G1AmHq5I%3D\" id=\"fehl\">Google.com</a></div></div><p style=\"color:#767676;font-size:8pt\">&copy; 2016 - <a href=\"/intl/fr/policies/privacy/\">Confidentialit</a> - <a href=\"/intl/fr/policies/terms/\">Conditions</a></p></span></center><script>(function(){window.google.cdo={height:0,width:0};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b)var c=window.document,d=\"CSS1Compat\"==c.compatMode?c.documentElement:c.body,a=d.clientWidth,b=d.clientHeight;a&&b&&(a!=google.cdo.width||b!=google.cdo.height)&&google.log(\"\",\"\",\"/client_204?&atyp=i&biw=\"+a+\"&bih=\"+b+\"&ei=\"+google.kEI);}).call(this);})();</script><div id=\"xjsd\"></div><div id=\"xjsi\"><script>(function(){function c(b){window.setTimeout(function(){var a=document.createElement(\"script\");a.src=b;document.getElementById(\"xjsd\").appendChild(a)},0)}google.dljp=function(b,a){google.xjsu=b;c(a)};google.dlj=c;}).call(this);(function(){window.google.xjsrm=[];})();if(google.y)google.y.first=[];if(!google.xjs){window._=window._||{};window._._DumpException=function(e){throw e};if(google.timers&&google.timers.load.t){google.timers.load.t.xjsls=new Date().getTime();}google.dljp('/xjs/_/js/k\\x3dxjs.hp.en_US.WN3XpSz-BG8.O/m\\x3dsb_he,d/rt\\x3dj/d\\x3d1/t\\x3dzcms/rs\\x3dACT90oGvdHa7TL2W_IQX1s5BPxYIHeUvhQ','/xjs/_/js/k\\x3dxjs.hp.en_US.WN3XpSz-BG8.O/m\\x3dsb_he,d/rt\\x3dj/d\\x3d1/t\\x3dzcms/rs\\x3dACT90oGvdHa7TL2W_IQX1s5BPxYIHeUvhQ');google.xjs=1;}google.pmc={\"sb_he\":{\"agen\":true,\"cgen\":true,\"client\":\"heirloom-hp\",\"dh\":true,\"dhqt\":true,\"ds\":\"\",\"fl\":true,\"host\":\"google.fr\",\"isbh\":28,\"jam\":0,\"jsonp\":true,\"lm\":true,\"msgs\":{\"cibl\":\"Effacer la recherche\",\"dym\":\"Essayez avec cette orthographe :\",\"lcky\":\"J\\u0026#39;ai de la chance\",\"lml\":\"En savoir plus\",\"oskt\":\"Outils de saisie\",\"psrc\":\"Cette suggestion a bien t supprime de votre \\u003Ca href=\\\"/history\\\"\\u003Ehistorique Web\\u003C/a\\u003E.\",\"psrl\":\"Supprimer\",\"sbit\":\"Recherche par image\",\"srch\":\"Recherche Google\"},\"nds\":true,\"ovr\":{},\"pq\":\"\",\"refpd\":true,\"rfs\":[],\"scd\":10,\"sce\":5,\"stok\":\"v9hn9ENPV2Cq1VDAu6ud56TzkyQ\"},\"d\":{}};google.y.first.push(function(){if(google.med){google.med('init');google.initHistory();google.med('history');}});if(google.j&&google.j.en&&google.j.xi){window.setTimeout(google.j.xi,0);}\n",
        "</script></div></body></html>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 119,
       "text": [
        "<IPython.core.display.HTML at 0x7f26f59bf590>"
       ]
      }
     ],
     "prompt_number": 119
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Throwing a query!"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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.\n",
      "First, we will get the cookie that we were given. For this, we will search for the set-cookie header that we received."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from io import BytesIO\n",
      "sio = BytesIO(stream_txt[1])\n",
      "cookie = [val[len('set-cookie: '):].strip() for val in sio if val.startswith('set-cookie: ')]\n",
      "print(cookie)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "['NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly']\n"
       ]
      }
     ],
     "prompt_number": 120
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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...\n",
      "\n",
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "hdrs_frm = h2.H2Frame(flags={'ES', 'EH'}, stream_id=5)/h2.H2HeadersFrame()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 121
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Then, we have to specify the pseudo headers. These headers are the equivalent of \"GET / HTTP/1.1\\nHost: www.google.fr\" of old.\n",
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "get_hdr_idx = tblhdr.get_idx_by_name_and_value(':method', 'GET')\n",
      "get_hdr = h2.HPackIndexedHdr(index = get_hdr_idx)\n",
      "get_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(get_hdr)\n",
      "\n",
      "https_hdr_idx = tblhdr.get_idx_by_name_and_value(':scheme', 'https')\n",
      "https_hdr = h2.HPackIndexedHdr(index = https_hdr_idx)\n",
      "https_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(https_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 2\n",
        "\n",
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 7\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 122
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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.\n",
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "z_str = h2.HPackZString('/search?q=scapy')\n",
      "unz_str = h2.HPackLiteralString('/search?q=scapy')\n",
      "\n",
      "print(len(str(z_str)), len(str(unz_str)))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "(12, 15)\n"
       ]
      }
     ],
     "prompt_number": 123
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "So the compressed version is smaller. Let's use it, since HTTP/2 is all about performances and compression. \n",
      "\n",
      "\":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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "path_hdr_idx = tblhdr.get_idx_by_name(':path')\n",
      "path_str = h2.HPackHdrString(data = z_str)\n",
      "path_hdr = h2.HPackLitHdrFldWithoutIndexing(\n",
      "    never_index=1, \n",
      "    index=path_hdr_idx,\n",
      "    hdr_value=path_str\n",
      ")\n",
      "path_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(path_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "  magic     = 0\n",
        "  never_index= Never Index\n",
        "  index     = 4\n",
        "  \\hdr_value \\\n",
        "   |###[ HPack Header String ]### \n",
        "   |  type      = None\n",
        "   |  len       = None\n",
        "   |  data      = 'HPackZString(/search?q=scapy)'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 124
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "host_hdr_idx = tblhdr.get_idx_by_name_and_value(':authority', dn)\n",
      "assert(not isinstance(host_hdr_idx, type(None)))\n",
      "print(host_hdr_idx)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "66\n"
       ]
      }
     ],
     "prompt_number": 125
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "So, the \":authority www.google.fr\" header is still in the dynamic table. Let's add it to the header list."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "host_hdr = h2.HPackIndexedHdr(index=host_hdr_idx)\n",
      "host_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(host_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 66\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 126
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "z_hdr_idx = tblhdr.get_idx_by_name_and_value('accept-encoding', 'gzip, deflate')\n",
      "z_hdr = h2.HPackIndexedHdr(index = z_hdr_idx)\n",
      "z_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(z_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 16\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 127
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "cookie_hdr_idx = tblhdr.get_idx_by_name('cookie')\n",
      "cookie_str = h2.HPackHdrString(data = h2.HPackZString(cookie[0]))\n",
      "cookie_hdr = h2.HPackLitHdrFldWithoutIndexing(\n",
      "    never_index = 1,\n",
      "    index = cookie_hdr_idx,\n",
      "    hdr_value = cookie_str\n",
      ")\n",
      "cookie_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(cookie_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "  magic     = 0\n",
        "  never_index= Never Index\n",
        "  index     = 32\n",
        "  \\hdr_value \\\n",
        "   |###[ HPack Header String ]### \n",
        "   |  type      = None\n",
        "   |  len       = None\n",
        "   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 128
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "acceptlang_hdr_idx = tblhdr.get_idx_by_name_and_value('accept-language', 'fr-FR')\n",
      "print(acceptlang_hdr_idx)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "65\n"
       ]
      }
     ],
     "prompt_number": 129
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "acceptlang_hdr = h2.HPackIndexedHdr(index = acceptlang_hdr_idx)\n",
      "acceptlang_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(acceptlang_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 65\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 130
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's do the same thing quickly for the other headers."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "accept_hdr_idx = tblhdr.get_idx_by_name_and_value('accept', 'text/html')\n",
      "accept_hdr = h2.HPackIndexedHdr(index = accept_hdr_idx)\n",
      "accept_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(accept_hdr)\n",
      "ua_hdr_idx = tblhdr.get_idx_by_name_and_value('user-agent', 'Scapy HTTP/2 Module')\n",
      "ua_hdr = h2.HPackIndexedHdr(index = ua_hdr_idx)\n",
      "ua_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(ua_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 64\n",
        "\n",
        "###[ HPack Indexed Header Field ]### \n",
        "  magic     = 1\n",
        "  index     = 63\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 131
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "dnt_name_str = h2.HPackLiteralString('dnt')\n",
      "dnt_val_str = h2.HPackLiteralString('1')\n",
      "dnt_name = h2.HPackHdrString(data = dnt_name_str)\n",
      "dnt_value = h2.HPackHdrString(data = dnt_val_str)\n",
      "dnt_hdr = h2.HPackLitHdrFldWithIncrIndexing(\n",
      "    hdr_name = dnt_name,\n",
      "    hdr_value = dnt_value\n",
      ")\n",
      "dnt_hdr.show()\n",
      "hdrs_frm.payload.hdrs.append(dnt_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HPack Literal Header With Incremental Indexing ]### \n",
        "  magic     = 1\n",
        "  index     = 0\n",
        "  \\hdr_name  \\\n",
        "   |###[ HPack Header String ]### \n",
        "   |  type      = None\n",
        "   |  len       = None\n",
        "   |  data      = 'HPackLiteralString(dnt)'\n",
        "  \\hdr_value \\\n",
        "   |###[ HPack Header String ]### \n",
        "   |  type      = None\n",
        "   |  len       = None\n",
        "   |  data      = 'HPackLiteralString(1)'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 132
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "tblhdr.register(dnt_hdr)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 133
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Phew! We made it! Let's see what we got so far."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "hdrs_frm.show2()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0xc5\n",
        "  type      = HdrsFrm\n",
        "  flags     = set(['End Stream (ES)', 'End Headers (EH)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 5L\n",
        "###[ HTTP/2 Headers Frame ]### \n",
        "     \\hdrs      \\\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 2\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 7\n",
        "      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "      |  magic     = 0\n",
        "      |  never_index= Never Index\n",
        "      |  index     = 4\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 12\n",
        "      |   |  data      = 'HPackZString(/search?q=scapy)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 66\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 16\n",
        "      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "      |  magic     = 0\n",
        "      |  never_index= Never Index\n",
        "      |  index     = 32\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 165\n",
        "      |   |  data      = 'HPackZString(NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 65\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 64\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 63\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 0\n",
        "      |  \\hdr_name  \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Literal\n",
        "      |   |  len       = 3\n",
        "      |   |  data      = 'HPackLiteralString(dnt)'\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Literal\n",
        "      |   |  len       = 1\n",
        "      |   |  data      = 'HPackLiteralString(1)'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 134
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "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...)."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "tblhdr.parse_txt_hdrs(\n",
      "    ''':method GET\n",
      ":scheme https\n",
      ":path /search?q=scapy\n",
      ":authority www.google.fr\n",
      "accept-encoding: gzip, deflate\n",
      "cookie: {}\n",
      "accept-language: fr-FR\n",
      "accept: text/html\n",
      "user-agent: Scapy HTTP/2 Module\n",
      "dnt: 1\n",
      "'''.format(cookie),\n",
      "    stream_id=5,\n",
      "    max_frm_sz=srv_max_frm_sz,\n",
      "    max_hdr_lst_sz=srv_max_hdr_lst_sz,\n",
      "    is_sensitive=lambda hdr_name, hdr_val: hdr_name in ['cookie', ':path'],\n",
      "    should_index=lambda x: x in [\n",
      "            'x-requested-with', \n",
      "            'user-agent', \n",
      "            'accept-language',\n",
      "            'host',\n",
      "            'accept',\n",
      "            ':authority',\n",
      "            'dnt'\n",
      "        ]\n",
      ").show2()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame Sequence ]### \n",
        "  \\frames    \\\n",
        "   |###[ HTTP/2 Frame ]### \n",
        "   |  len       = 0xdc\n",
        "   |  type      = HdrsFrm\n",
        "   |  flags     = set(['End Stream (ES)', 'End Headers (EH)'])\n",
        "   |  reserved  = 0L\n",
        "   |  stream_id = 5L\n",
        "   |###[ HTTP/2 Headers Frame ]### \n",
        "   |     \\hdrs      \\\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 2\n",
        "   |      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "   |      |  magic     = 0\n",
        "   |      |  never_index= Never Index\n",
        "   |      |  index     = 4\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 30\n",
        "   |      |   |  data      = 'HPackZString(/?gfe_rd=cr&ei=2B1IWOeIDujt8weIvIH4BQ)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 67\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 7\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 16\n",
        "   |      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 17\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 4\n",
        "   |      |   |  data      = 'HPackZString(en-US)'\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 66\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 65\n",
        "   |      |###[ HPack Indexed Header Field ]### \n",
        "   |      |  magic     = 1\n",
        "   |      |  index     = 63\n",
        "   |      |###[ HPack Literal Header Without Indexing (or Never Indexing) ]### \n",
        "   |      |  magic     = 0\n",
        "   |      |  never_index= Never Index\n",
        "   |      |  index     = 32\n",
        "   |      |  \\hdr_value \\\n",
        "   |      |   |###[ HPack Header String ]### \n",
        "   |      |   |  type      = Compressed\n",
        "   |      |   |  len       = 171\n",
        "   |      |   |  data      = \"HPackZString(['NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly'])\"\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 135
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's now send our query to Google and read the answer!"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "srv_global_window -= len(str(hdrs_frm))\n",
      "assert(srv_global_window >= 0)\n",
      "ss.send(hdrs_frm)\n",
      "\n",
      "h2seq = h2.H2Seq()\n",
      "\n",
      "new_frame = None\n",
      "while isinstance(new_frame, type(None)) or 'ES' not in new_frame.flags:\n",
      "    # As previously, if we receive a ping, we ackownledge it.\n",
      "    if not isinstance(new_frame, type(None)) and new_frame.stream_id == 0:\n",
      "        if new_frame.type == h2.H2PingFrame.type_id:\n",
      "            new_frame.flags.add('A')\n",
      "            srv_global_window -= len(str(new_frame))\n",
      "            assert(srv_global_window >= 0)\n",
      "            ss.send(new_frame)\n",
      "            \n",
      "        assert new_frame.type != h2.H2ResetFrame.type_id \\\n",
      "            and new_frame.type != h2.H2GoAwayFrame.type_id, \\\n",
      "            \"Error received; something is not right!\"\n",
      "        \n",
      "    try:\n",
      "        new_frame = ss.recv()\n",
      "        new_frame.show()\n",
      "        if new_frame.stream_id == 5:\n",
      "            h2seq.frames.append(new_frame)\n",
      "    except:\n",
      "        import time\n",
      "        time.sleep(1)\n",
      "        new_frame = None"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x8\n",
        "  type      = PingFrm\n",
        "  flags     = set([])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Ping Frame ]### \n",
        "     opaque    = 2\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x8\n",
        "  type      = PingFrm\n",
        "  flags     = set(['ACK (A)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Ping Frame ]### \n",
        "     opaque    = 2\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x8\n",
        "  type      = PingFrm\n",
        "  flags     = set(['ACK (A)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Ping Frame ]### \n",
        "     opaque    = 2\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x8\n",
        "  type      = PingFrm\n",
        "  flags     = set(['ACK (A)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 0L\n",
        "###[ HTTP/2 Ping Frame ]### \n",
        "     opaque    = 2\n",
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x21\n",
        "  type      = HdrsFrm\n",
        "  flags     = set(['End Headers (EH)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 5L\n",
        "###[ HTTP/2 Headers Frame ]### \n",
        "     \\hdrs      \\\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 8\n",
        "      |###[ HPack Literal Header With Incremental Indexing ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 33\n",
        "      |  \\hdr_value \\\n",
        "      |   |###[ HPack Header String ]### \n",
        "      |   |  type      = Compressed\n",
        "      |   |  len       = 22\n",
        "      |   |  data      = 'HPackZString(Tue, 13 Dec 2016 17:36:19 GMT)'\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 70\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 69\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 68\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 83\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 66\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 75\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 64\n",
        "      |###[ HPack Indexed Header Field ]### \n",
        "      |  magic     = 1\n",
        "      |  index     = 72\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x1640\n",
        "  type      = DataFrm\n",
        "  flags     = set(['Padded (P)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 5L\n",
        "###[ HTTP/2 Padded Data Frame ]### \n",
        "     padlen    = 40\n",
        "     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'\n",
        "     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'\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x15b2\n",
        "  type      = DataFrm\n",
        "  flags     = set(['Padded (P)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 5L\n",
        "###[ HTTP/2 Padded Data Frame ]### \n",
        "     padlen    = 189\n",
        "     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'\n",
        "     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'\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "\n",
        "###[ HTTP/2 Frame ]### \n",
        "  len       = 0x5b\n",
        "  type      = DataFrm\n",
        "  flags     = set(['End Stream (ES)', 'Padded (P)'])\n",
        "  reserved  = 0L\n",
        "  stream_id = 5L\n",
        "###[ HTTP/2 Padded Data Frame ]### \n",
        "     padlen    = 80\n",
        "     data      = '\\x03\\x00\\x1d\\x82P[\\x14\\xaa\\x00\\x00'\n",
        "     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'\n",
        "\n"
       ]
      }
     ],
     "prompt_number": 137
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Let's display the answer in human-readable format. We assume, once more for the sake of simplicity that we received very few headers."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "stream_txt = srv_tblhdr.gen_txt_repr(h2seq.frames[0])\n",
      "data = ''\n",
      "for frgmt in h2seq.frames[1:]:\n",
      "    data += frgmt.payload.data\n",
      "print(stream_txt)\n",
      "HTML(zlib.decompress(data, 16+zlib.MAX_WBITS).decode(\"utf-8\", \"ignore\"))"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        ":status 200\n",
        "date: Tue, 13 Dec 2016 17:36:19 GMT\n",
        "p3p: CP=\"This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info.\"\n",
        "server: gws\n",
        "content-length: 4420\n",
        "expires: Fri, 16 Dec 2016 06:23:59 GMT\n",
        "set-cookie: NID=91=Wt1Jkm3Eretgg-hJ32fkj7kSSOLTc8tfEEIP5F2QTzHqbsXcCFve-QoN1oZvkGEqqqAWklc2wlj97YDkMnGXQUw20iCYMc3FD6X-KVuK1wdFURafcqQMQZ8e-F14YUfn; expires=Wed, 14-Jun-2017 17:34:51 GMT; path=/; domain=.google.fr; HttpOnly\n",
        "alt-svc: quic=\":443\"; ma=2592000; v=\"35,34\"\n",
        "date: Tue, 13 Dec 2016 17:36:19 GMT\n",
        "cache-control: private, max-age=0\n"
       ]
      },
      {
       "html": [
        "<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/SearchResultsPage\" lang=\"fr\"><head><meta content=\"text/html; charset=UTF-8\" http-equiv=\"Content-Type\"><meta content=\"/images/branding/googleg/1x/googleg_standard_color_128dp.png\" itemprop=\"image\"><link href=\"/images/branding/product/ico/googleg_lodp.ico\" rel=\"shortcut icon\"><title>scapy - Recherche Google</title><style>#gbar,#guser{font-size:13px;padding-top:1px !important;}#gbar{height:22px}#guser{padding-bottom:7px !important;text-align:right}.gbh,.gbd{border-top:1px solid #c9d7f1;font-size:1px}.gbh{height:0;position:absolute;top:24px;width:100%}@media all{.gb1{height:22px;margin-right:.5em;vertical-align:top}#gbar{float:left}}a.gb1,a.gb4{text-decoration:underline !important}a.gb1,a.gb4{color:#00c !important}.gbi .gb4{color:#dd8e27 !important}.gbf .gb4{color:#900 !important} </style><style>.star{float:left;margin-top:1px;overflow:hidden}._yhd{font-size:11px}.j{width:34em}body,td,div,.p,a{font-family:arial,sans-serif;tap-highlight-color:rgba(255,255,255,0)}body{margin:0}a img{border:0}#gbar{float:left;height:22px;padding-left:2px;font-size:13px}.gsfi,.gsfs{font-size:17px}.w,.q:active,.q:visited,.tbotu{color:#11c}a.gl{text-decoration:none}._Umd a:link{color:#0E1CB3}#foot{padding:0 8px}#foot a{white-space:nowrap}h3{font-size:16px;font-weight:normal;margin:0;padding:0}#res h3{display:inline}.hd{height:1px;position:absolute;top:-1000em}.g,body,html,table,.std{font-size:13px}.g{margin-bottom:23px;margin-top:0;zoom:1}ol li,ul li{list-style:none}h1,ol,ul,li{margin:0;padding:0}#mbEnd h2{font-weight:normal}.e{margin:2px 0 0.75em}#leftnav a{text-decoration:none}#leftnav h2{color:#767676;font-weight:normal;margin:0}#nav{border-collapse:collapse;margin-top:17px;text-align:left}#nav td{text-align:center}.nobr{white-space:nowrap}.ts{border-collapse:collapse}.s br{display:none}.csb{display:block;height:40px}.images_table td{line-height:17px;padding-bottom:16px}.images_table img{border:1px solid #ccc;padding:1px}#tbd,#abd{display:block;min-height:1px}#abd{padding-top:3px}#tbd li{display:inline}._ITd,._JTd{margin-bottom:8px}#tbd .tbt li{display:block;font-size:13px;line-height:1.2;padding-bottom:3px;padding-left:8px;text-indent:-8px}.tbos,.b{font-weight:bold}em{font-weight:bold;font-style:normal}.mime{color:#1a0dab;font-weight:bold;font-size:x-small}._lwd{right:-2px !important;overflow:hidden}.soc a{text-decoration:none}.soc{color:#808080}._AC a{text-decoration:none}._AC{color:#808080}._kgd{color:#e7711b}#_vBb{border:1px solid #e0e0e0;margin-left:-8px;margin-right:-8px;padding:15px 20px 5px}._m3b{font-size:32px}._eGc{color:#777;font-size:16px;margin-top:5px}._H0d{color:#777;font-size:14px;margin-top:5px}._HLh{border:1px solid #e0e0e0;padding-left:20px}._Tki{border:1px solid #e0e0e0;padding:5px 20px}#vob{border:1px solid #e0e0e0;padding:15px 15px}#_Nyc{font-size:22px;line-height:22px;padding-bottom:5px}#vob_st{line-height:1.24}._Tsb{border-width:1px;border-style:solid;border-color:#eee;background-color:#fff;position:relative;margin-bottom:26px}._Peb,._Qeb,._Usb{font-family:Arial;font-weight:lighter}._Peb{margin-bottom:5px}._Peb{font-size:xx-large}._Qeb{font-size:medium}._Usb{font-size:small}._Tsb{margin-left:-8px;margin-right:-15px;padding:20px 20px 24px}._rOc{border-spacing:0px 2px}._sOc{max-width:380px;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;padding-left:0px}._v9b{padding-left:15px;white-space:nowrap;color:#666}._pOc{padding-left:0px}._rkc{color:#212121}._HOb{color:#878787}._lMf{color:#093}._jMf{color:#c00}._kMf{padding:1px}._CKg{color:#dd4b39}.gssb_a{padding:0 10px !important}.gssb_c{left:132px !important;right:295px !important;top:78px !important;width:572px !important}.gssb_c table{font-size:16px !important}.gssb_e{border:1px solid #ccc !important;border-top-color:#d9d9d9 !important}.gssb_i{background:#eee !important}#res{padding:0 8px}#rhs_block{padding-top:43px}#_FQd{padding:0 8px}#subform_ctrl{font-size:11px;height:17px;margin:5px 3px 0 17px}.taf{padding-bottom:3px}._chd{padding:20px 0 3px}._bhd{padding:20px 0 3px}#topstuff .e{padding-bottom:6px}.slk .sld{width:250px}.slk{margin-bottom:-3px}.slk ._z3b{padding-bottom:5px;width:250px}._QPd{margin-top:1px;margin-bottom:-11px}._zuc{color:#545454}._Auc{padding-top:2px;padding-bottom:1px}._Buc{padding-top:1px;margin-bottom:14px}.ac,.st{line-height:1.24}.mfr,#ofr{font-size:16px;margin:1em 0;padding:0 8px}._tLi{padding-bottom:25px}.s{color:#545454}.ac,._JEe{color:#545454}a.fl,._cD a,.osl a{color:#1a0dab;text-decoration:none}a:link{color:#1a0dab;cursor:pointer}#tads a:link{color:#1a0dab}#tads .soc a:link{color:#808080}#tads ._AC a:link{color:#808080}._AC a:link{color:#808080}._AC a:visited{color:#808080}._AC a:hover{color:#808080;text-decoration:underline}a:visited{color:#61C}.blg a{text-decoration:none}cite,cite a:link{color:#006621;font-style:normal}#tads cite{color:#006621}.kv{font-size:15px}.kvs{margin-top:1px}.kv,.kvs,.slp{display:block;margin-bottom:1px}.kt{border-spacing:2px 0;margin-top:1px}#mbEnd li{margin:20px 8px 0 0}.f{color:#808080}._pJb{color:#093}h4.r{display:inline;font-size:small;font-weight:normal}.g{line-height:1.2}._sPb{display:inline-block;vertical-align:top;overflow:hidden;position:relative}._Gnc{margin:0 0 2em 1.3em}._Gnc li{list-style-type:disc}.osl{color:#777;margin-top:4px}.r{font-size:16px;margin:0}.spell{font-size:16px}.spell_orig{font-size:13px}.spell_orig a{text-decoration:none}.spell_orig b i{font-style:normal;font-weight:normal}.th{border:1px solid #ebebeb}.ts td{padding:0}.videobox{padding-bottom:3px}.slk a{text-decoration:none}#leftnav a:hover,#leftnav .tbou a:hover,.slk h3 a,a:hover{text-decoration:underline}#mn{table-layout:fixed;width:100%}#leftnav a{color:#222;font-size:13px}#leftnav{padding:43px 4px 4px 0}.tbos{color:#dd4b39}._AEd{border-top:1px solid #efefef;font-size:13px;margin:10px 0 14px 10px;padding:0}.tbt{margin-bottom:28px}#tbd{padding:0 0 0 16px}.tbou a{color:#222}#center_col{border:0;padding:0 8px 0 0}#topstuff .e{padding-top:3px}#topstuff .sp_cnt{padding-top:6px}#ab_name{color:#dd4b39;font:20px \"Arial\";margin-left:15px}._fld{border-bottom:1px solid #dedede;height:56px;padding-top:1px}#resultStats{color:#999;font-size:13px;overflow:hidden;white-space:nowrap}.mslg>td{padding-right:1px;padding-top:2px}.slk .sld{margin-top:2px;padding:5px 0 5px 5px}._Mvd,.fmp{padding-top:3px}.close_btn{overflow:hidden}#fll a,#bfl a{color:#1a0dab !important;margin:0 12px;text-decoration:none !important}.ng{color:#dd4b39}#mss{margin:.33em 0 0;padding:0;display:table}._mY{display:inline-block;float:left;white-space:nowrap;padding-right:16px}#mss p{margin:0;padding-top:5px}.tn{border-bottom:1px solid #ebebeb;display:block;float:left;height:59px;line-height:54px;min-width:980px;padding:0;position:relative;white-space:nowrap}._UXb,a._UXb{color:#777;cursor:pointer;display:inline-block;font-family:arial,sans-serif;font-size:small;height:54px;line-height:54px;margin:0 8px;padding:0 8px;text-decoration:none;white-space:nowrap}._Ihd{border-bottom:3px solid #dd4b39;color:#dd4b39;font-weight:bold;margin:2px 8px 0}a._Jhd:hover{color:black;text-decoration:none;white-space:nowrap}body{margin:0;padding:0}._sxc{display:inline-block;float:left;margin-top:2px}._Hhd,a._Hhd{margin-left:1px}.sd{line-height:43px;padding:0 8px 0 9px}a:active,.osl a:active,.tbou a:active,#leftnav a:active{color:#dd4b39}#_Xud a:active,#bfl a:active{color:#dd4b39 !important}.csb{background:url(/images/nav_logo229.png) no-repeat;overflow:hidden}.close_btn{background:url(/images/nav_logo229.png) no-repeat -138px -84px;height:14px;width:14px;display:block}.star{background:url(/images/nav_logo229.png) no-repeat -94px -245px;height:13px;width:65px;display:block}.star div,.star span{background:url(/images/nav_logo229.png) no-repeat 0 -245px;height:13px;width:65px;display:block}._nBb{display:inline;margin:0 3px;outline-color:transparent;overflow:hidden;position:relative}._nBb>div{outline-color:transparent}._O0{border-color:transparent;border-style:solid dashed dashed;border-top-color:green;border-width:4px 4px 0 4px;cursor:pointer;display:inline-block;font-size:0;height:0;left:4px;line-height:0;outline-color:transparent;position:relative;top:-3px;width:0}._O0{margin-top:-4px}.am-dropdown-menu{display:block;background:#fff;border:1px solid #dcdcdc;font-size:13px;left:0;padding:0;position:absolute;right:auto;white-space:nowrap;z-index:3}._Ykb{list-style:none;white-space:nowrap}._Ykb:hover{background-color:#eee}a._Zkb{color:#333;cursor:pointer;display:block;padding:7px 18px;text-decoration:none}#tads a._Zkb{color:#333}.sfbgg{background:#f1f1f1;border-bottom:1px solid #e5e5e5;height:71px}#logocont{z-index:1;padding-left:4px;padding-top:4px}#logo{display:block;height:49px;margin-top:12px;margin-left:12px;overflow:hidden;position:relative;width:137px}#logo img{left:0;position:absolute;top:-41px}.lst-a{background:white;border:1px solid #d9d9d9;border-top-color:silver;width:570px}.lst-a:hover{border:1px solid #b9b9b9;border-top:1px solid #a0a0a0;box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1);-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.1)}.lst-td{border:none;padding:0}.tia input{border-right:none;padding-right:0}.tia{padding-right:0}.lst{background:none;border:none;color:#000;font:16px arial,sans-serif;float:left;height:22px;margin:0;padding:3px 6px 2px 9px;vertical-align:top;width:100%;word-break:break-all}.lst:focus{outline:none}.lst-b{background:none;border:none;height:26px;padding:0 6px 0 12px}.ds{border-right:1px solid #e7e7e7;position:relative;height:29px;margin-left:17px;z-index:100}.lsbb{background-image:-moz-linear-gradient(top,#4d90fe,#4787ed);background-image:-ms-linear-gradient(top,#4d90fe,#4787ed);background-image:-o-linear-gradient(top,#4d90fe,#4787ed);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#4787ed));background-image:-webkit-linear-gradient(top,#4d90fe,#4787ed);background-image:linear-gradient(top,#4d90fe,#4787ed);border:1px solid #3079ed;border-radius:2px;background-color:#4d90fe;height:27px;width:68px}.lsbb:hover{background-image:-moz-linear-gradient(top,#4d90fe,#357ae8);background-image:-ms-linear-gradient(top,#4d90fe,#357ae8);background-image:-o-linear-gradient(top,#4d90fe,#357ae8);background-image:-webkit-gradient(linear,left top,left bottom,from(#4d90fe),to(#357ae8));background-image:-webkit-linear-gradient(top,#4d90fe,#357ae8);background-color:#357ae8;background-image:linear-gradient(top,#4d90fe,#357ae8);border:1px solid #2f5bb7}.lsb{background:transparent;background-position:0 -343px;background-repeat:repeat-x;border:none;color:#000;cursor:default;font:15px arial,sans-serif;height:29px;margin:0;vertical-align:top;width:100%}.lsb:active{-moz-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);box-shadow:inset 0 1px 2px rgba(0,0,0,0.3);background:transparent;color:transparent;overflow:hidden;position:relative;width:100%}.sbico{color:transparent;display:inline-block;height:15px;margin:0 auto;margin-top:2px;width:15px;overflow:hidden}</style><script>(function(){window.google={kEI:'kzFQWN-hEcKya4KMgVA',kEXPI:'20782,750721,1351903,3700243,4029815,4032677,4038012,4041899,4043492,4045841,4048347,4055745,4062666,4065787,4067860,4068550,4068560,4069838,4069841,4072602,4072775,4073405,4073728,4073959,4074597,4074955,4076095,4076931,4076999,4078438,4078456,4078764,4079106,4079442,4079626,4079874,4079894,4079954,4080167,4081037,4081039,4082056,4082165,4082217,4082619,4083476,4084298,4084343,4084956,4085057,4085627,4086011,4086290,4086863,4087718,4087977,4088429,4088436,4088448,4088643,4089003,4089106,4089337,4089346,4089347,4089481,4089538,4089696,4089741,4089749,4089753,4090086,4090352,4090401,4090445,4090806,8300096,8300273,8300478,8506615,8507381,8507419,8507858,8507899,8508059,8508065,8508590,8508957,8509066,8509243,10200083,13500022',authuser:0,kscs:'c9c918f0_24'};google.kHL='fr';})();(function(){google.lc=[];google.li=0;google.getEI=function(a){for(var b;a&&(!a.getAttribute||!(b=a.getAttribute(\"eid\")));)a=a.parentNode;return b||google.kEI};google.getLEI=function(a){for(var b=null;a&&(!a.getAttribute||!(b=a.getAttribute(\"leid\")));)a=a.parentNode;return b};google.https=function(){return\"https:\"==window.location.protocol};google.ml=function(){return null};google.wl=function(a,b){try{google.ml(Error(a),!1,b)}catch(c){}};google.time=function(){return(new Date).getTime()};google.log=function(a,b,c,d,g){a=google.logUrl(a,b,c,d,g);if(\"\"!=a){b=new Image;var e=google.lc,f=google.li;e[f]=b;b.onerror=b.onload=b.onabort=function(){delete e[f]};window.google&&window.google.vel&&window.google.vel.lu&&window.google.vel.lu(a);b.src=a;google.li=f+1}};google.logUrl=function(a,b,c,d,g){var e=\"\",f=google.ls||\"\";c||-1!=b.search(\"&ei=\")||(e=\"&ei=\"+google.getEI(d),-1==b.search(\"&lei=\")&&(d=google.getLEI(d))&&(e+=\"&lei=\"+d));a=c||\"/\"+(g||\"gen_204\")+\"?atyp=i&ct=\"+a+\"&cad=\"+b+e+f+\"&zx=\"+google.time();/^http:/i.test(a)&&google.https()&&(google.ml(Error(\"a\"),!1,{src:a,glmm:1}),a=\"\");return a};google.y={};google.x=function(a,b){google.y[a.id]=[a,b];return!1};google.lq=[];google.load=function(a,b,c){google.lq.push([[a],b,c])};google.loadAll=function(a,b){google.lq.push([a,b])};}).call(this);(function(){var b=[function(){google.c&&google.tick(\"load\",\"dcl\")}];google.dcl=!1;google.dclc=function(a){google.dcl?a():b.push(a)};function c(){if(!google.dcl){google.dcl=!0;for(var a;a=b.shift();)a()}}window.addEventListener?(document.addEventListener(\"DOMContentLoaded\",c,!1),window.addEventListener(\"load\",c,!1)):window.attachEvent&&window.attachEvent(\"onload\",c);}).call(this);</script><script type=\"text/javascript\"></script><script>(function(){var a=function(f){for(var g=f.parentElement,d=null,e=0;e<g.childNodes.length;e++){var h=g.childNodes[e];-1<(\" \"+h.className+\" \").indexOf(\" am-dropdown-menu \")&&(d=h)}\"none\"==d.style.display?(d.style.display=\"\",google.log(\"hpam\",\"&ved=\"+f.getAttribute(\"data-ved\"))):d.style.display=\"none\"},b=[\"google\",\"sham\"],c=this;b[0]in c||!c.execScript||c.execScript(\"var \"+b[0]);for(var k;b.length&&(k=b.shift());)b.length||void 0===a?c[k]?c=c[k]:c=c[k]={}:c[k]=a;}).call(this);</script></head><body class=\"hsrp\" bgcolor=\"#ffffff\" marginheight=\"0\" marginwidth=\"0\" topmargin=\"0\"><div id=gbar><nobr><b class=gb1>Recherche</b> <a class=gb1 href=\"https://www.google.fr/search?hl=fr&tbm=isch&source=og&tab=wi\">Images</a> <a class=gb1 href=\"https://maps.google.fr/maps?hl=fr&tab=wl\">Maps</a> <a class=gb1 href=\"https://play.google.com/?hl=fr&tab=w8\">Play</a> <a class=gb1 href=\"https://www.youtube.com/results?gl=FR&tab=w1\">YouTube</a> <a class=gb1 href=\"https://news.google.fr/nwshp?hl=fr&tab=wn\">Actualits</a> <a class=gb1 href=\"https://mail.google.com/mail/?tab=wm\">Gmail</a> <a class=gb1 href=\"https://drive.google.com/?tab=wo\">Drive</a> <a class=gb1 style=\"text-decoration:none\" href=\"https://www.google.fr/intl/fr/options/\"><u>Plus</u> &raquo;</a></nobr></div><div id=guser width=100%><nobr><span id=gbn class=gbi></span><span id=gbf class=gbf></span><span id=gbe></span><a href=\"http://www.google.fr/history/optout?hl=fr\" class=gb4>Historique Web</a> | <a  href=\"/preferences?hl=fr\" class=gb4>Paramtres</a> | <a target=_top id=gb_70 href=\"https://accounts.google.com/ServiceLogin?hl=fr&passive=true&continue=https://www.google.fr/search%3Fq%3Dscapy\" class=gb4>Connexion</a></nobr></div><div class=gbh style=left:0></div><div class=gbh style=right:0></div><table id=\"mn\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"position:relative\"><tr><th width=\"132\"></th><th width=\"573\"></th><th width=\"278\"></th><th></th></tr><tr><td class=\"sfbgg\" valign=\"top\"><div id=\"logocont\"><h1><a href=\"/webhp?hl=fr\" style=\"background:url(/images/nav_logo229.png) no-repeat 0 -41px;height:37px;width:95px;display:block\" id=\"logo\" title=\"Go to Google Home\"></a></h1></div></td><td class=\"sfbgg\" colspan=\"2\" valign=\"top\" style=\"padding-left:0px\"><form style=\"display:block;margin:0;background:none\" action=\"/search\" id=\"tsf\" method=\"GET\" name=\"gs\"><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" style=\"margin-top:20px;position:relative\"><tr><td><div class=\"lst-a\"><table cellpadding=\"0\" cellspacing=\"0\"><tr><td class=\"lst-td\" width=\"555\" valign=\"bottom\"><div style=\"position:relative;zoom:1\"><input class=\"lst\" value=\"scapy\" title=\"Rechercher\" autocomplete=\"off\" id=\"sbhost\" maxlength=\"2048\" name=\"q\" type=\"text\"></div></td></tr></table></div></td><td><div class=\"ds\"><div class=\"lsbb\"><button class=\"lsb\" value=\"Rechercher\" name=\"btnG\" type=\"submit\"><span class=\"sbico\" style=\"background:url(/images/nav_logo229.png) no-repeat -36px -111px;height:14px;width:13px;display:block\"></span></button></div></div></td></tr></table></form></td><td class=\"sfbgg\">&nbsp;</td></tr><tr style=\"position:relative\"><td><div style=\"border-bottom:1px solid #ebebeb;height:59px\"></div></td><td colspan=\"2\"><div class=\"tn\"><div class=\"_UXb _Ihd _sxc _Hhd\">Tous</div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnms&amp;tbm=isch&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUIBQ\">Images</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnms&amp;tbm=vid&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUIBg\">Vidos</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnms&amp;tbm=nws&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUIBw\">Actualits</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnms&amp;tbm=shop&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUICA\">Shopping</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"https://maps.google.fr/maps?q=scapy&amp;um=1&amp;ie=UTF-8&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUICQ\">Maps</a></div><div class=\"_sxc\"><a class=\"_UXb _Jhd\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnms&amp;tbm=bks&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ_AUICg\">Livres</a></div></div><div style=\"border-bottom:1px solid #ebebeb;height:59px\"></div></td><td><div style=\"border-bottom:1px solid #ebebeb;height:59px\"></div></td></tr><tbody data-jibp=\"h\" data-jiis=\"uc\" id=\"desktop-search\"><style>._Bu,._Bu a:link,._Bu a:visited,a._Bu:link,a._Bu:visited{color:#808080}._kBb{color:#61C}.ellip{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}</style><tr><td id=\"leftnav\" valign=\"top\"><div><h2 class=\"hd\">Search Options</h2><ul class=\"med\" id=\"tbd\"><li><ul class=\"tbt\"><li class=\"tbos\" id=\"lr_\">Tous les pays</li><li class=\"tbou\" id=\"ctr_countryFR\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=ctr:countryFR&amp;cr=countryFR&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\">Pays: France</a></li></ul></li><li><ul class=\"tbt\"><li class=\"tbos\" id=\"lr_\">Toutes les langues</li><li class=\"tbou\" id=\"lr_lang_1fr\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=lr:lang_1fr&amp;lr=lang_fr&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\">Pages en franais</a></li></ul></li><li><ul class=\"tbt\"><li class=\"tbos\" id=\"qdr_\">Date indiffrente</li><li class=\"tbou\" id=\"qdr_h\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=qdr:h&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'une heure</a></li><li class=\"tbou\" id=\"qdr_d\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=qdr:d&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins de 24heures</a></li><li class=\"tbou\" id=\"qdr_w\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=qdr:w&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'une semaine</a></li><li class=\"tbou\" id=\"qdr_m\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=qdr:m&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'un mois</a></li><li class=\"tbou\" id=\"qdr_y\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=qdr:y&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\"> Moins d'un an</a></li></ul></li><li><ul class=\"tbt\"><li class=\"tbos\" id=\"li_\">Tous les rsultats</li><li class=\"tbou\" id=\"li_1\"><a class=\"q\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;source=lnt&amp;tbs=li:1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQpwUIDw\">Mot  mot</a></li></ul></li></ul></div></td><td valign=\"top\"><div id=\"center_col\"><div class=\"sd\" id=\"resultStats\">Environ 190&#160;000rsultats</div><div id=\"res\"><div id=\"topstuff\"></div><div id=\"search\"><div id=\"ires\"><ol><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.secdev.org/projects/scapy/&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFggUMAA&amp;usg=AFQjCNHHk3EY8Z1PU7DjcAlkG4Rc3Vs59g\"><b>Scapy</b> - SecDev.org</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.secdev.org/projects/<b>scapy</b>/</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IFTAA\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:AsiFNhlH2pkJ:http://www.secdev.org/projects/scapy/%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgXMAA&amp;usg=AFQjCNEsc6oKXOBbiQdnyv1LzA4BeD0E5g\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:www.secdev.org/projects/scapy/+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgYMAA\">Pages similaires</a></li></ul></div></div></div><span class=\"st\"><b>Scapy</b> is a powerful interactive packet manipulation program. It is able to forge or <br>\n",
        "decode packets of a wide number of protocols, send them on the wire, capture&nbsp;...</span><br><div class=\"osl\"><a href=\"/url?q=http://www.secdev.org/projects/scapy/doc/&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIGigAMAA&amp;usg=AFQjCNEIwIcroh5YAfGR-I7GYFdLicNWEA\">Scapy's documentation!</a> - <a href=\"/url?q=http://www.secdev.org/projects/scapy/doc/usage.html&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIGygBMAA&amp;usg=AFQjCNFmd-7Kib8a4LCin1kc0GJ50BIS4A\">Usage</a> - <a href=\"/url?q=http://www.secdev.org/projects/scapy/demo.html&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIHCgCMAA&amp;usg=AFQjCNHVs60uzwQshH24gRG8SJd6_UG5ww\">Quick demo : an interactive</a> - <a href=\"/url?q=http://www.secdev.org/projects/scapytain/&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIHSgDMAA&amp;usg=AFQjCNEQizwKXdatZ7llosjxF90Qq1GZ0w\">Scapytain</a></div></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.secdev.org/projects/scapy/doc/usage.html&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFggfMAE&amp;usg=AFQjCNFmd-7Kib8a4LCin1kc0GJ50BIS4A\">Usage &#8212; <b>Scapy</b> v2.1.1-dev documentation - SecDev.org</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.secdev.org/projects/<b>scapy</b>/doc/usage.html</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IIDAB\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:IkQlsPcbaVUJ:http://www.secdev.org/projects/scapy/doc/usage.html%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgiMAE&amp;usg=AFQjCNFm83gItGADS_RWIfcNKm10GZzLbQ\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:www.secdev.org/projects/scapy/doc/usage.html+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgjMAE\">Pages similaires</a></li></ul></div></div></div><span class=\"st\"><b>Scapy&#39;s</b> interactive shell is run in a terminal session. Root privileges are needed <br>\n",
        "to send the packets, so we&#39;re using sudo here: $ sudo <b>scapy</b> Welcome to <b>Scapy</b>&nbsp;...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=https://openclassrooms.com/courses/manipulez-les-paquets-reseau-avec-scapy&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFgglMAI&amp;usg=AFQjCNFkskYeH2yXFnaeEQNJg5U9OW6vcQ\">Manipulez les paquets rseau avec <b>Scapy</b> - OpenClassrooms</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://openclassrooms.com/.../manipulez-les-paquets-reseau-avec-<b>scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IJjAC\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:S5DdkssTWs4J:https://openclassrooms.com/courses/manipulez-les-paquets-reseau-avec-scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgoMAI&amp;usg=AFQjCNGLpLwzu508SzQHsP-Uf4wqZah87A\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:https://openclassrooms.com/courses/manipulez-les-paquets-reseau-avec-scapy+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgpMAI\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">20 nov. 2013 <b>...</b> <b>Scapy</b> est un module pour Python permettant de forger, envoyer, rceptionner et <br>\n",
        "manipuler des paquets rseau. Si le rseau vous intresse et&nbsp;...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFggsMAM&amp;usg=AFQjCNGTIivLQi0XfgwYnADPhMZKZ5S1cA\"><b>Scapy</b> &#8212; Wikipdia</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://fr.wikipedia.org/wiki/<b>Scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0ILTAD\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:MsdDsl0QNWcJ:https://fr.wikipedia.org/wiki/Scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAgvMAM&amp;usg=AFQjCNFCwGW84n_OO6XIlEpMhfrvke6c-A\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:https://fr.wikipedia.org/wiki/Scapy+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwgwMAM\">Pages similaires</a></li></ul></div></div></div><span class=\"st\"><b>Scapy</b> est un logiciel libre de manipulation de paquets rseau crit en python. Il <br>\n",
        "est capable, entre autres, d&#39;intercepter le trafic sur un segment rseau,&nbsp;...</span><br><div class=\"osl\"><a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy%23Avantages_de_scapy&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIMigAMAM&amp;usg=AFQjCNHuBGOX0rv-ULqfquUn6FFIQJrj5g\">Avantages de scapy</a> - <a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy%23Exemple_d.27utilisation_de_scapy&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIIMygBMAM&amp;usg=AFQjCNFRbPAXgHtzI2eifsA1SLsqNAh6AQ\">Exemple d'utilisation de scapy</a> - <a href=\"/url?q=https://fr.wikipedia.org/wiki/Scapy%23Notes_et_r.C3.A9f.C3.A9rences&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ0gIINCgCMAM&amp;usg=AFQjCNGgp4vZufO23i8NlSEK_R2GflOzTg\">Notes et rfrences</a></div></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.lestutosdenico.com/tutos-de-nico/scapy&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFgg2MAQ&amp;usg=AFQjCNGJgAUj5uKjpIlgONJAh773FzsVhQ\"><b>Scapy</b> | Les Tutos de Nico</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.lestutosdenico.com/tutos-de-nico/<b>scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0INzAE\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:n5JD9BgFDtkJ:http://www.lestutosdenico.com/tutos-de-nico/scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAg5MAQ&amp;usg=AFQjCNEoq44xVCpsMHTwrp1z672VVGWKhQ\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:www.lestutosdenico.com/tutos-de-nico/scapy+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwg6MAQ\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">26 avr. 2010 <b>...</b> <b>Scapy</b> est un outil Open Source crit par Philippe Biondi. Cet utilitaire permet de <br>\n",
        "manipuler, forger, dcoder, mettre, recevoir les paquets&nbsp;...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=https://github.com/secdev/scapy&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFgg9MAU&amp;usg=AFQjCNFx6X4HyjoLtnHCYRzeN9IHyxPGjw\">GitHub - secdev/<b>scapy</b>: <b>Scapy</b>: the python-based interactive packet ...</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://github.com/secdev/<b>scapy</b></cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IPjAF\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:t5CFO8vxr4IJ:https://github.com/secdev/scapy%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhAMAU&amp;usg=AFQjCNFTiv8yTtMV3mQuth-8uadrLURtOQ\">En cache</a></li></ul></div></div></div><span class=\"st\"><b>scapy</b> - <b>Scapy</b>: the python-based interactive packet manipulation program &amp; <br>\n",
        "library.</span><br></div></div><div class=\"g\"><span style=\"float:left\"><span class=\"mime\">[PDF]</span>&nbsp;</span><h3 class=\"r\"><a href=\"/url?q=https://repo.zenk-security.com/Protocoles_reseaux_securisation/Les%2520Fourberies%2520de%2520Scapy.pdf&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghCMAY&amp;usg=AFQjCNGvyyIgBp3Yf9bDRHx4ytFleXOi5w\">Les Fourberies de <b>Scapy</b> - Zenk - Security - Repository</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>https://repo.zenk-security.com/.../Les%20Fourberies%20de%20<b>Scapy</b>.pdf</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IQzAG\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:1s5MetOx54YJ:https://repo.zenk-security.com/Protocoles_reseaux_securisation/Les%252520Fourberies%252520de%252520Scapy.pdf%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhFMAY&amp;usg=AFQjCNHM9Qr918qAuwPiolGK1lPkSyKJyg\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:https://repo.zenk-security.com/Protocoles_reseaux_securisation/Les%2520Fourberies%2520de%2520Scapy.pdf+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhGMAY\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">Python &amp; <b>Scapy</b> : cration de module ou de programme . . . . . . . . . . . . . . . . . . 12. <br>\n",
        "3.1. Python &amp; <b>Scapy</b> .... 16 change de paquet de Wireshark vers <b>Scapy</b> .</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://www.chambeyron.fr/index.php/systeme-reseaux/scapy/8-scapy-les-bases&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghIMAc&amp;usg=AFQjCNE3evvKKx60Iee3ZBiIOTjDlDzKxw\">Tutorial <b>Scapy</b>, introduction - Le blog de Thierry</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>www.chambeyron.fr/index.php/systeme.../<b>scapy</b>/8-<b>scapy</b>-les-bases</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0ISTAH\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:MgSbFi6VkXEJ:http://www.chambeyron.fr/index.php/systeme-reseaux/scapy/8-scapy-les-bases%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhLMAc&amp;usg=AFQjCNG4PtbkImAAhScSjauv2Yz6WYyh4g\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:www.chambeyron.fr/index.php/systeme-reseaux/scapy/8-scapy-les-bases+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhMMAc\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">19 sept. 2014 <b>...</b> Pour connaitre la liste des commandes <b>scapy</b> &gt;&gt;&gt; lsc() arpcachepoison : Poison <br>\n",
        "target&#39;s cache with (your MAC,victim&#39;s IP) couple arping : Send&nbsp;...</span><br></div></div><div class=\"g\"><span style=\"float:left\"><span class=\"mime\">[PDF]</span>&nbsp;</span><h3 class=\"r\"><a href=\"/url?q=http://repository.root-me.org/R%25C3%25A9seau/FR%2520-%2520Scapy%2520en%2520pratique.pdf&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghPMAg&amp;usg=AFQjCNFqXSQxPzYTmmJJLOXP7WO4d2tVHQ\"><b>Scapy</b> en pratique - Repository Root Me</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>repository.root-me.org/.../FR%20-%20<b>Scapy</b>%20en%20pratique.pdf</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IUDAI\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:wLJc7aETkU0J:http://repository.root-me.org/R%2525C3%2525A9seau/FR%252520-%252520Scapy%252520en%252520pratique.pdf%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhSMAg&amp;usg=AFQjCNHKUYiTHTN6P3CoJBK8Cwy22rSsPg\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:repository.root-me.org/R%25C3%25A9seau/FR%2520-%2520Scapy%2520en%2520pratique.pdf+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhTMAg\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">17 mai 2008 <b>...</b> <b>Scapy</b> en pratique. PyCON FR &#8211; 17 Mai 2008 - Renaud Lifchitz. 3. Qu&#39;est-ce <br>\n",
        "que <b>Scapy</b> ? Prsentation gnrale. &#9675;. Interprteur Python&nbsp;...</span><br></div></div><div class=\"g\"><h3 class=\"r\"><a href=\"/url?q=http://blog.madpowah.org/articles/scapy/index.html&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQFghWMAk&amp;usg=AFQjCNGKKokeKOYEfr8s0KWmv3qNlOYEww\">[How To]Utilisation de <b>Scapy</b> | cloud&#39;s Blog</a></h3><div class=\"s\"><div class=\"kv\" style=\"margin-bottom:2px\"><cite>blog.madpowah.org/articles/<b>scapy</b>/index.html</cite><div class=\"_nBb\"><div style=\"display:inline\" onclick=\"google.sham(this);\" aria-expanded=\"false\" aria-haspopup=\"true\" tabindex=\"0\" data-ved=\"0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ7B0IVzAJ\"><span class=\"_O0\"></span></div><div style=\"display:none\" class=\"am-dropdown-menu\" role=\"menu\" tabindex=\"-1\"><ul><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/url?q=http://webcache.googleusercontent.com/search%3Fq%3Dcache:CAMle-GMFucJ:http://blog.madpowah.org/articles/scapy/index.html%252Bscapy%26hl%3Dfr%26ct%3Dclnk&amp;sa=U&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQIAhZMAk&amp;usg=AFQjCNGndKUe71tN35JPcUMSrK6-y8_5QQ\">En cache</a></li><li class=\"_Ykb\"><a class=\"_Zkb\" href=\"/search?ie=UTF-8&amp;q=related:blog.madpowah.org/articles/scapy/index.html+scapy&amp;tbo=1&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQHwhaMAk\">Pages similaires</a></li></ul></div></div></div><span class=\"st\">18 sept. 2008 <b>...</b> <b>Scapy</b> est un logiciel dvelopp en python qui permet de forger des paquets, de <br>\n",
        "sniffer et de faire bien d&#39;autres actions bien utiles pour faire du&nbsp;...</span><br></div></div></ol></div></div></div><div style=\"clear:both;margin-bottom:17px;overflow:hidden\"><div style=\"font-size:16px;padding:0 8px 1px\">Recherches associes \"<b>scapy</b>\"</div><table border=\"0\" cellpadding=\"0\" cellspacing=\"0\"><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+windows&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIXigA\">scapy <b>windows</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+github&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIXygB\">scapy <b>github</b></a></p></td></tr><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+tutorial&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYCgC\">scapy <b>tutorial</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+python+3&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYSgD\">scapy <b>python 3</b></a></p></td></tr><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+sniff&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYigE\">scapy <b>sniff</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+pcap&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIYygF\">scapy <b>pcap</b></a></p></td></tr><tr><td valign=\"top\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+documentation&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIZCgG\">scapy <b>documentation</b></a></p></td><td valign=\"top\" style=\"padding-left:10px\"><p class=\"_Bmc\" style=\"margin:3px 8px\"><a href=\"/search?ie=UTF-8&amp;q=scapy+pdf&amp;sa=X&amp;ved=0ahUKEwift9bD2vHQAhVC2RoKHQJGAAoQ1QIIZSgH\">scapy <b>pdf</b></a></p></td></tr></table></div></div><div id=\"foot\"><table align=\"center\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" id=\"nav\"><tr valign=\"top\"><td align=\"left\" class=\"b\"><span class=\"csb\" style=\"background-position:-24px 0;width:28px\"></span><b></b></td><td><span class=\"csb\" style=\"background-position:-53px 0;width:20px\"></span><b>1</b></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=10&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>2</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=20&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>3</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=30&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>4</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=40&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>5</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=50&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>6</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=60&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>7</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=70&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>8</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=80&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>9</a></td><td><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=90&amp;sa=N\"><span class=\"csb\" style=\"background-position:-74px 0;width:20px\"></span>10</a></td><td class=\"b\" style=\"text-align:left\"><a class=\"fl\" href=\"/search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns&amp;ei=kzFQWN-hEcKya4KMgVA&amp;start=10&amp;sa=N\" style=\"text-align:left\"><span class=\"csb\" style=\"background-position:-96px 0;width:71px\"></span><span style=\"display:block;margin-left:53px\">Suivant</span></a></td></tr></table><p class=\"_cD\" id=\"bfl\" style=\"margin:19px 0 0;text-align:center\"><a href=\"/advanced_search?q=scapy&amp;ie=UTF-8&amp;prmd=ivns\">Recherche avance</a><a href=\"/support/websearch/bin/answer.py?answer=134479&amp;hl=fr\">Aide sur la recherche</a> <a href=\"/tools/feedback/survey/html?productId=196&amp;query=scapy&amp;hl=fr\">Envoyer des commentaires</a></p><div class=\"_cD\" id=\"fll\" style=\"margin:19px auto 19px auto;text-align:center\"><a href=\"/\">Accueil&nbsp;Google</a> <a href=\"/intl/fr/ads\">Publicit</a> <a href=\"/intl/fr/policies/privacy/\">Confidentialit</a> <a href=\"/intl/fr/policies/terms/\">Conditions</a> <a href=\"/intl/fr/about.html\"> propos de Google</a></div></div></td><td id=\"rhs_block\" valign=\"top\"></td></tr></tbody></table><script type=\"text/javascript\">(function(){var eventid='kzFQWN-hEcKya4KMgVA';google.kEI = eventid;})();</script><script src=\"/xjs/_/js/k=xjs.hp.en_US.WN3XpSz-BG8.O/m=sb_he,d/rt=j/d=1/t=zcms/rs=ACT90oGvdHa7TL2W_IQX1s5BPxYIHeUvhQ\"></script><script type=\"text/javascript\">google.ac&&google.ac.c({\"agen\":true,\"cgen\":true,\"client\":\"heirloom-serp\",\"dh\":true,\"dhqt\":true,\"ds\":\"\",\"fl\":true,\"host\":\"google.fr\",\"isbh\":28,\"jam\":0,\"jsonp\":true,\"lm\":true,\"msgs\":{\"cibl\":\"Effacer la recherche\",\"dym\":\"Essayez avec cette orthographe :\",\"lcky\":\"J\\u0026#39;ai de la chance\",\"lml\":\"En savoir plus\",\"oskt\":\"Outils de saisie\",\"psrc\":\"Cette suggestion a bien t supprime de votre \\u003Ca href=\\\"/history\\\"\\u003Ehistorique Web\\u003C/a\\u003E.\",\"psrl\":\"Supprimer\",\"sbit\":\"Recherche par image\",\"srch\":\"Recherche Google\"},\"nds\":true,\"ovr\":{},\"pq\":\"scapy\",\"refpd\":true,\"rfs\":[\"scapy windows\",\"scapy tutorial\",\"scapy sniff\",\"scapy documentation\",\"scapy github\",\"scapy python 3\",\"scapy pcap\",\"scapy pdf\"],\"scd\":10,\"sce\":5,\"stok\":\"v9hn9ENPV2Cq1VDAu6ud56TzkyQ\"})</script><script>(function(){window.google.cdo={height:0,width:0};(function(){var a=window.innerWidth,b=window.innerHeight;if(!a||!b)var c=window.document,d=\"CSS1Compat\"==c.compatMode?c.documentElement:c.body,a=d.clientWidth,b=d.clientHeight;a&&b&&(a!=google.cdo.width||b!=google.cdo.height)&&google.log(\"\",\"\",\"/client_204?&atyp=i&biw=\"+a+\"&bih=\"+b+\"&ei=\"+google.kEI);}).call(this);})();</script></body></html>"
       ],
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 141,
       "text": [
        "<IPython.core.display.HTML at 0x7f26f59e9e10>"
       ]
      }
     ],
     "prompt_number": 141
    }
   ],
   "metadata": {}
  }
 ]
}