<pre style='margin:0'>
tobypeterson pushed a commit to branch master
in repository macports-ports.

</pre>
<p><a href="https://github.com/macports/macports-ports/commit/767a2e4782c6067a822dd4c858ad406151fd2303">https://github.com/macports/macports-ports/commit/767a2e4782c6067a822dd4c858ad406151fd2303</a></p>
<pre style="white-space: pre; background: #F8F8F8">The following commit(s) were added to refs/heads/master by this push:
<span style='display:block; white-space:pre;color:#404040;'>     new 767a2e4782c py-mitmproxy: update to version 5.2
</span>767a2e4782c is described below

<span style='display:block; white-space:pre;color:#808000;'>commit 767a2e4782c6067a822dd4c858ad406151fd2303
</span>Author: Edwar D Day <4127904+EdwarDDay@users.noreply.github.com>
AuthorDate: Sun Aug 2 16:11:41 2020 +0200

<span style='display:block; white-space:pre;color:#404040;'>    py-mitmproxy: update to version 5.2
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    * remove unneeded patches
</span><span style='display:block; white-space:pre;color:#404040;'>    * remove variant because tornado doesn't need to be downgraded anymore
</span><span style='display:block; white-space:pre;color:#404040;'>    
</span><span style='display:block; white-space:pre;color:#404040;'>    Closes: https://trac.macports.org/ticket/60679
</span>---
 python/py-mitmproxy/Portfile                  |  71 +--
 python/py-mitmproxy/files/mojave.patch        |  32 --
 python/py-mitmproxy/files/no-onboarding.patch |  20 -
 python/py-mitmproxy/files/pytest4.patch       |  15 -
 python/py-mitmproxy/files/update-certs.patch  | 747 --------------------------
 python/py-mitmproxy/files/version-test.patch  |  10 +
 python/py-mitmproxy/files/wsproto0.13.patch   | 294 ----------
 7 files changed, 34 insertions(+), 1155 deletions(-)

<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/Portfile b/python/py-mitmproxy/Portfile
</span><span style='display:block; white-space:pre;color:#808080;'>index 417e7db50ee..9e70adfe60d 100644
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-mitmproxy/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-mitmproxy/Portfile
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -5,41 +5,33 @@ PortGroup           python 1.0
</span> PortGroup           github 1.0
 
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-github.setup        mitmproxy mitmproxy 4.0.4 v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-revision            4
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+github.setup        mitmproxy mitmproxy 5.2 v
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+revision            0
</span> 
 name                py-${github.project}
 
 categories-append   net www
 platforms           darwin
 supported_archs     noarch
<span style='display:block; white-space:pre;background:#ffe0e0;'>-license             {GPL-3+ OpenSSLException}
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+license             {MIT}
</span> maintainers         {petr @petrrr} openmaintainer
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-description         SSL-capable man-in-the-middle proxy for HTTP
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+description         SSL/TLS-capable man-in-the-middle proxy for HTTP and Websockets
</span> long_description    \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    mitmproxy is an SSL-capable man-in-the-middle proxy for HTTP. It provides \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    a console interface that allows traffic flows to be inspected and edited \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    on the fly. mitmdump is the command-line version of mitmproxy, with the \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    same functionality but without the user interface. Think tcpdump for HTTP.
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    mitmproxy is an SSL/TLS-capable man-in-the-middle proxy for HTTP/1, HTTP/2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    and Websockets. It provides a console interface that allows traffic flows \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    to be inspected and edited on the fly. mitmdump is the command-line version \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    of mitmproxy, with the same functionality but without the user interface. \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    Think tcpdump for HTTP.
</span> 
 homepage            https://mitmproxy.org/
 
<span style='display:block; white-space:pre;background:#ffe0e0;'>-checksums           md5     d9f58513ab46777b60c15bff52a2239b \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    rmd160  6532da521d55dffa508123831113b41252c03c3e \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    sha256  313c6aa2e801b3743a1fad57fdf6f1e8b001ea3a7a7744394fc48cc3f9512553 \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    size    27132072
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# update_certs: https://github.com/mitmproxy/mitmproxy/issues/3316
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# wsproto0.13: https://github.com/mitmproxy/mitmproxy/pull/3459
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# pytest4: https://github.com/mitmproxy/mitmproxy/pull/3403
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# mojave: https://github.com/mitmproxy/mitmproxy/pull/3437
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-# The onboarding addon is incompatible with Tornado 6.x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-patchfiles          update-certs.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    wsproto0.13.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    pytest4.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    mojave.patch \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                    no-onboarding.patch
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+checksums           md5     7149b0a4ad86b6895db5640c542d307a \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    rmd160  a05901d0588340430e82ea4952cc3274ddbd2a1e \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    sha256  9d3de6e843fca745336b419b3a9e416350c7c0cd2865f72bec5d5b001e36b797 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                    size    27252777
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+patchfiles          version-test.patch
</span> 
 python.versions     37 38
 
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -48,10 +40,11 @@ if {${name} ne ${subport}} {
</span> 
     depends_lib-append      port:py${python.version}-asn1 \
                             port:py${python.version}-blinker \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                            port:py${python.version}-brotlipy \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-brotli \
</span>                             port:py${python.version}-click \
                             port:py${python.version}-certifi \
                             port:py${python.version}-cryptography \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-flask \
</span>                             port:py${python.version}-h2 \
                             port:py${python.version}-hyperframe \
                             port:py${python.version}-kaitaistruct \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -59,19 +52,22 @@ if {${name} ne ${subport}} {
</span>                             port:py${python.version}-openssl \
                             port:py${python.version}-parsing \
                             port:py${python.version}-passlib \
<span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-publicsuffix2 \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-protobuf3 \
</span>                             port:py${python.version}-pyperclip \
                             port:py${python.version}-ruamel-yaml \
                             port:py${python.version}-ruamel-yaml-clib \
                             port:py${python.version}-sortedcontainers \
                             port:py${python.version}-tornado \
                             port:py${python.version}-urwid \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                            port:py${python.version}-wsproto
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-wsproto \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-zstd
</span> 
     # Testing dependencies
     depends_test-append     port:py${python.version}-pytest \
                             port:py${python.version}-asynctest \
                             port:py${python.version}-beautifulsoup4 \
<span style='display:block; white-space:pre;background:#ffe0e0;'>-                            port:py${python.version}-flask \
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+                            port:py${python.version}-hypothesis \
</span>                             port:py${python.version}-pytest-asyncio \
                             port:py${python.version}-tz \
                             port:py${python.version}-parver \
<span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -83,27 +79,8 @@ if {${name} ne ${subport}} {
</span>     }
 
     test.run yes
<span style='display:block; white-space:pre;background:#ffe0e0;'>-    test.cmd py.test-${python.branch}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    test.args --ignore=test/mitmproxy/addons/test_onboarding.py \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              --ignore=test/mitmproxy/proxy/test_server.py \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              --ignore=test/mitmproxy/net/test_tcp.py \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-              --ignore=test/mitmproxy/net/test_tls.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    variant onboardingapp description {Enable the onboarding app} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        patchfiles-delete       no-onboarding.patch
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        depends_lib-replace     port:py${python.version}-tornado \
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                                port:py${python.version}-tornado5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        test.args-delete        --ignore=test/mitmproxy/addons/test_onboarding.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    if {![variant_isset onboardingapp]} {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        notes {
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            The onboarding app (for intercepting http://mitm.it and serving MITM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            CA certificates) is disabled by default due to incompatibility with
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tornado 6.x. Please use the +onboardingapp variant to install older
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-            Tornado and enable them.
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        }
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    }
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    # ignore pytest.PytestDeprecationWarning since pytest 6
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+    test.cmd py.test-${python.branch} -W ignore::pytest.PytestDeprecationWarning
</span> 
     livecheck.type  none
 } else {
<span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/files/mojave.patch b/python/py-mitmproxy/files/mojave.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 0e4559f1fd9..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-mitmproxy/files/mojave.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,32 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From cc33f40f29dcd250e2dc3df77412fdec91f2d4eb Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Chih-Hsuan Yen <yen@chyen.cc>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Sat, 29 Dec 2018 21:24:46 +0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] Fix a failing test on macOS Mojave
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test/mitmproxy/test_proxy.py | 6 +++++-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 5 insertions(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/test_proxy.py test/mitmproxy/test_proxy.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 00086c4b5..c8cf6c334 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/test_proxy.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/test_proxy.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,4 +1,5 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import argparse
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+import platform
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from unittest import mock
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import pytest
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -52,8 +53,11 @@ def test_certs(self, tdata):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- class TestProxyServer:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     @skip_windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    @pytest.mark.skipif(platform.mac_ver()[0].split('.')[:2] == ['10', '14'],
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                        reason='Skipping due to macOS Mojave')
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def test_err(self):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        # binding to 0.0.0.0:1 works without special permissions on Windows
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        # binding to 0.0.0.0:1 works without special permissions on Windows and
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        # macOS Mojave
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         conf = ProxyConfig(options.Options(listen_port=1))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         with pytest.raises(Exception, match="Error starting proxy server"):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             ProxyServer(conf)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/files/no-onboarding.patch b/python/py-mitmproxy/files/no-onboarding.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 90b695192ad..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-mitmproxy/files/no-onboarding.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,20 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git mitmproxy/addons/__init__.py mitmproxy/addons/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 838fba9b..5d21bf68 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- mitmproxy/addons/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ mitmproxy/addons/__init__.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -8,7 +8,6 @@ from mitmproxy.addons import core
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy.addons import cut
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy.addons import disable_h2c
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy.addons import export
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--from mitmproxy.addons import onboarding
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy.addons import proxyauth
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy.addons import replace
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy.addons import script
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -33,7 +32,6 @@ def default_addons():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         cut.Cut(),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         disable_h2c.DisableH2C(),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         export.Export(),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        onboarding.Onboarding(),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         proxyauth.ProxyAuth(),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         replace.Replace(),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         script.ScriptLoader(),
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/files/pytest4.patch b/python/py-mitmproxy/files/pytest4.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 82e15b22f7c..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-mitmproxy/files/pytest4.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,15 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/addons/test_readfile.py test/mitmproxy/addons/test_readfile.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 3d28d8b7d..94e18cdb3 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/addons/test_readfile.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/addons/test_readfile.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -30,8 +30,8 @@ def data():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- @pytest.fixture
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--def corrupt_data():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    f = data()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+def corrupt_data(data):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    f = io.BytesIO(data.getvalue())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     f.seek(0, io.SEEK_END)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     f.write(b"qibble")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     f.seek(0)
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/files/update-certs.patch b/python/py-mitmproxy/files/update-certs.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 618745644c4..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-mitmproxy/files/update-certs.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,747 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 1b6a8d6acd3d70f9b9627ad4ae9def08103f8250 Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: Maximilian Hils <git@maximilianhils.com>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Fri, 7 Sep 2018 10:24:28 +0200
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH] fix #3316
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test/mitmproxy/data/servercert/9da13359.0     | 32 +++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- test/mitmproxy/data/servercert/generate.py    | 13 +++
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../mitmproxy/data/servercert/self-signed.pem | 92 +++++++++---------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/servercert/trusted-leaf.pem          | 90 ++++++++---------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/servercert/trusted-root.pem          | 96 +++++++++----------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../net/data/verificationcerts/9da13359.0     | 32 +++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../net/data/verificationcerts/generate.py    |  6 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/self-signed.crt    | 34 +++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/self-signed.key    | 50 +++++-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/trusted-leaf.crt   | 28 +++---
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/trusted-leaf.key   | 50 +++++-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/trusted-root.crt   | 32 +++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/trusted-root.key   | 50 +++++-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- .../data/verificationcerts/trusted-root.srl   |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 14 files changed, 310 insertions(+), 297 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- create mode 100644 test/mitmproxy/data/servercert/generate.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/data/servercert/9da13359.0 test/mitmproxy/data/servercert/9da13359.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index b22e4d20d..5868a304d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/data/servercert/9da13359.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/data/servercert/9da13359.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,21 +1,21 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIDXTCCAkWgAwIBAgIJAPAfPQGCV/Z4MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIDXTCCAkWgAwIBAgIJALzkvKyFAwWYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--aWRnaXRzIFB0eSBMdGQwHhcNMTUxMTAxMTY0ODAxWhcNMTgwODIxMTY0ODAxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+aWRnaXRzIFB0eSBMdGQwHhcNMTgwOTA3MDgyMjUxWhcNMzgwOTAyMDgyMjUxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--CgKCAQEArp8LD34JhKCwcQbwIYQMg4+eCgLVN8fwB7+/qOfJbArPs0djFBN+F7c6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--HGvMr24BKUk5u8pn4dPtNurm/vPC8ovNGmcXz62BQJpcMX2veVdRsF7yNwhNacNJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Arq+70zNMwYBznx0XUxMF6j6nVFf3AW6SU04ylT4Mp3SY/BUUDAdfl1eRo0mPLNS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8rpsN+8YBw1Q7SCuBRVqpOgVIsL88svgQUSOlzvMZPBpG/cmB3BNKNrltwb5iFEI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1jAV7uSj5IcIuNO/246kfsDVPTFMJIzav/CUoidd5UNw+SoFDlzh8sA7L1Bm7D1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--3KHYSKswGsSR3kynAl10w/SJKDtn8wIDAQABo1AwTjAdBgNVHQ4EFgQUgOcrtxBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LxbpnOT65d+vpfyWUkgwHwYDVR0jBBgwFoAUgOcrtxBXLxbpnOT65d+vpfyWUkgw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAEE9bFmUCA+6cvESKPoi2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--TGSpV652d0xd2U66LpEXeiWRJFLz8YGgoJCx3QFGBscJDXxrLxrBBBV/tCpEqypo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--pYIqsawH7M66jpOr83Us3M8JC2eFBZJocMpXxdytWqHik5VKZNx6VQFT8bS7+yVC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VoUKePhlgcg+pmo41qjqieBNKRMh/1tXS77DI1lgO5wZLVrLXcdqWuDpmaQOKJeq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--G/nxytCW/YJA7bFn/8Gjy8DYypJSeeaKu7o3P3+ONJHdIMHb+MdcheDBS9AOFSeo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--xI0D5EbO9F873O77l7nbD7B0X34HFN0nGczC4poexIpbDFG3hAPekwZ5KC6VwJLc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1Q==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+CgKCAQEAkvT4Y1ML8Gg4x5aFVygIW022tJsEyfuW4HsEvIarAGpFtUNkw0dOoAxv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Gv71I0KAWOXxtc9DUjtq7ZXJcG+dBiheTYJ40lrYhHvUt7J37nrUF5v5trQzoE9I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6WGtzTV8C8RI6F+M6GtwxgwRBgqkuXiK5ExPXAjGMMJZWtiEXHxGTNB6F4zy884m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VjVtQi8jy+c5g21Awp3z5HrQLM210zwvgi7Rygk6/UM0AnmST4o32SqFSd+0MFUJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+f3pH3xczfKmhU/TBoVEWRB1YzwixsJrzDOB8wOGnNKCsl45hYUJZZ8epVkyrvFZQ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+iMkwIqqBJbkU6H7fZBl68TJ8ascUCQIDAQABo1AwTjAdBgNVHQ4EFgQUkurgHlw1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xMP2wrsrGPTk0ofxCyowHwYDVR0jBBgwFoAUkurgHlw1xMP2wrsrGPTk0ofxCyow
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAcdExVlSvH6aVExNiQO3k
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cMamj+78woDn9x563vwzaGP24KvOXk1B/IJp5kqu3ZsXS0I0Mz6xwXHAXeuxaj06
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cKgEpHKKgClLblXo2zWqo/3V1UFFpOVP/NhI3r21b+fPrS46rP0mw75haQCph8/8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+buQr0OeAYbElliY/ji+cJiCJB8A/D13fUMV/NUUfPW/UE6497jOmz+6PtZNAoOFx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+evrmDcbCzbJxacyLJX04rsrt6DO09jb/+5lFm5Aqr6ySKasrmheIGEisl4o9Zbuy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5PvYgbOEmFgPATIiWGpBO/rqwDdsmgyYFl+YfFoW0akXUVhDb2e5iRDx6Rs0fmN/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NA==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/data/servercert/generate.py test/mitmproxy/data/servercert/generate.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-new file mode 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 000000000..604912679
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- /dev/null
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/data/servercert/generate.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -0,0 +1,13 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+import pathlib
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+import shutil
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+src = pathlib.Path("../../net/data/verificationcerts")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+here = pathlib.Path(".")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+shutil.copy(src / "9da13359.0", "9da13359.0")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+for x in ["self-signed", "trusted-leaf", "trusted-root"]:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    (here / f"{x}.pem").write_text(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        (src / f"{x}.crt").read_text() +
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        (src / f"{x}.key").read_text()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/data/servercert/self-signed.pem test/mitmproxy/data/servercert/self-signed.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index cd066a243..d35284bda 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/data/servercert/self-signed.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/data/servercert/self-signed.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,46 +1,46 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIDEzCCAfugAwIBAgIJAJ945xt1FRsfMA0GCSqGSIb3DQEBCwUAMCAxHjAcBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzAeFw0xNTExMDExNjQ4MDJaFw0xODA4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MjExNjQ4MDJaMCAxHjAcBgNVBAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzCCASIw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALFxyzPfjgIghOMMnJlW80yB84xC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--nJtko3tuyOdozgTCyha2W+NdIKPNZJtWrzN4P0B5PlozCDwfcSYffLs0WZs8LRWv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BfZX8+oX+14qQjKFsiqgO65cTLP3qlPySYPJQQ37vOP1Y5Yf8nQq2mwQdC18hLtT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--QOANG6OFoSplpBLsYF+QeoMgqCTa6hrl/5GLmQoDRTjXkv3Sj379AUDMybuBqccm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--q5EIqCrE4+xJ8JywJclAVn2YP14baiFrrYCsYYg4sS1Od6xFj+xtpLe7My3AYjB9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/aeHd8vDiob0cqOW1TFwhqgJKuErfFyg8lZ2hJmStJKyfofWuY/gl/vnvX0CAwEA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--AaNQME4wHQYDVR0OBBYEFB8d32zK8eqZIoKw4jXzYzhw4amPMB8GA1UdIwQYMBaA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--FB8d32zK8eqZIoKw4jXzYzhw4amPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BQADggEBAJmo2oKv1OEjZ0Q4yELO6BAnHAkmBKpW+zmLyQa8idxtLVkI9uXk3iqY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--GWugkmcUZCTVFRWv/QXQQSex+00IY3x2rdHbtuZwcyKiz2u8WEmfW1rOIwBaFJ1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--v7+SA2aZs6vepN2sE56X54c/YbwQooaKZtOb+djWXYMJrc/Ezj0J7oQIJTptYV8v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/3216yCHRp/KCL7yTLtiw25xKuXNu/gkcd8wZOY9rS2qMUD897MJF0MvgJoauRBd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--d4XEYCNKkrIRmfqrkiRQfAZpvpoutH6NCk7KuQYcI0BlOHlsnHHcs/w72EEqHwFq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--x6476tW/t8GJDZVD74+pNBcLifXxArE=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIEowIBAAKCAQEAsXHLM9+OAiCE4wycmVbzTIHzjEKcm2Sje27I52jOBMLKFrZb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--410go81km1avM3g/QHk+WjMIPB9xJh98uzRZmzwtFa8F9lfz6hf7XipCMoWyKqA7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--rlxMs/eqU/JJg8lBDfu84/Vjlh/ydCrabBB0LXyEu1NA4A0bo4WhKmWkEuxgX5B6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--gyCoJNrqGuX/kYuZCgNFONeS/dKPfv0BQMzJu4GpxyarkQioKsTj7EnwnLAlyUBW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--fZg/XhtqIWutgKxhiDixLU53rEWP7G2kt7szLcBiMH39p4d3y8OKhvRyo5bVMXCG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--qAkq4St8XKDyVnaEmZK0krJ+h9a5j+CX++e9fQIDAQABAoIBAQCT+FvGbych2PJX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--0D2KlXqgE0IAdc/YuYymstSwPLKIP9N8KyfnKtK8Jdw+uYOyfRTp8/EuEJ5OXL3j
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--V6CRD++lRwIlseVb7y5EySjh9oVrUhgn+aSrGucPsHkGNeZeEmbAfWugARLBrvRl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MRMhyHrJL6wT9jIEZInmy9mA3G99IuFW3rS8UR1Yu7zyvhtjvop1xg/wfEUu24Ty
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--PvMfnwaDcZHCz2tmu2KJvaxSBAG3FKmAqeMvk1Gt5m2keKgw03M+EX0LrM8ybWqn
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VwB8tnSyMBLVFLIXMpIiSfpji10+p9fdKFMRF++D6qVwyoxPiIq+yEJapxXiqLea
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--mkhtJW91AoGBAOvIb7bZvH4wYvi6txs2pygF3ZMjqg/fycnplrmYMrjeeDeeN4v1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--h/5tkN9TeTkHRaN3L7v49NEUDhDyuopLTNfWpYdv63U/BVzvgMm/guacTYkx9whB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--OvQ2YekR/WKg7kuyrTZidTDz+mjU+1b8JaWGjiDc6vFwxZA7uWicaGGHAoGBAMCo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--y/2AwFGwCR+5bET1nTTyxok6iKo4k6R/7DJe4Bq8VLifoyX3zDlGG/33KN3xVqBU
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--xnT9gkii1lfX2U+4iM+GOSPl0nG0hOEqEH+vFHszpHybDeNez3FEyIbgOzg6u7sV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--NOy+P94L5EMQVEmWp5g6Vm3k9kr92Bd9UacKQPnbAoGAMN8KyMu41i8RVJze9zUM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--0K7mjmkGBuRL3x4br7xsRwVVxbF1sfzig0oSjTewGLH5LTi3HC8uD2gowjqNj7yr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--4NEM3lXEaDj305uRBkA70bD0IUvJ+FwM7DGZecXQz3Cr8+TFIlCmGc94R+Jddlot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--M3IAY69mw0SsroiylYxV1mECgYAcSGtx8rXJCDO+sYTgdsI2ZLGasbogax/ZlWIC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--XwU9R4qUc/MKft8/RTiUxvT76BMUhH2B7Tl0GlunF6vyVR/Yf1biGzoSsTKUr40u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--gXBbSdCK7mRSjbecZEGf80keTxkCNPHJE4DiwxImej41c2V1JpNLnMI/bhaMFDyp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--bgrt4wKBgHFzZgAgM1v07F038tAkIBGrYLukY1ZFBaZoGZ9xHfy/EmLJM3HCHLO5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8wszMGhMTe2+39EeChwgj0kFaq1YnDiucU74BC57KR1tD59y7l6UnsQXTm4/32j8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Or6i8GekBibCb97DzzOU0ZK//fNhHTXpDDXsYt5lJUWSmgW+S9Qp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIDEzCCAfugAwIBAgIJAKzH8k6aKTP6MA0GCSqGSIb3DQEBCwUAMCAxHjAcBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzAeFw0xODA5MDcwODIyNTNaFw0zODA5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MDIwODIyNTNaMCAxHjAcBgNVBAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzCCASIw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOjJMp2o5eLQEmYJqMZzLBi61h9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+fsCVMvS8hgrH1Cg5q/RaLBLrZ8nILKmFZBapMUEFkUwQLB864tdTMaX7p+jNv3sM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5LWEIYkTIbu6qV7QerKdubS1hpdFtQGRM1Q+C7H86FzF02DSKzNSmQc4fNed/lQM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+qo/jOm1xx4TZFR4j58BrmmoOfNP44IyrwXsPyXbMsukKixVEB3vQ2oyGDAyG6dYi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VvM8PVL5yhX3BJ0D1Ky6hgGHJeirm0Cd8qqdSC/SWNdu1bGzg/xyUX5XFaHlIi7Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5YhD7ZDLvC76MeCWkfo4DaSB0CWmtG4l1TtHM2JqP8qf2l2LsABKs0q/a+UCAwEA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+AaNQME4wHQYDVR0OBBYEFIc9YAXgnGRhPTEcN/j+k/dxMdKqMB8GA1UdIwQYMBaA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+FIc9YAXgnGRhPTEcN/j+k/dxMdKqMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BQADggEBAD9qKci3Pr4/2WGx+sv8gOpKchC9eF2dXc5hA3xbDw7T6oRLUBAY8Pty
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+JF7DHMovT+w7FPRYT8rSc190fbSwVRHAnEaqAzaxteImCp/qYgdBHOz39eG4c93W
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+YrYvA1VdUDPcUnisEVWguDsKJGFg+G6pw+8Wkf/hCrJJkriTFogGvzg6ptdQatvE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+dpSkionfbuZKz+7lny6sCBGoMRIFBd22MHJsSQOyTb06Lwc5dpdF9c5vysPRzShJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5kkgIjGpTmWp+Ud8BAMQH8EDhJMkJ7iw1+07UQ9MUmXCp9Xgim6x1ri2/yoz9HeO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+83VCkD9YWufrzOrsXpo04rMYtoKo+lw=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIEpgIBAAKCAQEAw6Mkynajl4tASZgmoxnMsGLrWH1+wJUy9LyGCsfUKDmr9Fos
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+EutnycgsqYVkFqkxQQWRTBAsHzri11Mxpfun6M2/ewzktYQhiRMhu7qpXtB6sp25
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tLWGl0W1AZEzVD4LsfzoXMXTYNIrM1KZBzh8153+VAyqj+M6bXHHhNkVHiPnwGua
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ag580/jgjKvBew/Jdsyy6QqLFUQHe9DajIYMDIbp1iJW8zw9UvnKFfcEnQPUrLqG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+AYcl6KubQJ3yqp1IL9JY127VsbOD/HJRflcVoeUiLtjliEPtkMu8Lvox4JaR+jgN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+pIHQJaa0biXVO0czYmo/yp/aXYuwAEqzSr9r5QIDAQABAoIBAQC1RpgymlffdgJt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+rvQuMRu/XQlhh3dJj3YV3BIAL0VguH+i/WLVbRdQm5D2y0kAzml7LGODrYCUt4W1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+q7rXaCYfy3Xf2QSbRQGl9/pL7xw9ZMQseYW38nPx+39LInYDWzKPDB9qx0uj7Vpm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ReTSEf9r81PUIaBxj0V2X/VWHag5scBjXoflQLxyV6i1UvTuWyhYvX1Bbaj02MqV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tGNMrjbj25Wx2za53VDonzNA6RMZzkWGMfzmkkGM6kjGzLEsveys+bYCt7Fs7slR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+4oby0bIUmN7iqLhqlEhS4weWW4iHlq17X7CZeQAE1XeVZBz1N4G8FLjND2eyqb2N
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RAcQqp3BAoGBAOiU3WTu/kSccteDRxR1gVRPqEgfoLDwyAb7ORVUWX4Ii/z/soMw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xZ2MlYPLnp3Fyu/hKhJPC1LzkD4CGHCTJJ1NnUudtDxl2Zh1FZYGmv1hi1TID/cm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+G0+3XhlJgztS41+AzxTNMulV1yieT2HIRIoRpdSx1UIA72l42YqjrwUNAoGBANdV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/Ib+3hAfFtSMMI1qZQXvlKEoDRbUOCYuBVkTK8oQJQH6MLDokHZ8sXBAqi9383b1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+XmhQBJZ//yMy0AqFa2QBlkK0Gizzhh7BLSjIT2LREf66B2cWzhgdhbSp6Nuk+3DK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NfibxsFAPpW05HqtfxhbjrLfoE8VvTuMGQ8AaXw5AoGBAISo7IL2wrdV2TdN3Mwx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ndv+N4kz6Q8jt6QrxUqCOy1lKJvdKPAlcIJFvr5W9RkeyXr7nmilB1uAK4UC4vfL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+JfZHX/HSeQx+N5f7KJ3TFLJz4eow1tJsvOVCPP0FbkH3LFO7/+HojSKEYN39NmAa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+v+VU3Zas/GvSZrxtPwASDvE9AoGBAJOBbluW6MzITx5H7dZhRFR9miWOxvCVbOUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+b01mKX/f8UnadVIp7RONNQr88NdVZqxdRk9USOBDS6Vz4DjkzfySbbjBoJCcPIqC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+r4mZNXAuYRJJolqGr6SrTHTGUyFqcWcAzVnAc7TbakOoxz4V7NLlnOmA8FJcROUu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gdfZ42hZAoGBANyL2IQ+L92iYVvqsz1zPBlvemevx8zP6GmlzvTcVexyDTIiLg6W
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BVil5zRDPJdDiFfBK18Qg1mJoE4SjLTg+yGww9ef37Zb9kZypy6pM6AbRWILZ1Gv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+7UsWUzk6rgcQpDdpJCUEt+AD3LQJTxxuoIhZePvC2GLkzsjZA7ZyB5+S
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/data/servercert/trusted-leaf.pem test/mitmproxy/data/servercert/trusted-leaf.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 71700f2ac..a2c253126 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/data/servercert/trusted-leaf.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/data/servercert/trusted-leaf.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,45 +1,45 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIC4TCCAckCCQCj6D9oVylb8jANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--cyBQdHkgTHRkMB4XDTE1MTEwMTE2NDgwMloXDTE4MDgyMTE2NDgwMlowIDEeMBwG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--A1UEAwwVZXhhbXBsZS5taXRtcHJveHkub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--AQ8AMIIBCgKCAQEAy/L5JYHS7QFhSIsjmd6bJTgs2rdqEn6tsmPBVZKZ7SqCAVjW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--hPpEu7Q23akmU6Zm9Fp/vENc3jzxQLlEKhrv7eWmFYSOrCYtbJOz3RQorlwjjfdY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LlNQh1wYUXQX3PN3r3dyYtt5vTtXKc8+aP4M4vX7qlbW+4j4LrQfmPjS0XOdYpu3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--wh+i1ZMIhZye3hpCjwnpjTf7/ff45ZFxtkoi1uzEC/+swr1RSvamY8Foe12Re17Z
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--5ij8ZB0NIdoSk1tDkY3sJ8iNi35+qartl0UYeG9IUXRwDRrPsEKpF4RxY1+X2bdZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--r6PKb/E4CA5JlMvS5SVmrvxjCVqTQBmTjXfxqwIDAQABMA0GCSqGSIb3DQEBCwUA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--A4IBAQBmpSZJrTDvzSlo6P7P7x1LoETzHyVjwgPeqGYw6ndGXeJMN9rhhsFvRsiB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--I/aHh58MIlSjti7paikDAoFHB3dBvFHR+JUa/ailWEbcZReWRSE3lV6wFiN3G3lU
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--OyofR7MKnPW7bv8hSqOLqP1mbupXuQFB5M6vPLRwg5VgiCHI/XBiTvzMamzvNAR3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--UHHZtsJkRqzogYm6K9YJaga7jteSx2nNo+ujLwrxeXsLChTyFMJGnVkp5IyKeNfc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--qwlzNncb3y+4KnUdNkPEtuydgAxAfuyXufiFBYRcUWbQ5/9ycgF7131ySaj9f/Y2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--kMsv2jg+soKvwwVYCABsk1KSHtfz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIEpAIBAAKCAQEAy/L5JYHS7QFhSIsjmd6bJTgs2rdqEn6tsmPBVZKZ7SqCAVjW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--hPpEu7Q23akmU6Zm9Fp/vENc3jzxQLlEKhrv7eWmFYSOrCYtbJOz3RQorlwjjfdY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LlNQh1wYUXQX3PN3r3dyYtt5vTtXKc8+aP4M4vX7qlbW+4j4LrQfmPjS0XOdYpu3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--wh+i1ZMIhZye3hpCjwnpjTf7/ff45ZFxtkoi1uzEC/+swr1RSvamY8Foe12Re17Z
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--5ij8ZB0NIdoSk1tDkY3sJ8iNi35+qartl0UYeG9IUXRwDRrPsEKpF4RxY1+X2bdZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--r6PKb/E4CA5JlMvS5SVmrvxjCVqTQBmTjXfxqwIDAQABAoIBAQC956DWq+wbhA1x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--3x1nSUBth8E8Z0z9q7dRRFHhvIBXth0X5ADcEa2umj/8ZmSpv2heX2ZRhugSh+yc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--t+YgzrRacFwV7ThsU6A4WdBBK2Q19tWke4xAlpOFdtut/Mu7kXkAidiY9ISHD5o5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--9B/I48ZcD3AnTHUiAogV9OL3LbogDD4HasLt4mWkbq8U2thdjxMIvxdg36olJEuo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--iAZrAUCPZEXuU89BtvPLUYioe9n90nzkyneGNS0SHxotlEc9ZYK9VTsivtXJb4wB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ptDMCp+TH3tjo8BTGnbnoZEybgyyOEd0UTzxK4DlxnvRVWexFY6NXwPFhIxKlB0Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Bg8NkAkBAoGBAOiRnmbC5QkqrKrTkLx3fghIHPqgEXPPYgHLSuY3UjTlMb3APXpq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--vzQnlCn3QuSse/1fWnQj+9vLVbx1XNgKjzk7dQhn5IUY+mGN4lLmoSnTebxvSQ43
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VAgTYjST9JFmJ3wK4KkWDsEsVao8LAx0h5JEQXUTT5xZpFA2MLztYbgfAoGBAOB/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MvhLMAwlx8+m/zXMEPLk/KOd2dVZ4q5se8bAT/GiGsi8JUcPnCk140ZZabJqryAp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--JFzUHIjfVsS9ejAfocDk1JeIm7Uus4um6fQEKIPMBxI/M/UAwYCXAG9ULXqilbO3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--pTdeeuraVKrTu1Z4ea6x4du1JWKcyDfYfsHepcT1AoGBAM2fskV5G7e3G2MOG3IG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1E/OMpEE5WlXenfLnjVdxDkwS4JRbgnGR7d9JurTyzkTp6ylmfwFtLDoXq15ttTs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--wSUBBMCh2tIy+201XV2eu++XIpMQca84C/v352RFTH8hqtdpZqkY74KsCDGzcd6x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--SQxxfM5efIzoVPb2crEX0MZRAoGAQ2EqFSfL9flo7UQ8GRN0itJ7mUgJV2WxCZT5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--2X9i/y0eSN1feuKOhjfsTPMNLEWk5kwy48GuBs6xpj8Qa10zGUgVHp4bzdeEgAfK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--9DhDSLt1694YZBKkAUpRERj8xXAC6nvWFLZAwjhhbRw7gAqMywgMt/q4i85usYRD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--F0ESE/kCgYBbc083PcLmlHbkn/d1i4IcLI6wFk+tZYIEVYDid7xDOgZOBcOTTyYB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BrDzNqbKNexKRt7QHVlwR+VOGMdN5P0hf7oH3SMW23OxBKoQe8pUSGF9a4DjCS1v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--vCXMekifb9kIhhUWaG71L8+MaOzNBVAmk1+3NzPZgV/YxHjAWWhGHQ==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIC4TCCAckCCQCj6D9oVylb9zANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cyBQdHkgTHRkMB4XDTE4MDkwNzA4MjI1MloXDTM4MDkwMjA4MjI1MlowIDEeMBwG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+A1UEAwwVZXhhbXBsZS5taXRtcHJveHkub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+AQ8AMIIBCgKCAQEAqKzVdsRKgthv6V/dk3Tncy4ymbACs383nGutjulExvroNOCw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+b0y0e7unNGbtXxFQqSvA7eGaT1yRNfoMbXGSS+sn8A3gB6/s2A0Sw7KeSDdoaqEq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F/LzRBed1YkxSyy0GXuTd7HXNIoFn/eF1tqxgViWdfyFD85qY4yJ+luofdm7IcPM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ENPzV4nKzDh2PdJpQrEokWz2jM0zefC3IYnFHXY5bA3MnhE03/P0VxeEYkBdmEAt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+O1U2Bkw9SKCLy9zF13ks6/dDZ9LjMtRKI83gQS5z3S3bA45YxFuyeLWgVsJ2NYTa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+j9/8c4xwOjg9TpkCvcmZiPUYGddPHWoKqAAhBwIDAQABMA0GCSqGSIb3DQEBCwUA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+A4IBAQAf8cjxunN4Y7NUD2Z/SNOJ/s0uWJtTPV6m4FxSwwD0wfbsyirPchmattLc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BabrQkeMMm8gMOrORfanXQwvLZvX0aDf96EgLSfHv8Iqeol5Byrgkn7UORXl20Jt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+8UNRURUZYtWxn08P8dlhxQUncPF/UxCesC8x0cihqv+YTB3TX1sni9mOqPCYY8yH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+E8kCW4zTJ0J9OQUHq9qdYQM/PGVm99+DWBItUeZAva8Rqj1FN3f9j1eWB+EjfYu7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ztsTInpNWP4tIh6vIFtuaGr077cJawTe6YVyNxVqquI9+2fpSPkt7tCTIhbQ4AmM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DeHzn+KjfKN8ooWqmcfmUZWaADe0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIEogIBAAKCAQEAqKzVdsRKgthv6V/dk3Tncy4ymbACs383nGutjulExvroNOCw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+b0y0e7unNGbtXxFQqSvA7eGaT1yRNfoMbXGSS+sn8A3gB6/s2A0Sw7KeSDdoaqEq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F/LzRBed1YkxSyy0GXuTd7HXNIoFn/eF1tqxgViWdfyFD85qY4yJ+luofdm7IcPM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ENPzV4nKzDh2PdJpQrEokWz2jM0zefC3IYnFHXY5bA3MnhE03/P0VxeEYkBdmEAt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+O1U2Bkw9SKCLy9zF13ks6/dDZ9LjMtRKI83gQS5z3S3bA45YxFuyeLWgVsJ2NYTa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+j9/8c4xwOjg9TpkCvcmZiPUYGddPHWoKqAAhBwIDAQABAoIBABsUC/zSDEgvKOAl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RLP8a3+hJfxoNjbMsIfK/YTYy/LJqud6PrjPbpYCjRgrgeXmKLXP0VwfAJ/G84Tf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+zIjxV5Qaf0HZaGKzimkwyBdkoGZlhry/fLt1hDolNHBoYuJ3nb4NiaIIiczkb3y7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xt+0IhTqvNTaIh5ke83ZbPklJ8p0HAzw1q6+iRFZiZKH1iVRwJyIyK654wpNQ93W
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+SqUKa3uAbqw+Bx9fzyEunANFwoBcZka9oSR9bTlhGB8HPHZFVYKgZvE4n9WOclKW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+E75pGG6vFYZkxBdqcjFNlPKKZRisDuey28teiHXThh1MvYxRdaMq4oxOE1J+n17k
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F2gQolECgYEA01j1FlExu45+U36n3tCCyS50dTtf0Qpi71c1s5DZyT+AAB2ZSGXm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VBtKgVRNg/iWfHn5b/zHF30OtgIzcsrU66cWMwIXPUQigXh8Cteve7VMs03hce1w
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+wsFwLoyvdWEam32YAymqRgN3H6JQim82IJJ3YlWrgEytBnvLkADCihkCgYEAzE/g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+8aoxDZJUwbvaZjLwuydmvc+aAwanVgqvtkca4x99oPhNQna6O0jXXAtJXMA3SHp5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+QYMDKh98BqCXyfXd+1Semc9pgAPz7l4j09WG7Zdap3xinTOkUsmTAz/2T967HIsP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6qP7RUiwjmbUk8ZGcKsNjoxzPA4JURYimKB5qB8CgYBTjlnnJtaYpi8/Z1WK+7iZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+PSqBpqWtCYQvx7TNdzkDHX3Hjewp+U9kdR2xn9i9kiw8riR1p+Q2XxTP1HLusU4Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+lIhsRilV6XgS48V2q+sO55CZWvMEjbEE7mEhpjFAINHaI39T0Mcmwvv3n75j3K/z
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+lLRqRiB1qtrFM3A5UHOZEQKBgBPQm2xUqTU7v+SaJ3BJ+HbuN1SpUbKBbrE1kB0J
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gF4Oq8x0yGltwloFkn1mytKoAbSRzDjCUAhBzXGHGbGImuLJLiiUqRK1T28Kyka9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+KrzYNP6RXa8JVyKAUjW6elT8sQDvq7eB99icWCM3bd53GFXNAR+WF4b3hYfLscdD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+qQjZAoGAB3ah068Qscb2Ef3+eufa+EvOfMDrNNvlEoZXRlhviTg3NEwjyqbxaCIy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6Xg+rWvgJm9UE2RBOcCNeghkEabmL1+8DvmDiV1lt9oJtqULBirvalp2H3+9yiTk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+j5dnVcRF6cYvNFmwTr2WZFBGgq96d/Zmbx3o3MIqSBc8I6pLNzo=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/data/servercert/trusted-root.pem test/mitmproxy/data/servercert/trusted-root.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 2c75b88eb..a53cb893b 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/data/servercert/trusted-root.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/data/servercert/trusted-root.pem
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,48 +1,48 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIDXTCCAkWgAwIBAgIJAPAfPQGCV/Z4MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--aWRnaXRzIFB0eSBMdGQwHhcNMTUxMTAxMTY0ODAxWhcNMTgwODIxMTY0ODAxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--CgKCAQEArp8LD34JhKCwcQbwIYQMg4+eCgLVN8fwB7+/qOfJbArPs0djFBN+F7c6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--HGvMr24BKUk5u8pn4dPtNurm/vPC8ovNGmcXz62BQJpcMX2veVdRsF7yNwhNacNJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Arq+70zNMwYBznx0XUxMF6j6nVFf3AW6SU04ylT4Mp3SY/BUUDAdfl1eRo0mPLNS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8rpsN+8YBw1Q7SCuBRVqpOgVIsL88svgQUSOlzvMZPBpG/cmB3BNKNrltwb5iFEI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1jAV7uSj5IcIuNO/246kfsDVPTFMJIzav/CUoidd5UNw+SoFDlzh8sA7L1Bm7D1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--3KHYSKswGsSR3kynAl10w/SJKDtn8wIDAQABo1AwTjAdBgNVHQ4EFgQUgOcrtxBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LxbpnOT65d+vpfyWUkgwHwYDVR0jBBgwFoAUgOcrtxBXLxbpnOT65d+vpfyWUkgw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAEE9bFmUCA+6cvESKPoi2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--TGSpV652d0xd2U66LpEXeiWRJFLz8YGgoJCx3QFGBscJDXxrLxrBBBV/tCpEqypo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--pYIqsawH7M66jpOr83Us3M8JC2eFBZJocMpXxdytWqHik5VKZNx6VQFT8bS7+yVC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VoUKePhlgcg+pmo41qjqieBNKRMh/1tXS77DI1lgO5wZLVrLXcdqWuDpmaQOKJeq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--G/nxytCW/YJA7bFn/8Gjy8DYypJSeeaKu7o3P3+ONJHdIMHb+MdcheDBS9AOFSeo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--xI0D5EbO9F873O77l7nbD7B0X34HFN0nGczC4poexIpbDFG3hAPekwZ5KC6VwJLc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1Q==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIEowIBAAKCAQEArp8LD34JhKCwcQbwIYQMg4+eCgLVN8fwB7+/qOfJbArPs0dj
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--FBN+F7c6HGvMr24BKUk5u8pn4dPtNurm/vPC8ovNGmcXz62BQJpcMX2veVdRsF7y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--NwhNacNJArq+70zNMwYBznx0XUxMF6j6nVFf3AW6SU04ylT4Mp3SY/BUUDAdfl1e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Ro0mPLNS8rpsN+8YBw1Q7SCuBRVqpOgVIsL88svgQUSOlzvMZPBpG/cmB3BNKNrl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--twb5iFEI1jAV7uSj5IcIuNO/246kfsDVPTFMJIzav/CUoidd5UNw+SoFDlzh8sA7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--L1Bm7D1/3KHYSKswGsSR3kynAl10w/SJKDtn8wIDAQABAoIBAFgMzjDzpqz/sbhs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--fS0JPp4gDtqRbx3/bSMbJvNuXPxjvzNxLZ5z7cLbmyu1l7Jlz6QXzkrI1vTiPdzR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--OcUY+RYANF252iHYJTKEIzS5YX/X7dL3LT9eqlpIJEqCC8Dygw3VW5fY3Xwl+sB7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--blNhMuro4HQRwi8UBUrQlcPa7Ui5BBi323Q6en+VjYctkqpJHzNKPSqPTbsdLaK+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--B0XuXxFatM09rmeRKZCL71Lk1T8N/l0hqEzej7zxgVD7vG/x1kMFN4T3yCmXCbPa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--izGHYr1EBHglm4qMNWveXCZiVJ+wmwCjdjqvggyHiZFXE2N0OCrWPhxQPdqFf5y7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--bUO9U2ECgYEA6GM1UzRnbVpjb20ezFy7dU7rlWM0nHBfG27M3bcXh4HnPpnvKp0/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8a1WFi4kkRywrNXx8hFEd43vTbdObLpVXScXRKiY3MHmFk4k4hbWuTpmumCubQZO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--AWlX6TE0HRKn1wQahgpQcxcWaDN2xJJmRQ1zVmlnNkT48/4kFgRxyykCgYEAwF08
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ngrF35oYoU/x+KKq2NXGeNUzoZMj568dE1oWW0ZFpqCi+DGT+hAbG3yUOBSaPqy9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--zn1obGo0YRlrayvtebz118kG7a/rzY02VcAPlT/GpEhvkZlXTwEK17zRJc1nJrfP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--39QAZWZsaOru9NRIg/8HcdG3JPR2MhRD/De9GbsCgYAaiZnBUq6s8jGAu/lUZRKT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--JtwIRzfu1XZG77Q9bXcmZlM99t41A5gVxTGbftF2MMyMMDJc7lPfQzocqd4u1GiD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Jr+le4tZSls4GNxlZS5IIL8ycW/5y0qFJr5/RrsoxsSb7UAKJothWTWZ2Karc/xx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--zkNpjsfWjrHPSypbyU4lYQKBgFh1R5/BgnatjO/5LGNSok/uFkOQfxqo6BTtYOh6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--P9efO/5A1lBdtBeE+oIsSphzWO7DTtE6uB9Kw2V3Y/83hw+5RjABoG8Cu+OdMURD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--eqb+WeFH8g45Pn31E8Bbcq34g5u5YR0jhz8Z13ZzuojZabNRPmIntxmGVSf4S78a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/plrAoGBANMHNng2lyr03nqnHrOM6NXD+60af0YR/YJ+2d/H40RnXxGJ4DXn7F00
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--a4vJFPa97uq+xpd0HE+TE+NIrOdVDXPePD2qzBzMTsctGtj30vLzojMOT+Yf/nvO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--WxTL5Q8GruJz2Dn0awSZO2z/3A8S1rmpuVZ/jT5NtRrvOSY6hmxF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-------END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIDXTCCAkWgAwIBAgIJALzkvKyFAwWYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+aWRnaXRzIFB0eSBMdGQwHhcNMTgwOTA3MDgyMjUxWhcNMzgwOTAyMDgyMjUxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+CgKCAQEAkvT4Y1ML8Gg4x5aFVygIW022tJsEyfuW4HsEvIarAGpFtUNkw0dOoAxv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Gv71I0KAWOXxtc9DUjtq7ZXJcG+dBiheTYJ40lrYhHvUt7J37nrUF5v5trQzoE9I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6WGtzTV8C8RI6F+M6GtwxgwRBgqkuXiK5ExPXAjGMMJZWtiEXHxGTNB6F4zy884m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VjVtQi8jy+c5g21Awp3z5HrQLM210zwvgi7Rygk6/UM0AnmST4o32SqFSd+0MFUJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+f3pH3xczfKmhU/TBoVEWRB1YzwixsJrzDOB8wOGnNKCsl45hYUJZZ8epVkyrvFZQ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+iMkwIqqBJbkU6H7fZBl68TJ8ascUCQIDAQABo1AwTjAdBgNVHQ4EFgQUkurgHlw1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xMP2wrsrGPTk0ofxCyowHwYDVR0jBBgwFoAUkurgHlw1xMP2wrsrGPTk0ofxCyow
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAcdExVlSvH6aVExNiQO3k
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cMamj+78woDn9x563vwzaGP24KvOXk1B/IJp5kqu3ZsXS0I0Mz6xwXHAXeuxaj06
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cKgEpHKKgClLblXo2zWqo/3V1UFFpOVP/NhI3r21b+fPrS46rP0mw75haQCph8/8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+buQr0OeAYbElliY/ji+cJiCJB8A/D13fUMV/NUUfPW/UE6497jOmz+6PtZNAoOFx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+evrmDcbCzbJxacyLJX04rsrt6DO09jb/+5lFm5Aqr6ySKasrmheIGEisl4o9Zbuy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5PvYgbOEmFgPATIiWGpBO/rqwDdsmgyYFl+YfFoW0akXUVhDb2e5iRDx6Rs0fmN/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NA==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIEpAIBAAKCAQEAkvT4Y1ML8Gg4x5aFVygIW022tJsEyfuW4HsEvIarAGpFtUNk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+w0dOoAxvGv71I0KAWOXxtc9DUjtq7ZXJcG+dBiheTYJ40lrYhHvUt7J37nrUF5v5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+trQzoE9I6WGtzTV8C8RI6F+M6GtwxgwRBgqkuXiK5ExPXAjGMMJZWtiEXHxGTNB6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F4zy884mVjVtQi8jy+c5g21Awp3z5HrQLM210zwvgi7Rygk6/UM0AnmST4o32SqF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Sd+0MFUJf3pH3xczfKmhU/TBoVEWRB1YzwixsJrzDOB8wOGnNKCsl45hYUJZZ8ep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VkyrvFZQiMkwIqqBJbkU6H7fZBl68TJ8ascUCQIDAQABAoIBAC/1mopvs9nFaaJZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+UTLccb26YwIWBT4VyWuBOk58dJoyFIXPdLb2MoaxCCF7S20yasiYYoW/Gm1fzsmy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tIbpJgm4au5Iwj2EQF0cPJOmvtUpaMY7tQcXUDHlLhpcMmhiKBV+/Xw4krfXOHqp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+vXSHTLLq0Akpjkyu4F9RTfAD8U5tEbpPsCGcsSJEHxPgqDexITDwB/yuhvrKKUwY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+t8WQBWO5M8D6Z1HGTFovIa86eX4hUKKbNB8sE7yi1wGxbOloIOQESOcqiisP5GGN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+d6r5k9jBwZXlyh7GR+GNILF+n6ctdOFr6MQQEKvDzjh/IVYADen19909Ed7Wn0gR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+C0Ec2gECgYEAwruIv33GWxGFvQmAUtPaHyhkFOiIpTrmZGeaJe7uLvAF86wK9v35
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+wN2fH69JczO1iEWuqDLZ4nEorx6UvjSFBGYTXT1dAnULJ1KHvkk6JjbXq1srTY42
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+U2h33XfJiNgrXlj6v7tMhKD/nBsfyw8v4aHxxUkJl2HomPSv7C7EvhECgYEAwTFp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+sUwDXVeputWwBvDUXHgGaVks28QHXvYH7Q0WsbFjb6lZVH/FxLXvGs7aaZk8WuHQ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+JJcXmEkTs1QDMMWoOlZw9WJv5Zlopq31oYHp8dt2EuO/PQcYmXYEG7JIHJhx8mfL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+f3Y4ix/hnvnITTg7bRNpcxwGEqyg16kalP8PXnkCgYEAgml5cVTYLFEV0b21NMMw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RsGUFPSN3qoNdZx0fYb/+GtCcSf8x+DbDDDfyiZn+EDfB/4ys+4qQR4rcuv2DVO6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6XE68qyPx39/EryQr/z2dnUwBlAuNehRtZY3ABii3YR3tt28P/89hW0VAgSgTCtF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+k8QS2F7Lj5hAX38u+etwUyECgYBWjf7eckHnpgjjLi3JTki2jQfCVzOj2nW689ul
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NwH95o24T1U4aG6ArUpM5nQwb3j89sK8Qf1OOx9abr9nMIcoa+X76nhbk5mxY6rz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+CzN3Km4CFItvmihJSPiaOAva0+npQtuHZb37hvMcuKgnAJSPT+0kp1+JKlJ9jMPe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+EVAfcQKBgQCDxRNXxn4ILyH3kx8lrch7kD5fp/7KifDjAFFJ0DK2e2xsxLUToh2I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+PdMuzCUv4LL8kRsQ/+mUJY4YlOV9OKVAZbI/gPw9NnzBUBugz+wy0OG/nyS5k7G5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIzZm8yx3RieTNhwmw25NDLyGApHGQYsQ7DM/daA/wwdjFsyncxHSg==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+-----END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/9da13359.0 test/mitmproxy/net/data/verificationcerts/9da13359.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index b22e4d20d..5868a304d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/9da13359.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/9da13359.0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,21 +1,21 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIDXTCCAkWgAwIBAgIJAPAfPQGCV/Z4MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIDXTCCAkWgAwIBAgIJALzkvKyFAwWYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--aWRnaXRzIFB0eSBMdGQwHhcNMTUxMTAxMTY0ODAxWhcNMTgwODIxMTY0ODAxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+aWRnaXRzIFB0eSBMdGQwHhcNMTgwOTA3MDgyMjUxWhcNMzgwOTAyMDgyMjUxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--CgKCAQEArp8LD34JhKCwcQbwIYQMg4+eCgLVN8fwB7+/qOfJbArPs0djFBN+F7c6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--HGvMr24BKUk5u8pn4dPtNurm/vPC8ovNGmcXz62BQJpcMX2veVdRsF7yNwhNacNJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Arq+70zNMwYBznx0XUxMF6j6nVFf3AW6SU04ylT4Mp3SY/BUUDAdfl1eRo0mPLNS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8rpsN+8YBw1Q7SCuBRVqpOgVIsL88svgQUSOlzvMZPBpG/cmB3BNKNrltwb5iFEI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1jAV7uSj5IcIuNO/246kfsDVPTFMJIzav/CUoidd5UNw+SoFDlzh8sA7L1Bm7D1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--3KHYSKswGsSR3kynAl10w/SJKDtn8wIDAQABo1AwTjAdBgNVHQ4EFgQUgOcrtxBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LxbpnOT65d+vpfyWUkgwHwYDVR0jBBgwFoAUgOcrtxBXLxbpnOT65d+vpfyWUkgw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAEE9bFmUCA+6cvESKPoi2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--TGSpV652d0xd2U66LpEXeiWRJFLz8YGgoJCx3QFGBscJDXxrLxrBBBV/tCpEqypo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--pYIqsawH7M66jpOr83Us3M8JC2eFBZJocMpXxdytWqHik5VKZNx6VQFT8bS7+yVC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VoUKePhlgcg+pmo41qjqieBNKRMh/1tXS77DI1lgO5wZLVrLXcdqWuDpmaQOKJeq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--G/nxytCW/YJA7bFn/8Gjy8DYypJSeeaKu7o3P3+ONJHdIMHb+MdcheDBS9AOFSeo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--xI0D5EbO9F873O77l7nbD7B0X34HFN0nGczC4poexIpbDFG3hAPekwZ5KC6VwJLc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1Q==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+CgKCAQEAkvT4Y1ML8Gg4x5aFVygIW022tJsEyfuW4HsEvIarAGpFtUNkw0dOoAxv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Gv71I0KAWOXxtc9DUjtq7ZXJcG+dBiheTYJ40lrYhHvUt7J37nrUF5v5trQzoE9I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6WGtzTV8C8RI6F+M6GtwxgwRBgqkuXiK5ExPXAjGMMJZWtiEXHxGTNB6F4zy884m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VjVtQi8jy+c5g21Awp3z5HrQLM210zwvgi7Rygk6/UM0AnmST4o32SqFSd+0MFUJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+f3pH3xczfKmhU/TBoVEWRB1YzwixsJrzDOB8wOGnNKCsl45hYUJZZ8epVkyrvFZQ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+iMkwIqqBJbkU6H7fZBl68TJ8ascUCQIDAQABo1AwTjAdBgNVHQ4EFgQUkurgHlw1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xMP2wrsrGPTk0ofxCyowHwYDVR0jBBgwFoAUkurgHlw1xMP2wrsrGPTk0ofxCyow
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAcdExVlSvH6aVExNiQO3k
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cMamj+78woDn9x563vwzaGP24KvOXk1B/IJp5kqu3ZsXS0I0Mz6xwXHAXeuxaj06
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cKgEpHKKgClLblXo2zWqo/3V1UFFpOVP/NhI3r21b+fPrS46rP0mw75haQCph8/8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+buQr0OeAYbElliY/ji+cJiCJB8A/D13fUMV/NUUfPW/UE6497jOmz+6PtZNAoOFx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+evrmDcbCzbJxacyLJX04rsrt6DO09jb/+5lFm5Aqr6ySKasrmheIGEisl4o9Zbuy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5PvYgbOEmFgPATIiWGpBO/rqwDdsmgyYFl+YfFoW0akXUVhDb2e5iRDx6Rs0fmN/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NA==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/generate.py test/mitmproxy/net/data/verificationcerts/generate.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6d4d85505..8439c9e6a 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/generate.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/generate.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -27,7 +27,7 @@ def sign(cert):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "-CA {root_ca}.crt "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "-CAkey {root_ca}.key "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "-CAcreateserial "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--       "-days 1024 "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+       "-days 7300 "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        "-out {cert}.crt".format(root_ca=ROOT_CA, cert=cert)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-        )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -47,7 +47,7 @@ def mkcert(cert, args):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- genrsa("trusted-root")
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- do("openssl req -x509 -new -nodes -batch "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "-key trusted-root.key "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--   "-days 1024 "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   "-days 7300 "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "-out trusted-root.crt"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- h = do("openssl x509 -hash -noout -in trusted-root.crt").decode("ascii").strip()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -61,6 +61,6 @@ def mkcert(cert, args):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- do("openssl req -x509 -new -nodes -batch "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "-key self-signed.key "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "-subj {} "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--   "-days 1024 "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+   "-days 7300 "
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    "-out self-signed.crt".format(SUBJECT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-    )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/self-signed.crt test/mitmproxy/net/data/verificationcerts/self-signed.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index dce2a7e07..6e234b8bc 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/self-signed.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/self-signed.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,19 +1,19 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIDEzCCAfugAwIBAgIJAJ945xt1FRsfMA0GCSqGSIb3DQEBCwUAMCAxHjAcBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzAeFw0xNTExMDExNjQ4MDJaFw0xODA4
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MjExNjQ4MDJaMCAxHjAcBgNVBAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzCCASIw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALFxyzPfjgIghOMMnJlW80yB84xC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--nJtko3tuyOdozgTCyha2W+NdIKPNZJtWrzN4P0B5PlozCDwfcSYffLs0WZs8LRWv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BfZX8+oX+14qQjKFsiqgO65cTLP3qlPySYPJQQ37vOP1Y5Yf8nQq2mwQdC18hLtT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--QOANG6OFoSplpBLsYF+QeoMgqCTa6hrl/5GLmQoDRTjXkv3Sj379AUDMybuBqccm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--q5EIqCrE4+xJ8JywJclAVn2YP14baiFrrYCsYYg4sS1Od6xFj+xtpLe7My3AYjB9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/aeHd8vDiob0cqOW1TFwhqgJKuErfFyg8lZ2hJmStJKyfofWuY/gl/vnvX0CAwEA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--AaNQME4wHQYDVR0OBBYEFB8d32zK8eqZIoKw4jXzYzhw4amPMB8GA1UdIwQYMBaA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--FB8d32zK8eqZIoKw4jXzYzhw4amPMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BQADggEBAJmo2oKv1OEjZ0Q4yELO6BAnHAkmBKpW+zmLyQa8idxtLVkI9uXk3iqY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--GWugkmcUZCTVFRWv/QXQQSex+00IY3x2rdHbtuZwcyKiz2u8WEmfW1rOIwBaFJ1i
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--v7+SA2aZs6vepN2sE56X54c/YbwQooaKZtOb+djWXYMJrc/Ezj0J7oQIJTptYV8v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/3216yCHRp/KCL7yTLtiw25xKuXNu/gkcd8wZOY9rS2qMUD897MJF0MvgJoauRBd
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--d4XEYCNKkrIRmfqrkiRQfAZpvpoutH6NCk7KuQYcI0BlOHlsnHHcs/w72EEqHwFq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--x6476tW/t8GJDZVD74+pNBcLifXxArE=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIDEzCCAfugAwIBAgIJAKzH8k6aKTP6MA0GCSqGSIb3DQEBCwUAMCAxHjAcBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzAeFw0xODA5MDcwODIyNTNaFw0zODA5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MDIwODIyNTNaMCAxHjAcBgNVBAMMFWV4YW1wbGUubWl0bXByb3h5Lm9yZzCCASIw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMOjJMp2o5eLQEmYJqMZzLBi61h9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+fsCVMvS8hgrH1Cg5q/RaLBLrZ8nILKmFZBapMUEFkUwQLB864tdTMaX7p+jNv3sM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5LWEIYkTIbu6qV7QerKdubS1hpdFtQGRM1Q+C7H86FzF02DSKzNSmQc4fNed/lQM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+qo/jOm1xx4TZFR4j58BrmmoOfNP44IyrwXsPyXbMsukKixVEB3vQ2oyGDAyG6dYi
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VvM8PVL5yhX3BJ0D1Ky6hgGHJeirm0Cd8qqdSC/SWNdu1bGzg/xyUX5XFaHlIi7Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5YhD7ZDLvC76MeCWkfo4DaSB0CWmtG4l1TtHM2JqP8qf2l2LsABKs0q/a+UCAwEA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+AaNQME4wHQYDVR0OBBYEFIc9YAXgnGRhPTEcN/j+k/dxMdKqMB8GA1UdIwQYMBaA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+FIc9YAXgnGRhPTEcN/j+k/dxMdKqMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BQADggEBAD9qKci3Pr4/2WGx+sv8gOpKchC9eF2dXc5hA3xbDw7T6oRLUBAY8Pty
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+JF7DHMovT+w7FPRYT8rSc190fbSwVRHAnEaqAzaxteImCp/qYgdBHOz39eG4c93W
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+YrYvA1VdUDPcUnisEVWguDsKJGFg+G6pw+8Wkf/hCrJJkriTFogGvzg6ptdQatvE
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+dpSkionfbuZKz+7lny6sCBGoMRIFBd22MHJsSQOyTb06Lwc5dpdF9c5vysPRzShJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5kkgIjGpTmWp+Ud8BAMQH8EDhJMkJ7iw1+07UQ9MUmXCp9Xgim6x1ri2/yoz9HeO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+83VCkD9YWufrzOrsXpo04rMYtoKo+lw=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/self-signed.key test/mitmproxy/net/data/verificationcerts/self-signed.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 71a6ad6ac..3546c3fb6 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/self-signed.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/self-signed.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,27 +1,27 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIEowIBAAKCAQEAsXHLM9+OAiCE4wycmVbzTIHzjEKcm2Sje27I52jOBMLKFrZb
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--410go81km1avM3g/QHk+WjMIPB9xJh98uzRZmzwtFa8F9lfz6hf7XipCMoWyKqA7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--rlxMs/eqU/JJg8lBDfu84/Vjlh/ydCrabBB0LXyEu1NA4A0bo4WhKmWkEuxgX5B6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--gyCoJNrqGuX/kYuZCgNFONeS/dKPfv0BQMzJu4GpxyarkQioKsTj7EnwnLAlyUBW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--fZg/XhtqIWutgKxhiDixLU53rEWP7G2kt7szLcBiMH39p4d3y8OKhvRyo5bVMXCG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--qAkq4St8XKDyVnaEmZK0krJ+h9a5j+CX++e9fQIDAQABAoIBAQCT+FvGbych2PJX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--0D2KlXqgE0IAdc/YuYymstSwPLKIP9N8KyfnKtK8Jdw+uYOyfRTp8/EuEJ5OXL3j
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--V6CRD++lRwIlseVb7y5EySjh9oVrUhgn+aSrGucPsHkGNeZeEmbAfWugARLBrvRl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MRMhyHrJL6wT9jIEZInmy9mA3G99IuFW3rS8UR1Yu7zyvhtjvop1xg/wfEUu24Ty
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--PvMfnwaDcZHCz2tmu2KJvaxSBAG3FKmAqeMvk1Gt5m2keKgw03M+EX0LrM8ybWqn
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VwB8tnSyMBLVFLIXMpIiSfpji10+p9fdKFMRF++D6qVwyoxPiIq+yEJapxXiqLea
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--mkhtJW91AoGBAOvIb7bZvH4wYvi6txs2pygF3ZMjqg/fycnplrmYMrjeeDeeN4v1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--h/5tkN9TeTkHRaN3L7v49NEUDhDyuopLTNfWpYdv63U/BVzvgMm/guacTYkx9whB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--OvQ2YekR/WKg7kuyrTZidTDz+mjU+1b8JaWGjiDc6vFwxZA7uWicaGGHAoGBAMCo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--y/2AwFGwCR+5bET1nTTyxok6iKo4k6R/7DJe4Bq8VLifoyX3zDlGG/33KN3xVqBU
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--xnT9gkii1lfX2U+4iM+GOSPl0nG0hOEqEH+vFHszpHybDeNez3FEyIbgOzg6u7sV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--NOy+P94L5EMQVEmWp5g6Vm3k9kr92Bd9UacKQPnbAoGAMN8KyMu41i8RVJze9zUM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--0K7mjmkGBuRL3x4br7xsRwVVxbF1sfzig0oSjTewGLH5LTi3HC8uD2gowjqNj7yr
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--4NEM3lXEaDj305uRBkA70bD0IUvJ+FwM7DGZecXQz3Cr8+TFIlCmGc94R+Jddlot
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--M3IAY69mw0SsroiylYxV1mECgYAcSGtx8rXJCDO+sYTgdsI2ZLGasbogax/ZlWIC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--XwU9R4qUc/MKft8/RTiUxvT76BMUhH2B7Tl0GlunF6vyVR/Yf1biGzoSsTKUr40u
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--gXBbSdCK7mRSjbecZEGf80keTxkCNPHJE4DiwxImej41c2V1JpNLnMI/bhaMFDyp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--bgrt4wKBgHFzZgAgM1v07F038tAkIBGrYLukY1ZFBaZoGZ9xHfy/EmLJM3HCHLO5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8wszMGhMTe2+39EeChwgj0kFaq1YnDiucU74BC57KR1tD59y7l6UnsQXTm4/32j8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Or6i8GekBibCb97DzzOU0ZK//fNhHTXpDDXsYt5lJUWSmgW+S9Qp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIEpgIBAAKCAQEAw6Mkynajl4tASZgmoxnMsGLrWH1+wJUy9LyGCsfUKDmr9Fos
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+EutnycgsqYVkFqkxQQWRTBAsHzri11Mxpfun6M2/ewzktYQhiRMhu7qpXtB6sp25
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tLWGl0W1AZEzVD4LsfzoXMXTYNIrM1KZBzh8153+VAyqj+M6bXHHhNkVHiPnwGua
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ag580/jgjKvBew/Jdsyy6QqLFUQHe9DajIYMDIbp1iJW8zw9UvnKFfcEnQPUrLqG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+AYcl6KubQJ3yqp1IL9JY127VsbOD/HJRflcVoeUiLtjliEPtkMu8Lvox4JaR+jgN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+pIHQJaa0biXVO0czYmo/yp/aXYuwAEqzSr9r5QIDAQABAoIBAQC1RpgymlffdgJt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+rvQuMRu/XQlhh3dJj3YV3BIAL0VguH+i/WLVbRdQm5D2y0kAzml7LGODrYCUt4W1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+q7rXaCYfy3Xf2QSbRQGl9/pL7xw9ZMQseYW38nPx+39LInYDWzKPDB9qx0uj7Vpm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ReTSEf9r81PUIaBxj0V2X/VWHag5scBjXoflQLxyV6i1UvTuWyhYvX1Bbaj02MqV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tGNMrjbj25Wx2za53VDonzNA6RMZzkWGMfzmkkGM6kjGzLEsveys+bYCt7Fs7slR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+4oby0bIUmN7iqLhqlEhS4weWW4iHlq17X7CZeQAE1XeVZBz1N4G8FLjND2eyqb2N
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RAcQqp3BAoGBAOiU3WTu/kSccteDRxR1gVRPqEgfoLDwyAb7ORVUWX4Ii/z/soMw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xZ2MlYPLnp3Fyu/hKhJPC1LzkD4CGHCTJJ1NnUudtDxl2Zh1FZYGmv1hi1TID/cm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+G0+3XhlJgztS41+AzxTNMulV1yieT2HIRIoRpdSx1UIA72l42YqjrwUNAoGBANdV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+/Ib+3hAfFtSMMI1qZQXvlKEoDRbUOCYuBVkTK8oQJQH6MLDokHZ8sXBAqi9383b1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+XmhQBJZ//yMy0AqFa2QBlkK0Gizzhh7BLSjIT2LREf66B2cWzhgdhbSp6Nuk+3DK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NfibxsFAPpW05HqtfxhbjrLfoE8VvTuMGQ8AaXw5AoGBAISo7IL2wrdV2TdN3Mwx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ndv+N4kz6Q8jt6QrxUqCOy1lKJvdKPAlcIJFvr5W9RkeyXr7nmilB1uAK4UC4vfL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+JfZHX/HSeQx+N5f7KJ3TFLJz4eow1tJsvOVCPP0FbkH3LFO7/+HojSKEYN39NmAa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+v+VU3Zas/GvSZrxtPwASDvE9AoGBAJOBbluW6MzITx5H7dZhRFR9miWOxvCVbOUS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+b01mKX/f8UnadVIp7RONNQr88NdVZqxdRk9USOBDS6Vz4DjkzfySbbjBoJCcPIqC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+r4mZNXAuYRJJolqGr6SrTHTGUyFqcWcAzVnAc7TbakOoxz4V7NLlnOmA8FJcROUu
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gdfZ42hZAoGBANyL2IQ+L92iYVvqsz1zPBlvemevx8zP6GmlzvTcVexyDTIiLg6W
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BVil5zRDPJdDiFfBK18Qg1mJoE4SjLTg+yGww9ef37Zb9kZypy6pM6AbRWILZ1Gv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+7UsWUzk6rgcQpDdpJCUEt+AD3LQJTxxuoIhZePvC2GLkzsjZA7ZyB5+S
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/trusted-leaf.crt test/mitmproxy/net/data/verificationcerts/trusted-leaf.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 6a92de92c..3ccae708b 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/trusted-leaf.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/trusted-leaf.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,18 +1,18 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIC4TCCAckCCQCj6D9oVylb8jANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIC4TCCAckCCQCj6D9oVylb9zANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--cyBQdHkgTHRkMB4XDTE1MTEwMTE2NDgwMloXDTE4MDgyMTE2NDgwMlowIDEeMBwG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cyBQdHkgTHRkMB4XDTE4MDkwNzA4MjI1MloXDTM4MDkwMjA4MjI1MlowIDEeMBwG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- A1UEAwwVZXhhbXBsZS5taXRtcHJveHkub3JnMIIBIjANBgkqhkiG9w0BAQEFAAOC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--AQ8AMIIBCgKCAQEAy/L5JYHS7QFhSIsjmd6bJTgs2rdqEn6tsmPBVZKZ7SqCAVjW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--hPpEu7Q23akmU6Zm9Fp/vENc3jzxQLlEKhrv7eWmFYSOrCYtbJOz3RQorlwjjfdY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LlNQh1wYUXQX3PN3r3dyYtt5vTtXKc8+aP4M4vX7qlbW+4j4LrQfmPjS0XOdYpu3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--wh+i1ZMIhZye3hpCjwnpjTf7/ff45ZFxtkoi1uzEC/+swr1RSvamY8Foe12Re17Z
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--5ij8ZB0NIdoSk1tDkY3sJ8iNi35+qartl0UYeG9IUXRwDRrPsEKpF4RxY1+X2bdZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--r6PKb/E4CA5JlMvS5SVmrvxjCVqTQBmTjXfxqwIDAQABMA0GCSqGSIb3DQEBCwUA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--A4IBAQBmpSZJrTDvzSlo6P7P7x1LoETzHyVjwgPeqGYw6ndGXeJMN9rhhsFvRsiB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--I/aHh58MIlSjti7paikDAoFHB3dBvFHR+JUa/ailWEbcZReWRSE3lV6wFiN3G3lU
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--OyofR7MKnPW7bv8hSqOLqP1mbupXuQFB5M6vPLRwg5VgiCHI/XBiTvzMamzvNAR3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--UHHZtsJkRqzogYm6K9YJaga7jteSx2nNo+ujLwrxeXsLChTyFMJGnVkp5IyKeNfc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--qwlzNncb3y+4KnUdNkPEtuydgAxAfuyXufiFBYRcUWbQ5/9ycgF7131ySaj9f/Y2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--kMsv2jg+soKvwwVYCABsk1KSHtfz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+AQ8AMIIBCgKCAQEAqKzVdsRKgthv6V/dk3Tncy4ymbACs383nGutjulExvroNOCw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+b0y0e7unNGbtXxFQqSvA7eGaT1yRNfoMbXGSS+sn8A3gB6/s2A0Sw7KeSDdoaqEq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F/LzRBed1YkxSyy0GXuTd7HXNIoFn/eF1tqxgViWdfyFD85qY4yJ+luofdm7IcPM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ENPzV4nKzDh2PdJpQrEokWz2jM0zefC3IYnFHXY5bA3MnhE03/P0VxeEYkBdmEAt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+O1U2Bkw9SKCLy9zF13ks6/dDZ9LjMtRKI83gQS5z3S3bA45YxFuyeLWgVsJ2NYTa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+j9/8c4xwOjg9TpkCvcmZiPUYGddPHWoKqAAhBwIDAQABMA0GCSqGSIb3DQEBCwUA
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+A4IBAQAf8cjxunN4Y7NUD2Z/SNOJ/s0uWJtTPV6m4FxSwwD0wfbsyirPchmattLc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+BabrQkeMMm8gMOrORfanXQwvLZvX0aDf96EgLSfHv8Iqeol5Byrgkn7UORXl20Jt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+8UNRURUZYtWxn08P8dlhxQUncPF/UxCesC8x0cihqv+YTB3TX1sni9mOqPCYY8yH
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+E8kCW4zTJ0J9OQUHq9qdYQM/PGVm99+DWBItUeZAva8Rqj1FN3f9j1eWB+EjfYu7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ztsTInpNWP4tIh6vIFtuaGr077cJawTe6YVyNxVqquI9+2fpSPkt7tCTIhbQ4AmM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DeHzn+KjfKN8ooWqmcfmUZWaADe0
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/trusted-leaf.key test/mitmproxy/net/data/verificationcerts/trusted-leaf.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 783ebf1cd..7db3186e7 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/trusted-leaf.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/trusted-leaf.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,27 +1,27 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIEpAIBAAKCAQEAy/L5JYHS7QFhSIsjmd6bJTgs2rdqEn6tsmPBVZKZ7SqCAVjW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--hPpEu7Q23akmU6Zm9Fp/vENc3jzxQLlEKhrv7eWmFYSOrCYtbJOz3RQorlwjjfdY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LlNQh1wYUXQX3PN3r3dyYtt5vTtXKc8+aP4M4vX7qlbW+4j4LrQfmPjS0XOdYpu3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--wh+i1ZMIhZye3hpCjwnpjTf7/ff45ZFxtkoi1uzEC/+swr1RSvamY8Foe12Re17Z
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--5ij8ZB0NIdoSk1tDkY3sJ8iNi35+qartl0UYeG9IUXRwDRrPsEKpF4RxY1+X2bdZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--r6PKb/E4CA5JlMvS5SVmrvxjCVqTQBmTjXfxqwIDAQABAoIBAQC956DWq+wbhA1x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--3x1nSUBth8E8Z0z9q7dRRFHhvIBXth0X5ADcEa2umj/8ZmSpv2heX2ZRhugSh+yc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--t+YgzrRacFwV7ThsU6A4WdBBK2Q19tWke4xAlpOFdtut/Mu7kXkAidiY9ISHD5o5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--9B/I48ZcD3AnTHUiAogV9OL3LbogDD4HasLt4mWkbq8U2thdjxMIvxdg36olJEuo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--iAZrAUCPZEXuU89BtvPLUYioe9n90nzkyneGNS0SHxotlEc9ZYK9VTsivtXJb4wB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ptDMCp+TH3tjo8BTGnbnoZEybgyyOEd0UTzxK4DlxnvRVWexFY6NXwPFhIxKlB0Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Bg8NkAkBAoGBAOiRnmbC5QkqrKrTkLx3fghIHPqgEXPPYgHLSuY3UjTlMb3APXpq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--vzQnlCn3QuSse/1fWnQj+9vLVbx1XNgKjzk7dQhn5IUY+mGN4lLmoSnTebxvSQ43
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VAgTYjST9JFmJ3wK4KkWDsEsVao8LAx0h5JEQXUTT5xZpFA2MLztYbgfAoGBAOB/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MvhLMAwlx8+m/zXMEPLk/KOd2dVZ4q5se8bAT/GiGsi8JUcPnCk140ZZabJqryAp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--JFzUHIjfVsS9ejAfocDk1JeIm7Uus4um6fQEKIPMBxI/M/UAwYCXAG9ULXqilbO3
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--pTdeeuraVKrTu1Z4ea6x4du1JWKcyDfYfsHepcT1AoGBAM2fskV5G7e3G2MOG3IG
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1E/OMpEE5WlXenfLnjVdxDkwS4JRbgnGR7d9JurTyzkTp6ylmfwFtLDoXq15ttTs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--wSUBBMCh2tIy+201XV2eu++XIpMQca84C/v352RFTH8hqtdpZqkY74KsCDGzcd6x
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--SQxxfM5efIzoVPb2crEX0MZRAoGAQ2EqFSfL9flo7UQ8GRN0itJ7mUgJV2WxCZT5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--2X9i/y0eSN1feuKOhjfsTPMNLEWk5kwy48GuBs6xpj8Qa10zGUgVHp4bzdeEgAfK
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--9DhDSLt1694YZBKkAUpRERj8xXAC6nvWFLZAwjhhbRw7gAqMywgMt/q4i85usYRD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--F0ESE/kCgYBbc083PcLmlHbkn/d1i4IcLI6wFk+tZYIEVYDid7xDOgZOBcOTTyYB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--BrDzNqbKNexKRt7QHVlwR+VOGMdN5P0hf7oH3SMW23OxBKoQe8pUSGF9a4DjCS1v
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--vCXMekifb9kIhhUWaG71L8+MaOzNBVAmk1+3NzPZgV/YxHjAWWhGHQ==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIEogIBAAKCAQEAqKzVdsRKgthv6V/dk3Tncy4ymbACs383nGutjulExvroNOCw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+b0y0e7unNGbtXxFQqSvA7eGaT1yRNfoMbXGSS+sn8A3gB6/s2A0Sw7KeSDdoaqEq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F/LzRBed1YkxSyy0GXuTd7HXNIoFn/eF1tqxgViWdfyFD85qY4yJ+luofdm7IcPM
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+ENPzV4nKzDh2PdJpQrEokWz2jM0zefC3IYnFHXY5bA3MnhE03/P0VxeEYkBdmEAt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+O1U2Bkw9SKCLy9zF13ks6/dDZ9LjMtRKI83gQS5z3S3bA45YxFuyeLWgVsJ2NYTa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+j9/8c4xwOjg9TpkCvcmZiPUYGddPHWoKqAAhBwIDAQABAoIBABsUC/zSDEgvKOAl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RLP8a3+hJfxoNjbMsIfK/YTYy/LJqud6PrjPbpYCjRgrgeXmKLXP0VwfAJ/G84Tf
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+zIjxV5Qaf0HZaGKzimkwyBdkoGZlhry/fLt1hDolNHBoYuJ3nb4NiaIIiczkb3y7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xt+0IhTqvNTaIh5ke83ZbPklJ8p0HAzw1q6+iRFZiZKH1iVRwJyIyK654wpNQ93W
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+SqUKa3uAbqw+Bx9fzyEunANFwoBcZka9oSR9bTlhGB8HPHZFVYKgZvE4n9WOclKW
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+E75pGG6vFYZkxBdqcjFNlPKKZRisDuey28teiHXThh1MvYxRdaMq4oxOE1J+n17k
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F2gQolECgYEA01j1FlExu45+U36n3tCCyS50dTtf0Qpi71c1s5DZyT+AAB2ZSGXm
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VBtKgVRNg/iWfHn5b/zHF30OtgIzcsrU66cWMwIXPUQigXh8Cteve7VMs03hce1w
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+wsFwLoyvdWEam32YAymqRgN3H6JQim82IJJ3YlWrgEytBnvLkADCihkCgYEAzE/g
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+8aoxDZJUwbvaZjLwuydmvc+aAwanVgqvtkca4x99oPhNQna6O0jXXAtJXMA3SHp5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+QYMDKh98BqCXyfXd+1Semc9pgAPz7l4j09WG7Zdap3xinTOkUsmTAz/2T967HIsP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6qP7RUiwjmbUk8ZGcKsNjoxzPA4JURYimKB5qB8CgYBTjlnnJtaYpi8/Z1WK+7iZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+PSqBpqWtCYQvx7TNdzkDHX3Hjewp+U9kdR2xn9i9kiw8riR1p+Q2XxTP1HLusU4Y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+lIhsRilV6XgS48V2q+sO55CZWvMEjbEE7mEhpjFAINHaI39T0Mcmwvv3n75j3K/z
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+lLRqRiB1qtrFM3A5UHOZEQKBgBPQm2xUqTU7v+SaJ3BJ+HbuN1SpUbKBbrE1kB0J
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+gF4Oq8x0yGltwloFkn1mytKoAbSRzDjCUAhBzXGHGbGImuLJLiiUqRK1T28Kyka9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+KrzYNP6RXa8JVyKAUjW6elT8sQDvq7eB99icWCM3bd53GFXNAR+WF4b3hYfLscdD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+qQjZAoGAB3ah068Qscb2Ef3+eufa+EvOfMDrNNvlEoZXRlhviTg3NEwjyqbxaCIy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6Xg+rWvgJm9UE2RBOcCNeghkEabmL1+8DvmDiV1lt9oJtqULBirvalp2H3+9yiTk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+j5dnVcRF6cYvNFmwTr2WZFBGgq96d/Zmbx3o3MIqSBc8I6pLNzo=
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/trusted-root.crt test/mitmproxy/net/data/verificationcerts/trusted-root.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index b22e4d20d..5868a304d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/trusted-root.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/trusted-root.crt
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,21 +1,21 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIDXTCCAkWgAwIBAgIJAPAfPQGCV/Z4MA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIDXTCCAkWgAwIBAgIJALzkvKyFAwWYMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- BAYTAkFVMRMwEQYDVQQIDApTb21lLVN0YXRlMSEwHwYDVQQKDBhJbnRlcm5ldCBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--aWRnaXRzIFB0eSBMdGQwHhcNMTUxMTAxMTY0ODAxWhcNMTgwODIxMTY0ODAxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+aWRnaXRzIFB0eSBMdGQwHhcNMTgwOTA3MDgyMjUxWhcNMzgwOTAyMDgyMjUxWjBF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- MQswCQYDVQQGEwJBVTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--CgKCAQEArp8LD34JhKCwcQbwIYQMg4+eCgLVN8fwB7+/qOfJbArPs0djFBN+F7c6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--HGvMr24BKUk5u8pn4dPtNurm/vPC8ovNGmcXz62BQJpcMX2veVdRsF7yNwhNacNJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Arq+70zNMwYBznx0XUxMF6j6nVFf3AW6SU04ylT4Mp3SY/BUUDAdfl1eRo0mPLNS
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8rpsN+8YBw1Q7SCuBRVqpOgVIsL88svgQUSOlzvMZPBpG/cmB3BNKNrltwb5iFEI
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1jAV7uSj5IcIuNO/246kfsDVPTFMJIzav/CUoidd5UNw+SoFDlzh8sA7L1Bm7D1/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--3KHYSKswGsSR3kynAl10w/SJKDtn8wIDAQABo1AwTjAdBgNVHQ4EFgQUgOcrtxBX
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--LxbpnOT65d+vpfyWUkgwHwYDVR0jBBgwFoAUgOcrtxBXLxbpnOT65d+vpfyWUkgw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAEE9bFmUCA+6cvESKPoi2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--TGSpV652d0xd2U66LpEXeiWRJFLz8YGgoJCx3QFGBscJDXxrLxrBBBV/tCpEqypo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--pYIqsawH7M66jpOr83Us3M8JC2eFBZJocMpXxdytWqHik5VKZNx6VQFT8bS7+yVC
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--VoUKePhlgcg+pmo41qjqieBNKRMh/1tXS77DI1lgO5wZLVrLXcdqWuDpmaQOKJeq
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--G/nxytCW/YJA7bFn/8Gjy8DYypJSeeaKu7o3P3+ONJHdIMHb+MdcheDBS9AOFSeo
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--xI0D5EbO9F873O77l7nbD7B0X34HFN0nGczC4poexIpbDFG3hAPekwZ5KC6VwJLc
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--1Q==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+CgKCAQEAkvT4Y1ML8Gg4x5aFVygIW022tJsEyfuW4HsEvIarAGpFtUNkw0dOoAxv
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Gv71I0KAWOXxtc9DUjtq7ZXJcG+dBiheTYJ40lrYhHvUt7J37nrUF5v5trQzoE9I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6WGtzTV8C8RI6F+M6GtwxgwRBgqkuXiK5ExPXAjGMMJZWtiEXHxGTNB6F4zy884m
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VjVtQi8jy+c5g21Awp3z5HrQLM210zwvgi7Rygk6/UM0AnmST4o32SqFSd+0MFUJ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+f3pH3xczfKmhU/TBoVEWRB1YzwixsJrzDOB8wOGnNKCsl45hYUJZZ8epVkyrvFZQ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+iMkwIqqBJbkU6H7fZBl68TJ8ascUCQIDAQABo1AwTjAdBgNVHQ4EFgQUkurgHlw1
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+xMP2wrsrGPTk0ofxCyowHwYDVR0jBBgwFoAUkurgHlw1xMP2wrsrGPTk0ofxCyow
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+DAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAcdExVlSvH6aVExNiQO3k
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cMamj+78woDn9x563vwzaGP24KvOXk1B/IJp5kqu3ZsXS0I0Mz6xwXHAXeuxaj06
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+cKgEpHKKgClLblXo2zWqo/3V1UFFpOVP/NhI3r21b+fPrS46rP0mw75haQCph8/8
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+buQr0OeAYbElliY/ji+cJiCJB8A/D13fUMV/NUUfPW/UE6497jOmz+6PtZNAoOFx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+evrmDcbCzbJxacyLJX04rsrt6DO09jb/+5lFm5Aqr6ySKasrmheIGEisl4o9Zbuy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+5PvYgbOEmFgPATIiWGpBO/rqwDdsmgyYFl+YfFoW0akXUVhDb2e5iRDx6Rs0fmN/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NA==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END CERTIFICATE-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/trusted-root.key test/mitmproxy/net/data/verificationcerts/trusted-root.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 05483f77f..c690751f2 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/trusted-root.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/trusted-root.key
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1,27 +1,27 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----BEGIN RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--MIIEowIBAAKCAQEArp8LD34JhKCwcQbwIYQMg4+eCgLVN8fwB7+/qOfJbArPs0dj
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--FBN+F7c6HGvMr24BKUk5u8pn4dPtNurm/vPC8ovNGmcXz62BQJpcMX2veVdRsF7y
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--NwhNacNJArq+70zNMwYBznx0XUxMF6j6nVFf3AW6SU04ylT4Mp3SY/BUUDAdfl1e
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Ro0mPLNS8rpsN+8YBw1Q7SCuBRVqpOgVIsL88svgQUSOlzvMZPBpG/cmB3BNKNrl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--twb5iFEI1jAV7uSj5IcIuNO/246kfsDVPTFMJIzav/CUoidd5UNw+SoFDlzh8sA7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--L1Bm7D1/3KHYSKswGsSR3kynAl10w/SJKDtn8wIDAQABAoIBAFgMzjDzpqz/sbhs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--fS0JPp4gDtqRbx3/bSMbJvNuXPxjvzNxLZ5z7cLbmyu1l7Jlz6QXzkrI1vTiPdzR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--OcUY+RYANF252iHYJTKEIzS5YX/X7dL3LT9eqlpIJEqCC8Dygw3VW5fY3Xwl+sB7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--blNhMuro4HQRwi8UBUrQlcPa7Ui5BBi323Q6en+VjYctkqpJHzNKPSqPTbsdLaK+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--B0XuXxFatM09rmeRKZCL71Lk1T8N/l0hqEzej7zxgVD7vG/x1kMFN4T3yCmXCbPa
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--izGHYr1EBHglm4qMNWveXCZiVJ+wmwCjdjqvggyHiZFXE2N0OCrWPhxQPdqFf5y7
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--bUO9U2ECgYEA6GM1UzRnbVpjb20ezFy7dU7rlWM0nHBfG27M3bcXh4HnPpnvKp0/
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--8a1WFi4kkRywrNXx8hFEd43vTbdObLpVXScXRKiY3MHmFk4k4hbWuTpmumCubQZO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--AWlX6TE0HRKn1wQahgpQcxcWaDN2xJJmRQ1zVmlnNkT48/4kFgRxyykCgYEAwF08
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--ngrF35oYoU/x+KKq2NXGeNUzoZMj568dE1oWW0ZFpqCi+DGT+hAbG3yUOBSaPqy9
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--zn1obGo0YRlrayvtebz118kG7a/rzY02VcAPlT/GpEhvkZlXTwEK17zRJc1nJrfP
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--39QAZWZsaOru9NRIg/8HcdG3JPR2MhRD/De9GbsCgYAaiZnBUq6s8jGAu/lUZRKT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--JtwIRzfu1XZG77Q9bXcmZlM99t41A5gVxTGbftF2MMyMMDJc7lPfQzocqd4u1GiD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--Jr+le4tZSls4GNxlZS5IIL8ycW/5y0qFJr5/RrsoxsSb7UAKJothWTWZ2Karc/xx
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--zkNpjsfWjrHPSypbyU4lYQKBgFh1R5/BgnatjO/5LGNSok/uFkOQfxqo6BTtYOh6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--P9efO/5A1lBdtBeE+oIsSphzWO7DTtE6uB9Kw2V3Y/83hw+5RjABoG8Cu+OdMURD
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--eqb+WeFH8g45Pn31E8Bbcq34g5u5YR0jhz8Z13ZzuojZabNRPmIntxmGVSf4S78a
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--/plrAoGBANMHNng2lyr03nqnHrOM6NXD+60af0YR/YJ+2d/H40RnXxGJ4DXn7F00
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--a4vJFPa97uq+xpd0HE+TE+NIrOdVDXPePD2qzBzMTsctGtj30vLzojMOT+Yf/nvO
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--WxTL5Q8GruJz2Dn0awSZO2z/3A8S1rmpuVZ/jT5NtRrvOSY6hmxF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIIEpAIBAAKCAQEAkvT4Y1ML8Gg4x5aFVygIW022tJsEyfuW4HsEvIarAGpFtUNk
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+w0dOoAxvGv71I0KAWOXxtc9DUjtq7ZXJcG+dBiheTYJ40lrYhHvUt7J37nrUF5v5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+trQzoE9I6WGtzTV8C8RI6F+M6GtwxgwRBgqkuXiK5ExPXAjGMMJZWtiEXHxGTNB6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+F4zy884mVjVtQi8jy+c5g21Awp3z5HrQLM210zwvgi7Rygk6/UM0AnmST4o32SqF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+Sd+0MFUJf3pH3xczfKmhU/TBoVEWRB1YzwixsJrzDOB8wOGnNKCsl45hYUJZZ8ep
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+VkyrvFZQiMkwIqqBJbkU6H7fZBl68TJ8ascUCQIDAQABAoIBAC/1mopvs9nFaaJZ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+UTLccb26YwIWBT4VyWuBOk58dJoyFIXPdLb2MoaxCCF7S20yasiYYoW/Gm1fzsmy
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+tIbpJgm4au5Iwj2EQF0cPJOmvtUpaMY7tQcXUDHlLhpcMmhiKBV+/Xw4krfXOHqp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+vXSHTLLq0Akpjkyu4F9RTfAD8U5tEbpPsCGcsSJEHxPgqDexITDwB/yuhvrKKUwY
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+t8WQBWO5M8D6Z1HGTFovIa86eX4hUKKbNB8sE7yi1wGxbOloIOQESOcqiisP5GGN
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+d6r5k9jBwZXlyh7GR+GNILF+n6ctdOFr6MQQEKvDzjh/IVYADen19909Ed7Wn0gR
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+C0Ec2gECgYEAwruIv33GWxGFvQmAUtPaHyhkFOiIpTrmZGeaJe7uLvAF86wK9v35
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+wN2fH69JczO1iEWuqDLZ4nEorx6UvjSFBGYTXT1dAnULJ1KHvkk6JjbXq1srTY42
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+U2h33XfJiNgrXlj6v7tMhKD/nBsfyw8v4aHxxUkJl2HomPSv7C7EvhECgYEAwTFp
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+sUwDXVeputWwBvDUXHgGaVks28QHXvYH7Q0WsbFjb6lZVH/FxLXvGs7aaZk8WuHQ
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+JJcXmEkTs1QDMMWoOlZw9WJv5Zlopq31oYHp8dt2EuO/PQcYmXYEG7JIHJhx8mfL
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+f3Y4ix/hnvnITTg7bRNpcxwGEqyg16kalP8PXnkCgYEAgml5cVTYLFEV0b21NMMw
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+RsGUFPSN3qoNdZx0fYb/+GtCcSf8x+DbDDDfyiZn+EDfB/4ys+4qQR4rcuv2DVO6
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+6XE68qyPx39/EryQr/z2dnUwBlAuNehRtZY3ABii3YR3tt28P/89hW0VAgSgTCtF
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+k8QS2F7Lj5hAX38u+etwUyECgYBWjf7eckHnpgjjLi3JTki2jQfCVzOj2nW689ul
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+NwH95o24T1U4aG6ArUpM5nQwb3j89sK8Qf1OOx9abr9nMIcoa+X76nhbk5mxY6rz
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+CzN3Km4CFItvmihJSPiaOAva0+npQtuHZb37hvMcuKgnAJSPT+0kp1+JKlJ9jMPe
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+EVAfcQKBgQCDxRNXxn4ILyH3kx8lrch7kD5fp/7KifDjAFFJ0DK2e2xsxLUToh2I
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+PdMuzCUv4LL8kRsQ/+mUJY4YlOV9OKVAZbI/gPw9NnzBUBugz+wy0OG/nyS5k7G5
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+MIzZm8yx3RieTNhwmw25NDLyGApHGQYsQ7DM/daA/wwdjFsyncxHSg==
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- -----END RSA PRIVATE KEY-----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git test/mitmproxy/net/data/verificationcerts/trusted-root.srl test/mitmproxy/net/data/verificationcerts/trusted-root.srl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 4ad962ba0..cf60e2a5c 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- test/mitmproxy/net/data/verificationcerts/trusted-root.srl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ test/mitmproxy/net/data/verificationcerts/trusted-root.srl
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -1 +1 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--A3E83F6857295BF2
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+A3E83F6857295BF7
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/files/version-test.patch b/python/py-mitmproxy/files/version-test.patch
</span>new file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 00000000000..2d7a65a41ac
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--- /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ b/python/py-mitmproxy/files/version-test.patch
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -0,0 +1,10 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+--- test/mitmproxy/test_version.py.old     2020-08-02 12:01:29.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++++ test/mitmproxy/test_version.py 2020-08-02 12:00:02.000000000 +0200
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+@@ -20,6 +20,7 @@
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     version.VERSION = "3.0.0rc2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+     with mock.patch('subprocess.check_output') as m:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>++      with mock.patch('subprocess.run') as do_not_fail:
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         m.return_value = b"tag-0-cafecafe"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+         assert version.get_dev_version() == "3.0.0rc2"
</span><span style='display:block; white-space:pre;background:#e0ffe0;'>+ 
</span><span style='display:block; white-space:pre;color:#808080;'>diff --git a/python/py-mitmproxy/files/wsproto0.13.patch b/python/py-mitmproxy/files/wsproto0.13.patch
</span>deleted file mode 100644
<span style='display:block; white-space:pre;color:#808080;'>index 5f2178554ca..00000000000
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>--- a/python/py-mitmproxy/files/wsproto0.13.patch
</span><span style='display:block; white-space:pre;background:#e0e0ff;'>+++ /dev/null
</span><span style='display:block; white-space:pre;background:#e0e0e0;'>@@ -1,294 +0,0 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 106948d996d74bf5ff7e3511f35eefea0a90561f Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: rpigott <rpigott@berkeley.edu>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Sun, 27 Jan 2019 00:59:26 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 1/4] update to wsproto 0.13
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mitmproxy/proxy/protocol/websocket.py | 87 +++++++++++++--------------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- setup.py                              |  2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 2 files changed, 44 insertions(+), 45 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git mitmproxy/proxy/protocol/websocket.py mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 0d1964a60..591bae7e0 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -4,8 +4,9 @@
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- import wsproto
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--from wsproto import events
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--from wsproto.connection import ConnectionType, WSConnection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+from wsproto import events, WSConnection
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+from wsproto.connection import ConnectionType
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+from wsproto.events import AcceptConnection, CloseConnection, Message, Ping, Request
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from wsproto.extensions import PerMessageDeflate
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- from mitmproxy import exceptions
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -56,47 +57,44 @@ def __init__(self, ctx, handshake_flow):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if 'Sec-WebSocket-Extensions' in handshake_flow.response.headers:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if PerMessageDeflate.name in handshake_flow.response.headers['Sec-WebSocket-Extensions']:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 extensions = [PerMessageDeflate()]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[self.client_conn] = WSConnection(ConnectionType.SERVER,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                                          extensions=extensions)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[self.server_conn] = WSConnection(ConnectionType.CLIENT,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                                          host=handshake_flow.request.host,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                                          resource=handshake_flow.request.path,
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                                                          extensions=extensions)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        self.connections[self.client_conn] = WSConnection(ConnectionType.SERVER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        self.connections[self.server_conn] = WSConnection(ConnectionType.CLIENT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            for conn in self.connections.values():
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                conn.extensions[0].finalize(conn, handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        data = self.connections[self.server_conn].bytes_to_send()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[self.client_conn].receive_bytes(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        request = Request(extensions = extensions, host = handshake_flow.request.host, target = handshake_flow.request.path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[self.server_conn].send(request)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        self.connections[self.client_conn].receive_data(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         event = next(self.connections[self.client_conn].events())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        assert isinstance(event, events.ConnectionRequested)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        assert isinstance(event, events.Request)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[self.client_conn].accept(event)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[self.server_conn].receive_bytes(self.connections[self.client_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        assert isinstance(next(self.connections[self.server_conn].events()), events.ConnectionEstablished)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[self.client_conn].send(AcceptConnection(extensions=extensions))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        self.connections[self.server_conn].receive_data(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        assert isinstance(next(self.connections[self.server_conn].events()), events.AcceptConnection)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-     def _handle_event(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if isinstance(event, events.DataReceived):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            return self._handle_data_received(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        elif isinstance(event, events.PingReceived):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            return self._handle_ping_received(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        elif isinstance(event, events.PongReceived):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            return self._handle_pong_received(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        elif isinstance(event, events.ConnectionClosed):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            return self._handle_connection_closed(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if isinstance(event, events.Message):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            return self._handle_message(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        elif isinstance(event, events.Ping):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            return self._handle_ping(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        elif isinstance(event, events.Pong):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            return self._handle_pong(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        elif isinstance(event, events.CloseConnection):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            return self._handle_close_connection(event, source_conn, other_conn, is_server)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         # fail-safe for unhandled events
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return True  # pragma: no cover
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    def _handle_data_received(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    def _handle_message(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         fb = self.server_frame_buffer if is_server else self.client_frame_buffer
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         fb.append(event.data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if event.message_finished:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             original_chunk_sizes = [len(f) for f in fb]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            if isinstance(event, events.TextReceived):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            if isinstance(event, events.TextMessage):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 message_type = wsproto.frame_protocol.Opcode.TEXT
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 payload = ''.join(fb)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             else:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -127,19 +125,20 @@ def get_chunk(payload):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             yield (payload[i:i + chunk_size], True if i + chunk_size >= len(payload) else False)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 for chunk, final in get_chunk(websocket_message.content):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                    self.connections[other_conn].send_data(chunk, final)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                    other_conn.send(self.connections[other_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    data = self.connections[other_conn].send(Message(data = chunk, message_finished = final))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    other_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if self.flow.stream:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            self.connections[other_conn].send_data(event.data, event.message_finished)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            other_conn.send(self.connections[other_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            data = self.connections[other_conn].send(Message(data = event.data, message_finished = event.message_finished))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            other_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return True
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    def _handle_ping_received(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        # PING is automatically answered with a PONG by wsproto
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[other_conn].ping()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        other_conn.send(self.connections[other_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        source_conn.send(self.connections[source_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    def _handle_ping(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        # Use event.response to create the approprate Pong response
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[other_conn].send(Ping())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        other_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[source_conn].send(event.response())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        source_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.log(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             "Ping Received from {}".format("server" if is_server else "client"),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             "info",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -147,7 +146,7 @@ def _handle_ping_received(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return True
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    def _handle_pong_received(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    def _handle_pong(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.log(
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             "Pong Received from {}".format("server" if is_server else "client"),
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             "info",
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -155,14 +154,15 @@ def _handle_pong_received(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         )
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return True
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--    def _handle_connection_closed(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+    def _handle_close_connection(self, event, source_conn, other_conn, is_server):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.flow.close_sender = "server" if is_server else "client"
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.flow.close_code = event.code
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.flow.close_reason = event.reason
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        self.connections[other_conn].close(event.code, event.reason)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        other_conn.send(self.connections[other_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        source_conn.send(self.connections[source_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[other_conn].send(CloseConnection(code=event.code, reason=event.reason))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        other_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[source_conn].send(event.response())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        source_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return False
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -170,8 +170,7 @@ def _inject_messages(self, endpoint, message_queue):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         while True:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 payload = message_queue.get_nowait()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                self.connections[endpoint].send_data(payload, final=True)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                data = self.connections[endpoint].bytes_to_send()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                data = self.connections[endpoint].send(Message(data = payload, message_finished = True))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 endpoint.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             except queue.Empty:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 break
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -197,8 +196,8 @@ def __call__(self):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     is_server = (source_conn == self.server_conn)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     frame = websockets.Frame.from_file(source_conn.rfile)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                    self.connections[source_conn].receive_bytes(bytes(frame))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                    source_conn.send(self.connections[source_conn].bytes_to_send())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    data = self.connections[source_conn].receive_data(bytes(frame))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    source_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     if close_received:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                         return
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 2af71a4486494b64431558da2e068dc1babe65fa Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: rpigott <rpigott@berkeley.edu>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 30 Jan 2019 18:12:05 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 2/4] Separate client and server PerMessageDefalte extension
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- per #3460
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mitmproxy/proxy/protocol/websocket.py | 16 ++++++++++------
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 10 insertions(+), 6 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git mitmproxy/proxy/protocol/websocket.py mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 591bae7e0..fd2aed157 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -53,24 +53,28 @@ def __init__(self, ctx, handshake_flow):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.connections: dict[object, WSConnection] = {}
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        extensions = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        client_extensions = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        server_extensions = []
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if 'Sec-WebSocket-Extensions' in handshake_flow.response.headers:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             if PerMessageDeflate.name in handshake_flow.response.headers['Sec-WebSocket-Extensions']:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                extensions = [PerMessageDeflate()]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                client_extensions = [PerMessageDeflate()]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                server_extensions = [PerMessageDeflate()]
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.connections[self.client_conn] = WSConnection(ConnectionType.SERVER)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.connections[self.server_conn] = WSConnection(ConnectionType.CLIENT)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        if extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if client_extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            client_extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+          if server_extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            server_extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        request = Request(extensions = extensions, host = handshake_flow.request.host, target = handshake_flow.request.path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        request = Request(extensions = client_extensions, host = handshake_flow.request.host, target = handshake_flow.request.path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         data = self.connections[self.server_conn].send(request)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.connections[self.client_conn].receive_data(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         event = next(self.connections[self.client_conn].events())
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         assert isinstance(event, events.Request)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        data = self.connections[self.client_conn].send(AcceptConnection(extensions=extensions))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        data = self.connections[self.client_conn].send(AcceptConnection(extensions=server_extensions))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.connections[self.server_conn].receive_data(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         assert isinstance(next(self.connections[self.server_conn].events()), events.AcceptConnection)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 92fc87bc4c3922758fe9862fd309886f06fcb16b Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: rpigott <rpigott@berkeley.edu>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Wed, 30 Jan 2019 23:44:35 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 3/4] whitespace error
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mitmproxy/proxy/protocol/websocket.py | 2 +-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 1 insertion(+), 1 deletion(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git mitmproxy/proxy/protocol/websocket.py mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index fd2aed157..191da7a28 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -64,7 +64,7 @@ def __init__(self, ctx, handshake_flow):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if client_extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             client_extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--          if server_extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        if server_extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             server_extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         request = Request(extensions = client_extensions, host = handshake_flow.request.host, target = handshake_flow.request.path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From 7fa209790e0df869d0d3c96ba75cb1a85943fc7c Mon Sep 17 00:00:00 2001
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-From: rpigott <rpigott@berkeley.edu>
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Date: Thu, 31 Jan 2019 12:34:00 -0800
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-Subject: [PATCH 4/4] removed whitespace in kwargs
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- mitmproxy/proxy/protocol/websocket.py | 8 ++++----
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 1 file changed, 4 insertions(+), 4 deletions(-)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-diff --git mitmproxy/proxy/protocol/websocket.py mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-index 191da7a28..f5ac6a29d 100644
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>---- mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+++ mitmproxy/proxy/protocol/websocket.py
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -67,7 +67,7 @@ def __init__(self, ctx, handshake_flow):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if server_extensions:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             server_extensions[0].finalize(handshake_flow.response.headers['Sec-WebSocket-Extensions'])
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--        request = Request(extensions = client_extensions, host = handshake_flow.request.host, target = handshake_flow.request.path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+        request = Request(extensions=client_extensions, host=handshake_flow.request.host, target=handshake_flow.request.path)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         data = self.connections[self.server_conn].send(request)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         self.connections[self.client_conn].receive_data(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -129,11 +129,11 @@ def get_chunk(payload):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                             yield (payload[i:i + chunk_size], True if i + chunk_size >= len(payload) else False)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 for chunk, final in get_chunk(websocket_message.content):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                    data = self.connections[other_conn].send(Message(data = chunk, message_finished = final))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                    data = self.connections[other_conn].send(Message(data=chunk, message_finished=final))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                     other_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         if self.flow.stream:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--            data = self.connections[other_conn].send(Message(data = event.data, message_finished = event.message_finished))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+            data = self.connections[other_conn].send(Message(data=event.data, message_finished=event.message_finished))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             other_conn.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         return True
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>- 
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-@@ -174,7 +174,7 @@ def _inject_messages(self, endpoint, message_queue):
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-         while True:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             try:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 payload = message_queue.get_nowait()
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>--                data = self.connections[endpoint].send(Message(data = payload, message_finished = True))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-+                data = self.connections[endpoint].send(Message(data=payload, message_finished=True))
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 endpoint.send(data)
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-             except queue.Empty:
</span><span style='display:block; white-space:pre;background:#ffe0e0;'>-                 break
</span></pre><pre style='margin:0'>

</pre>