diff --git a/external/WinDivert-1.0.5-MINGW/CHANGELOG b/external/WinDivert-1.0.5-MINGW/CHANGELOG
deleted file mode 100644
index ba6bbc3..0000000
--- a/external/WinDivert-1.0.5-MINGW/CHANGELOG
+++ /dev/null
@@ -1,20 +0,0 @@
-WinDivert 1.0.0
-    - First release of WinDivert 1.0
-WinDivert 1.0.1
-    - Fixed stack overflow bug in 32bit versions of the driver.
-WinDivert 1.0.2
-    - WinDivert now requires Administrator privileges in order to access
-      (as opposed to just install) the WinDivert device.
-WinDivert 1.0.3
-    - Fix bug(s) relating to the parsing of IPv6 addresses.
-    - DivertOpen() now returns more meaningful error codes on failure.
-    - Two new helper API functions: DivertHelperParseIPvXAddress(..), X=4,6.
-    - Renamed DivertHelperParse(..) to DivertHelperParsePacket(..).
-WinDivert 1.0.4
-    - Same as WinDivert 1.0.3 except:
-      * Released with signed drivers.
-      * MinGW compiled gcc-4.6
-      * Minor documentation changes.
-WinDivert 1.0.5
-    - Fix the DIVERT_NETWORK_FORWARD_LAYER implementation.
-    - Upgrade Visual Studio support to 2012.
diff --git a/external/WinDivert-1.0.5-MINGW/README b/external/WinDivert-1.0.5-MINGW/README
deleted file mode 100644
index aad5569..0000000
--- a/external/WinDivert-1.0.5-MINGW/README
+++ /dev/null
@@ -1,139 +0,0 @@
-WinDivert 1.0: Windows Packet Divert
-====================================
-
-1. Introduction
----------------
-
-Windows Packet Divert (WinDivert) is a user-mode packet capture-and-divert
-package for Windows Vista, Windows 2008, and Windows 7.
-
-With WinDivert developers can write user-mode programs that capture and
-modify or drop network packets sent to/from the Windows network stack.
-In summary, WinDivert can
-    - capture network packets
-    - filter/drop network packets
-    - sniff network packets
-    - (re)inject network packets
-    - modify network packets
-
-WinDivert can be used to implement user-mode packet filters, packet sniffers,
-firewalls, NAT, VPNs, tunneling applications, etc., etc..  If you
-need to intercept and modify packets, then WinDivert is for you.
-
-The features of WinDivert include:
-    - packet interception, sniffing, or dropping modes
-    - support for loopback (localhost) traffic
-    - full IPv6 support
-    - network layer
-    - simple and powerful API
-    - high-level filtering language
-    - filter priorities
-    - freely available under the terms of the GNU Lesser General Public
-      License (LGPL)
-
-For more information about WinDivert, see doc/divert.html
-
-2. Similar Packages
--------------------
-
-WinDivert is similar to divert sockets in FreeBSD/MacOS, NETLINK sockets in
-Linux, and some commercial packet capturing packages such as WinPkFilter for
-Windows.  The design of WinDivert is largely influenced by FreeBSD's divert
-sockets.
-
-WinDivert in packet-sniffing mode is similar to Winpcap.  Unlike Winpcap,
-WinDivert fully supports capturing loopback traffic.   Furthermore, WinDivert
-supports packet interception, which is not supported in Winpcap.
-
-3. Architecture
----------------
-
-The basic architecture of WinDivert is as follows:
-
-                              +-----------------+
-                              |                 |
-                     +------->|    PROGRAM      |--------+
-                     |        | (WinDivert.dll) |        |
-                     |        +-----------------+        |
-                     |                                   | (3) re-injected
-                     | (2a) matching packet              |     packet
-                     |                                   |
-                     |                                   |
- [user mode]         |                                   |
- ....................|...................................|...................
- [kernel mode]       |                                   |
-                     |                                   |
-                     |                                   |
-              +---------------+                          +----------------->
-  (1) packet  |               | (2b) non-matching packet
- ------------>| WinDivert.sys |-------------------------------------------->
-              |               |
-              +---------------+
-
-The WinDivert.sys driver is inserted below the Windows network stack.  The
-following then happens
-
-(1) a new packet enters the network stack and is intercepted by WinDivert.sys
-(2a) if the packet matches a PROGRAM-defined filter, it is diverted.  The
-    PROGRAM reads the packet with a call to the DivertRecv() function.
-(2b) if the packet does not match the filter, the packet is permitted to
-    continue as normal.
-(3) PROGRAM either drops, modifies, or re-injects the packet.  If the
-    (modified) packet is re-injected, via a call to DivertSend(), it is
-    inserted back into the Windows network stack.
-
-4. Building
------------
-
-(1) In a WinDDK build environment, run the command:
-
-    wddk-build.bat
-
-(2) [OPTIONAL Visual Studio 2010 support] In a VS2010 command prompt, run the
-    command:
-
-    msvc-build.bat
-
-(3) [OPTIONAL MinGW support] In Linux with MinGW a cross-compiler, run the
-    command:
-
-    sh mingw-build.sh
-
-For more detailed build instructions, see doc\divert.html
-
-5. License
-----------
-
-This package is distributed under the GNU Lesser General Public License
-(LGPL) Version 3.  See LICENSE for more information.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>
-
-6. About
---------
-
-WinDivert was written by basil.
-
-For further information, or bug reports, please contact
-
-    basil AT reqrypt DOT org
-
-The homepage for WinDivert is
-
-    http://reqrypt.org/windivert.html
-
-The source code for WinDivert is hosted by GitHub at
-
-    https://github.com/basil00/Divert
-
diff --git a/external/WinDivert-1.0.5-MINGW/VERSION b/external/WinDivert-1.0.5-MINGW/VERSION
deleted file mode 100644
index 90a27f9..0000000
--- a/external/WinDivert-1.0.5-MINGW/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.0.5
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/WdfCoInstaller01009.dll b/external/WinDivert-1.0.5-MINGW/amd64/WdfCoInstaller01009.dll
deleted file mode 100644
index 6012ed3..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.dll b/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.dll
deleted file mode 100644
index 183fa99..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.inf b/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.inf
deleted file mode 100644
index db4fbd8..0000000
--- a/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[divert.NT.Wdf]
-KmdfService = divert, divert_WdfSection
-
-[divert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.sys b/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.sys
deleted file mode 100644
index 67aed0d..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/netdump.exe b/external/WinDivert-1.0.5-MINGW/amd64/netdump.exe
deleted file mode 100644
index f3ebe1e..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/netdump.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/netfilter.exe b/external/WinDivert-1.0.5-MINGW/amd64/netfilter.exe
deleted file mode 100644
index 319fb2b..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/netfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/passthru.exe b/external/WinDivert-1.0.5-MINGW/amd64/passthru.exe
deleted file mode 100644
index 906932c..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/passthru.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/amd64/webfilter.exe b/external/WinDivert-1.0.5-MINGW/amd64/webfilter.exe
deleted file mode 100644
index c82b045..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/amd64/webfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/doc/WinDivert.html b/external/WinDivert-1.0.5-MINGW/doc/WinDivert.html
deleted file mode 100644
index 63583a9..0000000
--- a/external/WinDivert-1.0.5-MINGW/doc/WinDivert.html
+++ /dev/null
@@ -1,1320 +0,0 @@
-<!doctype html>
-<html>
-<head>
-    <title>WinDivert 1.0 Documentation</title>
-</head>
-<body>
-<h1>WinDivert 1.0: Windows Packet Divert</h1>
-<h2>Table of Contents</h2>
-<ul>
-<li><a href="#introduction">1. Introduction</a></li>
-<li><a href="#building">2. Building</a></li>
-<ul>
-<li><a href="#driver_signing">2.1 Driver Signing</a></li>
-<li><a href="#visual_studio_2012_support">2.2 Visual Studio 2012 Support</a></li>
-<li><a href="#mingw_support">2.3 MinGW Support</a></li>
-</ul>
-<li><a href="#installing">3. Installing</a></li>
-<li><a href="#uninstalling">4. Uninstalling</a></li>
-<li><a href="#programming_api">5. Programming API</a></li>
-<ul>
-<li><a href="#divert_address">5.1 DIVERT_ADDRESS</a></li>
-<li><a href="#divert_open">5.2 DivertOpen</a></li>
-<li><a href="#divert_recv">5.3 DivertRecv</a></li>
-<li><a href="#divert_send">5.4 DivertSend</a></li>
-<li><a href="#divert_close">5.5 DivertClose</a></li>
-<li><a href="#divert_set_param">5.6 DivertSetParam</a></li>
-<li><a href="#divert_get_param">5.7 DivertGetParam</a></li>
-</ul>
-<li><a href="#helper_programming_api">6. Helper Programming API</a></li>
-<ul>
-<li><a href="#divert_iphdr">6.1 DIVERT_IPHDR</a></li>
-<li><a href="#divert_ipv6hdr">6.2 DIVERT_IPV6HDR</a></li>
-<li><a href="#divert_icmphdr">6.3 DIVERT_ICMPHDR</a></li>
-<li><a href="#divert_icmpv6hdr">6.4 DIVERT_ICMPV6HDR</a></li>
-<li><a href="#divert_tcphdr">6.5 DIVERT_TCPHDR</a></li>
-<li><a href="#divert_udphdr">6.6 DIVERT_UDPHDR</a></li>
-<li><a href="#divert_helper_parse_packet">6.7 DivertHelperParsePacket</a></li>
-<li><a href="#divert_help_parse_ipv4_address">6.8 DivertHelperParseIPv4Address</li>
-<li><a href="#divert_help_parse_ipv6_address">6.9 DivertHelperParseIPv6Address</li>
-<li><a href="#divert_helper_calc_checksums">6.10 DivertHelperCalcChecksums</a></li>
-</ul>
-<li><a href="#filter_language">7. Filter Language</a></li>
-<ul>
-<li><a href="#filter_examples">7.1 Filter Examples</a></li>
-<li><a href="#filter_usage">7.2 Filter Usage</a></li>
-</ul>
-<li><a href="#samples">8. Samples</a></li>
-<li><a href="#known_issues">9. Known Issues</a></li>
-<li><a href="#license">10. License</a></li>
-</ul>
-
-<hr>
-<a name="introduction"><h2>1. Introduction</h2></a>
-<p>
-WinDivert is a user-mode 
-capture/sniffing/modification/blocking/re-injection package for
-Windows Vista, Windows Server 2008, and Windows 7.
-WinDivert can be used to implement user-mode packet filters, packet sniffers,
-firewalls, NAT, VPNs, tunneling applications, etc., without the need to
-write kernel-level code.
-</p>
-<p>
-The main features of the WinDivert are:
-<ul>
-<li> User-mode packet capture, sniffing, dropping, filtering, modification,
-     re-injection, etc.</li>
-<li> Simple, high-level, programming API.</li>
-<li> Fully documented with sample programs.</li>
-<li> Full IPv6 support.</li>
-<li> Full loopback (localhost) support.</li>
-<li> A modern WDF/WFP driver implementation.</li>
-<li> Open source; Licensed under GNU Lesser General Public License (LGPL)
-     version 3.
-     See the <a href="#license">License</a> for more information.</li>
-</ul>
-</p><p>
-WinDivert provides similar functionality to
-<tt>divert</tt> sockets in FreeBSD/MacOS, <tt>NETLINK</tt> sockets in Linux,
-and some commercial packages such as <tt>WinPkFilter</tt> for Windows.
-WinDivert also supports passive packet sniffing similar to <tt>Winpcap</tt>.
-</p>
-
-<hr>
-<a name="building"><h2>2. Building</h2></a>
-<p>
-The source code for WinDivert is available for download at
-<blockquote>
-<a href="https://github.com/basil00/Divert">
-    https://github.com/basil00/Divert</a>
-</blockquote>
-To build the WinDivert package from source:
-<ol>
-<li> Download and install <a href="http://www.microsoft.com/whdc/devtools/wdk/default.mspx">
-Windows Driver Kit 7.1.0</a>.</li>
-<li> Open a <i>Free Build Environment</i> console (or
-    <i>Checked Build Environment</i> for debugging).</li>
-<li> In the WinDivert package root directory, run the command:
-<pre>
-wddk-build.bat
-</pre>
-This will build the following files and place them in the
-<tt>install\WDDK</tt> subdirectory:
-<ul>
-<li> <tt>WinDivert.dll</tt>: User-mode library.</li>
-<li> <tt>WinDivert.sys</tt>: Kernel-mode WDF/WFP call-out driver.</li>
-<li> <tt>WinDivert.inf</tt>: INF file for <tt>WinDivert.sys</tt>.</li>
-<li> <tt>WdfCoInstaller*.dll</tt>: Microsoft WDF co-installer for
-    <tt>WinDivert.sys</tt>.</li>
-<li> <tt>*.exe</tt>: Sample applications from the <tt>divert\examples</tt>
-    directory.</li>
-</ul></li>
-</ol>
-<i>NOTE:</i> The <tt>WinDivert.dll</tt> and <tt>WinDivert.lib</tt> files
-are only compatible with programs compiled with the WDDK compiler.
-See below for Visual Studio 2012 and MinGW support.
-</p>
-
-<a name="driver_signing"><h3>2.1 Driver Signing</h3></a>
-<p>
-Before the WinDivert package can be used, the <tt>WinDivert.sys</tt> driver
-must contain a valid digital signature.
-This is Microsoft policy for all kernel drivers in recent versions of
-Windows.
-See <a href="http://msdn.microsoft.com/en-us/windows/hardware/gg487317.aspx">Driver Signing Requirements for Windows</a>
-for more information.
-</p>
-
-<a name="visual_studio_2012_support"><h3>2.2 Visual Studio 2012 Support</h3></a>
-<p>
-To build the WinDivert package for Visual Studio 2012:
-<ol>
-<li> First build the driver by running <tt>wddk-build.bat</tt> as per the
-instructions above.</li>
-<li> Open a <i>Visual Studio Command Prompt</i> environment.</li>
-<li> In the WinDivert package root directory, run the command:
-<pre>
-msvc-build.bat
-</pre>
-This will build Visual Studio 2012 compatible files and place them in the
-<tt>install\MSVC</tt> subdirectory.</li>
-</ol>
-</p>
-
-<a name="mingw_support"><h3>2.3 MinGW Support</h3></a>
-<p>
-To build the WinDivert package for MinGW:
-<ol>
-<li> First build the driver by running <tt>wddk-build.bat</tt> as per
-the instructions above.</li>
-<li> In Linux (with the MinGW cross-compilers installed) and in the
-WinDivert package root directory, run the command:
-<pre>
-sh mingw-build.sh
-</pre>
-This will build MinGW compatible files and place them in the
-<tt>install\MINGW</tt> subdirectory.</li>
-</ol>
-
-</p>
-
-<hr>
-<a name="installing"><h2>3. Installing</h2></a>
-<p>
-WinDivert does not require any special installation.
-Simply place the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files are in your
-application's home directory.
-</p>
-<p>
-The WinDivert driver is installed on demand, i.e., when your application
-makes a call to <a href="#divert_open"><tt>DivertOpen()</tt></a> from
-<tt>WinDivert.dll</tt>.
-The driver is installed silently.
-The calling application must be running with Administrator privileges.
-</p>
-
-<hr>
-<a name="uninstalling"><h2>4. Uninstalling</h2></a>
-<p>
-To uninstall, simply delete the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files.
-The WinDivert driver is silently uninstalled when the calling application
-terminates or unloads the <tt>WinDivert.dll</tt> library.
-The WinDivert driver can also be removed manually by issuing the following
-commands at the command prompt
-<pre>
-sc stop WinDivert1.0
-sc delete WinDivert1.0
-</pre>
-</p>
-
-<hr>
-<a name="programming_api"><h2>5. Programming API</h2></a>
-<p>
-To use the WinDivert package, a program/application must:
-<ol>
-<li> Include the <tt>divert.h</tt> header file
-<pre>
-#include "divert.h"
-</pre></li>
-<li> Link or dynamically load the <tt>WinDivert.dll</tt> dynamic link
-library.</li>
-</ol>
-
-<a name="divert_address"><h3>5.1 DIVERT_ADDRESS</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT32 IfIdx;
-    UINT32 SubIfIdx;
-    UINT8  Direction;
-} <b>DIVERT_ADDRESS</b>, *<b>PDIVERT_ADDRESS</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Fields</b>
-<ul>
-<li> <tt>IfIdx</tt>: The interface index on which the packet arrived
-    (for inbound packets), or is to be sent (for outbound packets).</li>
-<li> <tt>SubIfIdx</tt>: The sub-interface index for <tt>IfIdx</tt>.</li>
-<li> <tt>Direction</tt>: The packet's direction.
-The possible values are
-<ul>
-<li> <tt>DIVERT_DIRECTION_OUTBOUND</tt> with value 0 for <i>outbound</i>
-packets.</li>
-<li> <tt>DIVERT_DIRECTION_INBOUND</tt> with value 1 for <i>inbound</i>
-packets.</li>
-</ul></li>
-</ul>
-</p><p>
-<b>Remarks</b><br>
-The <tt>DIVERT_ADDRESS</tt> structure represents the "address" of a captured
-or injected packet.
-The address includes the packet's network interfaces and the packet direction.
-</p>
-</dd></dl>
-
-<a name="divert_open"><h3>5.2 DivertOpen</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-HANDLE <b>DivertOpen</b>(
-    __in const char *filter,
-    __in DIVERT_LAYER layer,
-    __in INT16 priority,
-    __in UINT64 flags
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>filter</tt>: A packet filter string specified in the WinDivert
-    <a href="#filter_language">filter language</a>.</li>
-<li> <tt>layer</tt>: The layer.</li>
-<li> <tt>priority</tt>: The priority of the handle.</li>
-<li> <tt>flags</tt>: Additional flags.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-A valid WinDivert handle on success, or
-<tt>INVALID_HANDLE_VALUE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-Common errors include:
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Name
-</th>
-<th>
-Code
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>ERROR_INVALID_PARAMETER</tt>
-</td>
-<td>
-87
-</td>
-<td>
-This indicates an invalid packet filter string, layer, priority, or flags.
-</td>
-</tr>
-<tr>
-<td>
-<tt>ERROR_FILE_NOT_FOUND</tt>
-</td>
-<td>
-2
-</td>
-<td>
-One or more of the <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files were not
-found.
-</td>
-</tr>
-<tr>
-<td>
-<tt>ERROR_ACCESS_DENIED</tt>
-</td>
-<td>
-5
-</td>
-<td>
-The calling application does not have Administrator privileges.
-</td>
-</tr>
-<tr>
-<td>
-<tt>ERROR_INVALID_IMAGE_HASH</tt>
-</td>
-<td>
-577
-</td>
-<td>
-The <tt>WinDivert.sys</tt> driver does not have a valid digital signature
-(see the <a href="#driver_signing">driver signing requirements</a> above),
-or <tt>WinDivert.sys</tt> is the wrong version, i.e. 32-bit on
-64-bit Windows or vice versa.
-</td>
-</tr>
-</table>
-</center>
-</p><p>
-<b>Remarks</b><br>
-Opens a WinDivert handle for the given filter.
-Unless otherwise specified by <tt>flags</tt>, any packet that matches the
-filter will be diverted to the handle.
-Diverted packets can be read by the application with
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>.
-</p>
-<p>
-A typical application is only interested in a subset of all network traffic.
-In this case the filter should <i>match as closely as possible</i> to
-the subset of interest.
-This avoids unnecessary overheads introduced by diverting packets to the
-user-mode application.
-See the <a href="#filter_language">filter language</a> section for more
-information.
-</p>
-<p>
-The <i>layer</i> of the WinDivert handle is determined by the <tt>layer</tt>
-parameter.
-Currently the following layers are supported.
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Layer
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_LAYER_NETWORK = 0</tt>
-</td>
-<td>
-The network layer.
-This is the default.
-</td>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_LAYER_NETWORK_FORWARD</tt>
-</td>
-<td>
-The network layer (forwarded packets).
-</td>
-</tr>
-</table>
-</center>
-</p>
-<p>
-Different WinDivert handles can be assigned different priorities by the
-<tt>priority</tt> parameter.
-Packets are diverted to higher priority handles before lower priority
-handles.
-Packets injected by a handle are then diverted to the next priority handle,
-and so on, provided the packet matches the handle's filter.
-A packet is only diverted once per priority level, so handles should not
-share priority levels unless they use mutually exclusive filters.
-Otherwise it is not defined which handle will receive the packet first.
-Lower <tt>priority</tt> values represent higher priorities, with <tt>-1000</tt>
-being the highest priority, <tt>0</tt> the middle (and a good default)
-priority, and <tt>1000</tt> the lowest priority.
-</p>
-<p>
-The following flags are supported.
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Flag
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_FLAG_SNIFF</tt>
-</td>
-<td>
-This flag opens the WinDivert handle in <i>packet sniffing</i> mode.
-In packet sniffing mode the original packet is not dropped-and-diverted
-(the default) but copied-and-diverted.
-This mode is useful for implementing packet sniffing tools similar to those
-applications that currently use <tt>Winpcap</tt>.
-</td>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_FLAG_DROP</tt>
-</td>
-<td>
-This flag indicates that the user application does not intend to read matching
-packets with <a href="#divert_recv"><tt>DivertRecv()</tt></a>, instead the
-packets should be silently dropped.
-This is useful for implementing simple packet filters using the
-WinDivert <a href="#filter_language">filter language</a>.
-</td>
-</tr>
-</table>
-</center>
-If both <tt>DIVERT_FLAG_SNIFF</tt> and <tt>DIVERT_FLAG_DROP</tt> flags 
-are set, the WinDivert handle will be in "passthru" mode that neither
-captures nor drops any packet.
-Such a handle is useful for applications that only require packet injection.
-</p>
-</dd></dl>
-
-<a name="divert_recv"><h3>5.3 DivertRecv</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertRecv</b>(
-    __in HANDLE handle,
-    __out PVOID pPacket,
-    __in UINT packetLen,
-    __out_opt PDIVERT_ADDRESS pAddr,
-    __out_opt UINT *recvLen
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>pPacket</tt>: A buffer for the captured packet.</li>
-<li> <tt>packetLen</tt>: The length of the buffer <tt>pPacket</tt>.</li>
-<li> <tt>pAddr</tt>: The <tt>DIVERT_ADDRESS</tt> of the captured packet.</li>
-<li> <tt>recvLen</tt>: The total number of bytes written to <tt>pPacket</tt>.
-     Can be <tt>NULL</tt> if this information is not required.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if a packet was successfully received, or <tt>FALSE</tt> if
-an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Receives a diverted packet that matched the filter passed to
-<a href="#divert_open"><tt>DivertOpen()</tt></a>.
-The received packet is guaranteed to match the filter.
-</p><p>
-The contents of the captured packet are written to <tt>pPacket</tt>.
-If the captured packet is larger than the <tt>pPacket</tt> buffer length,
-then the packet will be truncated.
-If <tt>recvLen</tt> is non-<tt>NULL</tt>, then the total number of bytes
-written to <tt>pPacket</tt> is placed there.
-If non-<tt>NULL</tt>, the address of the captured packet is written to
-<tt>pAddr</tt>.
-</p><p>
-An application should call <a href="#divert_recv"><tt>DivertRecv()</tt></a>
-<i>as soon as possible</i>
-after a successful call to <a href="#divert_open"><tt>DivertOpen()</tt></a>.
-When a WinDivert handle is open, any packet that matches the filter will
-be captured and queued until handled by
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>.
-Packets are not queued indefinitely, and if not handled in a timely manner,
-any captured packet may be dropped.
-The amount of time a packet is queued can be controlled with the
-<a href="#divert_set_param"><tt>DivertSetParam()</tt></a> function.
-</p>
-<p>
-<a href="#divert_recv"><tt>DivertRecv()</tt></a> should not be used on any
-WinDivert handle created with the <tt>DIVERT_FLAG_DROP</tt> set.
-</p>
-</dd></dl>
-
-<a name="divert_send"><h3>5.4 DivertSend</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertSend</b>(
-    __in HANDLE handle,
-    __in PVOID pPacket,
-    __in UINT packetLen,
-    __in PDIVERT_ADDRESS pAddr,
-    __out_opt UINT *sendLen
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>pPacket</tt>: A buffer containing the packet to be injected.</li>
-<li> <tt>packetLen</tt>: The total length of the buffer <tt>pPacket</tt>.</li> 
-<li> <tt>pAddr</tt>: The <tt>DIVERT_ADDRESS</tt> for the injected packet.</li>
-<li> <tt>sendLen</tt>: The total number of bytes injected.
-     Can be <tt>NULL</tt> if this information is not required.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if a packet was successfully injected, or <tt>FALSE</tt> if
-an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Injects a packet into the network stack.
-The injected packet may be one received from
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>, or a
-modified version, or a completely new packet.
-Injected packets can be captured and diverted again by other WinDivert
-handles with lower priorities.
-</p><p>
-The <tt>pAddr</tt> parameter determines how the packet is injected.
-If the <tt>Direction</tt> field is <tt>DIVERT_DIRECTION_OUTBOUND</tt>,
-the packet is injected into the <i>outbound</i> path (i.e. a packet leaving
-this computer).
-Else, if <tt>Direction</tt> is <tt>DIVERT_DIRECTION_INBOUND</tt>,
-the packet is injected into the <i>inbound</i> path (i.e. a packet arriving at
-this computer).
-Note that the <tt>Direction</tt> field, and <i>not</i> the IP addresses in 
-the injected packet, is used to determine the packet's direction.
-</p><p>
-For packets injected into the <i>inbound</i> path, the <tt>IfIdx</tt> and
-<tt>SubIfIdx</tt> fields are assumed to contain valid interface numbers.
-These may be retrieved from <a href="#divert_recv"><tt>DivertRecv()</tt></a>
-(for packet modification),
-or from the <a href="http://msdn.microsoft.com/en-us/library/aa366073%28v=VS.85%29.aspx">IP Helper API</a>.
-</p><p>
-For <i>outbound</i> injected packets, the <tt>IfIdx</tt> and <tt>SubIfIdx</tt>
-fields are currently ignored and may be arbitrary values.
-Injecting an inbound packet on the outbound path <i>may</i> work (for some
-types of packets), however this should be considered "undocumented" behavior,
-and may be changed in the future.
-</p>
-</dd></dl>
-
-<a name="divert_close"><h3>5.5 DivertClose</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertClose</b>(
-    __in HANDLE handle
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Closes a WinDivert handle created by
-<a href="#divert_open"><tt>DivertOpen()</tt></a>.
-</p>
-<dd></dl>
-
-<a name="divert_set_param"><h3>5.6 DivertSetParam</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertSetParam</b>(
-    __in HANDLE handle,
-    __in DIVERT_PARAM param,
-    __in UINT64 value);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>param</tt>: A WinDivert parameter name.</li>
-<li> <tt>value</tt>: The parameter's new value.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Sets a WinDivert parameter.
-Currently, the following WinDivert parameters are defined.
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Parameter
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_PARAM_QUEUE_LEN</tt>
-</td>
-<td>
-Sets the maximum length of the packet queue for
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>.
-Currently the default value is 512, the minimum is 1, and the maximum 
-is 8192.
-</td>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_PARAM_QUEUE_TIME</tt>
-</td>
-<td>
-Sets the minimum time, in milliseconds, a packet can be queued before it is
-automatically dropped.
-Packets cannot be queued indefinitely, and ideally, packets should be
-processed by the application as soon as is possible.
-Note that this sets the <i>minimum</i> time a packet can be queued before 
-it can be dropped.
-The actual time may be exceed this value.
-Currently the default value is 256, the minimum is 32, and the maximum is
-1024.
-</td>
-</tr>
-</table>
-</center>
-</p>
-<dd></dl>
-
-<a name="divert_get_param"><h3>5.7 DivertGetParam</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertGetParam</b>(
-    __in HANDLE handle,
-    __in DIVERT_PARAM param,
-    __out UINT64 *pValue);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>param</tt>: A WinDivert parameter name.</li>
-<li> <tt>value</tt>: The parameter's current value.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Gets a WinDivert parameter.
-See <a href="#divert_set_param"><tt>DivertSetParam()</tt></a> for the list
-of parameters.
-</p>
-<dd></dl>
-
-<hr>
-<a name="helper_programming_api"><h2>6. Helper Programming API</h2></a>
-
-The WinDivert helper programming API is a collection of definitions
-and functions designed to make writing WinDivert applications easier.
-The use of the helper API is completely optional.
-
-<a name="divert_iphdr"><h3>6.1 DIVERT_IPHDR</h3>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT8  HdrLength:4;
-    UINT8  Version:4;
-    UINT8  TOS;
-    UINT16 Length;
-    UINT16 Id;
-    UINT16 <i>...</i>;
-    UINT8  TTL;
-    UINT8  Protocol;
-    UINT16 Checksum;
-    UINT32 SrcAddr;
-    UINT32 DstAddr;
-} <b>DIVERT_IPHDR</b>, *<b>PDIVERT_IPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/IPv4#Packet_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-IPv4 header definition.
-</p><p>
-The following fields can only be get/set using the following macro
-definitions:
-<ul>
-<li><i>FragOff</i> with <tt>DIVERT_IPHDR_GET_FRAGOFF(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_FRAGOFF(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>MF</i> with <tt>DIVERT_IPHDR_GET_MF(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_MF(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>DF</i> with <tt>DIVERT_IPHDR_GET_DF(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_DF(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>Reserved</i> with <tt>DIVERT_IPHDR_GET_RESERVED(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_RESERVED(<i>hdr</i>, <i>val</i>)</tt></li>
-</ul>
-</p>
-</dl></dd>
-
-<a name="divert_ipv6hdr"><h3>6.2 DIVERT_IPV6HDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT32 Version:4;
-    UINT32 ...:28;
-    UINT16 Length;
-    UINT8  NextHdr;
-    UINT8  HopLimit;
-    UINT32 SrcAddr[4];
-    UINT32 DstAddr[4];
-} <b>DIVERT_IPV6HDR</b>, *<b>PDIVERT_IPV6HDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/IPv6_packet#Fixed_header">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-IPv6 header definition.
-</p><p>
-The following fields can only be get/set using the following macro
-definitions:
-<ul>
-<li><i>TrafficClass</i> with
-    <tt>DIVERT_IPV6HDR_GET_TRAFFICCLASS(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPV6HDR_SET_TRAFFICCLASS(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>FlowLabel</i> with <tt>DIVERT_IPV6HDR_GET_FLOWLABEL(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPV6HDR_SET_FLOWLABEL(<i>hdr</i>, <i>val</i>)</tt></li>
-</ul>
-</p>
-</dl></dd>
-
-<a name="divert_icmphdr"><h3>6.3 DIVERT_ICMPHDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} <b>DIVERT_ICMPHDR</b>, *<b>PDIVERT_ICMPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#ICMP_segment_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-ICMP header definition.
-</p>
-</dl></dd>
-
-<a name="divert_icmpv6hdr"><h3>6.4 DIVERT_ICMPV6HDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} <b>DIVERT_ICMPV6HDR</b>, *<b>PDIVERT_ICMPV6HDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/ICMPv6#Packet_format">here</a> for
-more information.
-</p><p>
-<b>Remarks</b><br>
-ICMPv6 header definition.
-</p>
-</dl></dd>
-
-<a name="divert_tcphdr"><h3>6.5 DIVERT_TCPHDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT32 SeqNum;
-    UINT32 AckNum;
-    UINT16 Reserved1:4;
-    UINT16 HdrLength:4;
-    UINT16 Fin:1;
-    UINT16 Syn:1;
-    UINT16 Rst:1;
-    UINT16 Psh:1;
-    UINT16 Ack:1;
-    UINT16 Urg:1;
-    UINT16 Reserved2:2;
-    UINT16 Window;
-    UINT16 Checksum;
-    UINT16 UrgPtr;
-} <b>DIVERT_TCPHDR</b>, *<b>PDIVERT_TCPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-TCP header definition.
-</p>
-</dl></dd>
-
-<a name="divert_udphdr"><h3>6.6 DIVERT_UDPHDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT16 Length;
-    UINT16 Checksum;
-} <b>DIVERT_UDPHDR</b>, *<b>PDIVERT_UDPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-UDP header definition.
-</p>
-</dl></dd>
-
-<a name="divert_helper_parse_packet"><h3>6.7 DivertHelperParsePacket</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertHelperParsePacket</b>(
-    __in PVOID pPacket,
-    __in UINT packetLen,
-    __out_opt PDIVERT_IPHDR *ppIpHdr,
-    __out_opt PDIVERT_IPV6HDR *ppIpv6Hdr,
-    __out_opt PDIVERT_ICMPHDR *ppIcmpHdr,
-    __out_opt PDIVERT_ICMPV6HDR *ppIcmpv6Hdr,
-    __out_opt PDIVERT_TCPHDR *ppTcpHdr,
-    __out_opt PDIVERT_UDPHDR *ppUdpHdr,
-    __out_opt PVOID *ppData,
-    __out_opt UINT *pDataLen
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>pPacket</tt>: The packet to be parsed.</li>
-<li> <tt>packetLen</tt>: The total length of the packet <tt>pPacket</tt>.</li>
-<li> <tt>ppIpHdr</tt>: Output pointer to a <tt>DIVERT_IPHDR</tt>.</li>
-<li> <tt>ppIpv6Hdr</tt>: Output pointer to a <tt>DIVERT_IPV6HDR</tt>.</li>
-<li> <tt>ppIcmpHdr</tt>: Output pointer to a <tt>DIVERT_ICMPHDR</tt>.</li>
-<li> <tt>ppIcmpv6Hdr</tt>: Output pointer to a <tt>DIVERT_ICMPV6HDR</tt>.</li>
-<li> <tt>ppTcpHdr</tt>: Output pointer to a <tt>DIVERT_TCPHDR</tt>.</li>
-<li> <tt>ppUdpHdr</tt>: Output pointer to a <tt>DIVERT_UDPHDR</tt>.</li>
-<li> <tt>ppData</tt>: Output pointer to the packet's data/payload.</li>
-<li> <tt>pDataLen</tt> Output data/payload length.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if all expected (non-<tt>NULL</tt>) outputs were present,
-<tt>FALSE</tt> otherwise.
-Note that <tt>FALSE</tt> may sometimes be a legitimate return value, e.g.,
-when both <tt>ppIpHdr</tt> and <tt>ppIpv6Hdr</tt> are non-<tt>NULL</tt>.
-</p><p>
-<b>Remarks</b><br>
-Parses a raw packet (e.g. from <a
-href="#divert_recv"><tt>DivertRecv()</tt></a>) into the
-various packet headers and/or payloads that may or may not be present.
-</p><p>
-Each output parameter may be <tt>NULL</tt> or non-<tt>NULL</tt>.
-For non-<tt>NULL</tt> parameters, this function will write the pointer to
-the corresponding header/payload if it exists, or will write <tt>NULL</tt>
-otherwise.
-Any non-<tt>NULL</tt> pointer that is returned
-<ol>
-<li> Is a pointer into the original <tt>pPacket</tt> packet; and</li>
-<li> There is enough space in <tt>pPacket</tt> to fit the header.</li>
-</ol>
-</p><p>
-This function does not do any verification of the header/payload contents
-beyond checking the header length and any other minimal information required
-for parsing.
-<p>
-</dd></dl>
-
-<a name="divert_help_parse_ipv4_address"><h3>6.8 DivertHelperParseIPv4Address</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertHelperParseIPv4Address</b>(
-    __in const char *addrStr,
-    __out_opt UINT32 *pAddr
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>addrStr</tt>: The address string.</li>
-<li> <tt>pAddr</tt>: Output address.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Parses an IPv4 address stored in <tt>addrStr</tt>.
-If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
-</p>
-<dd></dl>
-
-<a name="divert_help_parse_ipv6_address"><h3>6.9 DivertHelperParseIPv6Address</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertHelperParseIPv6Address</b>(
-    __in const char *addrStr,
-    __out_opt UINT32 *pAddr
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>addrStr</tt>: The address string.</li>
-<li> <tt>pAddr</tt>: Output address.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Parses an IPv6 address stored in <tt>addrStr</tt>.
-If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
-The <tt>pAddr</tt> parameter is assumed to point to a buffer large enough
-to hold a 16-byte IPv6 address.
-</p>
-<dd></dl>
-
-<a name="divert_helper_calc_checksums"><h3>6.10 DivertHelperCalcChecksums</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-UINT <b>DivertHelperCalcChecksums</b>(
-    __inout PVOID pPacket,
-    __in UINT packetLen,
-    __in UINT64 flags
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>pPacket</tt>: The packet to be modified.</li>
-<li> <tt>packetLen</tt>: The total length of the packet <tt>pPacket</tt>.</li>
-<li> <tt>flags</tt>: One or more of the following flags:
-<ul>
-<li> <tt>DIVERT_HELPER_NO_IP_CHECKSUM</tt>: Do not calculate the IPv4
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_ICMP_CHECKSUM</tt>: Do not calculate the ICMP
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_ICMPV6_CHECKSUM</tt>: Do not calculate the ICMPv6
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_TCP_CHECKSUM</tt>: Do not calculate the TCP
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_UDP_CHECKSUM</tt>: Do not calculate the UDP
-    checksum.</li>
-</ul></li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-The number of checksums calculated.
-</p><p>
-<b>Remarks</b><br>
-(Re)calculates the checksum for any IPv4/ICMP/ICMPv6/TCP/UDP checksum present
-in the given packet.
-Individual checksum calculations may be disabled via the appropriate flag.
-Typically this function should be invoked on a modified packet before it is
-injected with <a href="#divert_send"><tt>DivertSend()</tt></a>.
-</p><p>
-This function will calculate each checksum from scratch, even if the existing
-checksum is correct.
-This may be inefficient for some applications.
-For better performance, incremental checksum calculations should be used
-instead (not provided by this API).
-<p>
-</dd></dl>
-
-<hr>
-<a name="filter_language"><h2>7. Filter Language</h2></a>
-
-<p>
-The <a href="#divert_open"><tt>DivertOpen()</tt></a> function accepts a
-string containing a <i>filter expression</i>.
-Only packets that match the filter expression are diverted.
-Any other packet is allowed to continue as per normal.
-</p><p>
-Filter allows an application to select only the subset of traffic that is of
-interest.
-For example, a URL blacklist filter would only be interested in packets that
-contain URLs.
-This could be achieved via the following filter.
-<pre>
-HANDLE handle = DivertOpen(
-    "outbound and "
-    "tcp.PayloadLength &gt; 0 and "
-    "tcp.DstPort == 80", 0, 0, 0);
-</pre>
-This filter specifies that we should only divert traffic that is
-<ol>
-<li>outbound;</li>
-<li>contains a non-empty payload; and</li>
-<li>has TCP destination port 80 (i.e. HTTP web traffic).
-</ol>
-</p><p>
-A <i>filter</i> is a Boolean expression of the form:
-<pre>
-        <i>FILTER</i> := true | false | <i>FILTER</i> and <i>FILTER</i> | <i>FILTER</i> or <i>FILTER</i> | (<i>FILTER</i>) | <i>TEST</i>
-</pre>
-C-style syntax <tt>&amp;&amp;</tt>, <tt>||</tt>, and <tt>!</tt> may also
-be used instead of <tt>and</tt>, <tt>or</tt>, and <tt>not</tt>, respectively.
-A <i>test</i> is of the following form:
-<pre>
-        <i>TEST</i> := <i>TEST0</i> | not <i>TEST0</i>
-        <i>TEST0</i> := <i>FIELD</i> | <i>FIELD</i> op <i>VAL</i>
-</pre>
-where <tt>op</tt> is one of the following:
-</p><p>
-<center>
-<table border="1" cellpadding="5">
-<tr><th>Operator</th><th>Description</th></tr>
-<tr><td><tt>==</tt> or <tt>=</tt></td><td>Equal</td></tr>
-<tr><td><tt>!=</tt></td><td>Not equal</td></tr>
-<tr><td><tt>&lt;</tt></td><td>Less-than</td></tr>
-<tr><td><tt>&gt;</tt></td><td>Greater-than</td></tr>
-<tr><td><tt>&lt;=</tt></td><td>Less-than-or-equal</td></tr>
-<tr><td><tt>&gt;=</tt></td><td>Greater-than-or-equal</td></tr>
-</table>
-</center>
-</p><p>
-and <tt><i>VAL</i></tt> is a decimal number, hexadecimal number, or IP
-address.
-If the "<tt>op <i>VAL</i></tt>" is missing, the test is implicitly
-"<tt><i>FIELD</i> != 0</tt>".
-</p><p>
-Finally a <i>field</i> is some property about the packet.
-The possible fields are:
-</p><p>
-<center>
-<table border="1" cellpadding="5">
-<tr><th>Field</th><th>Description</th></tr>
-<tr><td><tt>outbound</tt></td><td>Is outbound?</td></tr>
-<tr><td><tt>inbound</tt></td><td>Is inbound?</td></tr>
-<tr><td><tt>ifIdx</tt></td><td>Interface index</td></tr>
-<tr><td><tt>subIfIdx</tt></td><td>Sub-interface index</td></tr>
-<tr><td><tt>ip</tt></td><td>Is IPv4?</td></tr>
-<tr><td><tt>ipv6</tt></td><td>Is IPv6?</td></tr>
-<tr><td><tt>icmp</tt></td><td>Is ICMP?</td></tr>
-<tr><td><tt>icmpv6</tt></td><td>Is ICMPv6?</td></tr>
-<tr><td><tt>tcp</tt></td><td>Is TCP?</td></tr>
-<tr><td><tt>udp</tt></td><td>Is UDP?</td></tr>
-<tr><td><tt>ip.*</tt></td><td>IPv4 fields (see <tt>DIVERT_IPHDR</tt>)</td></tr>
-<tr><td><tt>ipv6.*</tt></td><td>IPv6 fields (see <tt>DIVERT_IPV6HDR</tt>)</td></tr>
-<tr><td><tt>icmp.*</tt></td><td>ICMP fields (see <tt>DIVERT_ICMPHDR</tt>)</td></tr>
-<tr><td><tt>icmpv6.*</tt></td><td>ICMPV6 fields (see <tt>DIVERT_ICMPV6HDR</tt>)</td></tr>
-<tr><td><tt>tcp.*</tt></td><td>TCP fields (see <tt>DIVERT_TCPHDR</tt>)</td></tr>
-<tr><td><tt>tcp.PayloadLength</tt></td><td>The TCP payload length</td></tr>
-<tr><td><tt>udp.*</tt></td><td>UDP fields (see <tt>DIVERT_UDPHDR</tt>)</td></tr>
-<tr><td><tt>udp.PayloadLength</tt></td><td>The UDP payload length</td></tr>
-</table>
-</center>
-</p><p>
-A <i>test</i> also fails if the field is missing.
-E.g. the test "<tt>tcp.DstPort == 80</tt>" will fail if the packet does not
-contain a TCP header.
-</p>
-
-<a name="filter_examples"><h3>7.1 Filter Examples</h3></a>
-
-<p>
-<ol>
-<li>
-Divert all outbound web traffic:
-<pre>
-HANDLE handle = DivertOpen(
-        "outbound and "
-        "(tcp.DstPort == 80 or udp.DstPort == 53)",
-        0, 0, 0
-    );
-</pre>
-</li>
-<li>
-Divert all inbound TCP SYNs:
-<pre>
-HANDLE handle = DivertOpen(
-        "inbound and "
-        "tcp.Syn",
-        0, 0, 0
-    );
-</pre>
-</li>
-<li>
-Divert only (inbound) local traffic:
-<pre>
-HANDLE handle = DivertOpen(
-        "inbound and ("
-        "(ip.DstAddr &gt;= 127.0.0.1 and ip.DstAddr &lt;= 127.255.255.255) or"
-        "ipv6.DstAddr == ::1)",
-        0, 0, 0
-    );
-</pre>
-</li>
-<li>
-Divert all traffic:
-<pre>
-HANDLE handle = DivertOpen("true", 0, 0, 0);
-</pre>
-</li>
-<li>
-Divert no traffic:
-<pre>
-HANDLE handle = DivertOpen("false", 0, 0, 0);
-</pre>
-This is useful for packet injection.
-</ol>
-
-<a name="filter_usage"><h3>7.2 Filter Usage</h3></a>
-
-<p>
-The purpose of the filter is to help applications select the subset of
-all network traffic that the application is interested in.
-Ideally the filter should be
-<ol>
-<li> As short as possible; and</li>
-<li> As selective as possible.</li>
-</ol>
-For some applications these two objectives can conflict.
-That is, a selective filter is not short, and a short filter is not selective.
-For such applications the developer should experiment with different
-filter configurations and carefully measure the performance impact to
-find the optimal solution.
-</p>
-
-<hr>
-<a name="samples"><h2>8. Samples</h2></a>
-
-<p>
-Some samples have been provided to demonstrate the WinDivert API.
-The sample programs are:
-<ul>
-<li><tt>webfilter.exe</tt>: A simple URL blacklist filter.
-    This program monitors outbound HTTP traffic.
-    If it finds a URL request that matches the blacklist, it hijacks the
-    TCP connection, reseting the connection at the server's end, and
-    sending a simple block-page to the browser.
-    The blacklist(s) are specified at the command-line.</li>
-<li><tt>netdump.exe</tt>: A simple packet sniffer based on the
-    WinDivert filter language.
-    This program takes a filter specified at the command line, and prints
-    information about any packet that matches the filter.
-    This example uses WinDivert in "packet sniffing" mode, similar to
-    <tt>winpcap</tt>.
-    However, unlike <tt>winpcap</tt>, WinDivert can see local (loopback)
-    packets.
-<li><tt>netfilter.exe</tt>: A simple firewall based on the WinDivert
-    filter language.
-    This program takes a filter specified at the command line, and blocks
-    any packet that matches the filter.
-    It blocks TCP by sending a TCP reset, UDP by an ICMP message, and all
-    other traffic it simply drops.
-    This is similar to the Linux <tt>iptables</tt> command with the
-    <tt>-j REJECT</tt> option.</li>
-<li><tt>passthru.exe</tt>: A simple program that simply re-injects every
-    packet it captures.
-    This example is multi-threaded, where multiple threads are processing
-    packets from a single handle.
-    This example is useful for performance testing, and as a starting point
-    for more interesting applications.</li>
-</ul>
-</p><p>
-The samples are intended for educational purposes only, and are not
-fully-featured applications.
-</p><p>
-The following basic template for a WinDivert application.
-The basic idea is to open a WinDivert handle, then enter a
-capture-modify-reinject loop:
-<pre>
-    HANDLE handle;          // Divert handle
-    DIVERT_ADDRESS addr;    // Packet address
-    char packet[MAXBUF];    // Packet buffer
-    UINT packetLen;
-
-    handle = DivertOpen("...", 0, 0, 0);   // Open some filter
-    if (handle == INVALID_HANDLE_VALUE)
-    {
-        // Handle error
-        exit(1);
-    }
-
-    // Main capture-modify-inject loop:
-    while (TRUE)
-    {
-        if (!DivertRecv(handle, packet, sizeof(packet), &amp;addr, &amp;packetLen))
-        {
-            // Handle recv error
-            continue;
-        }
-
-        // Modify packet.
-
-        if (!DivertSend(handle, packet, packetLen, &amp;addr, NULL))
-        {
-            // Handle send error
-            continue;
-        }
-    }
-</pre>
-For applications that do not need to modify the packet, a better approach is
-to open the WinDivert handle with the <tt>DIVERT_FLAG_SNIFF</tt> flag set,
-and not re-inject the packet with
-<a href="#divert_send"><tt>DivertSend()</tt></a>.
-See the <tt>netdump.exe</tt> sample program for an example of this usage.
-</p>
-
-<hr>
-<a name="known_issues"><h2>9. Known Issues</h2></a>
-
-<p>
-There are some limitations to the WinDivert package.
-They are
-<ul>
-<li><i>Injecting inbound ICMP/ICMPv6 messages</i>:
-    For some ICMP/ICMPv6 messages, inbound injection does not work.
-    An error will be returned and the packet will be lost.
-    It is suspected that this is an issue with the WFP framework on which
-    WinDivert is built.
-    The work-around is to inject inbound ICMP messages as <tt>outbound</tt>.
-    </li>
-<li><i>No IPv6 extension header support</i>:
-    Currently there is no filter support for IPv6 packets with extension
-    headers.
-    The work around is to capture all IPv6 traffic.</li>
-</ul>
-</p>
-
-<hr>
-<a name="license"><h2>10. License</h2></a>
-<p>
-This package is distributed <i>strictly</i> under the
-<a href="http://www.gnu.org/licenses/lgpl-3.0.txt">GNU Lesser General
-Public License (GPL) Version 3</a>.
-Please note the following:
-<pre>
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
-</pre>
-</p>
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
-</body>
-</html>
diff --git a/external/WinDivert-1.0.5-MINGW/include/divert.h b/external/WinDivert-1.0.5-MINGW/include/divert.h
deleted file mode 100644
index 743d795..0000000
--- a/external/WinDivert-1.0.5-MINGW/include/divert.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * divert.h
- * (C) 2012, all rights reserved,
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __DIVERT_H
-#define __DIVERT_H
-
-#ifndef DIVERT_KERNEL
-#include <windows.h>
-#endif      /* DIVERT_KERNEL */
-
-#ifndef DIVERTEXPORT
-#define DIVERTEXPORT    __declspec(dllimport)
-#endif      /* DIVERTEXPORT */
-
-#ifdef __MINGW32__
-#define __in
-#define __out
-#define __out_opt
-#define __inout
-#include <stdint.h>
-#define INT8    int8_t
-#define UINT8   uint8_t
-#define INT16   int16_t
-#define UINT16  uint16_t
-#define INT32   int32_t
-#define UINT32  uint32_t
-#define INT64   int64_t
-#define UINT64  uint64_t
-#endif      /* __MINGW32__ */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****************************************************************************/
-/* DIVERT API                                                               */
-/****************************************************************************/
-
-/*
- * Divert address.
- */
-typedef struct
-{
-    UINT32 IfIdx;                       /* Packet's interface index. */
-    UINT32 SubIfIdx;                    /* Packet's sub-interface index. */
-    UINT8  Direction;                   /* Packet's direction. */
-} DIVERT_ADDRESS, *PDIVERT_ADDRESS;
-
-#define DIVERT_DIRECTION_OUTBOUND       0
-#define DIVERT_DIRECTION_INBOUND        1
-
-/*
- * Old names (deprecated).
- */
-#define DIVERT_PACKET_DIRECTION_OUTBOUND                \
-    DIVERT_DIRECTION_OUTBOUND
-#define DIVERT_PACKET_DIRECTION_INBOUND                 \
-    DIVERT_DIRECTION_INBOUND
-
-/*
- * Divert layers.
- */
-typedef enum
-{
-    DIVERT_LAYER_NETWORK = 0,           /* Network layer. */
-    DIVERT_LAYER_NETWORK_FORWARD = 1    /* Network layer (forwarded packets) */
-} DIVERT_LAYER, *PDIVERT_LAYER;
-
-/*
- * Divert flags.
- */
-#define DIVERT_FLAG_SNIFF               1
-#define DIVERT_FLAG_DROP                2
-
-/*
- * Divert parameters.
- */
-typedef enum
-{
-    DIVERT_PARAM_QUEUE_LEN  = 0,        /* Packet queue length. */
-    DIVERT_PARAM_QUEUE_TIME = 1         /* Packet queue time. */
-} DIVERT_PARAM, *PDIVERT_PARAM;
-#define DIVERT_PARAM_MAX                DIVERT_PARAM_QUEUE_TIME
-
-/*
- * Open a divert handle.
- */
-extern DIVERTEXPORT HANDLE DivertOpen(
-    __in        const char *filter,
-    __in        DIVERT_LAYER layer,
-    __in        INT16 priority,
-    __in        UINT64 flags);
-
-/*
- * Receive (read) a packet from a divert handle.
- */
-extern DIVERTEXPORT BOOL DivertRecv(
-    __in        HANDLE handle,
-    __out       PVOID pPacket,
-    __in        UINT packetLen,
-    __out_opt   PDIVERT_ADDRESS pAddr,
-    __out_opt   UINT *readLen);
-
-/*
- * Send (write/inject) a packet to a divert handle.
- */
-extern DIVERTEXPORT BOOL DivertSend(
-    __in        HANDLE handle,
-    __in        PVOID pPacket,
-    __in        UINT packetLen,
-    __in        PDIVERT_ADDRESS pAddr,
-    __out_opt   UINT *writeLen);
-
-/*
- * Close a divert handle.
- */
-extern DIVERTEXPORT BOOL DivertClose(
-    __in        HANDLE handle);
-
-/*
- * Set a divert handle parameter.
- */
-extern DIVERTEXPORT BOOL DivertSetParam(
-    __in        HANDLE handle,
-    __in        DIVERT_PARAM param,
-    __in        UINT64 value);
-
-/*
- * Get a divert handle parameter.
- */
-extern DIVERTEXPORT BOOL DivertGetParam(
-    __in        HANDLE handle,
-    __in        DIVERT_PARAM param,
-    __out       UINT64 *pValue);
-
-/****************************************************************************/
-/* DIVERT HELPER API                                                        */
-/****************************************************************************/
-
-#ifndef DIVERT_NO_HELPER_API
-
-/*
- * IPv4/IPv6/ICMP/ICMPv6/TCP/UDP header definitions.
- */
-typedef struct
-{
-    UINT8  HdrLength:4;
-    UINT8  Version:4;
-    UINT8  TOS;
-    UINT16 Length;
-    UINT16 Id;
-    UINT16 FragOff0;
-    UINT8  TTL;
-    UINT8  Protocol;
-    UINT16 Checksum;
-    UINT32 SrcAddr;
-    UINT32 DstAddr;
-} DIVERT_IPHDR, *PDIVERT_IPHDR;
-
-#define DIVERT_IPHDR_GET_FRAGOFF(hdr)                       \
-    (((hdr)->FragOff0) & 0xFF1F)
-#define DIVERT_IPHDR_GET_MF(hdr)                            \
-    ((((hdr)->FragOff0) & 0x0020) != 0)
-#define DIVERT_IPHDR_GET_DF(hdr)                            \
-    ((((hdr)->FragOff0) & 0x0040) != 0)
-#define DIVERT_IPHDR_GET_RESERVED(hdr)                      \
-    ((((hdr)->FragOff0) & 0x0080) != 0)
-
-#define DIVERT_IPHDR_SET_FRAGOFF(hdr, val)                  \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0x00E0) |    \
-            ((val) & 0xFF1F);                               \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPHDR_SET_MF(hdr, val)                       \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0xFFDF) |    \
-            (((val) & 0x0001) << 5);                        \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPHDR_SET_DF(hdr, val)                       \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0xFFBF) |    \
-            (((val) & 0x0001) << 6);                        \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPHDR_SET_RESERVED(hdr, val)                 \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0xFF7F) |    \
-            (((val) & 0x0001) << 7);                        \
-    }                                                       \
-    while (FALSE)
-
-typedef struct
-{
-    UINT8  TrafficClass0:4;
-    UINT8  Version:4;
-    UINT8  FlowLabel0:4;
-    UINT8  TrafficClass1:4;
-    UINT16 FlowLabel1;
-    UINT16 Length;
-    UINT8  NextHdr;
-    UINT8  HopLimit;
-    UINT32 SrcAddr[4];
-    UINT32 DstAddr[4];
-} DIVERT_IPV6HDR, *PDIVERT_IPV6HDR;
-
-#define DIVERT_IPV6HDR_GET_TRAFFICCLASS(hdr)                \
-    ((((hdr)->TrafficClass0) << 4) | ((hdr)->TrafficClass1))
-#define DIVERT_IPV6HDR_GET_FLOWLABEL(hdr)                   \
-    ((((UINT32)(hdr)->FlowLabel0) << 16) | ((UINT32)(hdr)->FlowLabel1))
-
-#define DIVERT_IPV6HDR_SET_TRAFFICCLASS(hdr, val)           \
-    do                                                      \
-    {                                                       \
-        (hdr)->TrafficClass0 = ((UINT8)(val) >> 4);         \
-        (hdr)->TrafficClass1 = (UINT8)(val);                \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPV6HDR_SET_FLOWLABEL(hdr, val)              \
-    do                                                      \
-    {                                                       \
-        (hdr)->FlowLabel0 = (UINT8)((val) >> 16);           \
-        (hdr)->FlowLabel1 = (UINT16)(val);                  \
-    }                                                       \
-    while (FALSE)
-
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} DIVERT_ICMPHDR, *PDIVERT_ICMPHDR;
-
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} DIVERT_ICMPV6HDR, *PDIVERT_ICMPV6HDR;
-
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT32 SeqNum;
-    UINT32 AckNum;
-    UINT16 Reserved1:4;
-    UINT16 HdrLength:4;
-    UINT16 Fin:1;
-    UINT16 Syn:1;
-    UINT16 Rst:1;
-    UINT16 Psh:1;
-    UINT16 Ack:1;
-    UINT16 Urg:1;
-    UINT16 Reserved2:2;
-    UINT16 Window;
-    UINT16 Checksum;
-    UINT16 UrgPtr;
-} DIVERT_TCPHDR, *PDIVERT_TCPHDR;
-
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT16 Length;
-    UINT16 Checksum;
-} DIVERT_UDPHDR, *PDIVERT_UDPHDR;
-
-/*
- * Flags for DivertHelperCalcChecksums()
- */
-#define DIVERT_HELPER_NO_IP_CHECKSUM        1
-#define DIVERT_HELPER_NO_ICMP_CHECKSUM      2
-#define DIVERT_HELPER_NO_ICMPV6_CHECKSUM    4
-#define DIVERT_HELPER_NO_TCP_CHECKSUM       8
-#define DIVERT_HELPER_NO_UDP_CHECKSUM       16
-
-/*
- * Parse IPv4/IPv6/ICMP/ICMPv6/TCP/UDP headers from a raw packet.
- */
-extern DIVERTEXPORT BOOL DivertHelperParsePacket(
-    __in        PVOID pPacket,
-    __in        UINT packetLen,
-    __out_opt   PDIVERT_IPHDR *ppIpHdr,
-    __out_opt   PDIVERT_IPV6HDR *ppIpv6Hdr,
-    __out_opt   PDIVERT_ICMPHDR *ppIcmpHdr,
-    __out_opt   PDIVERT_ICMPV6HDR *ppIcmpv6Hdr,
-    __out_opt   PDIVERT_TCPHDR *ppTcpHdr,
-    __out_opt   PDIVERT_UDPHDR *ppUdpHdr,
-    __out_opt   PVOID *ppData,
-    __out_opt   UINT *pDataLen);
-
-/*
- * Old name (deprecated).
- */
-#define DivertHelperParse(p, pl, ip, ip6, icmp, icmp6, tcp, udp, d, dl)     \
-    DivertHelperParsePacket((p), (pl), (ip), (ip6), (icmp), (icmp6), (tcp), \
-        (udp), (d), (dl))
-
-/*
- * Parse an IPv4 address.
- */
-extern DIVERTEXPORT BOOL DivertHelperParseIPv4Address(
-    __in        const char *addrStr,
-    __out_opt   UINT32 *pAddr);
-
-/*
- * Parse an IPv6 address.
- */
-extern DIVERTEXPORT BOOL DivertHelperParseIPv6Address(
-    __in        const char *addrStr,
-    __out_opt   UINT32 *pAddr);
-
-/*
- * Calculate IPv4/IPv6/ICMP/ICMPv6/TCP/UDP checksums.
- */
-extern DIVERTEXPORT UINT DivertHelperCalcChecksums(
-    __inout     PVOID pPacket, 
-    __in        UINT packetLen,
-    __in        UINT64 flags);
-
-#endif      /* DIVERT_NO_HELPER_API */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif      /* __DIVERT_H */
diff --git a/external/WinDivert-1.0.5-MINGW/x86/WdfCoInstaller01009.dll b/external/WinDivert-1.0.5-MINGW/x86/WdfCoInstaller01009.dll
deleted file mode 100644
index 068538a..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/x86/WinDivert.dll b/external/WinDivert-1.0.5-MINGW/x86/WinDivert.dll
deleted file mode 100644
index 7b9b9b7..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/x86/WinDivert.inf b/external/WinDivert-1.0.5-MINGW/x86/WinDivert.inf
deleted file mode 100644
index db4fbd8..0000000
--- a/external/WinDivert-1.0.5-MINGW/x86/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[divert.NT.Wdf]
-KmdfService = divert, divert_WdfSection
-
-[divert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.0.5-MINGW/x86/WinDivert.sys b/external/WinDivert-1.0.5-MINGW/x86/WinDivert.sys
deleted file mode 100644
index a7ae13d..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/x86/netdump.exe b/external/WinDivert-1.0.5-MINGW/x86/netdump.exe
deleted file mode 100644
index 86bb532..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/netdump.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/x86/netfilter.exe b/external/WinDivert-1.0.5-MINGW/x86/netfilter.exe
deleted file mode 100644
index 6973acf..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/netfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/x86/passthru.exe b/external/WinDivert-1.0.5-MINGW/x86/passthru.exe
deleted file mode 100644
index 8cf03d5..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/passthru.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MINGW/x86/webfilter.exe b/external/WinDivert-1.0.5-MINGW/x86/webfilter.exe
deleted file mode 100644
index c3ae77a..0000000
Binary files a/external/WinDivert-1.0.5-MINGW/x86/webfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/CHANGELOG b/external/WinDivert-1.0.5-MSVC/CHANGELOG
deleted file mode 100644
index ba6bbc3..0000000
--- a/external/WinDivert-1.0.5-MSVC/CHANGELOG
+++ /dev/null
@@ -1,20 +0,0 @@
-WinDivert 1.0.0
-    - First release of WinDivert 1.0
-WinDivert 1.0.1
-    - Fixed stack overflow bug in 32bit versions of the driver.
-WinDivert 1.0.2
-    - WinDivert now requires Administrator privileges in order to access
-      (as opposed to just install) the WinDivert device.
-WinDivert 1.0.3
-    - Fix bug(s) relating to the parsing of IPv6 addresses.
-    - DivertOpen() now returns more meaningful error codes on failure.
-    - Two new helper API functions: DivertHelperParseIPvXAddress(..), X=4,6.
-    - Renamed DivertHelperParse(..) to DivertHelperParsePacket(..).
-WinDivert 1.0.4
-    - Same as WinDivert 1.0.3 except:
-      * Released with signed drivers.
-      * MinGW compiled gcc-4.6
-      * Minor documentation changes.
-WinDivert 1.0.5
-    - Fix the DIVERT_NETWORK_FORWARD_LAYER implementation.
-    - Upgrade Visual Studio support to 2012.
diff --git a/external/WinDivert-1.0.5-MSVC/README b/external/WinDivert-1.0.5-MSVC/README
deleted file mode 100644
index aad5569..0000000
--- a/external/WinDivert-1.0.5-MSVC/README
+++ /dev/null
@@ -1,139 +0,0 @@
-WinDivert 1.0: Windows Packet Divert
-====================================
-
-1. Introduction
----------------
-
-Windows Packet Divert (WinDivert) is a user-mode packet capture-and-divert
-package for Windows Vista, Windows 2008, and Windows 7.
-
-With WinDivert developers can write user-mode programs that capture and
-modify or drop network packets sent to/from the Windows network stack.
-In summary, WinDivert can
-    - capture network packets
-    - filter/drop network packets
-    - sniff network packets
-    - (re)inject network packets
-    - modify network packets
-
-WinDivert can be used to implement user-mode packet filters, packet sniffers,
-firewalls, NAT, VPNs, tunneling applications, etc., etc..  If you
-need to intercept and modify packets, then WinDivert is for you.
-
-The features of WinDivert include:
-    - packet interception, sniffing, or dropping modes
-    - support for loopback (localhost) traffic
-    - full IPv6 support
-    - network layer
-    - simple and powerful API
-    - high-level filtering language
-    - filter priorities
-    - freely available under the terms of the GNU Lesser General Public
-      License (LGPL)
-
-For more information about WinDivert, see doc/divert.html
-
-2. Similar Packages
--------------------
-
-WinDivert is similar to divert sockets in FreeBSD/MacOS, NETLINK sockets in
-Linux, and some commercial packet capturing packages such as WinPkFilter for
-Windows.  The design of WinDivert is largely influenced by FreeBSD's divert
-sockets.
-
-WinDivert in packet-sniffing mode is similar to Winpcap.  Unlike Winpcap,
-WinDivert fully supports capturing loopback traffic.   Furthermore, WinDivert
-supports packet interception, which is not supported in Winpcap.
-
-3. Architecture
----------------
-
-The basic architecture of WinDivert is as follows:
-
-                              +-----------------+
-                              |                 |
-                     +------->|    PROGRAM      |--------+
-                     |        | (WinDivert.dll) |        |
-                     |        +-----------------+        |
-                     |                                   | (3) re-injected
-                     | (2a) matching packet              |     packet
-                     |                                   |
-                     |                                   |
- [user mode]         |                                   |
- ....................|...................................|...................
- [kernel mode]       |                                   |
-                     |                                   |
-                     |                                   |
-              +---------------+                          +----------------->
-  (1) packet  |               | (2b) non-matching packet
- ------------>| WinDivert.sys |-------------------------------------------->
-              |               |
-              +---------------+
-
-The WinDivert.sys driver is inserted below the Windows network stack.  The
-following then happens
-
-(1) a new packet enters the network stack and is intercepted by WinDivert.sys
-(2a) if the packet matches a PROGRAM-defined filter, it is diverted.  The
-    PROGRAM reads the packet with a call to the DivertRecv() function.
-(2b) if the packet does not match the filter, the packet is permitted to
-    continue as normal.
-(3) PROGRAM either drops, modifies, or re-injects the packet.  If the
-    (modified) packet is re-injected, via a call to DivertSend(), it is
-    inserted back into the Windows network stack.
-
-4. Building
------------
-
-(1) In a WinDDK build environment, run the command:
-
-    wddk-build.bat
-
-(2) [OPTIONAL Visual Studio 2010 support] In a VS2010 command prompt, run the
-    command:
-
-    msvc-build.bat
-
-(3) [OPTIONAL MinGW support] In Linux with MinGW a cross-compiler, run the
-    command:
-
-    sh mingw-build.sh
-
-For more detailed build instructions, see doc\divert.html
-
-5. License
-----------
-
-This package is distributed under the GNU Lesser General Public License
-(LGPL) Version 3.  See LICENSE for more information.
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this program.  If not, see <http://www.gnu.org/licenses/>
-
-6. About
---------
-
-WinDivert was written by basil.
-
-For further information, or bug reports, please contact
-
-    basil AT reqrypt DOT org
-
-The homepage for WinDivert is
-
-    http://reqrypt.org/windivert.html
-
-The source code for WinDivert is hosted by GitHub at
-
-    https://github.com/basil00/Divert
-
diff --git a/external/WinDivert-1.0.5-MSVC/VERSION b/external/WinDivert-1.0.5-MSVC/VERSION
deleted file mode 100644
index 90a27f9..0000000
--- a/external/WinDivert-1.0.5-MSVC/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.0.5
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/WdfCoInstaller01009.dll b/external/WinDivert-1.0.5-MSVC/amd64/WdfCoInstaller01009.dll
deleted file mode 100644
index 6012ed3..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.dll b/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.dll
deleted file mode 100644
index 2e71dc1..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.inf b/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.inf
deleted file mode 100644
index db4fbd8..0000000
--- a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[divert.NT.Wdf]
-KmdfService = divert, divert_WdfSection
-
-[divert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.lib b/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.lib
deleted file mode 100644
index 2fc9829..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.lib and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.sys b/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.sys
deleted file mode 100644
index 67aed0d..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/netdump.exe b/external/WinDivert-1.0.5-MSVC/amd64/netdump.exe
deleted file mode 100644
index ad6e185..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/netdump.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/netfilter.exe b/external/WinDivert-1.0.5-MSVC/amd64/netfilter.exe
deleted file mode 100644
index 80a3e3f..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/netfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/passthru.exe b/external/WinDivert-1.0.5-MSVC/amd64/passthru.exe
deleted file mode 100644
index 852a874..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/passthru.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/amd64/webfilter.exe b/external/WinDivert-1.0.5-MSVC/amd64/webfilter.exe
deleted file mode 100644
index e048f24..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/amd64/webfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/doc/WinDivert.html b/external/WinDivert-1.0.5-MSVC/doc/WinDivert.html
deleted file mode 100644
index 63583a9..0000000
--- a/external/WinDivert-1.0.5-MSVC/doc/WinDivert.html
+++ /dev/null
@@ -1,1320 +0,0 @@
-<!doctype html>
-<html>
-<head>
-    <title>WinDivert 1.0 Documentation</title>
-</head>
-<body>
-<h1>WinDivert 1.0: Windows Packet Divert</h1>
-<h2>Table of Contents</h2>
-<ul>
-<li><a href="#introduction">1. Introduction</a></li>
-<li><a href="#building">2. Building</a></li>
-<ul>
-<li><a href="#driver_signing">2.1 Driver Signing</a></li>
-<li><a href="#visual_studio_2012_support">2.2 Visual Studio 2012 Support</a></li>
-<li><a href="#mingw_support">2.3 MinGW Support</a></li>
-</ul>
-<li><a href="#installing">3. Installing</a></li>
-<li><a href="#uninstalling">4. Uninstalling</a></li>
-<li><a href="#programming_api">5. Programming API</a></li>
-<ul>
-<li><a href="#divert_address">5.1 DIVERT_ADDRESS</a></li>
-<li><a href="#divert_open">5.2 DivertOpen</a></li>
-<li><a href="#divert_recv">5.3 DivertRecv</a></li>
-<li><a href="#divert_send">5.4 DivertSend</a></li>
-<li><a href="#divert_close">5.5 DivertClose</a></li>
-<li><a href="#divert_set_param">5.6 DivertSetParam</a></li>
-<li><a href="#divert_get_param">5.7 DivertGetParam</a></li>
-</ul>
-<li><a href="#helper_programming_api">6. Helper Programming API</a></li>
-<ul>
-<li><a href="#divert_iphdr">6.1 DIVERT_IPHDR</a></li>
-<li><a href="#divert_ipv6hdr">6.2 DIVERT_IPV6HDR</a></li>
-<li><a href="#divert_icmphdr">6.3 DIVERT_ICMPHDR</a></li>
-<li><a href="#divert_icmpv6hdr">6.4 DIVERT_ICMPV6HDR</a></li>
-<li><a href="#divert_tcphdr">6.5 DIVERT_TCPHDR</a></li>
-<li><a href="#divert_udphdr">6.6 DIVERT_UDPHDR</a></li>
-<li><a href="#divert_helper_parse_packet">6.7 DivertHelperParsePacket</a></li>
-<li><a href="#divert_help_parse_ipv4_address">6.8 DivertHelperParseIPv4Address</li>
-<li><a href="#divert_help_parse_ipv6_address">6.9 DivertHelperParseIPv6Address</li>
-<li><a href="#divert_helper_calc_checksums">6.10 DivertHelperCalcChecksums</a></li>
-</ul>
-<li><a href="#filter_language">7. Filter Language</a></li>
-<ul>
-<li><a href="#filter_examples">7.1 Filter Examples</a></li>
-<li><a href="#filter_usage">7.2 Filter Usage</a></li>
-</ul>
-<li><a href="#samples">8. Samples</a></li>
-<li><a href="#known_issues">9. Known Issues</a></li>
-<li><a href="#license">10. License</a></li>
-</ul>
-
-<hr>
-<a name="introduction"><h2>1. Introduction</h2></a>
-<p>
-WinDivert is a user-mode 
-capture/sniffing/modification/blocking/re-injection package for
-Windows Vista, Windows Server 2008, and Windows 7.
-WinDivert can be used to implement user-mode packet filters, packet sniffers,
-firewalls, NAT, VPNs, tunneling applications, etc., without the need to
-write kernel-level code.
-</p>
-<p>
-The main features of the WinDivert are:
-<ul>
-<li> User-mode packet capture, sniffing, dropping, filtering, modification,
-     re-injection, etc.</li>
-<li> Simple, high-level, programming API.</li>
-<li> Fully documented with sample programs.</li>
-<li> Full IPv6 support.</li>
-<li> Full loopback (localhost) support.</li>
-<li> A modern WDF/WFP driver implementation.</li>
-<li> Open source; Licensed under GNU Lesser General Public License (LGPL)
-     version 3.
-     See the <a href="#license">License</a> for more information.</li>
-</ul>
-</p><p>
-WinDivert provides similar functionality to
-<tt>divert</tt> sockets in FreeBSD/MacOS, <tt>NETLINK</tt> sockets in Linux,
-and some commercial packages such as <tt>WinPkFilter</tt> for Windows.
-WinDivert also supports passive packet sniffing similar to <tt>Winpcap</tt>.
-</p>
-
-<hr>
-<a name="building"><h2>2. Building</h2></a>
-<p>
-The source code for WinDivert is available for download at
-<blockquote>
-<a href="https://github.com/basil00/Divert">
-    https://github.com/basil00/Divert</a>
-</blockquote>
-To build the WinDivert package from source:
-<ol>
-<li> Download and install <a href="http://www.microsoft.com/whdc/devtools/wdk/default.mspx">
-Windows Driver Kit 7.1.0</a>.</li>
-<li> Open a <i>Free Build Environment</i> console (or
-    <i>Checked Build Environment</i> for debugging).</li>
-<li> In the WinDivert package root directory, run the command:
-<pre>
-wddk-build.bat
-</pre>
-This will build the following files and place them in the
-<tt>install\WDDK</tt> subdirectory:
-<ul>
-<li> <tt>WinDivert.dll</tt>: User-mode library.</li>
-<li> <tt>WinDivert.sys</tt>: Kernel-mode WDF/WFP call-out driver.</li>
-<li> <tt>WinDivert.inf</tt>: INF file for <tt>WinDivert.sys</tt>.</li>
-<li> <tt>WdfCoInstaller*.dll</tt>: Microsoft WDF co-installer for
-    <tt>WinDivert.sys</tt>.</li>
-<li> <tt>*.exe</tt>: Sample applications from the <tt>divert\examples</tt>
-    directory.</li>
-</ul></li>
-</ol>
-<i>NOTE:</i> The <tt>WinDivert.dll</tt> and <tt>WinDivert.lib</tt> files
-are only compatible with programs compiled with the WDDK compiler.
-See below for Visual Studio 2012 and MinGW support.
-</p>
-
-<a name="driver_signing"><h3>2.1 Driver Signing</h3></a>
-<p>
-Before the WinDivert package can be used, the <tt>WinDivert.sys</tt> driver
-must contain a valid digital signature.
-This is Microsoft policy for all kernel drivers in recent versions of
-Windows.
-See <a href="http://msdn.microsoft.com/en-us/windows/hardware/gg487317.aspx">Driver Signing Requirements for Windows</a>
-for more information.
-</p>
-
-<a name="visual_studio_2012_support"><h3>2.2 Visual Studio 2012 Support</h3></a>
-<p>
-To build the WinDivert package for Visual Studio 2012:
-<ol>
-<li> First build the driver by running <tt>wddk-build.bat</tt> as per the
-instructions above.</li>
-<li> Open a <i>Visual Studio Command Prompt</i> environment.</li>
-<li> In the WinDivert package root directory, run the command:
-<pre>
-msvc-build.bat
-</pre>
-This will build Visual Studio 2012 compatible files and place them in the
-<tt>install\MSVC</tt> subdirectory.</li>
-</ol>
-</p>
-
-<a name="mingw_support"><h3>2.3 MinGW Support</h3></a>
-<p>
-To build the WinDivert package for MinGW:
-<ol>
-<li> First build the driver by running <tt>wddk-build.bat</tt> as per
-the instructions above.</li>
-<li> In Linux (with the MinGW cross-compilers installed) and in the
-WinDivert package root directory, run the command:
-<pre>
-sh mingw-build.sh
-</pre>
-This will build MinGW compatible files and place them in the
-<tt>install\MINGW</tt> subdirectory.</li>
-</ol>
-
-</p>
-
-<hr>
-<a name="installing"><h2>3. Installing</h2></a>
-<p>
-WinDivert does not require any special installation.
-Simply place the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files are in your
-application's home directory.
-</p>
-<p>
-The WinDivert driver is installed on demand, i.e., when your application
-makes a call to <a href="#divert_open"><tt>DivertOpen()</tt></a> from
-<tt>WinDivert.dll</tt>.
-The driver is installed silently.
-The calling application must be running with Administrator privileges.
-</p>
-
-<hr>
-<a name="uninstalling"><h2>4. Uninstalling</h2></a>
-<p>
-To uninstall, simply delete the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files.
-The WinDivert driver is silently uninstalled when the calling application
-terminates or unloads the <tt>WinDivert.dll</tt> library.
-The WinDivert driver can also be removed manually by issuing the following
-commands at the command prompt
-<pre>
-sc stop WinDivert1.0
-sc delete WinDivert1.0
-</pre>
-</p>
-
-<hr>
-<a name="programming_api"><h2>5. Programming API</h2></a>
-<p>
-To use the WinDivert package, a program/application must:
-<ol>
-<li> Include the <tt>divert.h</tt> header file
-<pre>
-#include "divert.h"
-</pre></li>
-<li> Link or dynamically load the <tt>WinDivert.dll</tt> dynamic link
-library.</li>
-</ol>
-
-<a name="divert_address"><h3>5.1 DIVERT_ADDRESS</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT32 IfIdx;
-    UINT32 SubIfIdx;
-    UINT8  Direction;
-} <b>DIVERT_ADDRESS</b>, *<b>PDIVERT_ADDRESS</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Fields</b>
-<ul>
-<li> <tt>IfIdx</tt>: The interface index on which the packet arrived
-    (for inbound packets), or is to be sent (for outbound packets).</li>
-<li> <tt>SubIfIdx</tt>: The sub-interface index for <tt>IfIdx</tt>.</li>
-<li> <tt>Direction</tt>: The packet's direction.
-The possible values are
-<ul>
-<li> <tt>DIVERT_DIRECTION_OUTBOUND</tt> with value 0 for <i>outbound</i>
-packets.</li>
-<li> <tt>DIVERT_DIRECTION_INBOUND</tt> with value 1 for <i>inbound</i>
-packets.</li>
-</ul></li>
-</ul>
-</p><p>
-<b>Remarks</b><br>
-The <tt>DIVERT_ADDRESS</tt> structure represents the "address" of a captured
-or injected packet.
-The address includes the packet's network interfaces and the packet direction.
-</p>
-</dd></dl>
-
-<a name="divert_open"><h3>5.2 DivertOpen</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-HANDLE <b>DivertOpen</b>(
-    __in const char *filter,
-    __in DIVERT_LAYER layer,
-    __in INT16 priority,
-    __in UINT64 flags
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>filter</tt>: A packet filter string specified in the WinDivert
-    <a href="#filter_language">filter language</a>.</li>
-<li> <tt>layer</tt>: The layer.</li>
-<li> <tt>priority</tt>: The priority of the handle.</li>
-<li> <tt>flags</tt>: Additional flags.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-A valid WinDivert handle on success, or
-<tt>INVALID_HANDLE_VALUE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-Common errors include:
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Name
-</th>
-<th>
-Code
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>ERROR_INVALID_PARAMETER</tt>
-</td>
-<td>
-87
-</td>
-<td>
-This indicates an invalid packet filter string, layer, priority, or flags.
-</td>
-</tr>
-<tr>
-<td>
-<tt>ERROR_FILE_NOT_FOUND</tt>
-</td>
-<td>
-2
-</td>
-<td>
-One or more of the <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files were not
-found.
-</td>
-</tr>
-<tr>
-<td>
-<tt>ERROR_ACCESS_DENIED</tt>
-</td>
-<td>
-5
-</td>
-<td>
-The calling application does not have Administrator privileges.
-</td>
-</tr>
-<tr>
-<td>
-<tt>ERROR_INVALID_IMAGE_HASH</tt>
-</td>
-<td>
-577
-</td>
-<td>
-The <tt>WinDivert.sys</tt> driver does not have a valid digital signature
-(see the <a href="#driver_signing">driver signing requirements</a> above),
-or <tt>WinDivert.sys</tt> is the wrong version, i.e. 32-bit on
-64-bit Windows or vice versa.
-</td>
-</tr>
-</table>
-</center>
-</p><p>
-<b>Remarks</b><br>
-Opens a WinDivert handle for the given filter.
-Unless otherwise specified by <tt>flags</tt>, any packet that matches the
-filter will be diverted to the handle.
-Diverted packets can be read by the application with
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>.
-</p>
-<p>
-A typical application is only interested in a subset of all network traffic.
-In this case the filter should <i>match as closely as possible</i> to
-the subset of interest.
-This avoids unnecessary overheads introduced by diverting packets to the
-user-mode application.
-See the <a href="#filter_language">filter language</a> section for more
-information.
-</p>
-<p>
-The <i>layer</i> of the WinDivert handle is determined by the <tt>layer</tt>
-parameter.
-Currently the following layers are supported.
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Layer
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_LAYER_NETWORK = 0</tt>
-</td>
-<td>
-The network layer.
-This is the default.
-</td>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_LAYER_NETWORK_FORWARD</tt>
-</td>
-<td>
-The network layer (forwarded packets).
-</td>
-</tr>
-</table>
-</center>
-</p>
-<p>
-Different WinDivert handles can be assigned different priorities by the
-<tt>priority</tt> parameter.
-Packets are diverted to higher priority handles before lower priority
-handles.
-Packets injected by a handle are then diverted to the next priority handle,
-and so on, provided the packet matches the handle's filter.
-A packet is only diverted once per priority level, so handles should not
-share priority levels unless they use mutually exclusive filters.
-Otherwise it is not defined which handle will receive the packet first.
-Lower <tt>priority</tt> values represent higher priorities, with <tt>-1000</tt>
-being the highest priority, <tt>0</tt> the middle (and a good default)
-priority, and <tt>1000</tt> the lowest priority.
-</p>
-<p>
-The following flags are supported.
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Flag
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_FLAG_SNIFF</tt>
-</td>
-<td>
-This flag opens the WinDivert handle in <i>packet sniffing</i> mode.
-In packet sniffing mode the original packet is not dropped-and-diverted
-(the default) but copied-and-diverted.
-This mode is useful for implementing packet sniffing tools similar to those
-applications that currently use <tt>Winpcap</tt>.
-</td>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_FLAG_DROP</tt>
-</td>
-<td>
-This flag indicates that the user application does not intend to read matching
-packets with <a href="#divert_recv"><tt>DivertRecv()</tt></a>, instead the
-packets should be silently dropped.
-This is useful for implementing simple packet filters using the
-WinDivert <a href="#filter_language">filter language</a>.
-</td>
-</tr>
-</table>
-</center>
-If both <tt>DIVERT_FLAG_SNIFF</tt> and <tt>DIVERT_FLAG_DROP</tt> flags 
-are set, the WinDivert handle will be in "passthru" mode that neither
-captures nor drops any packet.
-Such a handle is useful for applications that only require packet injection.
-</p>
-</dd></dl>
-
-<a name="divert_recv"><h3>5.3 DivertRecv</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertRecv</b>(
-    __in HANDLE handle,
-    __out PVOID pPacket,
-    __in UINT packetLen,
-    __out_opt PDIVERT_ADDRESS pAddr,
-    __out_opt UINT *recvLen
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>pPacket</tt>: A buffer for the captured packet.</li>
-<li> <tt>packetLen</tt>: The length of the buffer <tt>pPacket</tt>.</li>
-<li> <tt>pAddr</tt>: The <tt>DIVERT_ADDRESS</tt> of the captured packet.</li>
-<li> <tt>recvLen</tt>: The total number of bytes written to <tt>pPacket</tt>.
-     Can be <tt>NULL</tt> if this information is not required.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if a packet was successfully received, or <tt>FALSE</tt> if
-an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Receives a diverted packet that matched the filter passed to
-<a href="#divert_open"><tt>DivertOpen()</tt></a>.
-The received packet is guaranteed to match the filter.
-</p><p>
-The contents of the captured packet are written to <tt>pPacket</tt>.
-If the captured packet is larger than the <tt>pPacket</tt> buffer length,
-then the packet will be truncated.
-If <tt>recvLen</tt> is non-<tt>NULL</tt>, then the total number of bytes
-written to <tt>pPacket</tt> is placed there.
-If non-<tt>NULL</tt>, the address of the captured packet is written to
-<tt>pAddr</tt>.
-</p><p>
-An application should call <a href="#divert_recv"><tt>DivertRecv()</tt></a>
-<i>as soon as possible</i>
-after a successful call to <a href="#divert_open"><tt>DivertOpen()</tt></a>.
-When a WinDivert handle is open, any packet that matches the filter will
-be captured and queued until handled by
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>.
-Packets are not queued indefinitely, and if not handled in a timely manner,
-any captured packet may be dropped.
-The amount of time a packet is queued can be controlled with the
-<a href="#divert_set_param"><tt>DivertSetParam()</tt></a> function.
-</p>
-<p>
-<a href="#divert_recv"><tt>DivertRecv()</tt></a> should not be used on any
-WinDivert handle created with the <tt>DIVERT_FLAG_DROP</tt> set.
-</p>
-</dd></dl>
-
-<a name="divert_send"><h3>5.4 DivertSend</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertSend</b>(
-    __in HANDLE handle,
-    __in PVOID pPacket,
-    __in UINT packetLen,
-    __in PDIVERT_ADDRESS pAddr,
-    __out_opt UINT *sendLen
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>pPacket</tt>: A buffer containing the packet to be injected.</li>
-<li> <tt>packetLen</tt>: The total length of the buffer <tt>pPacket</tt>.</li> 
-<li> <tt>pAddr</tt>: The <tt>DIVERT_ADDRESS</tt> for the injected packet.</li>
-<li> <tt>sendLen</tt>: The total number of bytes injected.
-     Can be <tt>NULL</tt> if this information is not required.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if a packet was successfully injected, or <tt>FALSE</tt> if
-an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Injects a packet into the network stack.
-The injected packet may be one received from
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>, or a
-modified version, or a completely new packet.
-Injected packets can be captured and diverted again by other WinDivert
-handles with lower priorities.
-</p><p>
-The <tt>pAddr</tt> parameter determines how the packet is injected.
-If the <tt>Direction</tt> field is <tt>DIVERT_DIRECTION_OUTBOUND</tt>,
-the packet is injected into the <i>outbound</i> path (i.e. a packet leaving
-this computer).
-Else, if <tt>Direction</tt> is <tt>DIVERT_DIRECTION_INBOUND</tt>,
-the packet is injected into the <i>inbound</i> path (i.e. a packet arriving at
-this computer).
-Note that the <tt>Direction</tt> field, and <i>not</i> the IP addresses in 
-the injected packet, is used to determine the packet's direction.
-</p><p>
-For packets injected into the <i>inbound</i> path, the <tt>IfIdx</tt> and
-<tt>SubIfIdx</tt> fields are assumed to contain valid interface numbers.
-These may be retrieved from <a href="#divert_recv"><tt>DivertRecv()</tt></a>
-(for packet modification),
-or from the <a href="http://msdn.microsoft.com/en-us/library/aa366073%28v=VS.85%29.aspx">IP Helper API</a>.
-</p><p>
-For <i>outbound</i> injected packets, the <tt>IfIdx</tt> and <tt>SubIfIdx</tt>
-fields are currently ignored and may be arbitrary values.
-Injecting an inbound packet on the outbound path <i>may</i> work (for some
-types of packets), however this should be considered "undocumented" behavior,
-and may be changed in the future.
-</p>
-</dd></dl>
-
-<a name="divert_close"><h3>5.5 DivertClose</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertClose</b>(
-    __in HANDLE handle
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Closes a WinDivert handle created by
-<a href="#divert_open"><tt>DivertOpen()</tt></a>.
-</p>
-<dd></dl>
-
-<a name="divert_set_param"><h3>5.6 DivertSetParam</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertSetParam</b>(
-    __in HANDLE handle,
-    __in DIVERT_PARAM param,
-    __in UINT64 value);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>param</tt>: A WinDivert parameter name.</li>
-<li> <tt>value</tt>: The parameter's new value.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Sets a WinDivert parameter.
-Currently, the following WinDivert parameters are defined.
-<center>
-<table border="1" cellpadding="5" width="75%">
-<tr>
-<th>
-Parameter
-</th>
-<th>
-Description
-</th>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_PARAM_QUEUE_LEN</tt>
-</td>
-<td>
-Sets the maximum length of the packet queue for
-<a href="#divert_recv"><tt>DivertRecv()</tt></a>.
-Currently the default value is 512, the minimum is 1, and the maximum 
-is 8192.
-</td>
-</tr>
-<tr>
-<td>
-<tt>DIVERT_PARAM_QUEUE_TIME</tt>
-</td>
-<td>
-Sets the minimum time, in milliseconds, a packet can be queued before it is
-automatically dropped.
-Packets cannot be queued indefinitely, and ideally, packets should be
-processed by the application as soon as is possible.
-Note that this sets the <i>minimum</i> time a packet can be queued before 
-it can be dropped.
-The actual time may be exceed this value.
-Currently the default value is 256, the minimum is 32, and the maximum is
-1024.
-</td>
-</tr>
-</table>
-</center>
-</p>
-<dd></dl>
-
-<a name="divert_get_param"><h3>5.7 DivertGetParam</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertGetParam</b>(
-    __in HANDLE handle,
-    __in DIVERT_PARAM param,
-    __out UINT64 *pValue);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>handle</tt>: A valid WinDivert handle created by
-     <a href="#divert_open"><tt>DivertOpen()</tt></a>.</li>
-<li> <tt>param</tt>: A WinDivert parameter name.</li>
-<li> <tt>value</tt>: The parameter's current value.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Gets a WinDivert parameter.
-See <a href="#divert_set_param"><tt>DivertSetParam()</tt></a> for the list
-of parameters.
-</p>
-<dd></dl>
-
-<hr>
-<a name="helper_programming_api"><h2>6. Helper Programming API</h2></a>
-
-The WinDivert helper programming API is a collection of definitions
-and functions designed to make writing WinDivert applications easier.
-The use of the helper API is completely optional.
-
-<a name="divert_iphdr"><h3>6.1 DIVERT_IPHDR</h3>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT8  HdrLength:4;
-    UINT8  Version:4;
-    UINT8  TOS;
-    UINT16 Length;
-    UINT16 Id;
-    UINT16 <i>...</i>;
-    UINT8  TTL;
-    UINT8  Protocol;
-    UINT16 Checksum;
-    UINT32 SrcAddr;
-    UINT32 DstAddr;
-} <b>DIVERT_IPHDR</b>, *<b>PDIVERT_IPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/IPv4#Packet_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-IPv4 header definition.
-</p><p>
-The following fields can only be get/set using the following macro
-definitions:
-<ul>
-<li><i>FragOff</i> with <tt>DIVERT_IPHDR_GET_FRAGOFF(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_FRAGOFF(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>MF</i> with <tt>DIVERT_IPHDR_GET_MF(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_MF(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>DF</i> with <tt>DIVERT_IPHDR_GET_DF(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_DF(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>Reserved</i> with <tt>DIVERT_IPHDR_GET_RESERVED(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPHDR_SET_RESERVED(<i>hdr</i>, <i>val</i>)</tt></li>
-</ul>
-</p>
-</dl></dd>
-
-<a name="divert_ipv6hdr"><h3>6.2 DIVERT_IPV6HDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT32 Version:4;
-    UINT32 ...:28;
-    UINT16 Length;
-    UINT8  NextHdr;
-    UINT8  HopLimit;
-    UINT32 SrcAddr[4];
-    UINT32 DstAddr[4];
-} <b>DIVERT_IPV6HDR</b>, *<b>PDIVERT_IPV6HDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/IPv6_packet#Fixed_header">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-IPv6 header definition.
-</p><p>
-The following fields can only be get/set using the following macro
-definitions:
-<ul>
-<li><i>TrafficClass</i> with
-    <tt>DIVERT_IPV6HDR_GET_TRAFFICCLASS(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPV6HDR_SET_TRAFFICCLASS(<i>hdr</i>, <i>val</i>)</tt></li>
-<li><i>FlowLabel</i> with <tt>DIVERT_IPV6HDR_GET_FLOWLABEL(<i>hdr</i>)</tt> and
-    <tt>DIVERT_IPV6HDR_SET_FLOWLABEL(<i>hdr</i>, <i>val</i>)</tt></li>
-</ul>
-</p>
-</dl></dd>
-
-<a name="divert_icmphdr"><h3>6.3 DIVERT_ICMPHDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} <b>DIVERT_ICMPHDR</b>, *<b>PDIVERT_ICMPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#ICMP_segment_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-ICMP header definition.
-</p>
-</dl></dd>
-
-<a name="divert_icmpv6hdr"><h3>6.4 DIVERT_ICMPV6HDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} <b>DIVERT_ICMPV6HDR</b>, *<b>PDIVERT_ICMPV6HDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/ICMPv6#Packet_format">here</a> for
-more information.
-</p><p>
-<b>Remarks</b><br>
-ICMPv6 header definition.
-</p>
-</dl></dd>
-
-<a name="divert_tcphdr"><h3>6.5 DIVERT_TCPHDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT32 SeqNum;
-    UINT32 AckNum;
-    UINT16 Reserved1:4;
-    UINT16 HdrLength:4;
-    UINT16 Fin:1;
-    UINT16 Syn:1;
-    UINT16 Rst:1;
-    UINT16 Psh:1;
-    UINT16 Ack:1;
-    UINT16 Urg:1;
-    UINT16 Reserved2:2;
-    UINT16 Window;
-    UINT16 Checksum;
-    UINT16 UrgPtr;
-} <b>DIVERT_TCPHDR</b>, *<b>PDIVERT_TCPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-TCP header definition.
-</p>
-</dl></dd>
-
-<a name="divert_udphdr"><h3>6.6 DIVERT_UDPHDR</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT16 Length;
-    UINT16 Checksum;
-} <b>DIVERT_UDPHDR</b>, *<b>PDIVERT_UDPHDR</b>;
-</pre>
-</td></tr></table>
-<dl><dd>
-<b>Fields</b><br>
-See <a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure">here</a>
-for more information.
-</p><p>
-<b>Remarks</b><br>
-UDP header definition.
-</p>
-</dl></dd>
-
-<a name="divert_helper_parse_packet"><h3>6.7 DivertHelperParsePacket</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertHelperParsePacket</b>(
-    __in PVOID pPacket,
-    __in UINT packetLen,
-    __out_opt PDIVERT_IPHDR *ppIpHdr,
-    __out_opt PDIVERT_IPV6HDR *ppIpv6Hdr,
-    __out_opt PDIVERT_ICMPHDR *ppIcmpHdr,
-    __out_opt PDIVERT_ICMPV6HDR *ppIcmpv6Hdr,
-    __out_opt PDIVERT_TCPHDR *ppTcpHdr,
-    __out_opt PDIVERT_UDPHDR *ppUdpHdr,
-    __out_opt PVOID *ppData,
-    __out_opt UINT *pDataLen
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>pPacket</tt>: The packet to be parsed.</li>
-<li> <tt>packetLen</tt>: The total length of the packet <tt>pPacket</tt>.</li>
-<li> <tt>ppIpHdr</tt>: Output pointer to a <tt>DIVERT_IPHDR</tt>.</li>
-<li> <tt>ppIpv6Hdr</tt>: Output pointer to a <tt>DIVERT_IPV6HDR</tt>.</li>
-<li> <tt>ppIcmpHdr</tt>: Output pointer to a <tt>DIVERT_ICMPHDR</tt>.</li>
-<li> <tt>ppIcmpv6Hdr</tt>: Output pointer to a <tt>DIVERT_ICMPV6HDR</tt>.</li>
-<li> <tt>ppTcpHdr</tt>: Output pointer to a <tt>DIVERT_TCPHDR</tt>.</li>
-<li> <tt>ppUdpHdr</tt>: Output pointer to a <tt>DIVERT_UDPHDR</tt>.</li>
-<li> <tt>ppData</tt>: Output pointer to the packet's data/payload.</li>
-<li> <tt>pDataLen</tt> Output data/payload length.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if all expected (non-<tt>NULL</tt>) outputs were present,
-<tt>FALSE</tt> otherwise.
-Note that <tt>FALSE</tt> may sometimes be a legitimate return value, e.g.,
-when both <tt>ppIpHdr</tt> and <tt>ppIpv6Hdr</tt> are non-<tt>NULL</tt>.
-</p><p>
-<b>Remarks</b><br>
-Parses a raw packet (e.g. from <a
-href="#divert_recv"><tt>DivertRecv()</tt></a>) into the
-various packet headers and/or payloads that may or may not be present.
-</p><p>
-Each output parameter may be <tt>NULL</tt> or non-<tt>NULL</tt>.
-For non-<tt>NULL</tt> parameters, this function will write the pointer to
-the corresponding header/payload if it exists, or will write <tt>NULL</tt>
-otherwise.
-Any non-<tt>NULL</tt> pointer that is returned
-<ol>
-<li> Is a pointer into the original <tt>pPacket</tt> packet; and</li>
-<li> There is enough space in <tt>pPacket</tt> to fit the header.</li>
-</ol>
-</p><p>
-This function does not do any verification of the header/payload contents
-beyond checking the header length and any other minimal information required
-for parsing.
-<p>
-</dd></dl>
-
-<a name="divert_help_parse_ipv4_address"><h3>6.8 DivertHelperParseIPv4Address</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertHelperParseIPv4Address</b>(
-    __in const char *addrStr,
-    __out_opt UINT32 *pAddr
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>addrStr</tt>: The address string.</li>
-<li> <tt>pAddr</tt>: Output address.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Parses an IPv4 address stored in <tt>addrStr</tt>.
-If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
-</p>
-<dd></dl>
-
-<a name="divert_help_parse_ipv6_address"><h3>6.9 DivertHelperParseIPv6Address</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-BOOL <b>DivertHelperParseIPv6Address</b>(
-    __in const char *addrStr,
-    __out_opt UINT32 *pAddr
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>addrStr</tt>: The address string.</li>
-<li> <tt>pAddr</tt>: Output address.</li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-<tt>TRUE</tt> if successful, <tt>FALSE</tt> if an error occurred.
-Use <tt>GetLastError()</tt> to get the reason for the error.
-</p><p>
-<b>Remarks</b><br>
-Parses an IPv6 address stored in <tt>addrStr</tt>.
-If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
-The <tt>pAddr</tt> parameter is assumed to point to a buffer large enough
-to hold a 16-byte IPv6 address.
-</p>
-<dd></dl>
-
-<a name="divert_helper_calc_checksums"><h3>6.10 DivertHelperCalcChecksums</h3></a>
-<table border="1" cellpadding="5"><tr><td>
-<pre>
-UINT <b>DivertHelperCalcChecksums</b>(
-    __inout PVOID pPacket,
-    __in UINT packetLen,
-    __in UINT64 flags
-);
-</pre>
-</td></tr></table>
-<dl><dd>
-<p>
-<b>Parameters</b><br>
-<ul>
-<li> <tt>pPacket</tt>: The packet to be modified.</li>
-<li> <tt>packetLen</tt>: The total length of the packet <tt>pPacket</tt>.</li>
-<li> <tt>flags</tt>: One or more of the following flags:
-<ul>
-<li> <tt>DIVERT_HELPER_NO_IP_CHECKSUM</tt>: Do not calculate the IPv4
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_ICMP_CHECKSUM</tt>: Do not calculate the ICMP
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_ICMPV6_CHECKSUM</tt>: Do not calculate the ICMPv6
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_TCP_CHECKSUM</tt>: Do not calculate the TCP
-    checksum.</li>
-<li> <tt>DIVERT_HELPER_NO_UDP_CHECKSUM</tt>: Do not calculate the UDP
-    checksum.</li>
-</ul></li>
-</ul>
-</p><p>
-<b>Return Value</b><br>
-The number of checksums calculated.
-</p><p>
-<b>Remarks</b><br>
-(Re)calculates the checksum for any IPv4/ICMP/ICMPv6/TCP/UDP checksum present
-in the given packet.
-Individual checksum calculations may be disabled via the appropriate flag.
-Typically this function should be invoked on a modified packet before it is
-injected with <a href="#divert_send"><tt>DivertSend()</tt></a>.
-</p><p>
-This function will calculate each checksum from scratch, even if the existing
-checksum is correct.
-This may be inefficient for some applications.
-For better performance, incremental checksum calculations should be used
-instead (not provided by this API).
-<p>
-</dd></dl>
-
-<hr>
-<a name="filter_language"><h2>7. Filter Language</h2></a>
-
-<p>
-The <a href="#divert_open"><tt>DivertOpen()</tt></a> function accepts a
-string containing a <i>filter expression</i>.
-Only packets that match the filter expression are diverted.
-Any other packet is allowed to continue as per normal.
-</p><p>
-Filter allows an application to select only the subset of traffic that is of
-interest.
-For example, a URL blacklist filter would only be interested in packets that
-contain URLs.
-This could be achieved via the following filter.
-<pre>
-HANDLE handle = DivertOpen(
-    "outbound and "
-    "tcp.PayloadLength &gt; 0 and "
-    "tcp.DstPort == 80", 0, 0, 0);
-</pre>
-This filter specifies that we should only divert traffic that is
-<ol>
-<li>outbound;</li>
-<li>contains a non-empty payload; and</li>
-<li>has TCP destination port 80 (i.e. HTTP web traffic).
-</ol>
-</p><p>
-A <i>filter</i> is a Boolean expression of the form:
-<pre>
-        <i>FILTER</i> := true | false | <i>FILTER</i> and <i>FILTER</i> | <i>FILTER</i> or <i>FILTER</i> | (<i>FILTER</i>) | <i>TEST</i>
-</pre>
-C-style syntax <tt>&amp;&amp;</tt>, <tt>||</tt>, and <tt>!</tt> may also
-be used instead of <tt>and</tt>, <tt>or</tt>, and <tt>not</tt>, respectively.
-A <i>test</i> is of the following form:
-<pre>
-        <i>TEST</i> := <i>TEST0</i> | not <i>TEST0</i>
-        <i>TEST0</i> := <i>FIELD</i> | <i>FIELD</i> op <i>VAL</i>
-</pre>
-where <tt>op</tt> is one of the following:
-</p><p>
-<center>
-<table border="1" cellpadding="5">
-<tr><th>Operator</th><th>Description</th></tr>
-<tr><td><tt>==</tt> or <tt>=</tt></td><td>Equal</td></tr>
-<tr><td><tt>!=</tt></td><td>Not equal</td></tr>
-<tr><td><tt>&lt;</tt></td><td>Less-than</td></tr>
-<tr><td><tt>&gt;</tt></td><td>Greater-than</td></tr>
-<tr><td><tt>&lt;=</tt></td><td>Less-than-or-equal</td></tr>
-<tr><td><tt>&gt;=</tt></td><td>Greater-than-or-equal</td></tr>
-</table>
-</center>
-</p><p>
-and <tt><i>VAL</i></tt> is a decimal number, hexadecimal number, or IP
-address.
-If the "<tt>op <i>VAL</i></tt>" is missing, the test is implicitly
-"<tt><i>FIELD</i> != 0</tt>".
-</p><p>
-Finally a <i>field</i> is some property about the packet.
-The possible fields are:
-</p><p>
-<center>
-<table border="1" cellpadding="5">
-<tr><th>Field</th><th>Description</th></tr>
-<tr><td><tt>outbound</tt></td><td>Is outbound?</td></tr>
-<tr><td><tt>inbound</tt></td><td>Is inbound?</td></tr>
-<tr><td><tt>ifIdx</tt></td><td>Interface index</td></tr>
-<tr><td><tt>subIfIdx</tt></td><td>Sub-interface index</td></tr>
-<tr><td><tt>ip</tt></td><td>Is IPv4?</td></tr>
-<tr><td><tt>ipv6</tt></td><td>Is IPv6?</td></tr>
-<tr><td><tt>icmp</tt></td><td>Is ICMP?</td></tr>
-<tr><td><tt>icmpv6</tt></td><td>Is ICMPv6?</td></tr>
-<tr><td><tt>tcp</tt></td><td>Is TCP?</td></tr>
-<tr><td><tt>udp</tt></td><td>Is UDP?</td></tr>
-<tr><td><tt>ip.*</tt></td><td>IPv4 fields (see <tt>DIVERT_IPHDR</tt>)</td></tr>
-<tr><td><tt>ipv6.*</tt></td><td>IPv6 fields (see <tt>DIVERT_IPV6HDR</tt>)</td></tr>
-<tr><td><tt>icmp.*</tt></td><td>ICMP fields (see <tt>DIVERT_ICMPHDR</tt>)</td></tr>
-<tr><td><tt>icmpv6.*</tt></td><td>ICMPV6 fields (see <tt>DIVERT_ICMPV6HDR</tt>)</td></tr>
-<tr><td><tt>tcp.*</tt></td><td>TCP fields (see <tt>DIVERT_TCPHDR</tt>)</td></tr>
-<tr><td><tt>tcp.PayloadLength</tt></td><td>The TCP payload length</td></tr>
-<tr><td><tt>udp.*</tt></td><td>UDP fields (see <tt>DIVERT_UDPHDR</tt>)</td></tr>
-<tr><td><tt>udp.PayloadLength</tt></td><td>The UDP payload length</td></tr>
-</table>
-</center>
-</p><p>
-A <i>test</i> also fails if the field is missing.
-E.g. the test "<tt>tcp.DstPort == 80</tt>" will fail if the packet does not
-contain a TCP header.
-</p>
-
-<a name="filter_examples"><h3>7.1 Filter Examples</h3></a>
-
-<p>
-<ol>
-<li>
-Divert all outbound web traffic:
-<pre>
-HANDLE handle = DivertOpen(
-        "outbound and "
-        "(tcp.DstPort == 80 or udp.DstPort == 53)",
-        0, 0, 0
-    );
-</pre>
-</li>
-<li>
-Divert all inbound TCP SYNs:
-<pre>
-HANDLE handle = DivertOpen(
-        "inbound and "
-        "tcp.Syn",
-        0, 0, 0
-    );
-</pre>
-</li>
-<li>
-Divert only (inbound) local traffic:
-<pre>
-HANDLE handle = DivertOpen(
-        "inbound and ("
-        "(ip.DstAddr &gt;= 127.0.0.1 and ip.DstAddr &lt;= 127.255.255.255) or"
-        "ipv6.DstAddr == ::1)",
-        0, 0, 0
-    );
-</pre>
-</li>
-<li>
-Divert all traffic:
-<pre>
-HANDLE handle = DivertOpen("true", 0, 0, 0);
-</pre>
-</li>
-<li>
-Divert no traffic:
-<pre>
-HANDLE handle = DivertOpen("false", 0, 0, 0);
-</pre>
-This is useful for packet injection.
-</ol>
-
-<a name="filter_usage"><h3>7.2 Filter Usage</h3></a>
-
-<p>
-The purpose of the filter is to help applications select the subset of
-all network traffic that the application is interested in.
-Ideally the filter should be
-<ol>
-<li> As short as possible; and</li>
-<li> As selective as possible.</li>
-</ol>
-For some applications these two objectives can conflict.
-That is, a selective filter is not short, and a short filter is not selective.
-For such applications the developer should experiment with different
-filter configurations and carefully measure the performance impact to
-find the optimal solution.
-</p>
-
-<hr>
-<a name="samples"><h2>8. Samples</h2></a>
-
-<p>
-Some samples have been provided to demonstrate the WinDivert API.
-The sample programs are:
-<ul>
-<li><tt>webfilter.exe</tt>: A simple URL blacklist filter.
-    This program monitors outbound HTTP traffic.
-    If it finds a URL request that matches the blacklist, it hijacks the
-    TCP connection, reseting the connection at the server's end, and
-    sending a simple block-page to the browser.
-    The blacklist(s) are specified at the command-line.</li>
-<li><tt>netdump.exe</tt>: A simple packet sniffer based on the
-    WinDivert filter language.
-    This program takes a filter specified at the command line, and prints
-    information about any packet that matches the filter.
-    This example uses WinDivert in "packet sniffing" mode, similar to
-    <tt>winpcap</tt>.
-    However, unlike <tt>winpcap</tt>, WinDivert can see local (loopback)
-    packets.
-<li><tt>netfilter.exe</tt>: A simple firewall based on the WinDivert
-    filter language.
-    This program takes a filter specified at the command line, and blocks
-    any packet that matches the filter.
-    It blocks TCP by sending a TCP reset, UDP by an ICMP message, and all
-    other traffic it simply drops.
-    This is similar to the Linux <tt>iptables</tt> command with the
-    <tt>-j REJECT</tt> option.</li>
-<li><tt>passthru.exe</tt>: A simple program that simply re-injects every
-    packet it captures.
-    This example is multi-threaded, where multiple threads are processing
-    packets from a single handle.
-    This example is useful for performance testing, and as a starting point
-    for more interesting applications.</li>
-</ul>
-</p><p>
-The samples are intended for educational purposes only, and are not
-fully-featured applications.
-</p><p>
-The following basic template for a WinDivert application.
-The basic idea is to open a WinDivert handle, then enter a
-capture-modify-reinject loop:
-<pre>
-    HANDLE handle;          // Divert handle
-    DIVERT_ADDRESS addr;    // Packet address
-    char packet[MAXBUF];    // Packet buffer
-    UINT packetLen;
-
-    handle = DivertOpen("...", 0, 0, 0);   // Open some filter
-    if (handle == INVALID_HANDLE_VALUE)
-    {
-        // Handle error
-        exit(1);
-    }
-
-    // Main capture-modify-inject loop:
-    while (TRUE)
-    {
-        if (!DivertRecv(handle, packet, sizeof(packet), &amp;addr, &amp;packetLen))
-        {
-            // Handle recv error
-            continue;
-        }
-
-        // Modify packet.
-
-        if (!DivertSend(handle, packet, packetLen, &amp;addr, NULL))
-        {
-            // Handle send error
-            continue;
-        }
-    }
-</pre>
-For applications that do not need to modify the packet, a better approach is
-to open the WinDivert handle with the <tt>DIVERT_FLAG_SNIFF</tt> flag set,
-and not re-inject the packet with
-<a href="#divert_send"><tt>DivertSend()</tt></a>.
-See the <tt>netdump.exe</tt> sample program for an example of this usage.
-</p>
-
-<hr>
-<a name="known_issues"><h2>9. Known Issues</h2></a>
-
-<p>
-There are some limitations to the WinDivert package.
-They are
-<ul>
-<li><i>Injecting inbound ICMP/ICMPv6 messages</i>:
-    For some ICMP/ICMPv6 messages, inbound injection does not work.
-    An error will be returned and the packet will be lost.
-    It is suspected that this is an issue with the WFP framework on which
-    WinDivert is built.
-    The work-around is to inject inbound ICMP messages as <tt>outbound</tt>.
-    </li>
-<li><i>No IPv6 extension header support</i>:
-    Currently there is no filter support for IPv6 packets with extension
-    headers.
-    The work around is to capture all IPv6 traffic.</li>
-</ul>
-</p>
-
-<hr>
-<a name="license"><h2>10. License</h2></a>
-<p>
-This package is distributed <i>strictly</i> under the
-<a href="http://www.gnu.org/licenses/lgpl-3.0.txt">GNU Lesser General
-Public License (GPL) Version 3</a>.
-Please note the following:
-<pre>
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-GNU Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public License
-along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.
-</pre>
-</p>
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
-<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
-</body>
-</html>
diff --git a/external/WinDivert-1.0.5-MSVC/include/divert.h b/external/WinDivert-1.0.5-MSVC/include/divert.h
deleted file mode 100644
index 743d795..0000000
--- a/external/WinDivert-1.0.5-MSVC/include/divert.h
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * divert.h
- * (C) 2012, all rights reserved,
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __DIVERT_H
-#define __DIVERT_H
-
-#ifndef DIVERT_KERNEL
-#include <windows.h>
-#endif      /* DIVERT_KERNEL */
-
-#ifndef DIVERTEXPORT
-#define DIVERTEXPORT    __declspec(dllimport)
-#endif      /* DIVERTEXPORT */
-
-#ifdef __MINGW32__
-#define __in
-#define __out
-#define __out_opt
-#define __inout
-#include <stdint.h>
-#define INT8    int8_t
-#define UINT8   uint8_t
-#define INT16   int16_t
-#define UINT16  uint16_t
-#define INT32   int32_t
-#define UINT32  uint32_t
-#define INT64   int64_t
-#define UINT64  uint64_t
-#endif      /* __MINGW32__ */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/****************************************************************************/
-/* DIVERT API                                                               */
-/****************************************************************************/
-
-/*
- * Divert address.
- */
-typedef struct
-{
-    UINT32 IfIdx;                       /* Packet's interface index. */
-    UINT32 SubIfIdx;                    /* Packet's sub-interface index. */
-    UINT8  Direction;                   /* Packet's direction. */
-} DIVERT_ADDRESS, *PDIVERT_ADDRESS;
-
-#define DIVERT_DIRECTION_OUTBOUND       0
-#define DIVERT_DIRECTION_INBOUND        1
-
-/*
- * Old names (deprecated).
- */
-#define DIVERT_PACKET_DIRECTION_OUTBOUND                \
-    DIVERT_DIRECTION_OUTBOUND
-#define DIVERT_PACKET_DIRECTION_INBOUND                 \
-    DIVERT_DIRECTION_INBOUND
-
-/*
- * Divert layers.
- */
-typedef enum
-{
-    DIVERT_LAYER_NETWORK = 0,           /* Network layer. */
-    DIVERT_LAYER_NETWORK_FORWARD = 1    /* Network layer (forwarded packets) */
-} DIVERT_LAYER, *PDIVERT_LAYER;
-
-/*
- * Divert flags.
- */
-#define DIVERT_FLAG_SNIFF               1
-#define DIVERT_FLAG_DROP                2
-
-/*
- * Divert parameters.
- */
-typedef enum
-{
-    DIVERT_PARAM_QUEUE_LEN  = 0,        /* Packet queue length. */
-    DIVERT_PARAM_QUEUE_TIME = 1         /* Packet queue time. */
-} DIVERT_PARAM, *PDIVERT_PARAM;
-#define DIVERT_PARAM_MAX                DIVERT_PARAM_QUEUE_TIME
-
-/*
- * Open a divert handle.
- */
-extern DIVERTEXPORT HANDLE DivertOpen(
-    __in        const char *filter,
-    __in        DIVERT_LAYER layer,
-    __in        INT16 priority,
-    __in        UINT64 flags);
-
-/*
- * Receive (read) a packet from a divert handle.
- */
-extern DIVERTEXPORT BOOL DivertRecv(
-    __in        HANDLE handle,
-    __out       PVOID pPacket,
-    __in        UINT packetLen,
-    __out_opt   PDIVERT_ADDRESS pAddr,
-    __out_opt   UINT *readLen);
-
-/*
- * Send (write/inject) a packet to a divert handle.
- */
-extern DIVERTEXPORT BOOL DivertSend(
-    __in        HANDLE handle,
-    __in        PVOID pPacket,
-    __in        UINT packetLen,
-    __in        PDIVERT_ADDRESS pAddr,
-    __out_opt   UINT *writeLen);
-
-/*
- * Close a divert handle.
- */
-extern DIVERTEXPORT BOOL DivertClose(
-    __in        HANDLE handle);
-
-/*
- * Set a divert handle parameter.
- */
-extern DIVERTEXPORT BOOL DivertSetParam(
-    __in        HANDLE handle,
-    __in        DIVERT_PARAM param,
-    __in        UINT64 value);
-
-/*
- * Get a divert handle parameter.
- */
-extern DIVERTEXPORT BOOL DivertGetParam(
-    __in        HANDLE handle,
-    __in        DIVERT_PARAM param,
-    __out       UINT64 *pValue);
-
-/****************************************************************************/
-/* DIVERT HELPER API                                                        */
-/****************************************************************************/
-
-#ifndef DIVERT_NO_HELPER_API
-
-/*
- * IPv4/IPv6/ICMP/ICMPv6/TCP/UDP header definitions.
- */
-typedef struct
-{
-    UINT8  HdrLength:4;
-    UINT8  Version:4;
-    UINT8  TOS;
-    UINT16 Length;
-    UINT16 Id;
-    UINT16 FragOff0;
-    UINT8  TTL;
-    UINT8  Protocol;
-    UINT16 Checksum;
-    UINT32 SrcAddr;
-    UINT32 DstAddr;
-} DIVERT_IPHDR, *PDIVERT_IPHDR;
-
-#define DIVERT_IPHDR_GET_FRAGOFF(hdr)                       \
-    (((hdr)->FragOff0) & 0xFF1F)
-#define DIVERT_IPHDR_GET_MF(hdr)                            \
-    ((((hdr)->FragOff0) & 0x0020) != 0)
-#define DIVERT_IPHDR_GET_DF(hdr)                            \
-    ((((hdr)->FragOff0) & 0x0040) != 0)
-#define DIVERT_IPHDR_GET_RESERVED(hdr)                      \
-    ((((hdr)->FragOff0) & 0x0080) != 0)
-
-#define DIVERT_IPHDR_SET_FRAGOFF(hdr, val)                  \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0x00E0) |    \
-            ((val) & 0xFF1F);                               \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPHDR_SET_MF(hdr, val)                       \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0xFFDF) |    \
-            (((val) & 0x0001) << 5);                        \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPHDR_SET_DF(hdr, val)                       \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0xFFBF) |    \
-            (((val) & 0x0001) << 6);                        \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPHDR_SET_RESERVED(hdr, val)                 \
-    do                                                      \
-    {                                                       \
-        (hdr)->FragOff0 = (((hdr)->FragOff0) & 0xFF7F) |    \
-            (((val) & 0x0001) << 7);                        \
-    }                                                       \
-    while (FALSE)
-
-typedef struct
-{
-    UINT8  TrafficClass0:4;
-    UINT8  Version:4;
-    UINT8  FlowLabel0:4;
-    UINT8  TrafficClass1:4;
-    UINT16 FlowLabel1;
-    UINT16 Length;
-    UINT8  NextHdr;
-    UINT8  HopLimit;
-    UINT32 SrcAddr[4];
-    UINT32 DstAddr[4];
-} DIVERT_IPV6HDR, *PDIVERT_IPV6HDR;
-
-#define DIVERT_IPV6HDR_GET_TRAFFICCLASS(hdr)                \
-    ((((hdr)->TrafficClass0) << 4) | ((hdr)->TrafficClass1))
-#define DIVERT_IPV6HDR_GET_FLOWLABEL(hdr)                   \
-    ((((UINT32)(hdr)->FlowLabel0) << 16) | ((UINT32)(hdr)->FlowLabel1))
-
-#define DIVERT_IPV6HDR_SET_TRAFFICCLASS(hdr, val)           \
-    do                                                      \
-    {                                                       \
-        (hdr)->TrafficClass0 = ((UINT8)(val) >> 4);         \
-        (hdr)->TrafficClass1 = (UINT8)(val);                \
-    }                                                       \
-    while (FALSE)
-#define DIVERT_IPV6HDR_SET_FLOWLABEL(hdr, val)              \
-    do                                                      \
-    {                                                       \
-        (hdr)->FlowLabel0 = (UINT8)((val) >> 16);           \
-        (hdr)->FlowLabel1 = (UINT16)(val);                  \
-    }                                                       \
-    while (FALSE)
-
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} DIVERT_ICMPHDR, *PDIVERT_ICMPHDR;
-
-typedef struct
-{
-    UINT8  Type;
-    UINT8  Code;
-    UINT16 Checksum;
-    UINT32 Body;
-} DIVERT_ICMPV6HDR, *PDIVERT_ICMPV6HDR;
-
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT32 SeqNum;
-    UINT32 AckNum;
-    UINT16 Reserved1:4;
-    UINT16 HdrLength:4;
-    UINT16 Fin:1;
-    UINT16 Syn:1;
-    UINT16 Rst:1;
-    UINT16 Psh:1;
-    UINT16 Ack:1;
-    UINT16 Urg:1;
-    UINT16 Reserved2:2;
-    UINT16 Window;
-    UINT16 Checksum;
-    UINT16 UrgPtr;
-} DIVERT_TCPHDR, *PDIVERT_TCPHDR;
-
-typedef struct
-{
-    UINT16 SrcPort;
-    UINT16 DstPort;
-    UINT16 Length;
-    UINT16 Checksum;
-} DIVERT_UDPHDR, *PDIVERT_UDPHDR;
-
-/*
- * Flags for DivertHelperCalcChecksums()
- */
-#define DIVERT_HELPER_NO_IP_CHECKSUM        1
-#define DIVERT_HELPER_NO_ICMP_CHECKSUM      2
-#define DIVERT_HELPER_NO_ICMPV6_CHECKSUM    4
-#define DIVERT_HELPER_NO_TCP_CHECKSUM       8
-#define DIVERT_HELPER_NO_UDP_CHECKSUM       16
-
-/*
- * Parse IPv4/IPv6/ICMP/ICMPv6/TCP/UDP headers from a raw packet.
- */
-extern DIVERTEXPORT BOOL DivertHelperParsePacket(
-    __in        PVOID pPacket,
-    __in        UINT packetLen,
-    __out_opt   PDIVERT_IPHDR *ppIpHdr,
-    __out_opt   PDIVERT_IPV6HDR *ppIpv6Hdr,
-    __out_opt   PDIVERT_ICMPHDR *ppIcmpHdr,
-    __out_opt   PDIVERT_ICMPV6HDR *ppIcmpv6Hdr,
-    __out_opt   PDIVERT_TCPHDR *ppTcpHdr,
-    __out_opt   PDIVERT_UDPHDR *ppUdpHdr,
-    __out_opt   PVOID *ppData,
-    __out_opt   UINT *pDataLen);
-
-/*
- * Old name (deprecated).
- */
-#define DivertHelperParse(p, pl, ip, ip6, icmp, icmp6, tcp, udp, d, dl)     \
-    DivertHelperParsePacket((p), (pl), (ip), (ip6), (icmp), (icmp6), (tcp), \
-        (udp), (d), (dl))
-
-/*
- * Parse an IPv4 address.
- */
-extern DIVERTEXPORT BOOL DivertHelperParseIPv4Address(
-    __in        const char *addrStr,
-    __out_opt   UINT32 *pAddr);
-
-/*
- * Parse an IPv6 address.
- */
-extern DIVERTEXPORT BOOL DivertHelperParseIPv6Address(
-    __in        const char *addrStr,
-    __out_opt   UINT32 *pAddr);
-
-/*
- * Calculate IPv4/IPv6/ICMP/ICMPv6/TCP/UDP checksums.
- */
-extern DIVERTEXPORT UINT DivertHelperCalcChecksums(
-    __inout     PVOID pPacket, 
-    __in        UINT packetLen,
-    __in        UINT64 flags);
-
-#endif      /* DIVERT_NO_HELPER_API */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif      /* __DIVERT_H */
diff --git a/external/WinDivert-1.0.5-MSVC/x86/WdfCoInstaller01009.dll b/external/WinDivert-1.0.5-MSVC/x86/WdfCoInstaller01009.dll
deleted file mode 100644
index 068538a..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.dll b/external/WinDivert-1.0.5-MSVC/x86/WinDivert.dll
deleted file mode 100644
index eb80241..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.inf b/external/WinDivert-1.0.5-MSVC/x86/WinDivert.inf
deleted file mode 100644
index db4fbd8..0000000
--- a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[divert.NT.Wdf]
-KmdfService = divert, divert_WdfSection
-
-[divert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.lib b/external/WinDivert-1.0.5-MSVC/x86/WinDivert.lib
deleted file mode 100644
index fb2b717..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.lib and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.sys b/external/WinDivert-1.0.5-MSVC/x86/WinDivert.sys
deleted file mode 100644
index 604168b..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/bl.txt b/external/WinDivert-1.0.5-MSVC/x86/bl.txt
deleted file mode 100644
index a59c5e4..0000000
--- a/external/WinDivert-1.0.5-MSVC/x86/bl.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-google.com
-www.google.com
diff --git a/external/WinDivert-1.0.5-MSVC/x86/netdump.exe b/external/WinDivert-1.0.5-MSVC/x86/netdump.exe
deleted file mode 100644
index eb633a1..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/netdump.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/netfilter.exe b/external/WinDivert-1.0.5-MSVC/x86/netfilter.exe
deleted file mode 100644
index 31b1fb8..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/netfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/passthru.exe b/external/WinDivert-1.0.5-MSVC/x86/passthru.exe
deleted file mode 100644
index e938a22..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/passthru.exe and /dev/null differ
diff --git a/external/WinDivert-1.0.5-MSVC/x86/webfilter.exe b/external/WinDivert-1.0.5-MSVC/x86/webfilter.exe
deleted file mode 100644
index 1fad8b4..0000000
Binary files a/external/WinDivert-1.0.5-MSVC/x86/webfilter.exe and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/LICENSE b/external/WinDivert-1.1.1-MINGW/LICENSE
deleted file mode 100644
index 811aa5e..0000000
--- a/external/WinDivert-1.1.1-MINGW/LICENSE
+++ /dev/null
@@ -1,787 +0,0 @@
-                   GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
-------------------------------------------------------------------------------
-
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
diff --git a/external/WinDivert-1.1.1-MINGW/VERSION b/external/WinDivert-1.1.1-MINGW/VERSION
deleted file mode 100644
index 524cb55..0000000
--- a/external/WinDivert-1.1.1-MINGW/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.1.1
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/WdfCoInstaller01009.dll b/external/WinDivert-1.1.1-MINGW/amd64/WdfCoInstaller01009.dll
deleted file mode 100644
index 6012ed3..0000000
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.dll b/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.dll
deleted file mode 100644
index 95a12d9..0000000
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.inf b/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.inf
deleted file mode 100644
index a877c20..0000000
--- a/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[windivert.NT.Wdf]
-KmdfService = windivert, windivert_WdfSection
-
-[windivert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.sys b/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.sys
deleted file mode 100644
index 07aa6d8..0000000
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/WdfCoInstaller01009.dll b/external/WinDivert-1.1.1-MINGW/x86/WdfCoInstaller01009.dll
deleted file mode 100644
index 068538a..0000000
Binary files a/external/WinDivert-1.1.1-MINGW/x86/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/WinDivert.dll b/external/WinDivert-1.1.1-MINGW/x86/WinDivert.dll
deleted file mode 100644
index b6eced3..0000000
Binary files a/external/WinDivert-1.1.1-MINGW/x86/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/WinDivert.inf b/external/WinDivert-1.1.1-MINGW/x86/WinDivert.inf
deleted file mode 100644
index a877c20..0000000
--- a/external/WinDivert-1.1.1-MINGW/x86/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[windivert.NT.Wdf]
-KmdfService = windivert, windivert_WdfSection
-
-[windivert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.1.1-MINGW/x86/WinDivert.sys b/external/WinDivert-1.1.1-MINGW/x86/WinDivert.sys
deleted file mode 100644
index e508d78..0000000
Binary files a/external/WinDivert-1.1.1-MINGW/x86/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MSVC/LICENSE b/external/WinDivert-1.1.1-MSVC/LICENSE
deleted file mode 100644
index 811aa5e..0000000
--- a/external/WinDivert-1.1.1-MSVC/LICENSE
+++ /dev/null
@@ -1,787 +0,0 @@
-                   GNU LESSER GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
-  This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
-  0. Additional Definitions.
-
-  As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
-  "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
-  An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
-  A "Combined Work" is a work produced by combining or linking an
-Application with the Library.  The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
-  The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
-  The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
-  1. Exception to Section 3 of the GNU GPL.
-
-  You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
-  2. Conveying Modified Versions.
-
-  If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
-   a) under this License, provided that you make a good faith effort to
-   ensure that, in the event an Application does not supply the
-   function or data, the facility still operates, and performs
-   whatever part of its purpose remains meaningful, or
-
-   b) under the GNU GPL, with none of the additional permissions of
-   this License applicable to that copy.
-
-  3. Object Code Incorporating Material from Library Header Files.
-
-  The object code form of an Application may incorporate material from
-a header file that is part of the Library.  You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
-   a) Give prominent notice with each copy of the object code that the
-   Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the object code with a copy of the GNU GPL and this license
-   document.
-
-  4. Combined Works.
-
-  You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
-   a) Give prominent notice with each copy of the Combined Work that
-   the Library is used in it and that the Library and its use are
-   covered by this License.
-
-   b) Accompany the Combined Work with a copy of the GNU GPL and this license
-   document.
-
-   c) For a Combined Work that displays copyright notices during
-   execution, include the copyright notice for the Library among
-   these notices, as well as a reference directing the user to the
-   copies of the GNU GPL and this license document.
-
-   d) Do one of the following:
-
-       0) Convey the Minimal Corresponding Source under the terms of this
-       License, and the Corresponding Application Code in a form
-       suitable for, and under terms that permit, the user to
-       recombine or relink the Application with a modified version of
-       the Linked Version to produce a modified Combined Work, in the
-       manner specified by section 6 of the GNU GPL for conveying
-       Corresponding Source.
-
-       1) Use a suitable shared library mechanism for linking with the
-       Library.  A suitable mechanism is one that (a) uses at run time
-       a copy of the Library already present on the user's computer
-       system, and (b) will operate properly with a modified version
-       of the Library that is interface-compatible with the Linked
-       Version.
-
-   e) Provide Installation Information, but only if you would otherwise
-   be required to provide such information under section 6 of the
-   GNU GPL, and only to the extent that such information is
-   necessary to install and execute a modified version of the
-   Combined Work produced by recombining or relinking the
-   Application with a modified version of the Linked Version. (If
-   you use option 4d0, the Installation Information must accompany
-   the Minimal Corresponding Source and Corresponding Application
-   Code. If you use option 4d1, you must provide the Installation
-   Information in the manner specified by section 6 of the GNU GPL
-   for conveying Corresponding Source.)
-
-  5. Combined Libraries.
-
-  You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
-   a) Accompany the combined library with a copy of the same work based
-   on the Library, uncombined with any other library facilities,
-   conveyed under the terms of this License.
-
-   b) Give prominent notice with the combined library that part of it
-   is a work based on the Library, and explaining where to find the
-   accompanying uncombined form of the same work.
-
-  6. Revised Versions of the GNU Lesser General Public License.
-
-  The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
-  Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
-  If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
-
-------------------------------------------------------------------------------
-
-                    GNU GENERAL PUBLIC LICENSE
-                       Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-                            Preamble
-
-  The GNU General Public License is a free, copyleft license for
-software and other kinds of works.
-
-  The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains free
-software for all its users.  We, the Free Software Foundation, use the
-GNU General Public License for most of our software; it applies also to
-any other work released this way by its authors.  You can apply it to
-your programs, too.
-
-  When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-  To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you have
-certain responsibilities if you distribute copies of the software, or if
-you modify it: responsibilities to respect the freedom of others.
-
-  For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-  Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-  For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-  Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the manufacturer
-can do so.  This is fundamentally incompatible with the aim of
-protecting users' freedom to change the software.  The systematic
-pattern of such abuse occurs in the area of products for individuals to
-use, which is precisely where it is most unacceptable.  Therefore, we
-have designed this version of the GPL to prohibit the practice for those
-products.  If such problems arise substantially in other domains, we
-stand ready to extend this provision to those domains in future versions
-of the GPL, as needed to protect the freedom of users.
-
-  Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-  The precise terms and conditions for copying, distribution and
-modification follow.
-
-                       TERMS AND CONDITIONS
-
-  0. Definitions.
-
-  "This License" refers to version 3 of the GNU General Public License.
-
-  "Copyright" also means copyright-like laws that apply to other kinds of
-works, such as semiconductor masks.
-
-  "The Program" refers to any copyrightable work licensed under this
-License.  Each licensee is addressed as "you".  "Licensees" and
-"recipients" may be individuals or organizations.
-
-  To "modify" a work means to copy from or adapt all or part of the work
-in a fashion requiring copyright permission, other than the making of an
-exact copy.  The resulting work is called a "modified version" of the
-earlier work or a work "based on" the earlier work.
-
-  A "covered work" means either the unmodified Program or a work based
-on the Program.
-
-  To "propagate" a work means to do anything with it that, without
-permission, would make you directly or secondarily liable for
-infringement under applicable copyright law, except executing it on a
-computer or modifying a private copy.  Propagation includes copying,
-distribution (with or without modification), making available to the
-public, and in some countries other activities as well.
-
-  To "convey" a work means any kind of propagation that enables other
-parties to make or receive copies.  Mere interaction with a user through
-a computer network, with no transfer of a copy, is not conveying.
-
-  An interactive user interface displays "Appropriate Legal Notices"
-to the extent that it includes a convenient and prominently visible
-feature that (1) displays an appropriate copyright notice, and (2)
-tells the user that there is no warranty for the work (except to the
-extent that warranties are provided), that licensees may convey the
-work under this License, and how to view a copy of this License.  If
-the interface presents a list of user commands or options, such as a
-menu, a prominent item in the list meets this criterion.
-
-  1. Source Code.
-
-  The "source code" for a work means the preferred form of the work
-for making modifications to it.  "Object code" means any non-source
-form of a work.
-
-  A "Standard Interface" means an interface that either is an official
-standard defined by a recognized standards body, or, in the case of
-interfaces specified for a particular programming language, one that
-is widely used among developers working in that language.
-
-  The "System Libraries" of an executable work include anything, other
-than the work as a whole, that (a) is included in the normal form of
-packaging a Major Component, but which is not part of that Major
-Component, and (b) serves only to enable use of the work with that
-Major Component, or to implement a Standard Interface for which an
-implementation is available to the public in source code form.  A
-"Major Component", in this context, means a major essential component
-(kernel, window system, and so on) of the specific operating system
-(if any) on which the executable work runs, or a compiler used to
-produce the work, or an object code interpreter used to run it.
-
-  The "Corresponding Source" for a work in object code form means all
-the source code needed to generate, install, and (for an executable
-work) run the object code and to modify the work, including scripts to
-control those activities.  However, it does not include the work's
-System Libraries, or general-purpose tools or generally available free
-programs which are used unmodified in performing those activities but
-which are not part of the work.  For example, Corresponding Source
-includes interface definition files associated with source files for
-the work, and the source code for shared libraries and dynamically
-linked subprograms that the work is specifically designed to require,
-such as by intimate data communication or control flow between those
-subprograms and other parts of the work.
-
-  The Corresponding Source need not include anything that users
-can regenerate automatically from other parts of the Corresponding
-Source.
-
-  The Corresponding Source for a work in source code form is that
-same work.
-
-  2. Basic Permissions.
-
-  All rights granted under this License are granted for the term of
-copyright on the Program, and are irrevocable provided the stated
-conditions are met.  This License explicitly affirms your unlimited
-permission to run the unmodified Program.  The output from running a
-covered work is covered by this License only if the output, given its
-content, constitutes a covered work.  This License acknowledges your
-rights of fair use or other equivalent, as provided by copyright law.
-
-  You may make, run and propagate covered works that you do not
-convey, without conditions so long as your license otherwise remains
-in force.  You may convey covered works to others for the sole purpose
-of having them make modifications exclusively for you, or provide you
-with facilities for running those works, provided that you comply with
-the terms of this License in conveying all material for which you do
-not control copyright.  Those thus making or running the covered works
-for you must do so exclusively on your behalf, under your direction
-and control, on terms that prohibit them from making any copies of
-your copyrighted material outside their relationship with you.
-
-  Conveying under any other circumstances is permitted solely under
-the conditions stated below.  Sublicensing is not allowed; section 10
-makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-  No covered work shall be deemed part of an effective technological
-measure under any applicable law fulfilling obligations under article
-11 of the WIPO copyright treaty adopted on 20 December 1996, or
-similar laws prohibiting or restricting circumvention of such
-measures.
-
-  When you convey a covered work, you waive any legal power to forbid
-circumvention of technological measures to the extent such circumvention
-is effected by exercising rights under this License with respect to
-the covered work, and you disclaim any intention to limit operation or
-modification of the work as a means of enforcing, against the work's
-users, your or third parties' legal rights to forbid circumvention of
-technological measures.
-
-  4. Conveying Verbatim Copies.
-
-  You may convey verbatim copies of the Program's source code as you
-receive it, in any medium, provided that you conspicuously and
-appropriately publish on each copy an appropriate copyright notice;
-keep intact all notices stating that this License and any
-non-permissive terms added in accord with section 7 apply to the code;
-keep intact all notices of the absence of any warranty; and give all
-recipients a copy of this License along with the Program.
-
-  You may charge any price or no price for each copy that you convey,
-and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-  You may convey a work based on the Program, or the modifications to
-produce it from the Program, in the form of source code under the
-terms of section 4, provided that you also meet all of these conditions:
-
-    a) The work must carry prominent notices stating that you modified
-    it, and giving a relevant date.
-
-    b) The work must carry prominent notices stating that it is
-    released under this License and any conditions added under section
-    7.  This requirement modifies the requirement in section 4 to
-    "keep intact all notices".
-
-    c) You must license the entire work, as a whole, under this
-    License to anyone who comes into possession of a copy.  This
-    License will therefore apply, along with any applicable section 7
-    additional terms, to the whole of the work, and all its parts,
-    regardless of how they are packaged.  This License gives no
-    permission to license the work in any other way, but it does not
-    invalidate such permission if you have separately received it.
-
-    d) If the work has interactive user interfaces, each must display
-    Appropriate Legal Notices; however, if the Program has interactive
-    interfaces that do not display Appropriate Legal Notices, your
-    work need not make them do so.
-
-  A compilation of a covered work with other separate and independent
-works, which are not by their nature extensions of the covered work,
-and which are not combined with it such as to form a larger program,
-in or on a volume of a storage or distribution medium, is called an
-"aggregate" if the compilation and its resulting copyright are not
-used to limit the access or legal rights of the compilation's users
-beyond what the individual works permit.  Inclusion of a covered work
-in an aggregate does not cause this License to apply to the other
-parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-  You may convey a covered work in object code form under the terms
-of sections 4 and 5, provided that you also convey the
-machine-readable Corresponding Source under the terms of this License,
-in one of these ways:
-
-    a) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by the
-    Corresponding Source fixed on a durable physical medium
-    customarily used for software interchange.
-
-    b) Convey the object code in, or embodied in, a physical product
-    (including a physical distribution medium), accompanied by a
-    written offer, valid for at least three years and valid for as
-    long as you offer spare parts or customer support for that product
-    model, to give anyone who possesses the object code either (1) a
-    copy of the Corresponding Source for all the software in the
-    product that is covered by this License, on a durable physical
-    medium customarily used for software interchange, for a price no
-    more than your reasonable cost of physically performing this
-    conveying of source, or (2) access to copy the
-    Corresponding Source from a network server at no charge.
-
-    c) Convey individual copies of the object code with a copy of the
-    written offer to provide the Corresponding Source.  This
-    alternative is allowed only occasionally and noncommercially, and
-    only if you received the object code with such an offer, in accord
-    with subsection 6b.
-
-    d) Convey the object code by offering access from a designated
-    place (gratis or for a charge), and offer equivalent access to the
-    Corresponding Source in the same way through the same place at no
-    further charge.  You need not require recipients to copy the
-    Corresponding Source along with the object code.  If the place to
-    copy the object code is a network server, the Corresponding Source
-    may be on a different server (operated by you or a third party)
-    that supports equivalent copying facilities, provided you maintain
-    clear directions next to the object code saying where to find the
-    Corresponding Source.  Regardless of what server hosts the
-    Corresponding Source, you remain obligated to ensure that it is
-    available for as long as needed to satisfy these requirements.
-
-    e) Convey the object code using peer-to-peer transmission, provided
-    you inform other peers where the object code and Corresponding
-    Source of the work are being offered to the general public at no
-    charge under subsection 6d.
-
-  A separable portion of the object code, whose source code is excluded
-from the Corresponding Source as a System Library, need not be
-included in conveying the object code work.
-
-  A "User Product" is either (1) a "consumer product", which means any
-tangible personal property which is normally used for personal, family,
-or household purposes, or (2) anything designed or sold for incorporation
-into a dwelling.  In determining whether a product is a consumer product,
-doubtful cases shall be resolved in favor of coverage.  For a particular
-product received by a particular user, "normally used" refers to a
-typical or common use of that class of product, regardless of the status
-of the particular user or of the way in which the particular user
-actually uses, or expects or is expected to use, the product.  A product
-is a consumer product regardless of whether the product has substantial
-commercial, industrial or non-consumer uses, unless such uses represent
-the only significant mode of use of the product.
-
-  "Installation Information" for a User Product means any methods,
-procedures, authorization keys, or other information required to install
-and execute modified versions of a covered work in that User Product from
-a modified version of its Corresponding Source.  The information must
-suffice to ensure that the continued functioning of the modified object
-code is in no case prevented or interfered with solely because
-modification has been made.
-
-  If you convey an object code work under this section in, or with, or
-specifically for use in, a User Product, and the conveying occurs as
-part of a transaction in which the right of possession and use of the
-User Product is transferred to the recipient in perpetuity or for a
-fixed term (regardless of how the transaction is characterized), the
-Corresponding Source conveyed under this section must be accompanied
-by the Installation Information.  But this requirement does not apply
-if neither you nor any third party retains the ability to install
-modified object code on the User Product (for example, the work has
-been installed in ROM).
-
-  The requirement to provide Installation Information does not include a
-requirement to continue to provide support service, warranty, or updates
-for a work that has been modified or installed by the recipient, or for
-the User Product in which it has been modified or installed.  Access to a
-network may be denied when the modification itself materially and
-adversely affects the operation of the network or violates the rules and
-protocols for communication across the network.
-
-  Corresponding Source conveyed, and Installation Information provided,
-in accord with this section must be in a format that is publicly
-documented (and with an implementation available to the public in
-source code form), and must require no special password or key for
-unpacking, reading or copying.
-
-  7. Additional Terms.
-
-  "Additional permissions" are terms that supplement the terms of this
-License by making exceptions from one or more of its conditions.
-Additional permissions that are applicable to the entire Program shall
-be treated as though they were included in this License, to the extent
-that they are valid under applicable law.  If additional permissions
-apply only to part of the Program, that part may be used separately
-under those permissions, but the entire Program remains governed by
-this License without regard to the additional permissions.
-
-  When you convey a copy of a covered work, you may at your option
-remove any additional permissions from that copy, or from any part of
-it.  (Additional permissions may be written to require their own
-removal in certain cases when you modify the work.)  You may place
-additional permissions on material, added by you to a covered work,
-for which you have or can give appropriate copyright permission.
-
-  Notwithstanding any other provision of this License, for material you
-add to a covered work, you may (if authorized by the copyright holders of
-that material) supplement the terms of this License with terms:
-
-    a) Disclaiming warranty or limiting liability differently from the
-    terms of sections 15 and 16 of this License; or
-
-    b) Requiring preservation of specified reasonable legal notices or
-    author attributions in that material or in the Appropriate Legal
-    Notices displayed by works containing it; or
-
-    c) Prohibiting misrepresentation of the origin of that material, or
-    requiring that modified versions of such material be marked in
-    reasonable ways as different from the original version; or
-
-    d) Limiting the use for publicity purposes of names of licensors or
-    authors of the material; or
-
-    e) Declining to grant rights under trademark law for use of some
-    trade names, trademarks, or service marks; or
-
-    f) Requiring indemnification of licensors and authors of that
-    material by anyone who conveys the material (or modified versions of
-    it) with contractual assumptions of liability to the recipient, for
-    any liability that these contractual assumptions directly impose on
-    those licensors and authors.
-
-  All other non-permissive additional terms are considered "further
-restrictions" within the meaning of section 10.  If the Program as you
-received it, or any part of it, contains a notice stating that it is
-governed by this License along with a term that is a further
-restriction, you may remove that term.  If a license document contains
-a further restriction but permits relicensing or conveying under this
-License, you may add to a covered work material governed by the terms
-of that license document, provided that the further restriction does
-not survive such relicensing or conveying.
-
-  If you add terms to a covered work in accord with this section, you
-must place, in the relevant source files, a statement of the
-additional terms that apply to those files, or a notice indicating
-where to find the applicable terms.
-
-  Additional terms, permissive or non-permissive, may be stated in the
-form of a separately written license, or stated as exceptions;
-the above requirements apply either way.
-
-  8. Termination.
-
-  You may not propagate or modify a covered work except as expressly
-provided under this License.  Any attempt otherwise to propagate or
-modify it is void, and will automatically terminate your rights under
-this License (including any patent licenses granted under the third
-paragraph of section 11).
-
-  However, if you cease all violation of this License, then your
-license from a particular copyright holder is reinstated (a)
-provisionally, unless and until the copyright holder explicitly and
-finally terminates your license, and (b) permanently, if the copyright
-holder fails to notify you of the violation by some reasonable means
-prior to 60 days after the cessation.
-
-  Moreover, your license from a particular copyright holder is
-reinstated permanently if the copyright holder notifies you of the
-violation by some reasonable means, this is the first time you have
-received notice of violation of this License (for any work) from that
-copyright holder, and you cure the violation prior to 30 days after
-your receipt of the notice.
-
-  Termination of your rights under this section does not terminate the
-licenses of parties who have received copies or rights from you under
-this License.  If your rights have been terminated and not permanently
-reinstated, you do not qualify to receive new licenses for the same
-material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-  You are not required to accept this License in order to receive or
-run a copy of the Program.  Ancillary propagation of a covered work
-occurring solely as a consequence of using peer-to-peer transmission
-to receive a copy likewise does not require acceptance.  However,
-nothing other than this License grants you permission to propagate or
-modify any covered work.  These actions infringe copyright if you do
-not accept this License.  Therefore, by modifying or propagating a
-covered work, you indicate your acceptance of this License to do so.
-
-  10. Automatic Licensing of Downstream Recipients.
-
-  Each time you convey a covered work, the recipient automatically
-receives a license from the original licensors, to run, modify and
-propagate that work, subject to this License.  You are not responsible
-for enforcing compliance by third parties with this License.
-
-  An "entity transaction" is a transaction transferring control of an
-organization, or substantially all assets of one, or subdividing an
-organization, or merging organizations.  If propagation of a covered
-work results from an entity transaction, each party to that
-transaction who receives a copy of the work also receives whatever
-licenses to the work the party's predecessor in interest had or could
-give under the previous paragraph, plus a right to possession of the
-Corresponding Source of the work from the predecessor in interest, if
-the predecessor has it or can get it with reasonable efforts.
-
-  You may not impose any further restrictions on the exercise of the
-rights granted or affirmed under this License.  For example, you may
-not impose a license fee, royalty, or other charge for exercise of
-rights granted under this License, and you may not initiate litigation
-(including a cross-claim or counterclaim in a lawsuit) alleging that
-any patent claim is infringed by making, using, selling, offering for
-sale, or importing the Program or any portion of it.
-
-  11. Patents.
-
-  A "contributor" is a copyright holder who authorizes use under this
-License of the Program or a work on which the Program is based.  The
-work thus licensed is called the contributor's "contributor version".
-
-  A contributor's "essential patent claims" are all patent claims
-owned or controlled by the contributor, whether already acquired or
-hereafter acquired, that would be infringed by some manner, permitted
-by this License, of making, using, or selling its contributor version,
-but do not include claims that would be infringed only as a
-consequence of further modification of the contributor version.  For
-purposes of this definition, "control" includes the right to grant
-patent sublicenses in a manner consistent with the requirements of
-this License.
-
-  Each contributor grants you a non-exclusive, worldwide, royalty-free
-patent license under the contributor's essential patent claims, to
-make, use, sell, offer for sale, import and otherwise run, modify and
-propagate the contents of its contributor version.
-
-  In the following three paragraphs, a "patent license" is any express
-agreement or commitment, however denominated, not to enforce a patent
-(such as an express permission to practice a patent or covenant not to
-sue for patent infringement).  To "grant" such a patent license to a
-party means to make such an agreement or commitment not to enforce a
-patent against the party.
-
-  If you convey a covered work, knowingly relying on a patent license,
-and the Corresponding Source of the work is not available for anyone
-to copy, free of charge and under the terms of this License, through a
-publicly available network server or other readily accessible means,
-then you must either (1) cause the Corresponding Source to be so
-available, or (2) arrange to deprive yourself of the benefit of the
-patent license for this particular work, or (3) arrange, in a manner
-consistent with the requirements of this License, to extend the patent
-license to downstream recipients.  "Knowingly relying" means you have
-actual knowledge that, but for the patent license, your conveying the
-covered work in a country, or your recipient's use of the covered work
-in a country, would infringe one or more identifiable patents in that
-country that you have reason to believe are valid.
-
-  If, pursuant to or in connection with a single transaction or
-arrangement, you convey, or propagate by procuring conveyance of, a
-covered work, and grant a patent license to some of the parties
-receiving the covered work authorizing them to use, propagate, modify
-or convey a specific copy of the covered work, then the patent license
-you grant is automatically extended to all recipients of the covered
-work and works based on it.
-
-  A patent license is "discriminatory" if it does not include within
-the scope of its coverage, prohibits the exercise of, or is
-conditioned on the non-exercise of one or more of the rights that are
-specifically granted under this License.  You may not convey a covered
-work if you are a party to an arrangement with a third party that is
-in the business of distributing software, under which you make payment
-to the third party based on the extent of your activity of conveying
-the work, and under which the third party grants, to any of the
-parties who would receive the covered work from you, a discriminatory
-patent license (a) in connection with copies of the covered work
-conveyed by you (or copies made from those copies), or (b) primarily
-for and in connection with specific products or compilations that
-contain the covered work, unless you entered into that arrangement,
-or that patent license was granted, prior to 28 March 2007.
-
-  Nothing in this License shall be construed as excluding or limiting
-any implied license or other defenses to infringement that may
-otherwise be available to you under applicable patent law.
-
-  12. No Surrender of Others' Freedom.
-
-  If conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License.  If you cannot convey a
-covered work so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you may
-not convey it at all.  For example, if you agree to terms that obligate you
-to collect a royalty for further conveying from those to whom you convey
-the Program, the only way you could satisfy both those terms and this
-License would be to refrain entirely from conveying the Program.
-
-  13. Use with the GNU Affero General Public License.
-
-  Notwithstanding any other provision of this License, you have
-permission to link or combine any covered work with a work licensed
-under version 3 of the GNU Affero General Public License into a single
-combined work, and to convey the resulting work.  The terms of this
-License will continue to apply to the part which is the covered work,
-but the special requirements of the GNU Affero General Public License,
-section 13, concerning interaction through a network will apply to the
-combination as such.
-
-  14. Revised Versions of this License.
-
-  The Free Software Foundation may publish revised and/or new versions of
-the GNU General Public License from time to time.  Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-  Each version is given a distinguishing version number.  If the
-Program specifies that a certain numbered version of the GNU General
-Public License "or any later version" applies to it, you have the
-option of following the terms and conditions either of that numbered
-version or of any later version published by the Free Software
-Foundation.  If the Program does not specify a version number of the
-GNU General Public License, you may choose any version ever published
-by the Free Software Foundation.
-
-  If the Program specifies that a proxy can decide which future
-versions of the GNU General Public License can be used, that proxy's
-public statement of acceptance of a version permanently authorizes you
-to choose that version for the Program.
-
-  Later license versions may give you additional or different
-permissions.  However, no additional obligations are imposed on any
-author or copyright holder as a result of your choosing to follow a
-later version.
-
-  15. Disclaimer of Warranty.
-
-  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
-HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
-OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
-IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
-ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-  16. Limitation of Liability.
-
-  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
-THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
-GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
-USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
-DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
-EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGES.
-
-  17. Interpretation of Sections 15 and 16.
-
-  If the disclaimer of warranty and limitation of liability provided
-above cannot be given local legal effect according to their terms,
-reviewing courts shall apply local law that most closely approximates
-an absolute waiver of all civil liability in connection with the
-Program, unless a warranty or assumption of liability accompanies a
-copy of the Program in return for a fee.
diff --git a/external/WinDivert-1.1.1-MSVC/VERSION b/external/WinDivert-1.1.1-MSVC/VERSION
deleted file mode 100644
index 524cb55..0000000
--- a/external/WinDivert-1.1.1-MSVC/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.1.1
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/WdfCoInstaller01009.dll b/external/WinDivert-1.1.1-MSVC/amd64/WdfCoInstaller01009.dll
deleted file mode 100644
index 6012ed3..0000000
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.dll b/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.dll
deleted file mode 100644
index bfa7a8d..0000000
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.inf b/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.inf
deleted file mode 100644
index a877c20..0000000
--- a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[windivert.NT.Wdf]
-KmdfService = windivert, windivert_WdfSection
-
-[windivert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.sys b/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.sys
deleted file mode 100644
index 07aa6d8..0000000
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/WdfCoInstaller01009.dll b/external/WinDivert-1.1.1-MSVC/x86/WdfCoInstaller01009.dll
deleted file mode 100644
index 068538a..0000000
Binary files a/external/WinDivert-1.1.1-MSVC/x86/WdfCoInstaller01009.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.dll b/external/WinDivert-1.1.1-MSVC/x86/WinDivert.dll
deleted file mode 100644
index ddc3773..0000000
Binary files a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.dll and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.inf b/external/WinDivert-1.1.1-MSVC/x86/WinDivert.inf
deleted file mode 100644
index a877c20..0000000
--- a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.inf
+++ /dev/null
@@ -1,9 +0,0 @@
-[Version]
-Signature="$WINDOWS NT$"
-
-[windivert.NT.Wdf]
-KmdfService = windivert, windivert_WdfSection
-
-[windivert_WdfSection]
-KmdfLibraryVersion = 1.9
-
diff --git a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.sys b/external/WinDivert-1.1.1-MSVC/x86/WinDivert.sys
deleted file mode 100644
index e508d78..0000000
Binary files a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.sys and /dev/null differ
diff --git a/external/WinDivert-1.1.1-MINGW/CHANGELOG b/external/WinDivert-1.1.7-MINGW/CHANGELOG
similarity index 62%
rename from external/WinDivert-1.1.1-MINGW/CHANGELOG
rename to external/WinDivert-1.1.7-MINGW/CHANGELOG
index 4800350..d54f0f0 100644
--- a/external/WinDivert-1.1.1-MINGW/CHANGELOG
+++ b/external/WinDivert-1.1.7-MINGW/CHANGELOG
@@ -18,7 +18,7 @@ WinDivert 1.0.4
 WinDivert 1.0.5
     - Fix the DIVERT_NETWORK_FORWARD_LAYER implementation.
     - Upgrade Visual Studio support to 2012.
-WinDivert 1.1.0
+WinDivert 1.1.0-rc
     - Re-brand "DIVERT" to "WINDIVERT" throughout the code-base.
     - New flag:
       * WINDIVERT_FLAG_NO_CHECKSUM: Do not guarantee that diverted packets
@@ -36,3 +36,25 @@ WinDivert 1.1.0
       load.
 WinDivert 1.1.1
     - Fixed a BSOD that sometimes occurs when the driver is unloaded.
+WinDivert 1.1.2-rc
+    - Renamed drivers to "WinDivert32.sys" and "WinDivert64.sys".  Both can
+      exist in the same directory, and WinDivert.dll automatically loads the
+      correct version.
+    - Deprecate both the WinDivert.inf and WdfCoInstaller*.dll files.
+WinDivert 1.1.3
+    - Fixed a bug that causes some outbound TCP packets to be lost.
+WinDivert 1.1.4
+    - Fixed a BSOD that occurs when NULL is passed as the address parameter to
+      WinDivertRecv(..) or WinDivertSend(..).
+WinDivert 1.1.5
+    - Insert WinDivert as the highest priority WFP sublayer.
+WinDivert 1.1.6
+    - WinDivert now searches for the driver files in the application's
+      directory (as opposed to the current directory).
+WinDivert 1.1.7
+    - Improved IPv6 support:
+     * Fixed incorrect IPV6 TCP/UDP checksum calculation in
+       WinDivertHelperCalcChecksums().
+     * WinDivert driver now calculates checksums for IPV6 packets.
+     * WinDivert can now handle IPV6 extension headers.
+     * Fixed WinDivertHelperParseIPv6Address().
diff --git a/external/WinDivert-1.0.5-MINGW/LICENSE b/external/WinDivert-1.1.7-MINGW/LICENSE
similarity index 100%
rename from external/WinDivert-1.0.5-MINGW/LICENSE
rename to external/WinDivert-1.1.7-MINGW/LICENSE
diff --git a/external/WinDivert-1.1.1-MINGW/README b/external/WinDivert-1.1.7-MINGW/README
similarity index 100%
rename from external/WinDivert-1.1.1-MINGW/README
rename to external/WinDivert-1.1.7-MINGW/README
diff --git a/external/WinDivert-1.1.7-MINGW/VERSION b/external/WinDivert-1.1.7-MINGW/VERSION
new file mode 100644
index 0000000..2bf1ca5
--- /dev/null
+++ b/external/WinDivert-1.1.7-MINGW/VERSION
@@ -0,0 +1 @@
+1.1.7
diff --git a/external/WinDivert-1.1.7-MINGW/amd64/WinDivert.dll b/external/WinDivert-1.1.7-MINGW/amd64/WinDivert.dll
new file mode 100644
index 0000000..43f4f87
Binary files /dev/null and b/external/WinDivert-1.1.7-MINGW/amd64/WinDivert.dll differ
diff --git a/external/WinDivert-1.1.7-MINGW/amd64/WinDivert64.sys b/external/WinDivert-1.1.7-MINGW/amd64/WinDivert64.sys
new file mode 100644
index 0000000..245939b
Binary files /dev/null and b/external/WinDivert-1.1.7-MINGW/amd64/WinDivert64.sys differ
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/netdump.exe b/external/WinDivert-1.1.7-MINGW/amd64/netdump.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/amd64/netdump.exe
rename to external/WinDivert-1.1.7-MINGW/amd64/netdump.exe
index ce996d1..d7c43c9 100644
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/netdump.exe and b/external/WinDivert-1.1.7-MINGW/amd64/netdump.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/netfilter.exe b/external/WinDivert-1.1.7-MINGW/amd64/netfilter.exe
similarity index 81%
rename from external/WinDivert-1.1.1-MINGW/amd64/netfilter.exe
rename to external/WinDivert-1.1.7-MINGW/amd64/netfilter.exe
index e792c9b..6936594 100644
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/netfilter.exe and b/external/WinDivert-1.1.7-MINGW/amd64/netfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/passthru.exe b/external/WinDivert-1.1.7-MINGW/amd64/passthru.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/amd64/passthru.exe
rename to external/WinDivert-1.1.7-MINGW/amd64/passthru.exe
index 4d68487..89888ac 100644
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/passthru.exe and b/external/WinDivert-1.1.7-MINGW/amd64/passthru.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/amd64/webfilter.exe b/external/WinDivert-1.1.7-MINGW/amd64/webfilter.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/amd64/webfilter.exe
rename to external/WinDivert-1.1.7-MINGW/amd64/webfilter.exe
index f6fd12c..1a10f9a 100644
Binary files a/external/WinDivert-1.1.1-MINGW/amd64/webfilter.exe and b/external/WinDivert-1.1.7-MINGW/amd64/webfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/doc/WinDivert.html b/external/WinDivert-1.1.7-MINGW/doc/WinDivert.html
similarity index 92%
rename from external/WinDivert-1.1.1-MSVC/doc/WinDivert.html
rename to external/WinDivert-1.1.7-MINGW/doc/WinDivert.html
index a03633f..a359020 100644
--- a/external/WinDivert-1.1.1-MSVC/doc/WinDivert.html
+++ b/external/WinDivert-1.1.7-MINGW/doc/WinDivert.html
@@ -104,10 +104,8 @@ <h2>Table of Contents</h2>
 <tt>install\WDDK</tt> subdirectory:
 <ul>
 <li> <tt>WinDivert.dll</tt>: User-mode library.</li>
-<li> <tt>WinDivert.sys</tt>: Kernel-mode WDF/WFP call-out driver.</li>
-<li> <tt>WinDivert.inf</tt>: INF file for <tt>WinDivert.sys</tt>.</li>
-<li> <tt>WdfCoInstaller*.dll</tt>: Microsoft WDF co-installer for
-    <tt>WinDivert.sys</tt>.</li>
+<li> <tt>WinDivert32.sys</tt> or <tt>WinDivert64.sys</tt>:
+    Kernel-mode WDF/WFP call-out driver.</li>
 <li> <tt>*.exe</tt>: Sample applications from the <tt>divert\examples</tt>
     directory.</li>
 </ul></li>
@@ -119,10 +117,9 @@ <h2>Table of Contents</h2>
 
 <a name="driver_signing"><h3>2.1 Driver Signing</h3></a>
 <p>
-Before the WinDivert package can be used, the <tt>WinDivert.sys</tt> driver
-must contain a valid digital signature.
-This is Microsoft policy for all kernel drivers in recent versions of
-Windows.
+Before the WinDivert package can be used, the
+<tt>WinDivert32.sys</tt>/<tt>WinDivert64.sys</tt> driver
+must be digitally signed.
 See <a href="http://msdn.microsoft.com/en-us/windows/hardware/gg487317.aspx">Driver Signing Requirements for Windows</a>
 for more information.
 </p>
@@ -164,30 +161,134 @@ <h2>Table of Contents</h2>
 <a name="installing"><h2>3. Installing</h2></a>
 <p>
 WinDivert does not require any special installation.
-Simply place the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files in the
-application's home directory.
+Depending on your target configuration, simply place the following files in
+your application's home directory:
+</p>
+<center>
+<table border="1" cellpadding="5" width="75%">
+<tr>
+<th>
+Application Type
+</th>
+<th>
+Target Windows Type
+</th>
+<th>
+Files Required
+</th>
+</tr>
+<tr>
+<td>
+32-bit
+</td>
+<td>
+32-bit Windows only
+</td>
+<td>
+<tt>WinDivert.dll</tt> (32-bit version) and <tt>WinDivert32.sys</tt>
+</td>
+</tr>
+<tr>
+<td>
+64-bit
+</td>
+<td>
+64-bit Windows only
+</td>
+<td>
+<tt>WinDivert.dll</tt> (64-bit version) and <tt>WinDivert64.sys</tt>
+</td>
+</tr>
+<tr>
+<td>
+32-bit
+</td>
+<td>
+Both 32-bit and 64-bit Windows
+</td>
+<td>
+<tt>WinDivert.dll</tt> (32-bit version), <tt>WinDivert32.sys</tt>,
+    and <tt>WinDivert64.sys</tt>
+</td>
+</tr>
+</table>
+</center>
+<p>
+The WinDivert driver is automatically (and silently) installed on demand
+whenever your application calls
+<a href="#divert_open"><tt>WinDivertOpen()</tt></a>.
+The calling application must have Administrator privileges.
 </p>
 <p>
-The WinDivert driver is automatically installed on demand whenever your
-application calls <a href="#divert_open"><tt>WinDivertOpen()</tt></a>.
-The driver installation is also silent.
-The calling application must be running with Administrator privileges.
+The <tt>WinDivert.dll</tt> also depends on a C run-time library.
+This is not distributed with the WinDivert binaries, and must be 
+installed/distributed separately if required.
 </p>
+<center>
+<table border="1" cellpadding="5" width="75%">
+<tr>
+<th>
+Build/Compiler
+</th>
+<th>
+C-Runtime Dependency
+</th>
+<th>
+Installed on Windows by Default?
+</th>
+</tr>
+<tr>
+<td>
+WDDK (Windows Driver Kit 7.1)
+</td>
+<td>
+<tt>MSVCRT.dll</tt>
+</td>
+<td>
+Yes
+</td>
+</tr>
+<tr>
+<td>
+MSVC (Visual Studio 2012)
+</td>
+<td>
+<tt>MSVCRT110.dll</tt>
+</td>
+<td>
+No.
+Must be installed separately or included with your application.
+</td>
+</tr>
+<tr>
+<td>
+MINGW
+</td>
+<td>
+<tt>MSVCRT.dll</tt>
+</td>
+<td>
+Yes
+</td>
+</tr>
+</table>
+</center>
 
 <hr>
 <a name="uninstalling"><h2>4. Uninstalling</h2></a>
 <p>
-To uninstall, simply delete the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files.
-The WinDivert driver is silently uninstalled when the calling application
-terminates or unloads the <tt>WinDivert.dll</tt> library.
-The WinDivert driver can also be removed manually by issuing the following
+To uninstall, simply delete the <tt>WinDivert.dll</tt>,
+<tt>WinDivert32.sys</tt>, and <tt>WinDivert64.sys</tt> files.
+If already running, the WinDivert driver will be automatically
+uninstalled during the next machine reboot.
+The WinDivert driver can also be manually removed by issuing the following
 commands at the command prompt
 <pre>
 sc stop WinDivert1.1
 sc delete WinDivert1.1
 </pre>
+Note that this is not recommended as it will interfere with other
+applications that depend on WinDivert.
 </p>
 
 <hr>
@@ -286,9 +387,9 @@ <h2>Table of Contents</h2>
 2
 </td>
 <td>
-One or more of the <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, or <tt>WdfCoInstaller*.dll</tt> files were not
-found.
+The driver files
+<tt>WinDivert32.sys</tt> or <tt>WinDivert64.sys</tt>
+were not found.
 </td>
 </tr>
 <tr>
@@ -321,7 +422,8 @@ <h2>Table of Contents</h2>
 577
 </td>
 <td>
-The <tt>WinDivert.sys</tt> driver does not have a valid digital signature
+The <tt>WinDivert32.sys</tt> or <tt>WinDivert64.sys</tt> driver does not
+have a valid digital signature
 (see the <a href="#driver_signing">driver signing requirements</a> above).
 </td>
 </tr>
@@ -335,9 +437,7 @@ <h2>Table of Contents</h2>
 <td>
 This error occurs for various reasons, including:
 <ol>
-<li> attempting to load the 32-bit <tt>WinDivert.sys</tt> driver on a 64-bit
-system (or vice versa);</li>
-<li> the <tt>WinDivert.sys</tt> driver is blocked by security software; or
+<li> the WinDivert driver is blocked by security software; or</li>
 <li> you are using a virtualization environment that does not support
 drivers.</li>
 </ol>
@@ -1068,7 +1168,9 @@ <h2>Table of Contents</h2>
 </p><p>
 <b>Remarks</b><br>
 Parses an IPv4 address stored in <tt>addrStr</tt>.
-If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
+If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>
+in host-byte-order.
+Use <tt>htonl()</tt> to convert the result into network-byte-order.
 </p>
 <dd></dl>
 
@@ -1098,6 +1200,18 @@ <h2>Table of Contents</h2>
 If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
 The <tt>pAddr</tt> parameter is assumed to point to a buffer large enough
 to hold a 16-byte IPv6 address.
+Given an IPv6 address of the form
+<tt>0011:2233:4455:6677:8899:aabb:ccdd:eeff</tt>, then
+the result is ordered as follows:
+<pre>
+pAddr[0] = 0x00112233
+pAddr[1] = 0x44556677
+pAddr[2] = 0x8899aabb
+pAddr[3] = 0xccddeeff
+</pre>
+where each <tt>pAddr[i]</tt> is in host-byte-order.
+The result can be converted into network-byte-order by setting
+<tt>pAddr[i] = htonl(pAddr[i])</tt> for each <tt>i</tt>.
 </p>
 <dd></dl>
 
@@ -1396,14 +1510,16 @@ <h2>Table of Contents</h2>
 <li><i>Injecting inbound ICMP/ICMPv6 messages</i>:
     For some ICMP/ICMPv6 messages, inbound injection does not work.
     An error will be returned and the packet will be lost.
-    It is suspected that this is an issue with the WFP framework on which
-    WinDivert is built.
     The work-around is to inject inbound ICMP messages as <tt>outbound</tt>.
     </li>
 <li><i>No IPv6 extension header support</i>:
     Currently there is no filter support for IPv6 packets with extension
     headers.
     The work around is to capture all IPv6 traffic.</li>
+<li><i>The forward layer does not interact well with the Windows NAT</i>:
+    It is not possible to block packets pre-NAT with WinDivert.
+    As a general principle, you should not try and mix WinDivert at the
+    forward layer with the Windows NAT implementation.
 </ul>
 </p>
 
diff --git a/external/WinDivert-1.1.1-MSVC/include/windivert.h b/external/WinDivert-1.1.7-MINGW/include/windivert.h
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/include/windivert.h
rename to external/WinDivert-1.1.7-MINGW/include/windivert.h
index d83516a..438b903 100644
--- a/external/WinDivert-1.1.1-MSVC/include/windivert.h
+++ b/external/WinDivert-1.1.7-MINGW/include/windivert.h
@@ -1,6 +1,6 @@
 /*
  * windivert.h
- * (C) 2013, all rights reserved,
+ * (C) 2014, all rights reserved,
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
diff --git a/external/WinDivert-1.1.7-MINGW/x86/WinDivert.dll b/external/WinDivert-1.1.7-MINGW/x86/WinDivert.dll
new file mode 100644
index 0000000..25387bd
Binary files /dev/null and b/external/WinDivert-1.1.7-MINGW/x86/WinDivert.dll differ
diff --git a/external/WinDivert-1.1.7-MINGW/x86/WinDivert32.sys b/external/WinDivert-1.1.7-MINGW/x86/WinDivert32.sys
new file mode 100644
index 0000000..a1f83fb
Binary files /dev/null and b/external/WinDivert-1.1.7-MINGW/x86/WinDivert32.sys differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/netdump.exe b/external/WinDivert-1.1.7-MINGW/x86/netdump.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/x86/netdump.exe
rename to external/WinDivert-1.1.7-MINGW/x86/netdump.exe
index b352982..b3dc5f3 100644
Binary files a/external/WinDivert-1.1.1-MINGW/x86/netdump.exe and b/external/WinDivert-1.1.7-MINGW/x86/netdump.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/netfilter.exe b/external/WinDivert-1.1.7-MINGW/x86/netfilter.exe
similarity index 76%
rename from external/WinDivert-1.1.1-MINGW/x86/netfilter.exe
rename to external/WinDivert-1.1.7-MINGW/x86/netfilter.exe
index aa015fd..cd3520d 100644
Binary files a/external/WinDivert-1.1.1-MINGW/x86/netfilter.exe and b/external/WinDivert-1.1.7-MINGW/x86/netfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/passthru.exe b/external/WinDivert-1.1.7-MINGW/x86/passthru.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/x86/passthru.exe
rename to external/WinDivert-1.1.7-MINGW/x86/passthru.exe
index 2b13026..c35edda 100644
Binary files a/external/WinDivert-1.1.1-MINGW/x86/passthru.exe and b/external/WinDivert-1.1.7-MINGW/x86/passthru.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/x86/webfilter.exe b/external/WinDivert-1.1.7-MINGW/x86/webfilter.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/x86/webfilter.exe
rename to external/WinDivert-1.1.7-MINGW/x86/webfilter.exe
index ffcd3a1..bcfd073 100644
Binary files a/external/WinDivert-1.1.1-MINGW/x86/webfilter.exe and b/external/WinDivert-1.1.7-MINGW/x86/webfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/CHANGELOG b/external/WinDivert-1.1.7-MSVC/CHANGELOG
similarity index 62%
rename from external/WinDivert-1.1.1-MSVC/CHANGELOG
rename to external/WinDivert-1.1.7-MSVC/CHANGELOG
index 4800350..d54f0f0 100644
--- a/external/WinDivert-1.1.1-MSVC/CHANGELOG
+++ b/external/WinDivert-1.1.7-MSVC/CHANGELOG
@@ -18,7 +18,7 @@ WinDivert 1.0.4
 WinDivert 1.0.5
     - Fix the DIVERT_NETWORK_FORWARD_LAYER implementation.
     - Upgrade Visual Studio support to 2012.
-WinDivert 1.1.0
+WinDivert 1.1.0-rc
     - Re-brand "DIVERT" to "WINDIVERT" throughout the code-base.
     - New flag:
       * WINDIVERT_FLAG_NO_CHECKSUM: Do not guarantee that diverted packets
@@ -36,3 +36,25 @@ WinDivert 1.1.0
       load.
 WinDivert 1.1.1
     - Fixed a BSOD that sometimes occurs when the driver is unloaded.
+WinDivert 1.1.2-rc
+    - Renamed drivers to "WinDivert32.sys" and "WinDivert64.sys".  Both can
+      exist in the same directory, and WinDivert.dll automatically loads the
+      correct version.
+    - Deprecate both the WinDivert.inf and WdfCoInstaller*.dll files.
+WinDivert 1.1.3
+    - Fixed a bug that causes some outbound TCP packets to be lost.
+WinDivert 1.1.4
+    - Fixed a BSOD that occurs when NULL is passed as the address parameter to
+      WinDivertRecv(..) or WinDivertSend(..).
+WinDivert 1.1.5
+    - Insert WinDivert as the highest priority WFP sublayer.
+WinDivert 1.1.6
+    - WinDivert now searches for the driver files in the application's
+      directory (as opposed to the current directory).
+WinDivert 1.1.7
+    - Improved IPv6 support:
+     * Fixed incorrect IPV6 TCP/UDP checksum calculation in
+       WinDivertHelperCalcChecksums().
+     * WinDivert driver now calculates checksums for IPV6 packets.
+     * WinDivert can now handle IPV6 extension headers.
+     * Fixed WinDivertHelperParseIPv6Address().
diff --git a/external/WinDivert-1.0.5-MSVC/LICENSE b/external/WinDivert-1.1.7-MSVC/LICENSE
similarity index 100%
rename from external/WinDivert-1.0.5-MSVC/LICENSE
rename to external/WinDivert-1.1.7-MSVC/LICENSE
diff --git a/external/WinDivert-1.1.1-MSVC/README b/external/WinDivert-1.1.7-MSVC/README
similarity index 100%
rename from external/WinDivert-1.1.1-MSVC/README
rename to external/WinDivert-1.1.7-MSVC/README
diff --git a/external/WinDivert-1.1.7-MSVC/VERSION b/external/WinDivert-1.1.7-MSVC/VERSION
new file mode 100644
index 0000000..2bf1ca5
--- /dev/null
+++ b/external/WinDivert-1.1.7-MSVC/VERSION
@@ -0,0 +1 @@
+1.1.7
diff --git a/external/WinDivert-1.1.7-MSVC/amd64/WinDivert.dll b/external/WinDivert-1.1.7-MSVC/amd64/WinDivert.dll
new file mode 100644
index 0000000..122abf1
Binary files /dev/null and b/external/WinDivert-1.1.7-MSVC/amd64/WinDivert.dll differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.lib b/external/WinDivert-1.1.7-MSVC/amd64/WinDivert.lib
similarity index 53%
rename from external/WinDivert-1.1.1-MSVC/amd64/WinDivert.lib
rename to external/WinDivert-1.1.7-MSVC/amd64/WinDivert.lib
index 14423fd..f384880 100644
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/WinDivert.lib and b/external/WinDivert-1.1.7-MSVC/amd64/WinDivert.lib differ
diff --git a/external/WinDivert-1.1.7-MSVC/amd64/WinDivert64.sys b/external/WinDivert-1.1.7-MSVC/amd64/WinDivert64.sys
new file mode 100644
index 0000000..245939b
Binary files /dev/null and b/external/WinDivert-1.1.7-MSVC/amd64/WinDivert64.sys differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/netdump.exe b/external/WinDivert-1.1.7-MSVC/amd64/netdump.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/amd64/netdump.exe
rename to external/WinDivert-1.1.7-MSVC/amd64/netdump.exe
index 07fb086..af98667 100644
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/netdump.exe and b/external/WinDivert-1.1.7-MSVC/amd64/netdump.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/netfilter.exe b/external/WinDivert-1.1.7-MSVC/amd64/netfilter.exe
similarity index 59%
rename from external/WinDivert-1.1.1-MSVC/amd64/netfilter.exe
rename to external/WinDivert-1.1.7-MSVC/amd64/netfilter.exe
index e0dc0ba..4de928f 100644
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/netfilter.exe and b/external/WinDivert-1.1.7-MSVC/amd64/netfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/passthru.exe b/external/WinDivert-1.1.7-MSVC/amd64/passthru.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/amd64/passthru.exe
rename to external/WinDivert-1.1.7-MSVC/amd64/passthru.exe
index 7773c5c..adb953d 100644
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/passthru.exe and b/external/WinDivert-1.1.7-MSVC/amd64/passthru.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/amd64/webfilter.exe b/external/WinDivert-1.1.7-MSVC/amd64/webfilter.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/amd64/webfilter.exe
rename to external/WinDivert-1.1.7-MSVC/amd64/webfilter.exe
index 093b8ef..f21af46 100644
Binary files a/external/WinDivert-1.1.1-MSVC/amd64/webfilter.exe and b/external/WinDivert-1.1.7-MSVC/amd64/webfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MINGW/doc/WinDivert.html b/external/WinDivert-1.1.7-MSVC/doc/WinDivert.html
similarity index 92%
rename from external/WinDivert-1.1.1-MINGW/doc/WinDivert.html
rename to external/WinDivert-1.1.7-MSVC/doc/WinDivert.html
index a03633f..a359020 100644
--- a/external/WinDivert-1.1.1-MINGW/doc/WinDivert.html
+++ b/external/WinDivert-1.1.7-MSVC/doc/WinDivert.html
@@ -104,10 +104,8 @@ <h2>Table of Contents</h2>
 <tt>install\WDDK</tt> subdirectory:
 <ul>
 <li> <tt>WinDivert.dll</tt>: User-mode library.</li>
-<li> <tt>WinDivert.sys</tt>: Kernel-mode WDF/WFP call-out driver.</li>
-<li> <tt>WinDivert.inf</tt>: INF file for <tt>WinDivert.sys</tt>.</li>
-<li> <tt>WdfCoInstaller*.dll</tt>: Microsoft WDF co-installer for
-    <tt>WinDivert.sys</tt>.</li>
+<li> <tt>WinDivert32.sys</tt> or <tt>WinDivert64.sys</tt>:
+    Kernel-mode WDF/WFP call-out driver.</li>
 <li> <tt>*.exe</tt>: Sample applications from the <tt>divert\examples</tt>
     directory.</li>
 </ul></li>
@@ -119,10 +117,9 @@ <h2>Table of Contents</h2>
 
 <a name="driver_signing"><h3>2.1 Driver Signing</h3></a>
 <p>
-Before the WinDivert package can be used, the <tt>WinDivert.sys</tt> driver
-must contain a valid digital signature.
-This is Microsoft policy for all kernel drivers in recent versions of
-Windows.
+Before the WinDivert package can be used, the
+<tt>WinDivert32.sys</tt>/<tt>WinDivert64.sys</tt> driver
+must be digitally signed.
 See <a href="http://msdn.microsoft.com/en-us/windows/hardware/gg487317.aspx">Driver Signing Requirements for Windows</a>
 for more information.
 </p>
@@ -164,30 +161,134 @@ <h2>Table of Contents</h2>
 <a name="installing"><h2>3. Installing</h2></a>
 <p>
 WinDivert does not require any special installation.
-Simply place the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files in the
-application's home directory.
+Depending on your target configuration, simply place the following files in
+your application's home directory:
+</p>
+<center>
+<table border="1" cellpadding="5" width="75%">
+<tr>
+<th>
+Application Type
+</th>
+<th>
+Target Windows Type
+</th>
+<th>
+Files Required
+</th>
+</tr>
+<tr>
+<td>
+32-bit
+</td>
+<td>
+32-bit Windows only
+</td>
+<td>
+<tt>WinDivert.dll</tt> (32-bit version) and <tt>WinDivert32.sys</tt>
+</td>
+</tr>
+<tr>
+<td>
+64-bit
+</td>
+<td>
+64-bit Windows only
+</td>
+<td>
+<tt>WinDivert.dll</tt> (64-bit version) and <tt>WinDivert64.sys</tt>
+</td>
+</tr>
+<tr>
+<td>
+32-bit
+</td>
+<td>
+Both 32-bit and 64-bit Windows
+</td>
+<td>
+<tt>WinDivert.dll</tt> (32-bit version), <tt>WinDivert32.sys</tt>,
+    and <tt>WinDivert64.sys</tt>
+</td>
+</tr>
+</table>
+</center>
+<p>
+The WinDivert driver is automatically (and silently) installed on demand
+whenever your application calls
+<a href="#divert_open"><tt>WinDivertOpen()</tt></a>.
+The calling application must have Administrator privileges.
 </p>
 <p>
-The WinDivert driver is automatically installed on demand whenever your
-application calls <a href="#divert_open"><tt>WinDivertOpen()</tt></a>.
-The driver installation is also silent.
-The calling application must be running with Administrator privileges.
+The <tt>WinDivert.dll</tt> also depends on a C run-time library.
+This is not distributed with the WinDivert binaries, and must be 
+installed/distributed separately if required.
 </p>
+<center>
+<table border="1" cellpadding="5" width="75%">
+<tr>
+<th>
+Build/Compiler
+</th>
+<th>
+C-Runtime Dependency
+</th>
+<th>
+Installed on Windows by Default?
+</th>
+</tr>
+<tr>
+<td>
+WDDK (Windows Driver Kit 7.1)
+</td>
+<td>
+<tt>MSVCRT.dll</tt>
+</td>
+<td>
+Yes
+</td>
+</tr>
+<tr>
+<td>
+MSVC (Visual Studio 2012)
+</td>
+<td>
+<tt>MSVCRT110.dll</tt>
+</td>
+<td>
+No.
+Must be installed separately or included with your application.
+</td>
+</tr>
+<tr>
+<td>
+MINGW
+</td>
+<td>
+<tt>MSVCRT.dll</tt>
+</td>
+<td>
+Yes
+</td>
+</tr>
+</table>
+</center>
 
 <hr>
 <a name="uninstalling"><h2>4. Uninstalling</h2></a>
 <p>
-To uninstall, simply delete the <tt>WinDivert.dll</tt>, <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, and <tt>WdfCoInstaller*.dll</tt> files.
-The WinDivert driver is silently uninstalled when the calling application
-terminates or unloads the <tt>WinDivert.dll</tt> library.
-The WinDivert driver can also be removed manually by issuing the following
+To uninstall, simply delete the <tt>WinDivert.dll</tt>,
+<tt>WinDivert32.sys</tt>, and <tt>WinDivert64.sys</tt> files.
+If already running, the WinDivert driver will be automatically
+uninstalled during the next machine reboot.
+The WinDivert driver can also be manually removed by issuing the following
 commands at the command prompt
 <pre>
 sc stop WinDivert1.1
 sc delete WinDivert1.1
 </pre>
+Note that this is not recommended as it will interfere with other
+applications that depend on WinDivert.
 </p>
 
 <hr>
@@ -286,9 +387,9 @@ <h2>Table of Contents</h2>
 2
 </td>
 <td>
-One or more of the <tt>WinDivert.sys</tt>,
-<tt>WinDivert.inf</tt>, or <tt>WdfCoInstaller*.dll</tt> files were not
-found.
+The driver files
+<tt>WinDivert32.sys</tt> or <tt>WinDivert64.sys</tt>
+were not found.
 </td>
 </tr>
 <tr>
@@ -321,7 +422,8 @@ <h2>Table of Contents</h2>
 577
 </td>
 <td>
-The <tt>WinDivert.sys</tt> driver does not have a valid digital signature
+The <tt>WinDivert32.sys</tt> or <tt>WinDivert64.sys</tt> driver does not
+have a valid digital signature
 (see the <a href="#driver_signing">driver signing requirements</a> above).
 </td>
 </tr>
@@ -335,9 +437,7 @@ <h2>Table of Contents</h2>
 <td>
 This error occurs for various reasons, including:
 <ol>
-<li> attempting to load the 32-bit <tt>WinDivert.sys</tt> driver on a 64-bit
-system (or vice versa);</li>
-<li> the <tt>WinDivert.sys</tt> driver is blocked by security software; or
+<li> the WinDivert driver is blocked by security software; or</li>
 <li> you are using a virtualization environment that does not support
 drivers.</li>
 </ol>
@@ -1068,7 +1168,9 @@ <h2>Table of Contents</h2>
 </p><p>
 <b>Remarks</b><br>
 Parses an IPv4 address stored in <tt>addrStr</tt>.
-If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
+If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>
+in host-byte-order.
+Use <tt>htonl()</tt> to convert the result into network-byte-order.
 </p>
 <dd></dl>
 
@@ -1098,6 +1200,18 @@ <h2>Table of Contents</h2>
 If non-<tt>NULL</tt>, the result is stored in <tt>pAddr</tt>.
 The <tt>pAddr</tt> parameter is assumed to point to a buffer large enough
 to hold a 16-byte IPv6 address.
+Given an IPv6 address of the form
+<tt>0011:2233:4455:6677:8899:aabb:ccdd:eeff</tt>, then
+the result is ordered as follows:
+<pre>
+pAddr[0] = 0x00112233
+pAddr[1] = 0x44556677
+pAddr[2] = 0x8899aabb
+pAddr[3] = 0xccddeeff
+</pre>
+where each <tt>pAddr[i]</tt> is in host-byte-order.
+The result can be converted into network-byte-order by setting
+<tt>pAddr[i] = htonl(pAddr[i])</tt> for each <tt>i</tt>.
 </p>
 <dd></dl>
 
@@ -1396,14 +1510,16 @@ <h2>Table of Contents</h2>
 <li><i>Injecting inbound ICMP/ICMPv6 messages</i>:
     For some ICMP/ICMPv6 messages, inbound injection does not work.
     An error will be returned and the packet will be lost.
-    It is suspected that this is an issue with the WFP framework on which
-    WinDivert is built.
     The work-around is to inject inbound ICMP messages as <tt>outbound</tt>.
     </li>
 <li><i>No IPv6 extension header support</i>:
     Currently there is no filter support for IPv6 packets with extension
     headers.
     The work around is to capture all IPv6 traffic.</li>
+<li><i>The forward layer does not interact well with the Windows NAT</i>:
+    It is not possible to block packets pre-NAT with WinDivert.
+    As a general principle, you should not try and mix WinDivert at the
+    forward layer with the Windows NAT implementation.
 </ul>
 </p>
 
diff --git a/external/WinDivert-1.1.1-MINGW/include/windivert.h b/external/WinDivert-1.1.7-MSVC/include/windivert.h
similarity index 99%
rename from external/WinDivert-1.1.1-MINGW/include/windivert.h
rename to external/WinDivert-1.1.7-MSVC/include/windivert.h
index d83516a..438b903 100644
--- a/external/WinDivert-1.1.1-MINGW/include/windivert.h
+++ b/external/WinDivert-1.1.7-MSVC/include/windivert.h
@@ -1,6 +1,6 @@
 /*
  * windivert.h
- * (C) 2013, all rights reserved,
+ * (C) 2014, all rights reserved,
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU Lesser General Public License as published by
diff --git a/external/WinDivert-1.1.7-MSVC/x86/WinDivert.dll b/external/WinDivert-1.1.7-MSVC/x86/WinDivert.dll
new file mode 100644
index 0000000..bf78af3
Binary files /dev/null and b/external/WinDivert-1.1.7-MSVC/x86/WinDivert.dll differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.lib b/external/WinDivert-1.1.7-MSVC/x86/WinDivert.lib
similarity index 53%
rename from external/WinDivert-1.1.1-MSVC/x86/WinDivert.lib
rename to external/WinDivert-1.1.7-MSVC/x86/WinDivert.lib
index 61a5c64..c2f7e2d 100644
Binary files a/external/WinDivert-1.1.1-MSVC/x86/WinDivert.lib and b/external/WinDivert-1.1.7-MSVC/x86/WinDivert.lib differ
diff --git a/external/WinDivert-1.1.7-MSVC/x86/WinDivert32.sys b/external/WinDivert-1.1.7-MSVC/x86/WinDivert32.sys
new file mode 100644
index 0000000..a1f83fb
Binary files /dev/null and b/external/WinDivert-1.1.7-MSVC/x86/WinDivert32.sys differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/netdump.exe b/external/WinDivert-1.1.7-MSVC/x86/netdump.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/x86/netdump.exe
rename to external/WinDivert-1.1.7-MSVC/x86/netdump.exe
index 811bfbf..2d2b0fa 100644
Binary files a/external/WinDivert-1.1.1-MSVC/x86/netdump.exe and b/external/WinDivert-1.1.7-MSVC/x86/netdump.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/netfilter.exe b/external/WinDivert-1.1.7-MSVC/x86/netfilter.exe
similarity index 61%
rename from external/WinDivert-1.1.1-MSVC/x86/netfilter.exe
rename to external/WinDivert-1.1.7-MSVC/x86/netfilter.exe
index e09b6f2..cb00a05 100644
Binary files a/external/WinDivert-1.1.1-MSVC/x86/netfilter.exe and b/external/WinDivert-1.1.7-MSVC/x86/netfilter.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/passthru.exe b/external/WinDivert-1.1.7-MSVC/x86/passthru.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/x86/passthru.exe
rename to external/WinDivert-1.1.7-MSVC/x86/passthru.exe
index d7a785a..561bd10 100644
Binary files a/external/WinDivert-1.1.1-MSVC/x86/passthru.exe and b/external/WinDivert-1.1.7-MSVC/x86/passthru.exe differ
diff --git a/external/WinDivert-1.1.1-MSVC/x86/webfilter.exe b/external/WinDivert-1.1.7-MSVC/x86/webfilter.exe
similarity index 99%
rename from external/WinDivert-1.1.1-MSVC/x86/webfilter.exe
rename to external/WinDivert-1.1.7-MSVC/x86/webfilter.exe
index c0c311c..0643639 100644
Binary files a/external/WinDivert-1.1.1-MSVC/x86/webfilter.exe and b/external/WinDivert-1.1.7-MSVC/x86/webfilter.exe differ
diff --git a/premake4.lua b/premake4.lua
index d3b2eed..497682c 100644
--- a/premake4.lua
+++ b/premake4.lua
@@ -17,7 +17,7 @@ solution('clumsy')
         language("C")
         files({'src/**.c', 'src/**.h'})
         links({'WinDivert', 'iup', 'comctl32', 'Winmm', 'ws2_32'}) 
-        if _ACTION == 'vs2010' then -- only vs can include rc file in solution
+        if string.match(_ACTION, '^vs') then -- only vs can include rc file in solution
             files({'./etc/clumsy.rc'})
         elseif _ACTION == 'gmake' then
             files({'./etc/clumsy.rc'})
@@ -45,7 +45,7 @@ solution('clumsy')
             defines({"_CRT_SECURE_NO_WARNINGS"})
             flags({'NoManifest'})
             buildoptions({'/wd"4214"'})
-            includedirs({'external/WinDivert-1.1.1-MSVC/include'})
+            includedirs({'external/WinDivert-1.1.7-MSVC/include'})
             objdir('obj_gmake')
 
         configuration({'x32', 'vs*'})
@@ -54,7 +54,7 @@ solution('clumsy')
             defines({'X32'})
             includedirs({'external/iup-3.8_Win32_dll11_lib/include'})
             libdirs({
-                'external/WinDivert-1.1.1-MSVC/x86',
+                'external/WinDivert-1.1.7-MSVC/x86',
                 'external/iup-3.8_Win32_dll11_lib'
                 })
 
@@ -62,26 +62,26 @@ solution('clumsy')
             defines({'X64'})
             includedirs({'external/iup-3.8_Win64_dll11_lib/include'})
             libdirs({
-                'external/WinDivert-1.1.1-MSVC/amd64',
+                'external/WinDivert-1.1.7-MSVC/amd64',
                 'external/iup-3.8_Win64_dll11_lib'
                 })
 
         configuration({'x32', 'gmake'})
             defines({'X32'}) -- defines would be passed to resource compiler for whatever reason
-            includedirs({'external/WinDivert-1.1.1-MINGW/include',
+            includedirs({'external/WinDivert-1.1.7-MINGW/include',
                 'external/iup-3.8_Win64_mingw4_lib/include'})
             libdirs({
-                'external/WinDivert-1.1.1-MINGW/x86',
+                'external/WinDivert-1.1.7-MINGW/x86',
                 'external/iup-3.8_Win32_mingw4_lib'
                 })
             resoptions({'-O coff', '-F pe-i386'}) -- mingw64 defaults to x64
 
         configuration({'x64', 'gmake'})
             defines({'X64'})
-            includedirs({'external/WinDivert-1.1.1-MINGW/include',
+            includedirs({'external/WinDivert-1.1.7-MINGW/include',
                 'external/iup-3.8_Win64_mingw4_lib/include'})
             libdirs({
-                'external/WinDivert-1.1.1-MINGW/amd64',
+                'external/WinDivert-1.1.7-MINGW/amd64',
                 'external/iup-3.8_Win64_mingw4_lib'
                 })
 
@@ -96,18 +96,18 @@ solution('clumsy')
             local divert_lib, iup_lib
             if platform == 'vs*' then 
                 if arch == 'x64' then
-                    divert_lib = '../external/WinDivert-1.1.1-MSVC/amd64/'
+                    divert_lib = '../external/WinDivert-1.1.7-MSVC/amd64/'
                     iup_lib = '../external/iup-3.8_Win64_dll11_lib'
                 else
-                    divert_lib = '../external/WinDivert-1.1.1-MSVC/x86/'
+                    divert_lib = '../external/WinDivert-1.1.7-MSVC/x86/'
                     iup_lib = '../external/iup-3.8_Win32_dll11_lib'
                 end
             elseif platform == 'gmake' then
                 if arch == 'x64' then
-                    divert_lib = '../external/WinDivert-1.1.1-MINGW/amd64/'
+                    divert_lib = '../external/WinDivert-1.1.7-MINGW/amd64/'
                     iup_lib = '../external/iup-3.8_Win64_mingw4_lib'
                 else
-                    divert_lib = '../external/WinDivert-1.1.1-MINGW/x86/'
+                    divert_lib = '../external/WinDivert-1.1.7-MINGW/x86/'
                     iup_lib = '../external/iup-3.8_Win32_mingw4_lib'
                 end
             end
@@ -116,7 +116,7 @@ solution('clumsy')
                 debugdir(subdir)
                 if platform == 'vs*' then
                     postbuildcommands({
-                        "robocopy " .. divert_lib .." ../"   .. subdir .. '  *.dll *.sys *.inf > robolog.txt',
+                        "robocopy " .. divert_lib .." ../"   .. subdir .. '  *.dll *.sys > robolog.txt',
                         "robocopy " .. iup_lib .. " ../"   .. subdir .. ' iup.dll >> robolog.txt',
                         "robocopy ../etc/ ../"   .. subdir .. ' config.txt >> robolog.txt',
                         "exit /B 0"
@@ -124,8 +124,7 @@ solution('clumsy')
                 elseif platform == 'gmake' then 
                     postbuildcommands({
                         -- robocopy returns non 0 will fail make
-                        'cp ' .. divert_lib .. "WinDivert.* ../" .. subdir,
-                        'cp ' .. divert_lib .. "WdfCoInstaller01009.dll ../" .. subdir,
+                        'cp ' .. divert_lib .. "WinDivert* ../" .. subdir,
                         "cp ../etc/config.txt ../" .. subdir,
                     })
                 end
diff --git a/src/drop.c b/src/drop.c
index ecf5c26..3548a4f 100644
--- a/src/drop.c
+++ b/src/drop.c
@@ -80,5 +80,7 @@ Module dropModule = {
     dropSetupUI,
     dropStartUp,
     dropCloseDown,
-    dropProcess
+    dropProcess,
+    // runtime fields
+    0, 0, NULL
 };
diff --git a/src/duplicate.c b/src/duplicate.c
index a2da38c..4f66e92 100644
--- a/src/duplicate.c
+++ b/src/duplicate.c
@@ -91,5 +91,7 @@ Module dupModule = {
     dupSetupUI,
     dupStartup,
     dupCloseDown,
-    dupProcess
+    dupProcess,
+    // runtime fields
+    0, 0, NULL
 };
\ No newline at end of file
diff --git a/src/lag.c b/src/lag.c
index 0d930ed..0746c61 100644
--- a/src/lag.c
+++ b/src/lag.c
@@ -129,5 +129,7 @@ Module lagModule = {
     lagSetupUI,
     lagStartUp,
     lagCloseDown,
-    lagProcess
+    lagProcess,
+    // runtime fields
+    0, 0, NULL
 };
\ No newline at end of file
diff --git a/src/ood.c b/src/ood.c
index f661ad4..836a898 100644
--- a/src/ood.c
+++ b/src/ood.c
@@ -146,5 +146,7 @@ Module oodModule = {
     oodSetupUI,
     oodStartUp,
     oodCloseDown,
-    oodProcess
+    oodProcess,
+    // runtime fields
+    0, 0, NULL
 };
\ No newline at end of file
diff --git a/src/tamper.c b/src/tamper.c
index 1b5173a..a8d73fe 100644
--- a/src/tamper.c
+++ b/src/tamper.c
@@ -127,5 +127,7 @@ Module tamperModule = {
     tamperSetupUI,
     tamperStartup,
     tamperCloseDown,
-    tamperProcess
+    tamperProcess,
+    // runtime fields
+    0, 0, NULL
 };
diff --git a/src/throttle.c b/src/throttle.c
index 9c3c9ef..0734bbf 100644
--- a/src/throttle.c
+++ b/src/throttle.c
@@ -142,5 +142,7 @@ Module throttleModule = {
     throttleSetupUI,
     throttleStartUp,
     throttleCloseDown,
-    throttleProcess
+    throttleProcess,
+    // runtime fields
+    0, 0, NULL
 };
\ No newline at end of file