diff --git a/doc/guides/prog_guide/img/predictable_snat_1.svg b/doc/guides/prog_guide/img/predictable_snat_1.svg
new file mode 100644
index 0000000..5f97ccb
--- /dev/null
+++ b/doc/guides/prog_guide/img/predictable_snat_1.svg
@@ -0,0 +1,1444 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export predictable_snat_1.svg Page-4 -->
+
+<svg
+   xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="7.8211055in"
+   height="1.8973334in"
+   viewBox="0 0 563.12017 136.6082"
+   xml:space="preserve"
+   class="st14"
+   version="1.1"
+   id="svg1495"
+   sodipodi:docname="predictable_snat_1.svg"
+   style="font-size:12px;overflow:visible;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata
+   id="metadata1499"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1640"
+   inkscape:window-height="878"
+   id="namedview1497"
+   showgrid="false"
+   inkscape:zoom="0.75544421"
+   inkscape:cx="638.25085"
+   inkscape:cy="70.081592"
+   inkscape:window-x="52"
+   inkscape:window-y="52"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="svg1495" />
+	<v:documentProperties
+   v:langID="6153"
+   v:metric="true"
+   v:viewMarkup="false">
+		<v:userDefs>
+			<v:ud
+   v:nameU="msvNoAutoConnect"
+   v:val="VT0(1):26" />
+		</v:userDefs>
+	</v:documentProperties>
+
+	<style
+   type="text/css"
+   id="style1158">
+	<![CDATA[
+		.st1 {fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0;stroke-width:0.72}
+		.st2 {fill:url(#grad0-7);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st3 {fill:#ff0000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st4 {fill:url(#grad0-19);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st5 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st6 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24;visibility:hidden}
+		.st7 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st8 {fill:#000000;font-family:Calibri;font-size:0.666664em}
+		.st9 {marker-end:url(#mrkr4-70);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976}
+		.st10 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.086948582161584}
+		.st11 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st12 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+		.st13 {font-size:1em}
+		.st14 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs
+   id="Patterns_And_Gradients">
+		<linearGradient
+   id="grad0-7"
+   x1="-0.2804561"
+   y1="1048.661"
+   x2="32.190596"
+   y2="1048.661"
+   gradientTransform="scale(1.2836234,0.7790447)"
+   gradientUnits="userSpaceOnUse">
+			<stop
+   offset="0"
+   stop-color="#ffffff"
+   stop-opacity="1"
+   id="stop1160" />
+			<stop
+   offset="1"
+   stop-color="#dfdfdf"
+   stop-opacity="1"
+   id="stop1162" />
+		</linearGradient>
+		<linearGradient
+   id="grad0-19"
+   x1="-0.30286968"
+   y1="967.01808"
+   x2="34.733349"
+   y2="967.01808"
+   gradientTransform="scale(1.1896436,0.84058789)"
+   gradientUnits="userSpaceOnUse">
+			<stop
+   offset="0.01"
+   stop-color="#c0c0c0"
+   stop-opacity="1"
+   id="stop1165" />
+			<stop
+   offset="0.5"
+   stop-color="#ffffff"
+   stop-opacity="1"
+   id="stop1167" />
+			<stop
+   offset="1"
+   stop-color="#c0c0c0"
+   stop-opacity="1"
+   id="stop1169" />
+		</linearGradient>
+	</defs>
+	<defs
+   id="Markers">
+		<g
+   id="lend4">
+			<path
+   d="M 2,1 0,0 2,-1 v 2"
+   style="stroke:none"
+   id="path1173"
+   inkscape:connector-curvature="0" />
+		</g>
+		<marker
+   id="mrkr4-70"
+   class="st10"
+   v:arrowType="4"
+   v:arrowSize="2"
+   v:setback="23.0021"
+   refX="-23.0021"
+   orient="auto"
+   markerUnits="strokeWidth"
+   overflow="visible"
+   style="overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08694858;stroke-opacity:1">
+			<use
+   xlink:href="#lend4"
+   transform="scale(-11.50105)"
+   id="use1176"
+   x="0"
+   y="0"
+   width="100%"
+   height="100%" />
+		</marker>
+	</defs>
+	<g
+   v:mID="8"
+   v:index="4"
+   v:groupContext="foregroundPage"
+   id="g1493"
+   transform="translate(-98.5864,-336.89801)">
+		<title
+   id="title1180">Page-4</title>
+		<v:pageProperties
+   v:drawingScale="0.0393701"
+   v:pageScale="0.0393701"
+   v:drawingUnits="24"
+   v:shadowOffsetX="8.50394"
+   v:shadowOffsetY="-8.50394" />
+		<v:layer
+   v:name="Connector"
+   v:index="0" />
+		<g
+   id="group1001-1"
+   transform="translate(275.811,-396.85)"
+   v:mID="1001"
+   v:groupContext="group">
+			<v:custProps>
+				<v:cp
+   v:nameU="ShapeClass"
+   v:lbl="ShapeClass"
+   v:type="0"
+   v:invis="true"
+   v:ask="false"
+   v:langID="1033"
+   v:val="VT4(Equipment)" />
+				<v:cp
+   v:nameU="ShapeType"
+   v:lbl="ShapeType"
+   v:type="0"
+   v:invis="true"
+   v:ask="false"
+   v:langID="1033"
+   v:val="VT4(Device)" />
+				<v:cp
+   v:nameU="SubShapeType"
+   v:lbl="SubShapeType"
+   v:type="0"
+   v:invis="true"
+   v:ask="false"
+   v:langID="1033"
+   v:val="VT4(Switch)" />
+				<v:cp
+   v:nameU="Manufacturer"
+   v:lbl="Manufacturer"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="ProductNumber"
+   v:lbl="Product Number"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="PartNumber"
+   v:lbl="Part Number"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="ProductDescription"
+   v:lbl="Product Description"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="AssetNumber"
+   v:lbl="Asset Number"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="SerialNumber"
+   v:lbl="Serial Number"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="Location"
+   v:lbl="Location"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="Building"
+   v:lbl="Building"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="Room"
+   v:lbl="Room"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="NetworkName"
+   v:lbl="Network Name"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="IPAddress"
+   v:lbl="IP Address"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="SubnetMask"
+   v:lbl="Subnet Mask"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="AdminInterface"
+   v:lbl="Administrative Interface"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="NumberOfPorts"
+   v:lbl="Number of Ports"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="MACAddress"
+   v:lbl="MAC Address"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="CommunityString"
+   v:lbl="Community String"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="NetworkDescription"
+   v:lbl="Network Description"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+			</v:custProps>
+			<v:userDefs>
+				<v:ud
+   v:nameU="HasText"
+   v:val="VT0(0):5" />
+				<v:ud
+   v:nameU="ShapeClass"
+   v:val="VT0(5):26" />
+				<v:ud
+   v:nameU="ShapeType"
+   v:val="VT0(8):26" />
+				<v:ud
+   v:nameU="SubShapeType"
+   v:val="VT0(66):26" />
+				<v:ud
+   v:nameU="visLegendShape"
+   v:val="VT0(2):26" />
+				<v:ud
+   v:nameU="SolSH"
+   v:val="VT15({BF0433D9-CD73-4EB5-8390-8653BE590246}):41" />
+				<v:ud
+   v:nameU="visVersion"
+   v:prompt=""
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title1182">Router.1001</title>
+			<g
+   id="shape1002-2"
+   v:mID="1002"
+   v:groupContext="shape">
+				<title
+   id="title1184">Sheet.1002</title>
+				<path
+   d="m 40.96,813.22 a 20.4803,12.2882 -180 1 0 -40.96,0 v 16.38 a 20.4803,12.2882 -180 1 0 40.96,0 z"
+   class="st1"
+   id="path1186"
+   inkscape:connector-curvature="0"
+   style="fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0" />
+			</g>
+			<g
+   id="shape1003-4"
+   v:mID="1003"
+   v:groupContext="shape"
+   transform="translate(0,-16.3843)">
+				<title
+   id="title1189">Sheet.1003</title>
+				<ellipse
+   cx="20.480301"
+   cy="829.60199"
+   rx="20.480301"
+   ry="12.2882"
+   class="st2"
+   id="ellipse1191"
+   style="fill:url(#grad0-7);stroke:#ffffff;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1004-8"
+   v:mID="1004"
+   v:groupContext="shape"
+   transform="matrix(-1,0,0,1,34.4921,-28.6724)">
+				<title
+   id="title1194">Sheet.1004</title>
+				<path
+   d="m 0,839.53 v -5.73 h 9.93 l -4.08,2.36 8.16,4.71 -1.77,1.02 -8.16,-4.71 z"
+   class="st3"
+   id="path1196"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1005-10"
+   v:mID="1005"
+   v:groupContext="shape"
+   transform="translate(5.58168,-28.6724)">
+				<title
+   id="title1199">Sheet.1005</title>
+				<path
+   d="m 14.9,836.16 -0.89,5.22 -9.04,0.51 4.08,-2.36 -9.05,-5.22 1.77,-1.02 9.05,5.22 z"
+   class="st3"
+   id="path1201"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1006-12"
+   v:mID="1006"
+   v:groupContext="shape"
+   transform="translate(20.4803,-20.0707)">
+				<title
+   id="title1204">Sheet.1006</title>
+				<path
+   d="m 0,839.02 0.89,-5.22 9.04,-0.51 -4.08,2.35 9.05,5.23 -1.78,1.02 -9.04,-5.22 z"
+   class="st3"
+   id="path1206"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1007-14"
+   v:mID="1007"
+   v:groupContext="shape"
+   transform="matrix(1,0,0,-1,6.4685,1655.11)">
+				<title
+   id="title1209">Sheet.1007</title>
+				<path
+   d="m 0,839.53 v -5.73 h 9.93 l -4.08,2.36 8.16,4.71 -1.77,1.02 -8.16,-4.71 z"
+   class="st3"
+   id="path1211"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1008-16"
+   v:mID="1008"
+   v:groupContext="shape">
+				<title
+   id="title1214">Sheet.1008</title>
+				<path
+   d="m 0,813.22 v 16.38 a 20.4803,12.2882 -180 1 0 40.96,0 v -16.38 a 20.4803,12.2882 0 1 1 -40.96,0 z"
+   class="st4"
+   id="path1216"
+   inkscape:connector-curvature="0"
+   style="fill:url(#grad0-19);stroke:#000000;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1009-20"
+   v:mID="1009"
+   v:groupContext="shape">
+				<title
+   id="title1219">Sheet.1009</title>
+				<path
+   d="m 40.96,813.22 a 20.4803,12.2882 -180 1 0 -40.96,0 v 16.38 a 20.4803,12.2882 -180 1 0 40.96,0 v -16.38"
+   class="st5"
+   id="path1221"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+		</g>
+		<g
+   id="group1011-23"
+   transform="translate(101.657,-458.787)"
+   v:mID="1011"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title1225">Array.1011</title>
+			<g
+   id="shape1012-24"
+   v:mID="1012"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title1227">Sheet.1012</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1229"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1013-26"
+   v:mID="1013"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title1232">Sheet.1013</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1234"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1014-28"
+   v:mID="1014"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title1237">Sheet.1014</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1239"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1015-30"
+   v:mID="1015"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title1242">Sheet.1015</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1244"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1016-32"
+   v:mID="1016"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title1247">Sheet.1016</title>
+				<desc
+   id="desc1249">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1251"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1253"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1017-35"
+   v:mID="1017"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title1256">Sheet.1017</title>
+				<desc
+   id="desc1258">10000</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1260"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1262"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10000</text>
+			</g>
+			<g
+   id="shape1018-38"
+   v:mID="1018"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title1265">Sheet.1018</title>
+				<desc
+   id="desc1267">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1269"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1271"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+			<g
+   id="shape1019-41"
+   v:mID="1019"
+   v:groupContext="shape">
+				<title
+   id="title1274">Sheet.1019</title>
+				<desc
+   id="desc1276">10.10.10.10</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1278"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1280"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10.10.10.10</text>
+			</g>
+		</g>
+		<g
+   id="group1020-44"
+   transform="translate(321.429,-458.787)"
+   v:mID="1020"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title1284">Array.1020</title>
+			<g
+   id="shape1021-45"
+   v:mID="1021"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title1286">Sheet.1021</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1288"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1022-47"
+   v:mID="1022"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title1291">Sheet.1022</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1293"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1023-49"
+   v:mID="1023"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title1296">Sheet.1023</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1298"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1024-51"
+   v:mID="1024"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title1301">Sheet.1024</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1303"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1025-53"
+   v:mID="1025"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title1306">Sheet.1025</title>
+				<desc
+   id="desc1308">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1310"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1312"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1026-56"
+   v:mID="1026"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title1315">Sheet.1026</title>
+				<desc
+   id="desc1317">12345</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1319"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1321"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />12345</text>
+			</g>
+			<g
+   id="shape1027-59"
+   v:mID="1027"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title1324">Sheet.1027</title>
+				<desc
+   id="desc1326">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1328"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1330"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+			<g
+   id="shape1028-62"
+   v:mID="1028"
+   v:groupContext="shape">
+				<title
+   id="title1333">Sheet.1028</title>
+				<desc
+   id="desc1335">172.16.0.20</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1337"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1339"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />172.16.0.20</text>
+			</g>
+		</g>
+		<g
+   id="shape1029-65"
+   v:mID="1029"
+   v:groupContext="shape"
+   v:layerMember="0"
+   transform="translate(271.736,-458.787)">
+			<title
+   id="title1343">Dynamic connector.1029</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<path
+   d="M 0,834.8 H 44.17"
+   class="st9"
+   id="path1345"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:0.239976;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-70)" />
+		</g>
+		<g
+   id="group1030-71"
+   transform="translate(321.403,-368.504)"
+   v:mID="1030"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title1348">Array.1030</title>
+			<g
+   id="shape1031-72"
+   v:mID="1031"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title1350">Sheet.1031</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1352"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1032-74"
+   v:mID="1032"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title1355">Sheet.1032</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1357"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1033-76"
+   v:mID="1033"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title1360">Sheet.1033</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1362"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1034-78"
+   v:mID="1034"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title1365">Sheet.1034</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1367"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1035-80"
+   v:mID="1035"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title1370">Sheet.1035</title>
+				<desc
+   id="desc1372">12345</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1374"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1376"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />12345</text>
+			</g>
+			<g
+   id="shape1036-83"
+   v:mID="1036"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title1379">Sheet.1036</title>
+				<desc
+   id="desc1381">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1383"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1385"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1037-86"
+   v:mID="1037"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title1388">Sheet.1037</title>
+				<desc
+   id="desc1390">172.16.0.20</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1392"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1394"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />172.16.0.20</text>
+			</g>
+			<g
+   id="shape1038-89"
+   v:mID="1038"
+   v:groupContext="shape">
+				<title
+   id="title1397">Sheet.1038</title>
+				<desc
+   id="desc1399">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1401"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1403"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+		</g>
+		<g
+   id="group1039-92"
+   transform="translate(98.7064,-368.504)"
+   v:mID="1039"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title1407">Array.1039</title>
+			<g
+   id="shape1040-93"
+   v:mID="1040"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title1409">Sheet.1040</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1411"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1041-95"
+   v:mID="1041"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title1414">Sheet.1041</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1416"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1042-97"
+   v:mID="1042"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title1419">Sheet.1042</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1421"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1043-99"
+   v:mID="1043"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title1424">Sheet.1043</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect1426"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1044-101"
+   v:mID="1044"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title1429">Sheet.1044</title>
+				<desc
+   id="desc1431">10000</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1433"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1435"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10000</text>
+			</g>
+			<g
+   id="shape1045-104"
+   v:mID="1045"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title1438">Sheet.1045</title>
+				<desc
+   id="desc1440">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1442"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1444"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1046-107"
+   v:mID="1046"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title1447">Sheet.1046</title>
+				<desc
+   id="desc1449">10.10.10.10</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1451"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1453"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10.10.10.10</text>
+			</g>
+			<g
+   id="shape1047-110"
+   v:mID="1047"
+   v:groupContext="shape">
+				<title
+   id="title1456">Sheet.1047</title>
+				<desc
+   id="desc1458">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect1460"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text1462"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+		</g>
+		<g
+   id="shape1048-113"
+   v:mID="1048"
+   v:groupContext="shape"
+   v:layerMember="0"
+   transform="translate(321.403,-368.504)">
+			<title
+   id="title1466">Dynamic connector.1048</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<path
+   d="M 0,834.8 H -47.1"
+   class="st9"
+   id="path1468"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:0.239976;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-70)" />
+		</g>
+		<g
+   id="shape1049-118"
+   v:mID="1049"
+   v:groupContext="shape"
+   transform="translate(101.657,-480.047)">
+			<title
+   id="title1471">Sheet.1049</title>
+			<desc
+   id="desc1473">RSS hash value 0xdeadbeef Packet assigned to queue 15</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="89.1142"
+   cy="829.417"
+   width="178.23"
+   height="24.9449" />
+			<rect
+   x="0"
+   y="816.94501"
+   width="178.228"
+   height="24.944901"
+   class="st11"
+   id="rect1475"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="22.889999"
+   y="825.82001"
+   class="st12"
+   v:langID="6153"
+   id="text1479"
+   style="font-size:12.00012016px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />RSS hash value 0xdeadbeef<v:newlineChar /><tspan
+   x="19.709999"
+   dy="1.2em"
+   class="st13"
+   id="tspan1477"
+   style="font-size:12.00012016px">Packet assigned to queue 15</tspan></text>
+		</g>
+		<g
+   id="shape1051-122"
+   v:mID="1051"
+   v:groupContext="shape"
+   transform="translate(318.331,-386.079)">
+			<title
+   id="title1482">Sheet.1051</title>
+			<desc
+   id="desc1484">RSS hash value 0xbadcab1e Packet assigned to queue 14</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="89.1142"
+   cy="829.417"
+   width="178.23"
+   height="24.9449" />
+			<rect
+   x="0"
+   y="816.94501"
+   width="178.228"
+   height="24.944901"
+   class="st11"
+   id="rect1486"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="22.24"
+   y="825.82001"
+   class="st12"
+   v:langID="6153"
+   id="text1490"
+   style="font-size:12.00012016px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />RSS hash value 0xbadcab1e<v:newlineChar /><tspan
+   x="19.709999"
+   dy="1.2em"
+   class="st13"
+   id="tspan1488"
+   style="font-size:12.00012016px">Packet assigned to queue 14</tspan></text>
+		</g>
+	</g>
+</svg>
\ No newline at end of file
diff --git a/doc/guides/prog_guide/img/predictable_snat_2.svg b/doc/guides/prog_guide/img/predictable_snat_2.svg
new file mode 100644
index 0000000..8525459
--- /dev/null
+++ b/doc/guides/prog_guide/img/predictable_snat_2.svg
@@ -0,0 +1,1444 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export predictable_snat_2.svg Page-5 -->
+
+<svg
+   xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="7.8211055in"
+   height="1.8973334in"
+   viewBox="0 0 563.12017 136.6082"
+   xml:space="preserve"
+   class="st14"
+   version="1.1"
+   id="svg7179"
+   sodipodi:docname="predictable_snat_2.svg"
+   style="font-size:12px;overflow:visible;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata
+   id="metadata7183"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1296"
+   inkscape:window-height="757"
+   id="namedview7181"
+   showgrid="false"
+   inkscape:zoom="0.3689753"
+   inkscape:cx="598.10007"
+   inkscape:cy="151.8361"
+   inkscape:window-x="356"
+   inkscape:window-y="113"
+   inkscape:window-maximized="0"
+   inkscape:current-layer="svg7179" />
+	<v:documentProperties
+   v:langID="6153"
+   v:metric="true"
+   v:viewMarkup="false">
+		<v:userDefs>
+			<v:ud
+   v:nameU="msvNoAutoConnect"
+   v:val="VT0(1):26" />
+		</v:userDefs>
+	</v:documentProperties>
+
+	<style
+   type="text/css"
+   id="style6842">
+	<![CDATA[
+		.st1 {fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0;stroke-width:0.72}
+		.st2 {fill:url(#grad0-7);stroke:#ffffff;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st3 {fill:#ff0000;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st4 {fill:url(#grad0-19);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.72}
+		.st5 {stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.5}
+		.st6 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24;visibility:hidden}
+		.st7 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st8 {fill:#000000;font-family:Calibri;font-size:0.666664em}
+		.st9 {marker-end:url(#mrkr4-70);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976}
+		.st10 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.086948582161584}
+		.st11 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st12 {fill:#000000;font-family:Calibri;font-size:1.00001em}
+		.st13 {font-size:1em}
+		.st14 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs
+   id="Patterns_And_Gradients">
+		<linearGradient
+   id="grad0-7"
+   x1="-0.2804561"
+   y1="1048.661"
+   x2="32.190596"
+   y2="1048.661"
+   gradientTransform="scale(1.2836234,0.7790447)"
+   gradientUnits="userSpaceOnUse">
+			<stop
+   offset="0"
+   stop-color="#ffffff"
+   stop-opacity="1"
+   id="stop6844" />
+			<stop
+   offset="1"
+   stop-color="#dfdfdf"
+   stop-opacity="1"
+   id="stop6846" />
+		</linearGradient>
+		<linearGradient
+   id="grad0-19"
+   x1="-0.30286968"
+   y1="967.01808"
+   x2="34.733349"
+   y2="967.01808"
+   gradientTransform="scale(1.1896436,0.84058789)"
+   gradientUnits="userSpaceOnUse">
+			<stop
+   offset="0.01"
+   stop-color="#c0c0c0"
+   stop-opacity="1"
+   id="stop6849" />
+			<stop
+   offset="0.5"
+   stop-color="#ffffff"
+   stop-opacity="1"
+   id="stop6851" />
+			<stop
+   offset="1"
+   stop-color="#c0c0c0"
+   stop-opacity="1"
+   id="stop6853" />
+		</linearGradient>
+	</defs>
+	<defs
+   id="Markers">
+		<g
+   id="lend4">
+			<path
+   d="M 2,1 0,0 2,-1 v 2"
+   style="stroke:none"
+   id="path6857"
+   inkscape:connector-curvature="0" />
+		</g>
+		<marker
+   id="mrkr4-70"
+   class="st10"
+   v:arrowType="4"
+   v:arrowSize="2"
+   v:setback="23.0021"
+   refX="-23.0021"
+   orient="auto"
+   markerUnits="strokeWidth"
+   overflow="visible"
+   style="overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08694858;stroke-opacity:1">
+			<use
+   xlink:href="#lend4"
+   transform="scale(-11.50105)"
+   id="use6860"
+   x="0"
+   y="0"
+   width="100%"
+   height="100%" />
+		</marker>
+	</defs>
+	<g
+   v:mID="9"
+   v:index="5"
+   v:groupContext="foregroundPage"
+   id="g7177"
+   transform="translate(-98.5864,-336.89801)">
+		<title
+   id="title6864">Page-5</title>
+		<v:pageProperties
+   v:drawingScale="0.0393701"
+   v:pageScale="0.0393701"
+   v:drawingUnits="24"
+   v:shadowOffsetX="8.50394"
+   v:shadowOffsetY="-8.50394" />
+		<v:layer
+   v:name="Connector"
+   v:index="0" />
+		<g
+   id="group1001-1"
+   transform="translate(275.811,-396.85)"
+   v:mID="1001"
+   v:groupContext="group">
+			<v:custProps>
+				<v:cp
+   v:nameU="ShapeClass"
+   v:lbl="ShapeClass"
+   v:type="0"
+   v:invis="true"
+   v:ask="false"
+   v:langID="1033"
+   v:val="VT4(Equipment)" />
+				<v:cp
+   v:nameU="ShapeType"
+   v:lbl="ShapeType"
+   v:type="0"
+   v:invis="true"
+   v:ask="false"
+   v:langID="1033"
+   v:val="VT4(Device)" />
+				<v:cp
+   v:nameU="SubShapeType"
+   v:lbl="SubShapeType"
+   v:type="0"
+   v:invis="true"
+   v:ask="false"
+   v:langID="1033"
+   v:val="VT4(Switch)" />
+				<v:cp
+   v:nameU="Manufacturer"
+   v:lbl="Manufacturer"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="ProductNumber"
+   v:lbl="Product Number"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="PartNumber"
+   v:lbl="Part Number"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="ProductDescription"
+   v:lbl="Product Description"
+   v:type="0"
+   v:sortKey="Equipment"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="AssetNumber"
+   v:lbl="Asset Number"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="SerialNumber"
+   v:lbl="Serial Number"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="Location"
+   v:lbl="Location"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="Building"
+   v:lbl="Building"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="Room"
+   v:lbl="Room"
+   v:type="0"
+   v:sortKey="Asset"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="NetworkName"
+   v:lbl="Network Name"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="IPAddress"
+   v:lbl="IP Address"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="SubnetMask"
+   v:lbl="Subnet Mask"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="AdminInterface"
+   v:lbl="Administrative Interface"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="NumberOfPorts"
+   v:lbl="Number of Ports"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="MACAddress"
+   v:lbl="MAC Address"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="CommunityString"
+   v:lbl="Community String"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+				<v:cp
+   v:nameU="NetworkDescription"
+   v:lbl="Network Description"
+   v:type="0"
+   v:sortKey="Network"
+   v:invis="false"
+   v:ask="false"
+   v:langID="1033" />
+			</v:custProps>
+			<v:userDefs>
+				<v:ud
+   v:nameU="HasText"
+   v:val="VT0(0):5" />
+				<v:ud
+   v:nameU="ShapeClass"
+   v:val="VT0(5):26" />
+				<v:ud
+   v:nameU="ShapeType"
+   v:val="VT0(8):26" />
+				<v:ud
+   v:nameU="SubShapeType"
+   v:val="VT0(66):26" />
+				<v:ud
+   v:nameU="visLegendShape"
+   v:val="VT0(2):26" />
+				<v:ud
+   v:nameU="SolSH"
+   v:val="VT15({BF0433D9-CD73-4EB5-8390-8653BE590246}):41" />
+				<v:ud
+   v:nameU="visVersion"
+   v:prompt=""
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title6866">Router.1001</title>
+			<g
+   id="shape1002-2"
+   v:mID="1002"
+   v:groupContext="shape">
+				<title
+   id="title6868">Sheet.1002</title>
+				<path
+   d="m 40.96,813.22 a 20.4803,12.2882 -180 1 0 -40.96,0 v 16.38 a 20.4803,12.2882 -180 1 0 40.96,0 z"
+   class="st1"
+   id="path6870"
+   inkscape:connector-curvature="0"
+   style="fill:#ff00ff;fill-opacity:0;stroke:#000000;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:0" />
+			</g>
+			<g
+   id="shape1003-4"
+   v:mID="1003"
+   v:groupContext="shape"
+   transform="translate(0,-16.3843)">
+				<title
+   id="title6873">Sheet.1003</title>
+				<ellipse
+   cx="20.480301"
+   cy="829.60199"
+   rx="20.480301"
+   ry="12.2882"
+   class="st2"
+   id="ellipse6875"
+   style="fill:url(#grad0-7);stroke:#ffffff;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1004-8"
+   v:mID="1004"
+   v:groupContext="shape"
+   transform="matrix(-1,0,0,1,34.4921,-28.6724)">
+				<title
+   id="title6878">Sheet.1004</title>
+				<path
+   d="m 0,839.53 v -5.73 h 9.93 l -4.08,2.36 8.16,4.71 -1.77,1.02 -8.16,-4.71 z"
+   class="st3"
+   id="path6880"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1005-10"
+   v:mID="1005"
+   v:groupContext="shape"
+   transform="translate(5.58168,-28.6724)">
+				<title
+   id="title6883">Sheet.1005</title>
+				<path
+   d="m 14.9,836.16 -0.89,5.22 -9.04,0.51 4.08,-2.36 -9.05,-5.22 1.77,-1.02 9.05,5.22 z"
+   class="st3"
+   id="path6885"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1006-12"
+   v:mID="1006"
+   v:groupContext="shape"
+   transform="translate(20.4803,-20.0707)">
+				<title
+   id="title6888">Sheet.1006</title>
+				<path
+   d="m 0,839.02 0.89,-5.22 9.04,-0.51 -4.08,2.35 9.05,5.23 -1.78,1.02 -9.04,-5.22 z"
+   class="st3"
+   id="path6890"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1007-14"
+   v:mID="1007"
+   v:groupContext="shape"
+   transform="matrix(1,0,0,-1,6.4685,1655.11)">
+				<title
+   id="title6893">Sheet.1007</title>
+				<path
+   d="m 0,839.53 v -5.73 h 9.93 l -4.08,2.36 8.16,4.71 -1.77,1.02 -8.16,-4.71 z"
+   class="st3"
+   id="path6895"
+   inkscape:connector-curvature="0"
+   style="fill:#ff0000;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1008-16"
+   v:mID="1008"
+   v:groupContext="shape">
+				<title
+   id="title6898">Sheet.1008</title>
+				<path
+   d="m 0,813.22 v 16.38 a 20.4803,12.2882 -180 1 0 40.96,0 v -16.38 a 20.4803,12.2882 0 1 1 -40.96,0 z"
+   class="st4"
+   id="path6900"
+   inkscape:connector-curvature="0"
+   style="fill:url(#grad0-19);stroke:#000000;stroke-width:0.72000003;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1009-20"
+   v:mID="1009"
+   v:groupContext="shape">
+				<title
+   id="title6903">Sheet.1009</title>
+				<path
+   d="m 40.96,813.22 a 20.4803,12.2882 -180 1 0 -40.96,0 v 16.38 a 20.4803,12.2882 -180 1 0 40.96,0 v -16.38"
+   class="st5"
+   id="path6905"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+		</g>
+		<g
+   id="group1011-23"
+   transform="translate(101.657,-458.787)"
+   v:mID="1011"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title6909">Array.1011</title>
+			<g
+   id="shape1012-24"
+   v:mID="1012"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title6911">Sheet.1012</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6913"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1013-26"
+   v:mID="1013"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title6916">Sheet.1013</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6918"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1014-28"
+   v:mID="1014"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title6921">Sheet.1014</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6923"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1015-30"
+   v:mID="1015"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title6926">Sheet.1015</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6928"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1016-32"
+   v:mID="1016"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title6931">Sheet.1016</title>
+				<desc
+   id="desc6933">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect6935"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text6937"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1017-35"
+   v:mID="1017"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title6940">Sheet.1017</title>
+				<desc
+   id="desc6942">10000</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect6944"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text6946"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10000</text>
+			</g>
+			<g
+   id="shape1018-38"
+   v:mID="1018"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title6949">Sheet.1018</title>
+				<desc
+   id="desc6951">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect6953"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text6955"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+			<g
+   id="shape1019-41"
+   v:mID="1019"
+   v:groupContext="shape">
+				<title
+   id="title6958">Sheet.1019</title>
+				<desc
+   id="desc6960">10.10.10.10</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect6962"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text6964"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10.10.10.10</text>
+			</g>
+		</g>
+		<g
+   id="group1020-44"
+   transform="translate(321.429,-458.787)"
+   v:mID="1020"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title6968">Array.1020</title>
+			<g
+   id="shape1021-45"
+   v:mID="1021"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title6970">Sheet.1021</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6972"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1022-47"
+   v:mID="1022"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title6975">Sheet.1022</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6977"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1023-49"
+   v:mID="1023"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title6980">Sheet.1023</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6982"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1024-51"
+   v:mID="1024"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title6985">Sheet.1024</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect6987"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1025-53"
+   v:mID="1025"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title6990">Sheet.1025</title>
+				<desc
+   id="desc6992">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect6994"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text6996"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1026-56"
+   v:mID="1026"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title6999">Sheet.1026</title>
+				<desc
+   id="desc7001">23456</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7003"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7005"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />23456</text>
+			</g>
+			<g
+   id="shape1027-59"
+   v:mID="1027"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title7008">Sheet.1027</title>
+				<desc
+   id="desc7010">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7012"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7014"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+			<g
+   id="shape1028-62"
+   v:mID="1028"
+   v:groupContext="shape">
+				<title
+   id="title7017">Sheet.1028</title>
+				<desc
+   id="desc7019">172.16.0.20</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7021"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7023"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />172.16.0.20</text>
+			</g>
+		</g>
+		<g
+   id="shape1029-65"
+   v:mID="1029"
+   v:groupContext="shape"
+   v:layerMember="0"
+   transform="translate(271.736,-458.787)">
+			<title
+   id="title7027">Dynamic connector.1029</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<path
+   d="M 0,834.8 H 44.17"
+   class="st9"
+   id="path7029"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:0.239976;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-70)" />
+		</g>
+		<g
+   id="group1030-71"
+   transform="translate(321.403,-368.504)"
+   v:mID="1030"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title7032">Array.1030</title>
+			<g
+   id="shape1031-72"
+   v:mID="1031"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title7034">Sheet.1031</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7036"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1032-74"
+   v:mID="1032"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title7039">Sheet.1032</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7041"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1033-76"
+   v:mID="1033"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title7044">Sheet.1033</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7046"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1034-78"
+   v:mID="1034"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title7049">Sheet.1034</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7051"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1035-80"
+   v:mID="1035"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title7054">Sheet.1035</title>
+				<desc
+   id="desc7056">23456</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7058"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7060"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />23456</text>
+			</g>
+			<g
+   id="shape1036-83"
+   v:mID="1036"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title7063">Sheet.1036</title>
+				<desc
+   id="desc7065">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7067"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7069"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1037-86"
+   v:mID="1037"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title7072">Sheet.1037</title>
+				<desc
+   id="desc7074">172.16.0.20</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7076"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7078"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />172.16.0.20</text>
+			</g>
+			<g
+   id="shape1038-89"
+   v:mID="1038"
+   v:groupContext="shape">
+				<title
+   id="title7081">Sheet.1038</title>
+				<desc
+   id="desc7083">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7085"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7087"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+		</g>
+		<g
+   id="group1039-92"
+   transform="translate(98.7064,-368.504)"
+   v:mID="1039"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title7091">Array.1039</title>
+			<g
+   id="shape1040-93"
+   v:mID="1040"
+   v:groupContext="shape"
+   transform="translate(297.638)">
+				<title
+   id="title7093">Sheet.1040</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7095"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1041-95"
+   v:mID="1041"
+   v:groupContext="shape"
+   transform="translate(255.118)">
+				<title
+   id="title7098">Sheet.1041</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7100"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1042-97"
+   v:mID="1042"
+   v:groupContext="shape"
+   transform="translate(212.598)">
+				<title
+   id="title7103">Sheet.1042</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7105"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1043-99"
+   v:mID="1043"
+   v:groupContext="shape"
+   transform="translate(170.079)">
+				<title
+   id="title7108">Sheet.1043</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st6"
+   id="rect7110"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1044-101"
+   v:mID="1044"
+   v:groupContext="shape"
+   transform="translate(127.559)">
+				<title
+   id="title7113">Sheet.1044</title>
+				<desc
+   id="desc7115">10000</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7117"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="11.12"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7119"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10000</text>
+			</g>
+			<g
+   id="shape1045-104"
+   v:mID="1045"
+   v:groupContext="shape"
+   transform="translate(85.0394)">
+				<title
+   id="title7122">Sheet.1045</title>
+				<desc
+   id="desc7124">443</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7126"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="15.18"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7128"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />443</text>
+			</g>
+			<g
+   id="shape1046-107"
+   v:mID="1046"
+   v:groupContext="shape"
+   transform="translate(42.5197)">
+				<title
+   id="title7131">Sheet.1046</title>
+				<desc
+   id="desc7133">10.10.10.10</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7135"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7137"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />10.10.10.10</text>
+			</g>
+			<g
+   id="shape1047-110"
+   v:mID="1047"
+   v:groupContext="shape">
+				<title
+   id="title7140">Sheet.1047</title>
+				<desc
+   id="desc7142">192.0.2.100</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="21.2598"
+   cy="834.803"
+   width="42.52"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="42.519699"
+   height="14.1732"
+   class="st7"
+   id="rect7144"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.01"
+   y="837.20001"
+   class="st8"
+   v:langID="6153"
+   id="text7146"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />192.0.2.100</text>
+			</g>
+		</g>
+		<g
+   id="shape1048-113"
+   v:mID="1048"
+   v:groupContext="shape"
+   v:layerMember="0"
+   transform="translate(321.403,-368.504)">
+			<title
+   id="title7150">Dynamic connector.1048</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<path
+   d="M 0,834.8 H -47.1"
+   class="st9"
+   id="path7152"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:0.239976;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-70)" />
+		</g>
+		<g
+   id="shape1049-118"
+   v:mID="1049"
+   v:groupContext="shape"
+   transform="translate(101.657,-480.047)">
+			<title
+   id="title7155">Sheet.1049</title>
+			<desc
+   id="desc7157">RSS hash value 0xdeadbeef Packet assigned to queue 15</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="89.1142"
+   cy="829.417"
+   width="178.23"
+   height="24.9449" />
+			<rect
+   x="0"
+   y="816.94501"
+   width="178.228"
+   height="24.944901"
+   class="st11"
+   id="rect7159"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="22.889999"
+   y="825.82001"
+   class="st12"
+   v:langID="6153"
+   id="text7163"
+   style="font-size:12.00012016px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />RSS hash value 0xdeadbeef<v:newlineChar /><tspan
+   x="19.709999"
+   dy="1.2em"
+   class="st13"
+   id="tspan7161"
+   style="font-size:12.00012016px">Packet assigned to queue 15</tspan></text>
+		</g>
+		<g
+   id="shape1051-122"
+   v:mID="1051"
+   v:groupContext="shape"
+   transform="translate(318.331,-386.079)">
+			<title
+   id="title7166">Sheet.1051</title>
+			<desc
+   id="desc7168">RSS hash value 0xf00d1eaf Packet assigned to queue 15</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="89.1142"
+   cy="829.417"
+   width="178.23"
+   height="24.9449" />
+			<rect
+   x="0"
+   y="816.94501"
+   width="178.228"
+   height="24.944901"
+   class="st11"
+   id="rect7170"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="24.209999"
+   y="825.82001"
+   class="st12"
+   v:langID="6153"
+   id="text7174"
+   style="font-size:12.00012016px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />RSS hash value 0xf00d1eaf<v:newlineChar /><tspan
+   x="19.709999"
+   dy="1.2em"
+   class="st13"
+   id="tspan7172"
+   style="font-size:12.00012016px">Packet assigned to queue 15</tspan></text>
+		</g>
+	</g>
+</svg>
\ No newline at end of file
diff --git a/doc/guides/prog_guide/img/rss_queue_assign.svg b/doc/guides/prog_guide/img/rss_queue_assign.svg
new file mode 100644
index 0000000..d0eef8c
--- /dev/null
+++ b/doc/guides/prog_guide/img/rss_queue_assign.svg
@@ -0,0 +1,1454 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Generated by Microsoft Visio, SVG Export rss_queue_assign.svg Page-6 -->
+
+<svg
+   xmlns:v="http://schemas.microsoft.com/visio/2003/SVGExtensions/"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="5.377346in"
+   height="5.1358395in"
+   viewBox="0 0 387.16901 369.78098"
+   xml:space="preserve"
+   class="st11"
+   version="1.1"
+   id="svg5938"
+   sodipodi:docname="rss_queue_assign.svg"
+   style="font-size:12px;overflow:visible;color-interpolation-filters:sRGB;fill:none;fill-rule:evenodd;stroke-linecap:square;stroke-miterlimit:3"
+   inkscape:version="0.92.3 (2405546, 2018-03-11)"><metadata
+   id="metadata5942"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><sodipodi:namedview
+   pagecolor="#ffffff"
+   bordercolor="#666666"
+   borderopacity="1"
+   objecttolerance="10"
+   gridtolerance="10"
+   guidetolerance="10"
+   inkscape:pageopacity="0"
+   inkscape:pageshadow="2"
+   inkscape:window-width="1920"
+   inkscape:window-height="1017"
+   id="namedview5940"
+   showgrid="false"
+   inkscape:zoom="0.4204831"
+   inkscape:cx="684.49886"
+   inkscape:cy="109.29466"
+   inkscape:window-x="-8"
+   inkscape:window-y="-8"
+   inkscape:window-maximized="1"
+   inkscape:current-layer="svg5938" />
+	<v:documentProperties
+   v:langID="6153"
+   v:metric="true"
+   v:viewMarkup="false">
+		<v:userDefs>
+			<v:ud
+   v:nameU="msvNoAutoConnect"
+   v:val="VT0(1):26" />
+		</v:userDefs>
+	</v:documentProperties>
+
+	<style
+   type="text/css"
+   id="style5574">
+	<![CDATA[
+		.st1 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24;visibility:hidden}
+		.st2 {fill:#ffffff;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st3 {fill:#000000;font-family:Calibri;font-size:0.666664em}
+		.st4 {fill:#c0c0c0;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st5 {fill:none;stroke:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.75}
+		.st6 {font-size:1em}
+		.st7 {fill:#000000;font-family:Calibri;font-size:0.833336em}
+		.st8 {fill:#bfbfbf;stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.24}
+		.st9 {marker-end:url(#mrkr4-123);stroke:#000000;stroke-linecap:round;stroke-linejoin:round;stroke-width:0.239976}
+		.st10 {fill:#000000;fill-opacity:1;stroke:#000000;stroke-opacity:1;stroke-width:0.086948582161584}
+		.st11 {fill:none;fill-rule:evenodd;font-size:12px;overflow:visible;stroke-linecap:square;stroke-miterlimit:3}
+	]]>
+	</style>
+
+	<defs
+   id="Markers">
+		<g
+   id="lend4">
+			<path
+   d="M 2,1 0,0 2,-1 v 2"
+   style="stroke:none"
+   id="path5576"
+   inkscape:connector-curvature="0" />
+		</g>
+		<marker
+   id="mrkr4-123"
+   class="st10"
+   v:arrowType="4"
+   v:arrowSize="2"
+   v:setback="23.0021"
+   refX="-23.0021"
+   orient="auto"
+   markerUnits="strokeWidth"
+   overflow="visible"
+   style="overflow:visible;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08694858;stroke-opacity:1">
+			<use
+   xlink:href="#lend4"
+   transform="scale(-11.50105)"
+   id="use5579"
+   x="0"
+   y="0"
+   width="100%"
+   height="100%" />
+		</marker>
+	</defs>
+	<g
+   v:mID="10"
+   v:index="6"
+   v:groupContext="foregroundPage"
+   id="g5936"
+   transform="translate(-58.840987,-97.651017)">
+		<title
+   id="title5583">Page-6</title>
+		<v:pageProperties
+   v:drawingScale="0.0393701"
+   v:pageScale="0.0393701"
+   v:drawingUnits="24"
+   v:shadowOffsetX="8.50394"
+   v:shadowOffsetY="-8.50394" />
+		<v:layer
+   v:name="Connector"
+   v:index="0" />
+		<g
+   id="group1000-1"
+   transform="translate(58.9606,-616.535)"
+   v:mID="1000"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title5585">Array.1000</title>
+			<g
+   id="shape1001-2"
+   v:mID="1001"
+   v:groupContext="shape"
+   transform="translate(326.161)">
+				<title
+   id="title5587">Sheet.1001</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st1"
+   id="rect5589"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1002-4"
+   v:mID="1002"
+   v:groupContext="shape"
+   transform="translate(279.567)">
+				<title
+   id="title5592">Sheet.1002</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st1"
+   id="rect5594"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1003-6"
+   v:mID="1003"
+   v:groupContext="shape"
+   transform="translate(232.972)">
+				<title
+   id="title5597">Sheet.1003</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st1"
+   id="rect5599"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1004-8"
+   v:mID="1004"
+   v:groupContext="shape"
+   transform="translate(186.378)">
+				<title
+   id="title5602">Sheet.1004</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st1"
+   id="rect5604"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1005-10"
+   v:mID="1005"
+   v:groupContext="shape"
+   transform="translate(139.783)">
+				<title
+   id="title5607">Sheet.1005</title>
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st1"
+   id="rect5609"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1006-12"
+   v:mID="1006"
+   v:groupContext="shape"
+   transform="translate(93.189)">
+				<title
+   id="title5612">Sheet.1006</title>
+				<desc
+   id="desc5614">Src/Dst ports</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="23.2972"
+   cy="834.803"
+   width="46.6"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st2"
+   id="rect5616"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="2.05"
+   y="837.20001"
+   class="st3"
+   v:langID="6153"
+   id="text5618"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Src/Dst ports</text>
+			</g>
+			<g
+   id="shape1007-15"
+   v:mID="1007"
+   v:groupContext="shape"
+   transform="translate(46.5945)">
+				<title
+   id="title5621">Sheet.1007</title>
+				<desc
+   id="desc5623">Dst_ip</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="23.2972"
+   cy="834.803"
+   width="46.6"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st2"
+   id="rect5625"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="12.92"
+   y="837.20001"
+   class="st3"
+   v:langID="6153"
+   id="text5627"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Dst_ip</text>
+			</g>
+			<g
+   id="shape1008-18"
+   v:mID="1008"
+   v:groupContext="shape">
+				<title
+   id="title5630">Sheet.1008</title>
+				<desc
+   id="desc5632">Src_ip</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="23.2972"
+   cy="834.803"
+   width="46.6"
+   height="14.1732" />
+				<rect
+   x="0"
+   y="827.71698"
+   width="46.594501"
+   height="14.1732"
+   class="st2"
+   id="rect5634"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="13.36"
+   y="837.20001"
+   class="st3"
+   v:langID="6153"
+   id="text5636"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Src_ip</text>
+			</g>
+		</g>
+		<g
+   id="group1009-21"
+   transform="translate(58.9606,-704.359)"
+   v:mID="1009"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title5640">Data block.1009</title>
+			<desc
+   id="desc5642">Received Packet Data</desc>
+			<g
+   id="shape1010-22"
+   v:mID="1010"
+   v:groupContext="shape"
+   transform="translate(263.622)">
+				<title
+   id="title5644">Sheet.1010</title>
+				<path
+   d="M 0,841.89 11.41,830.48 V 802.13 L 0,813.54 Z"
+   class="st4"
+   id="path5646"
+   inkscape:connector-curvature="0"
+   style="fill:#c0c0c0;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1011-24"
+   v:mID="1011"
+   v:groupContext="shape"
+   transform="translate(0,-28.3465)">
+				<title
+   id="title5649">Sheet.1011</title>
+				<path
+   d="m 0,841.89 h 263.62 l 11.41,-11.41 H 11.41 Z"
+   class="st4"
+   id="path5651"
+   inkscape:connector-curvature="0"
+   style="fill:#c0c0c0;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1012-26"
+   v:mID="1012"
+   v:groupContext="shape">
+				<title
+   id="title5654">Sheet.1012</title>
+				<rect
+   x="0"
+   y="813.54303"
+   width="263.62201"
+   height="28.3465"
+   class="st2"
+   id="rect5656"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1009-28"
+   v:mID="1009"
+   v:groupContext="groupContent">
+				<v:textBlock
+   v:margins="rect(0,0,0,0)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="131.811"
+   cy="827.717"
+   width="263.63"
+   height="28.3465" />
+				<text
+   x="96.889999"
+   y="830.12"
+   class="st3"
+   v:langID="6153"
+   id="text5659"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Received Packet Data</text>
+			</g>
+		</g>
+		<g
+   id="shape1013-30"
+   v:mID="1013"
+   v:groupContext="shape"
+   transform="rotate(-89.8898,-254.59128,465.04725)">
+			<title
+   id="title5663">Simple Arrow.1013</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+				<v:ud
+   v:nameU="ArrowType"
+   v:prompt=""
+   v:val="VT0(2):26" />
+			</v:userDefs>
+			<path
+   d="m 0,841.89 12.6,-4.25 v 2.12 h 61.1 v 2.13 2.12 H 12.6 v 2.13 z"
+   class="st2"
+   id="path5665"
+   inkscape:connector-curvature="0"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+		</g>
+		<g
+   id="shape1014-32"
+   v:mID="1014"
+   v:groupContext="shape"
+   transform="translate(67.829,-663.024)">
+			<title
+   id="title5668">Sheet.1014</title>
+			<desc
+   id="desc5670">Parser extracts required fields</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="28.3465"
+   cy="838.772"
+   width="56.7"
+   height="6.23622" />
+			<rect
+   x="0"
+   y="835.65399"
+   width="56.692902"
+   height="6.2362199"
+   class="st5"
+   id="rect5672"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="4.1500001"
+   y="836.37"
+   class="st3"
+   v:langID="6153"
+   id="text5676"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Parser extracts <tspan
+   x="4.7399998"
+   dy="1.2em"
+   class="st6"
+   id="tspan5674"
+   style="font-size:7.99996805px">required fields</tspan></text>
+		</g>
+		<g
+   id="shape1015-36"
+   v:mID="1015"
+   v:groupContext="shape"
+   transform="translate(58.9606,-600.945)">
+			<title
+   id="title5679">Sheet.1015</title>
+			<desc
+   id="desc5681">tuple</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="20.2835"
+   cy="834.803"
+   width="40.57"
+   height="14.1732" />
+			<rect
+   x="0"
+   y="827.71698"
+   width="40.566898"
+   height="14.1732"
+   class="st5"
+   id="rect5683"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="11.83"
+   y="837.20001"
+   class="st3"
+   v:langID="6153"
+   id="text5685"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />tuple</text>
+		</g>
+		<g
+   id="shape1016-39"
+   v:mID="1016"
+   v:groupContext="shape"
+   transform="rotate(-89.8898,-210.64069,509.05539)">
+			<title
+   id="title5688">Simple Arrow.1016</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+				<v:ud
+   v:nameU="ArrowType"
+   v:prompt=""
+   v:val="VT0(2):26" />
+			</v:userDefs>
+			<path
+   d="m 0,841.89 12.6,-4.25 v 2.12 h 61.1 v 2.13 2.12 H 12.6 v 2.13 z"
+   class="st2"
+   id="path5690"
+   inkscape:connector-curvature="0"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+		</g>
+		<g
+   id="shape1017-41"
+   v:mID="1017"
+   v:groupContext="shape"
+   transform="translate(77.3858,-518.74)">
+			<title
+   id="title5693">Rectangle.1017</title>
+			<desc
+   id="desc5695">Toeplitz hash function</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="45.3543"
+   cy="830.551"
+   width="90.71"
+   height="22.6772" />
+			<rect
+   x="0"
+   y="819.21301"
+   width="90.708702"
+   height="22.6772"
+   class="st2"
+   id="rect5697"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="18.49"
+   y="827.54999"
+   class="st7"
+   v:langID="6153"
+   id="text5701"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Toeplitz hash <tspan
+   x="28.370001"
+   dy="1.2em"
+   class="st6"
+   id="tspan5699"
+   style="font-size:10.00003242px">function</tspan></text>
+		</g>
+		<g
+   id="shape1018-45"
+   v:mID="1018"
+   v:groupContext="shape"
+   transform="rotate(-89.8898,-161.64905,557.95289)">
+			<title
+   id="title5704">Simple Arrow.1018</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+				<v:ud
+   v:nameU="ArrowType"
+   v:prompt=""
+   v:val="VT0(2):26" />
+			</v:userDefs>
+			<path
+   d="m 0,841.89 12.6,-4.25 v 2.12 h 61.1 v 2.13 2.12 H 12.6 v 2.13 z"
+   class="st2"
+   id="path5706"
+   inkscape:connector-curvature="0"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+		</g>
+		<g
+   id="shape1019-47"
+   v:mID="1019"
+   v:groupContext="shape"
+   transform="translate(83.0551,-430.866)">
+			<title
+   id="title5709">Byte or variable.1019</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<rect
+   x="0"
+   y="827.71698"
+   width="90.708702"
+   height="14.1732"
+   class="st2"
+   id="rect5711"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+		</g>
+		<g
+   id="shape1020-49"
+   v:mID="1020"
+   v:groupContext="shape"
+   transform="translate(145.417,-430.866)">
+			<title
+   id="title5714">Byte or variable.1020</title>
+			<desc
+   id="desc5716">LSB</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="14.1732"
+   cy="834.803"
+   width="28.35"
+   height="14.1732" />
+			<rect
+   x="0"
+   y="827.71698"
+   width="28.3465"
+   height="14.1732"
+   class="st8"
+   id="rect5718"
+   style="fill:#bfbfbf;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="8.4799995"
+   y="837.20001"
+   class="st3"
+   v:langID="6153"
+   id="text5720"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />LSB</text>
+		</g>
+		<g
+   id="shape1021-52"
+   v:mID="1021"
+   v:groupContext="shape"
+   transform="translate(92.6929,-419.528)">
+			<title
+   id="title5723">Sheet.1021</title>
+			<desc
+   id="desc5725">32-bit hash value</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.7165"
+   cy="837.638"
+   width="71.44"
+   height="8.50394" />
+			<rect
+   x="0"
+   y="833.38599"
+   width="71.433098"
+   height="8.5039396"
+   class="st5"
+   id="rect5727"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="7.8499999"
+   y="840.03998"
+   class="st3"
+   v:langID="6153"
+   id="text5729"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />32-bit hash value</text>
+		</g>
+		<g
+   id="shape1022-55"
+   v:mID="1022"
+   v:groupContext="shape"
+   transform="rotate(179.653,118.72832,623.08024)">
+			<title
+   id="title5732">Simple Arrow.1022</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+				<v:ud
+   v:nameU="ArrowType"
+   v:prompt=""
+   v:val="VT0(2):26" />
+			</v:userDefs>
+			<path
+   d="m 0,841.89 12.6,-4.25 v 2.12 h 49.76 v 2.13 2.12 H 12.6 v 2.13 z"
+   class="st2"
+   id="path5734"
+   inkscape:connector-curvature="0"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+		</g>
+		<g
+   id="group1023-57"
+   transform="translate(240.378,-374.578)"
+   v:mID="1023"
+   v:groupContext="group">
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<title
+   id="title5737">Stack or heap.1023</title>
+			<g
+   id="shape1024-58"
+   v:mID="1024"
+   v:groupContext="shape"
+   transform="translate(0,-270)">
+				<title
+   id="title5739">Sheet.1024</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5741"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1025-60"
+   v:mID="1025"
+   v:groupContext="shape"
+   transform="translate(0,-252)">
+				<title
+   id="title5744">Sheet.1025</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5746"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1026-62"
+   v:mID="1026"
+   v:groupContext="shape"
+   transform="translate(0,-234)">
+				<title
+   id="title5749">Sheet.1026</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5751"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1027-64"
+   v:mID="1027"
+   v:groupContext="shape"
+   transform="translate(0,-216)">
+				<title
+   id="title5754">Sheet.1027</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5756"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1028-66"
+   v:mID="1028"
+   v:groupContext="shape"
+   transform="translate(0,-198)">
+				<title
+   id="title5759">Sheet.1028</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5761"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1029-68"
+   v:mID="1029"
+   v:groupContext="shape"
+   transform="translate(0,-180)">
+				<title
+   id="title5764">Sheet.1029</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5766"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1030-70"
+   v:mID="1030"
+   v:groupContext="shape"
+   transform="translate(0,-162)">
+				<title
+   id="title5769">Sheet.1030</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5771"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1031-72"
+   v:mID="1031"
+   v:groupContext="shape"
+   transform="translate(0,-144)">
+				<title
+   id="title5774">Sheet.1031</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5776"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1032-74"
+   v:mID="1032"
+   v:groupContext="shape"
+   transform="translate(0,-126)">
+				<title
+   id="title5779">Sheet.1032</title>
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st1"
+   id="rect5781"
+   style="visibility:hidden;fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			</g>
+			<g
+   id="shape1033-76"
+   v:mID="1033"
+   v:groupContext="shape"
+   transform="translate(0,-108)">
+				<title
+   id="title5784">Sheet.1033</title>
+				<desc
+   id="desc5786">Q_idx_0</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5788"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="21.98"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5790"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Q_idx_0</text>
+			</g>
+			<g
+   id="shape1034-79"
+   v:mID="1034"
+   v:groupContext="shape"
+   transform="translate(0,-90)">
+				<title
+   id="title5793">Sheet.1034</title>
+				<desc
+   id="desc5795">Q_idx_1</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5797"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="21.98"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5799"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Q_idx_1</text>
+			</g>
+			<g
+   id="shape1035-82"
+   v:mID="1035"
+   v:groupContext="shape"
+   transform="translate(0,-72)">
+				<title
+   id="title5802">Sheet.1035</title>
+				<desc
+   id="desc5804">Q_idx_2</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5806"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="21.98"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5808"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Q_idx_2</text>
+			</g>
+			<g
+   id="shape1036-85"
+   v:mID="1036"
+   v:groupContext="shape"
+   transform="translate(0,-54)">
+				<title
+   id="title5811">Sheet.1036</title>
+				<desc
+   id="desc5813">Q_idx_3</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5815"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="21.98"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5817"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Q_idx_3</text>
+			</g>
+			<g
+   id="shape1037-88"
+   v:mID="1037"
+   v:groupContext="shape"
+   transform="translate(0,-36)">
+				<title
+   id="title5820">Sheet.1037</title>
+				<desc
+   id="desc5822">...</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5824"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="32.400002"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5826"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />...</text>
+			</g>
+			<g
+   id="shape1038-91"
+   v:mID="1038"
+   v:groupContext="shape"
+   transform="translate(0,-18)">
+				<title
+   id="title5829">Sheet.1038</title>
+				<desc
+   id="desc5831">...</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5833"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="32.400002"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5835"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />...</text>
+			</g>
+			<g
+   id="shape1039-94"
+   v:mID="1039"
+   v:groupContext="shape">
+				<title
+   id="title5838">Sheet.1039</title>
+				<desc
+   id="desc5840">Q_idx_n</desc>
+				<v:textBlock
+   v:margins="rect(1,1,1,1)"
+   v:tabSpace="42.5197" />
+				<v:textRect
+   cx="35.4331"
+   cy="832.89"
+   width="70.87"
+   height="18" />
+				<rect
+   x="0"
+   y="823.89001"
+   width="70.866096"
+   height="18"
+   class="st2"
+   id="rect5842"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+				<text
+   x="21.9"
+   y="835.28998"
+   class="st3"
+   v:langID="6153"
+   id="text5844"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Q_idx_n</text>
+			</g>
+		</g>
+		<g
+   id="shape1040-97"
+   v:mID="1040"
+   v:groupContext="shape"
+   transform="translate(240.378,-504.668)">
+			<title
+   id="title5848">Sheet.1040</title>
+			<desc
+   id="desc5850">RSS Redirection Table</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="830.551"
+   width="70.87"
+   height="22.6772" />
+			<rect
+   x="0"
+   y="819.21301"
+   width="70.866096"
+   height="22.6772"
+   class="st5"
+   id="rect5852"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="9.9499998"
+   y="828.15002"
+   class="st3"
+   v:langID="6153"
+   id="text5856"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />RSS Redirection <tspan
+   x="26.559999"
+   dy="1.2em"
+   class="st6"
+   id="tspan5854"
+   style="font-size:7.99996805px">Table</tspan></text>
+		</g>
+		<g
+   id="shape1041-101"
+   v:mID="1041"
+   v:groupContext="shape"
+   transform="translate(173.98,-445.189)">
+			<title
+   id="title5859">Sheet.1041</title>
+			<desc
+   id="desc5861">Hash LSB’s are used as an index in table</desc>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="28.2716"
+   cy="833.536"
+   width="56.55"
+   height="16.7079" />
+			<rect
+   x="0"
+   y="825.18201"
+   width="56.543201"
+   height="16.707899"
+   class="st5"
+   id="rect5863"
+   style="fill:none;stroke:none;stroke-width:0.75;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="4.8299999"
+   y="826.34003"
+   class="st3"
+   v:langID="6153"
+   id="text5869"
+   style="font-size:7.99996805px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />Hash LSB’s are <tspan
+   x="11.21"
+   dy="1.2em"
+   class="st6"
+   id="tspan5865"
+   style="font-size:7.99996805px">used as an </tspan><tspan
+   x="6.3299999"
+   dy="1.2em"
+   class="st6"
+   id="tspan5867"
+   style="font-size:7.99996805px">index in table</tspan></text>
+		</g>
+		<g
+   id="shape1043-106"
+   v:mID="1043"
+   v:groupContext="shape"
+   transform="translate(375.024,-707.826)">
+			<title
+   id="title5872">Rectangle.1043</title>
+			<desc
+   id="desc5874">CPU 0</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="824.965"
+   width="70.87"
+   height="33.8487" />
+			<rect
+   x="0"
+   y="808.04102"
+   width="70.866096"
+   height="33.848701"
+   class="st2"
+   id="rect5876"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="23.309999"
+   y="827.96997"
+   class="st7"
+   v:langID="6153"
+   id="text5878"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />CPU 0</text>
+		</g>
+		<g
+   id="shape1044-109"
+   v:mID="1044"
+   v:groupContext="shape"
+   transform="translate(375.024,-659.804)">
+			<title
+   id="title5881">Rectangle.1044</title>
+			<desc
+   id="desc5883">CPU 1</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="824.965"
+   width="70.87"
+   height="33.8487" />
+			<rect
+   x="0"
+   y="808.04102"
+   width="70.866096"
+   height="33.848701"
+   class="st2"
+   id="rect5885"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="23.309999"
+   y="827.96997"
+   class="st7"
+   v:langID="6153"
+   id="text5887"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />CPU 1</text>
+		</g>
+		<g
+   id="shape1045-112"
+   v:mID="1045"
+   v:groupContext="shape"
+   transform="translate(375.024,-604.696)">
+			<title
+   id="title5890">Rectangle.1045</title>
+			<desc
+   id="desc5892">CPU 2</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="824.965"
+   width="70.87"
+   height="33.8487" />
+			<rect
+   x="0"
+   y="808.04102"
+   width="70.866096"
+   height="33.848701"
+   class="st2"
+   id="rect5894"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="23.309999"
+   y="827.96997"
+   class="st7"
+   v:langID="6153"
+   id="text5896"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />CPU 2</text>
+		</g>
+		<g
+   id="shape1046-115"
+   v:mID="1046"
+   v:groupContext="shape"
+   transform="translate(375.024,-549.587)">
+			<title
+   id="title5899">Rectangle.1046</title>
+			<desc
+   id="desc5901">CPU 3</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="824.965"
+   width="70.87"
+   height="33.8487" />
+			<rect
+   x="0"
+   y="808.04102"
+   width="70.866096"
+   height="33.848701"
+   class="st2"
+   id="rect5903"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="23.309999"
+   y="827.96997"
+   class="st7"
+   v:langID="6153"
+   id="text5905"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />CPU 3</text>
+		</g>
+		<g
+   id="shape1047-118"
+   v:mID="1047"
+   v:groupContext="shape"
+   v:layerMember="0"
+   transform="translate(311.244,-437.578)">
+			<title
+   id="title5908">Dynamic connector.1047</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<path
+   d="M 0,841.89 H 41.06 V 712.96 h 17.2"
+   class="st9"
+   id="path5910"
+   inkscape:connector-curvature="0"
+   style="stroke:#000000;stroke-width:0.239976;stroke-linecap:round;stroke-linejoin:round;marker-end:url(#mrkr4-123)" />
+		</g>
+		<g
+   id="shape1048-124"
+   v:mID="1048"
+   v:groupContext="shape"
+   transform="translate(375.024,-494.479)">
+			<title
+   id="title5913">Rectangle.1048</title>
+			<desc
+   id="desc5915">CPU 4</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="824.965"
+   width="70.87"
+   height="33.8487" />
+			<rect
+   x="0"
+   y="808.04102"
+   width="70.866096"
+   height="33.848701"
+   class="st2"
+   id="rect5917"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="23.309999"
+   y="827.96997"
+   class="st7"
+   v:langID="6153"
+   id="text5919"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />CPU 4</text>
+		</g>
+		<g
+   id="shape1049-127"
+   v:mID="1049"
+   v:groupContext="shape"
+   transform="translate(375.024,-439.37)">
+			<title
+   id="title5922">Rectangle.1049</title>
+			<desc
+   id="desc5924">CPU 5</desc>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+			</v:userDefs>
+			<v:textBlock
+   v:margins="rect(4,4,4,4)"
+   v:tabSpace="42.5197" />
+			<v:textRect
+   cx="35.4331"
+   cy="824.965"
+   width="70.87"
+   height="33.8487" />
+			<rect
+   x="0"
+   y="808.04102"
+   width="70.866096"
+   height="33.848701"
+   class="st2"
+   id="rect5926"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+			<text
+   x="23.309999"
+   y="827.96997"
+   class="st7"
+   v:langID="6153"
+   id="text5928"
+   style="font-size:10.00003242px;font-family:Calibri;fill:#000000"><v:paragraph
+   v:horizAlign="1" /><v:tabList />CPU 5</text>
+		</g>
+		<g
+   id="shape1050-130"
+   v:mID="1050"
+   v:groupContext="shape"
+   transform="rotate(-130.647,57.370743,472.48224)">
+			<title
+   id="title5931">Simple Arrow.1050</title>
+			<v:userDefs>
+				<v:ud
+   v:nameU="visVersion"
+   v:val="VT0(15):26" />
+				<v:ud
+   v:nameU="ArrowType"
+   v:prompt=""
+   v:val="VT0(2):26" />
+			</v:userDefs>
+			<path
+   d="m 0,841.89 12.6,-4.25 v 2.12 h 169.08 v 2.13 2.12 H 12.6 v 2.13 z"
+   class="st2"
+   id="path5933"
+   inkscape:connector-curvature="0"
+   style="fill:#ffffff;stroke:#000000;stroke-width:0.23999999;stroke-linecap:round;stroke-linejoin:round" />
+		</g>
+	</g>
+</svg>
\ No newline at end of file
diff --git a/doc/guides/prog_guide/index.rst b/doc/guides/prog_guide/index.rst
index 45c7dec..2dce507 100644
--- a/doc/guides/prog_guide/index.rst
+++ b/doc/guides/prog_guide/index.rst
@@ -32,6 +32,7 @@ Programmer's Guide
     link_bonding_poll_mode_drv_lib
     timer_lib
     hash_lib
+    toeplitz_hash_lib
     efd_lib
     member_lib
     lpm_lib
diff --git a/doc/guides/prog_guide/toeplitz_hash_lib.rst b/doc/guides/prog_guide/toeplitz_hash_lib.rst
new file mode 100644
index 0000000..fcaab6b
--- /dev/null
+++ b/doc/guides/prog_guide/toeplitz_hash_lib.rst
@@ -0,0 +1,289 @@
+..  SPDX-License-Identifier: BSD-3-Clause
+    Copyright(c) 2021 Intel Corporation.
+
+.. _Thash_Library:
+
+Toeplitz Hash Library
+=====================
+
+DPDK provides a Toeplitz Hash Library to calculate the Toeplitz hash function
+and to use its properties. The Toeplitz hash function is commonly used in a
+wide range of NICs to calculate the RSS hash sum to spread the traffic among
+the queues.
+
+.. _figure_rss_queue_assign:
+
+.. figure:: img/rss_queue_assign.*
+
+   RSS queue assignment example
+
+
+Toeplitz hash function API
+--------------------------
+
+There are two functions that provide calculation of the Toeplitz hash sum:
+
+* rte_softrss()
+
+* rte_softrss_be()
+
+Both of these functions take the parameters:
+
+* A pointer to the tuple, containing fields extracted from the packet.
+
+* A length of this tuple counted in double words.
+
+* A pointer to the RSS hash key corresponding to the one installed on the NIC.
+
+Both functions expect the tuple to be in "host" byte order and a multiple of 4
+bytes in length. The ``rte_softrss()`` function expects the ``rss_key`` to be
+exactly the same as the one installed on the NIC. The ``rte_softrss_be``
+function is a faster implementation, but it expects ``rss_key`` to be
+converted to the host byte order.
+
+Predictable RSS
+---------------
+
+In some usecases it is useful to have a way to find partial collisions of the
+Toeplitz hash function. In figure :numref:`figure_rss_queue_assign` only a few
+of the least significant bits (LSB) of the hash value are used to indicate an
+entry in the RSS Redirection Table (ReTa) and thus the index of the queue. So,
+in this case it would be useful to find another tuple whose hash has the same
+LSB's as the hash from the original tuple.
+
+For example:
+
+- In the case of SNAT (Source Network Address Translation) it is possible to
+  find a special source port number on translation so that the hash of
+  returning packets, of the given connection, will have desired LSB's.
+- In the case of MPLS (Multiprotocol Label Switching), if the MPLS tag is used
+  in the hash calculation, the Label Switching router can allocate a special
+  MPLS tag to bind an LSP (Label Switching Path) to a given queue. This method
+  can be used with the allocation of IPSec SPI, VXLan VNI, etc., to bind the
+  tunnel to the desired queue.
+- In the case of a TCP stack, a special source port could be chosen for
+  outgoing connections, such that the response packets will be assigned to the
+  desired queue.
+
+This functionality is provided by the API shown below. The API consists of 3
+parts:
+
+* Create the thash context.
+
+* Create the thash helper, associated with a context.
+
+* Use the helper run time to calculate the adjustable bits of the tuple to
+  ensure a collision.
+
+Thash context
+~~~~~~~~~~~~~
+
+The function ``rte_thash_init_ctx()`` initializes the context struct
+associated with a particular NIC or a set of NICs
+
+It expects:
+
+* The log2 value of the size of the RSS redirection table for the
+  corresponding NIC. It reflects the number of least significant bits of the
+  hash value to produce a collision for.
+
+* A predefined RSS hash key. This is optional, if ``NULL`` then a random key
+  will be initialized.
+
+* The length of the RSS hash key. This value is usually hardware/driver
+  specific and can be found in the NIC datasheet.
+
+* Optional flags, as shown below.
+
+Supported flags:
+
+* ``RTE_THASH_IGNORE_PERIOD_OVERFLOW`` - By default, and for security reasons,
+  the library prohibits generating a repeatable sequence in the hash key. This
+  flag disables such checking. The flag is mainly used for testing in the lab
+  to generate an RSS hash key with a uniform hash distribution, if the input
+  traffic also has a uniform distribution.
+
+* ``RTE_THASH_MINIMAL_SEQ`` - By default, the library generates a special bit
+  sequence in the hash key for all the bits of the subtuple. However, the
+  collision generation task requires only the ``log2(RETA_SZ)`` bits in the
+  subtuple. This flag forces the minimum bit sequence in the hash key to be
+  generated for the required ``log2(RETA_SZ)`` least significant bits of the
+  subtuple. The flag can be used in the case of a relatively large number of
+  helpers that may overlap with their corresponding bit sequences of RSS hash
+  keys.
+
+
+Thash helper
+~~~~~~~~~~~~
+
+The function ``rte_thash_add_helper()`` initializes the helper struct
+associated with a given context and a part of a target tuple of interest which
+could be altered to produce a hash collision. On success it writes a specially
+calculated bit sequence into the RSS hash key which is stored in the context
+and calculates a table with values to be XORed with a subtuple.
+
+It expects:
+
+* A pointer to the Thash context to be associated with.
+
+* A length of the subtuple to be modified. The length is counted in bits.
+
+* An offset of the subtuple to be modified from the beginning of the tuple. It
+  is also counted in bits.
+
+.. note::
+
+   Adding a helper changes the key stored in the corresponding context. So the
+   updated RSS hash key must be uploaded into the NIC after creating all the
+   required helpers.
+
+
+Calculation of the complementary bits to adjust the subtuple
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``rte_thash_get_complement()`` function returns a special bit sequence
+with length ``N = log2(rss_reta_sz)`` (for the ``rss_reta_sz`` provided at
+context initialization) to be xored with N least significant bits of the
+subtuple.
+
+It expects:
+
+* A corresponding helper created for a given subtuple of the tuple.
+
+* A hash value of the tuple we want to alter.
+
+* The desired LSB's of the hash value the user expects to have.
+
+After the returned bit sequence has been XORed with the subtuple, the resulted
+LSB's of the new hash value, calculated from the altered tuple, will be the
+same as in ``desired_hash``.
+
+
+Adjust tuple API
+~~~~~~~~~~~~~~~~~
+
+The ``rte_thash_get_complement()`` function is a user-friendly wrapper around
+a number of other functions. It alters a passed tuple to meet the above
+mentioned requirements around the desired hash LSB's.
+
+It expects:
+
+* A Thash context and helper.
+
+* A pointer to the tuple to be changed.
+
+* The length of the tuple.
+
+* A callback function and its userdata to check the tuple after it has been
+  changed.
+
+* The number of attempts to change the tuple. Basically, it makes sense if
+  there is a callback and a limit on the number of attempts to change the
+  tuple, if the callback function returns an error.
+
+
+Usecase example
+---------------
+
+There could be a number of different usecases, such as NAT, TCP stack, MPLS
+tag allocation, etc. In the following we will consider a SNAT application.
+
+Packets of a single bidirectional flow belonging to different directions can
+end up being assigned to different queues and thus processed by different
+lcores, as shown in :numref:`figure_predictable_snat_1`:
+
+.. _figure_predictable_snat_1:
+
+.. figure:: img/predictable_snat_1.*
+
+   Bidirectional flow packets distribution in general
+
+That leads to a situation where the same packet flow can be shared between two
+cores. Such a situation is not ideal from a performance perspective and
+requires extra synchronization efforts that might lead to various performance
+penalties, for example:
+
+* The connections table is global so locking/RCU on the flow insertion/removal
+  is required.
+
+* Connection metadata must be protected to avoid race conditions.
+
+* More cache pressure if a single connection metadata is kept in different
+  L1/L2 caches of a different CPU core.
+
+* Cache pressure/less cache locality on packet handover to the different cores.
+
+We can avoid all these penalties if it can be guaranteed that packets
+belonging to one bidirectional flow will be assigned to the same queue, as
+shown in :numref:`figure_predictable_snat_2`:
+
+.. _figure_predictable_snat_2:
+
+.. figure:: img/predictable_snat_2.*
+
+   Bidirectional flow packets distribution with predictable RSS
+
+
+To achieve this in a SNAT scenario it is possible to choose a source port not
+randomly, but using the predictable RSS library to produce a partial hash
+collision. This is shown in the code below.
+
+.. code-block:: c
+
+   int key_len = 40; /* The default Niantic RSS key length. */
+
+   /** The default Niantic RSS reta size = 2^7 entries, LSBs of hash value are
+    *  used as an indexes in RSS ReTa. */
+   int reta_sz = 7;
+   int ret;
+   struct rte_thash_ctx *ctx;
+
+   uint8_t initial_key[key_len] = {0}; /* Default empty key. */
+
+   /* Create and initialize a new thash context. */
+   ctx = rte_thash_init_ctx("SNAT", key_len, reta_sz, initial_key, 0);
+
+   /** Add a helper and specify the variable tuple part and its length. In the
+    *  SNAT case we want to choose a new source port on SNAT translation in a
+    *  way that the reverse tuple will have the same LSBs as the original
+    *  direction tuple so that the selected source port will be the
+    *  destination port on reply.
+    */
+   ret = rte_thash_add_helper(ctx, "snat", sizeof(uint16_t) * 8,
+                              offsetof(union rte_thash_tuple, v4.dport) * 8);
+
+   if (ret != 0)
+       return ret;
+
+   /* Get handler of the required helper. */
+   struct rte_thash_subtuple_helper *h = rte_thash_get_helper(ctx, "snat");
+
+   /** After calling rte_thash_add_helper() the initial_key passed on ctx
+    *  creation has been changed so we get the new one.
+    */
+   uint8_t *new_key = rte_thash_get_key(ctx);
+
+   union rte_thash_tuple tuple, rev_tuple;
+
+   /* A complete tuple from the packet. */
+   complete_tuple(mbuf, &tuple);
+
+   /* Calculate the RSS hash or get it from mbuf->hash.rss. */
+   uint32_t orig_hash = rte_softrss((uint32_t *)&tuple, RTE_THASH_V4_L4_LEN, new_key);
+
+   /** Complete the reverse tuple by translating the SRC address and swapping
+    *  src and dst addresses and ports.
+    */
+   get_rev_tuple(&rev_tuple, &tuple, new_ip);
+
+   /* Calculate the expected rss hash for the reverse tuple. */
+   uint32_t rev_hash = rte_softrss((uint32_t *)&rev_tuple, RTE_THASH_V4_L4_LEN, new_key);
+
+   /* Get the adjustment bits for the src port to get a new port. */
+   uint32_t adj = rte_thash_get_compliment(h, rev_hash, orig_hash);
+
+   /* Adjust the source port bits. */
+   uint16_t new_sport = tuple.v4.sport ^ adj;
+
+   /* Make an actual packet translation. */
+   do_snat(mbuf, new_ip, new_sport);
diff --git a/doc/guides/rel_notes/release_21_05.rst b/doc/guides/rel_notes/release_21_05.rst
index 1c2e093..3b14822 100644
--- a/doc/guides/rel_notes/release_21_05.rst
+++ b/doc/guides/rel_notes/release_21_05.rst
@@ -203,6 +203,12 @@ New Features
     the events across multiple stages.
   * This also reduced the scheduling overhead on a event device.
 
+* **Added Predictable RSS functionality to the Toeplitz hash library.**
+
+  This feature provides functionality for finding collisions of the Toeplitz
+  hash function - the hash function used in NIC's to spread the traffic
+  among the queues. It can be used to get predictable mapping of the flows.
+
 * **Updated testpmd.**
 
   * Added a command line option to configure forced speed for Ethernet port.
