Skip to content

Instantly share code, notes, and snippets.

@miku
Last active December 8, 2018 03:43
Show Gist options
  • Save miku/47950c4abd90319ec85d to your computer and use it in GitHub Desktop.
Save miku/47950c4abd90319ec85d to your computer and use it in GitHub Desktop.
Golang XML worker queue example

Parallel XML processing

When working with large XML files, only a streaming approach is feasible, which also helps to work on the data in parallel, since only one record needs to be cosidered at a time.

First version of wikikit parsed the XML element in the main routine and the fan out the parsed struct to the workers. Thanks to pprof, it got clear, why this did not yield major speed improvements - most time was spent in converting a XML token into a struct.

Single routine, tokenization only

Needs about 6.268s to decode and parse 10000 XML elements.

Skipping struct parsing:

decoder := xml.NewDecoder(handle)
var inElement string

for {
	t, _ := decoder.Token()
	if t == nil {
		break
	}
	switch se := t.(type) {
	case xml.StartElement:
		inElement = se.Name.Local
		if inElement == "page" {
			// ...
		}
	default:
	}
}

gets the speed down to 0.433s. Just tokenizing through a 34G XML file with a single routine takes 39m21.517s saturating a single core.

Time distribution looks like this: https://cdn.mediacru.sh/DYyiKLBA7U2i.svg

Single routine, struct loading

decoder := xml.NewDecoder(handle)
var inElement string
var p Page

for {
	// Read tokens from the XML document in a stream.
	t, _ := decoder.Token()
	if t == nil {
		break
	}
	// Inspect the type of the token just read.
	switch se := t.(type) {
	case xml.StartElement:
		// If we just read a StartElement token
		inElement = se.Name.Local
		// ...and its name is "page"
		if inElement == "page" {
			// decode a whole chunk of following XML into the
			// variable p which is a Page (se above)
			decoder.DecodeElement(&p, &se)
		}
	default:
	}
}

Observation

Most time is spent actually getting the token out. DecodeElement is not unsignificant. Grepping for </page> in 34G takes finds 15671705 occurences and takes about 16m35.992s.

Distributing decoder.Token() among workers seems not that easy. Workaround could be to

  • split the file into N pieces, while preserving the XML structure,
  • write the N pieces to N files,
  • convert each file in a separate routine,
  • concatenate the result into a single file.
#!/usr/bin/env bash
go tool pprof --web xmlp $1
all:
go fmt xmlp.go
go build xmlp.go
clean:
rm -f xmlp
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Display the source blob
Display the rendered blob
Raw
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<!-- Generated by graphviz version 2.26.3 (20100126.1600)
-->
<!-- Title: xmlp; 204754 samples Pages: 1 -->
<svg width="100%" height="100%"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<script type="text/ecmascript"><![CDATA[
// SVGPan
// http://www.cyberz.org/blog/2009/12/08/svgpan-a-javascript-svg-panzoomdrag-library/
// Local modification: if(true || ...) below to force panning, never moving.
// Local modification: add clamping to fix bug in handleMouseWheel.
/**
* SVGPan library 1.2
* ====================
*
* Given an unique existing element with id "viewport", including the
* the library into any SVG adds the following capabilities:
*
* - Mouse panning
* - Mouse zooming (using the wheel)
* - Object dargging
*
* Known issues:
*
* - Zooming (while panning) on Safari has still some issues
*
* Releases:
*
* 1.2, Sat Mar 20 08:42:50 GMT 2010, Zeng Xiaohui
* Fixed a bug with browser mouse handler interaction
*
* 1.1, Wed Feb 3 17:39:33 GMT 2010, Zeng Xiaohui
* Updated the zoom code to support the mouse wheel on Safari/Chrome
*
* 1.0, Andrea Leofreddi
* First release
*
* This code is licensed under the following BSD license:
*
* Copyright 2009-2010 Andrea Leofreddi <a.leofreddi@itcharm.com>. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL Andrea Leofreddi OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of Andrea Leofreddi.
*/
var root = document.documentElement;
var state = 'none', stateTarget, stateOrigin, stateTf;
setupHandlers(root);
/**
* Register handlers
*/
function setupHandlers(root){
setAttributes(root, {
"onmouseup" : "add(evt)",
"onmousedown" : "handleMouseDown(evt)",
"onmousemove" : "handleMouseMove(evt)",
"onmouseup" : "handleMouseUp(evt)",
//"onmouseout" : "handleMouseUp(evt)", // Decomment this to stop the pan functionality when dragging out of the SVG element
});
if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0)
window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari
else
window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others
var g = svgDoc.getElementById("svg");
g.width = "100%";
g.height = "100%";
}
/**
* Instance an SVGPoint object with given event coordinates.
*/
function getEventPoint(evt) {
var p = root.createSVGPoint();
p.x = evt.clientX;
p.y = evt.clientY;
return p;
}
/**
* Sets the current transform matrix of an element.
*/
function setCTM(element, matrix) {
var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")";
element.setAttribute("transform", s);
}
/**
* Dumps a matrix to a string (useful for debug).
*/
function dumpMatrix(matrix) {
var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n 0, 0, 1 ]";
return s;
}
/**
* Sets attributes of an element.
*/
function setAttributes(element, attributes){
for (i in attributes)
element.setAttributeNS(null, i, attributes[i]);
}
/**
* Handle mouse move event.
*/
function handleMouseWheel(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
var delta;
if(evt.wheelDelta)
delta = evt.wheelDelta / 3600; // Chrome/Safari
else
delta = evt.detail / -90; // Mozilla
var z = 1 + delta; // Zoom factor: 0.9/1.1
// Clamp to reasonable values.
// The 0.1 check is important because
// a very large scroll can turn into a
// negative z, which rotates the image 180 degrees.
if(z < 0.1)
z = 0.1;
if(z > 10.0)
z = 10.0;
var g = svgDoc.getElementById("viewport");
var p = getEventPoint(evt);
p = p.matrixTransform(g.getCTM().inverse());
// Compute new scale matrix in current mouse position
var k = root.createSVGMatrix().translate(p.x, p.y).scale(z).translate(-p.x, -p.y);
setCTM(g, g.getCTM().multiply(k));
stateTf = stateTf.multiply(k.inverse());
}
/**
* Handle mouse move event.
*/
function handleMouseMove(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
var g = svgDoc.getElementById("viewport");
if(state == 'pan') {
// Pan mode
var p = getEventPoint(evt).matrixTransform(stateTf);
setCTM(g, stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y));
} else if(state == 'move') {
// Move mode
var p = getEventPoint(evt).matrixTransform(g.getCTM().inverse());
setCTM(stateTarget, root.createSVGMatrix().translate(p.x - stateOrigin.x, p.y - stateOrigin.y).multiply(g.getCTM().inverse()).multiply(stateTarget.getCTM()));
stateOrigin = p;
}
}
/**
* Handle click event.
*/
function handleMouseDown(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
var g = svgDoc.getElementById("viewport");
if(true || evt.target.tagName == "svg") {
// Pan mode
state = 'pan';
stateTf = g.getCTM().inverse();
stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
} else {
// Move mode
state = 'move';
stateTarget = evt.target;
stateTf = g.getCTM().inverse();
stateOrigin = getEventPoint(evt).matrixTransform(stateTf);
}
}
/**
* Handle mouse button release event.
*/
function handleMouseUp(evt) {
if(evt.preventDefault)
evt.preventDefault();
evt.returnValue = false;
var svgDoc = evt.target.ownerDocument;
if(state == 'pan' || state == 'move') {
// Quit pan mode
state = '';
}
}
]]></script>
<g id="viewport" transform="translate(0,0)">
<g id="viewport" class="graph" transform="scale(1 1) rotate(0) translate(4 2566)">
<title>xmlp; 204754 samples</title>
<polygon fill="white" stroke="white" points="-4,5 -4,-2566 2307,-2566 2307,5 -4,5"/>
<!-- Legend -->
<g id="node1" class="node"><title>Legend</title>
<text text-anchor="start" x="194" y="-2535.9" font-family="Times Roman,serif" font-size="24.00">xmlp</text>
<text text-anchor="start" x="194" y="-2506.9" font-family="Times Roman,serif" font-size="24.00">Total samples: 204754</text>
<text text-anchor="start" x="194" y="-2477.9" font-family="Times Roman,serif" font-size="24.00">Focusing on: 204754</text>
<text text-anchor="start" x="194" y="-2448.9" font-family="Times Roman,serif" font-size="24.00">Dropped nodes with &lt;= 1023 abs(samples)</text>
<text text-anchor="start" x="194" y="-2419.9" font-family="Times Roman,serif" font-size="24.00">Dropped edges with &lt;= 204 samples</text>
</g>
<!-- N1 -->
<g id="node2" class="node"><title>N1</title>
<polygon fill="none" stroke="black" points="850,-2505.5 746,-2505.5 746,-2464.5 850,-2464.5 850,-2505.5"/>
<text text-anchor="middle" x="798" y="-2494.21" font-family="Times Roman,serif" font-size="8.10">runtime.entersyscall</text>
<text text-anchor="end" x="842" y="-2483.21" font-family="Times Roman,serif" font-size="8.10">1 (0.0%)</text>
<text text-anchor="end" x="842" y="-2472.21" font-family="Times Roman,serif" font-size="8.10">of 193933 (94.7%)</text>
</g>
<!-- N2 -->
<g id="node3" class="node"><title>N2</title>
<polygon fill="none" stroke="black" points="845,-2345 751,-2345 751,-2307 845,-2307 845,-2345"/>
<text text-anchor="middle" x="798" y="-2333.8" font-family="Times Roman,serif" font-size="8.00">runtime.ready</text>
<text text-anchor="end" x="837.5" y="-2323.8" font-family="Times Roman,serif" font-size="8.00">0 (0.0%)</text>
<text text-anchor="end" x="837.5" y="-2313.8" font-family="Times Roman,serif" font-size="8.00">of 193933 (94.7%)</text>
</g>
<!-- N1&#45;&gt;N2 -->
<g id="edge56" class="edge"><title>N1&#45;&gt;N2</title>
<path fill="none" stroke="black" stroke-width="2" d="M798,-2464.21C798,-2436.5 798,-2387.29 798,-2355.68"/>
<polygon fill="black" stroke="black" points="801.5,-2355.3 798,-2345.3 794.5,-2355.3 801.5,-2355.3"/>
<text text-anchor="middle" x="825.5" y="-2377.4" font-family="Times Roman,serif" font-size="14.00">193933</text>
</g>
<!-- N3 -->
<g id="node4" class="node"><title>N3</title>
<polygon fill="none" stroke="black" points="850,-2243.5 746,-2243.5 746,-2202.5 850,-2202.5 850,-2243.5"/>
<text text-anchor="middle" x="798" y="-2231.67" font-family="Times Roman,serif" font-size="8.70">main.func·001</text>
<text text-anchor="end" x="842" y="-2220.67" font-family="Times Roman,serif" font-size="8.70">35 (0.0%)</text>
<text text-anchor="end" x="842" y="-2209.67" font-family="Times Roman,serif" font-size="8.70">of 192351 (93.9%)</text>
</g>
<!-- N2&#45;&gt;N3 -->
<g id="edge82" class="edge"><title>N2&#45;&gt;N3</title>
<path fill="none" stroke="black" stroke-width="2" d="M798,-2306.63C798,-2291.76 798,-2270.95 798,-2253.81"/>
<polygon fill="black" stroke="black" points="801.5,-2253.7 798,-2243.7 794.5,-2253.7 801.5,-2253.7"/>
<text text-anchor="middle" x="825.5" y="-2267.4" font-family="Times Roman,serif" font-size="14.00">192351</text>
</g>
<!-- N51 -->
<g id="node52" class="node"><title>N51</title>
<polygon fill="none" stroke="black" points="946,-2243.5 868,-2243.5 868,-2202.5 946,-2202.5 946,-2243.5"/>
<text text-anchor="middle" x="907" y="-2231.76" font-family="Times Roman,serif" font-size="8.60">main.main</text>
<text text-anchor="end" x="938.5" y="-2220.76" font-family="Times Roman,serif" font-size="8.60">29 (0.0%)</text>
<text text-anchor="end" x="938.5" y="-2209.76" font-family="Times Roman,serif" font-size="8.60">of 1582 (0.8%)</text>
</g>
<!-- N2&#45;&gt;N51 -->
<g id="edge122" class="edge"><title>N2&#45;&gt;N51</title>
<path fill="none" stroke="black" d="M824.718,-2306.86C835.151,-2298.96 846.987,-2289.45 857,-2280 866.349,-2271.18 875.841,-2260.79 884.007,-2251.32"/>
<polygon fill="black" stroke="black" points="886.727,-2253.52 890.522,-2243.63 881.387,-2249 886.727,-2253.52"/>
<text text-anchor="middle" x="892.5" y="-2267.4" font-family="Times Roman,serif" font-size="14.00">1582</text>
</g>
<!-- N4 -->
<g id="node5" class="node"><title>N4</title>
<polygon fill="none" stroke="black" points="910,-2147.5 686,-2147.5 686,-2106.5 910,-2106.5 910,-2147.5"/>
<text text-anchor="middle" x="798" y="-2135.85" font-family="Times Roman,serif" font-size="8.50">encoding/xml.(*Decoder).unmarshalTextInterface</text>
<text text-anchor="end" x="902" y="-2124.85" font-family="Times Roman,serif" font-size="8.50">19 (0.0%)</text>
<text text-anchor="end" x="902" y="-2113.85" font-family="Times Roman,serif" font-size="8.50">of 192211 (93.9%)</text>
</g>
<!-- N3&#45;&gt;N4 -->
<g id="edge128" class="edge"><title>N3&#45;&gt;N4</title>
<path fill="none" stroke="black" stroke-width="2" d="M798,-2202.17C798,-2189.21 798,-2172.32 798,-2157.83"/>
<polygon fill="black" stroke="black" points="801.5,-2157.79 798,-2147.79 794.5,-2157.79 801.5,-2157.79"/>
<text text-anchor="middle" x="825.5" y="-2171.4" font-family="Times Roman,serif" font-size="14.00">192211</text>
</g>
<!-- N5 -->
<g id="node6" class="node"><title>N5</title>
<polygon fill="none" stroke="black" points="912,-2051.5 684,-2051.5 684,-1998.5 912,-1998.5 912,-2051.5"/>
<text text-anchor="middle" x="798" y="-2036.79" font-family="Times Roman,serif" font-size="11.90">encoding/xml.(*Decoder).unmarshal</text>
<text text-anchor="end" x="904" y="-2021.79" font-family="Times Roman,serif" font-size="11.90">1246 (0.6%)</text>
<text text-anchor="end" x="904" y="-2006.79" font-family="Times Roman,serif" font-size="11.90">of 192190 (93.9%)</text>
</g>
<!-- N4&#45;&gt;N5 -->
<g id="edge48" class="edge"><title>N4&#45;&gt;N5</title>
<path fill="none" stroke="black" stroke-width="2" d="M798,-2106.36C798,-2093.59 798,-2076.83 798,-2061.84"/>
<polygon fill="black" stroke="black" points="801.5,-2061.81 798,-2051.81 794.5,-2061.81 801.5,-2061.81"/>
<text text-anchor="middle" x="825.5" y="-2075.4" font-family="Times Roman,serif" font-size="14.00">192190</text>
</g>
<!-- N6 -->
<g id="node7" class="node"><title>N6</title>
<polygon fill="none" stroke="black" points="1196,-1836.5 1000,-1836.5 1000,-1789.5 1196,-1789.5 1196,-1836.5"/>
<text text-anchor="middle" x="1098" y="-1823.23" font-family="Times Roman,serif" font-size="10.30">encoding/xml.(*Decoder).pushEOF</text>
<text text-anchor="end" x="1188.5" y="-1810.23" font-family="Times Roman,serif" font-size="10.30">448 (0.2%)</text>
<text text-anchor="end" x="1188.5" y="-1797.23" font-family="Times Roman,serif" font-size="10.30">of 180973 (88.4%)</text>
</g>
<!-- N5&#45;&gt;N6 -->
<g id="edge162" class="edge"><title>N5&#45;&gt;N6</title>
<path fill="none" stroke="black" stroke-width="2" d="M895.938,-1998.44C929.159,-1985.92 964.727,-1968.26 992,-1944 1025.48,-1914.22 1056.84,-1873.19 1076.63,-1845.02"/>
<polygon fill="black" stroke="black" points="1079.57,-1846.93 1082.39,-1836.72 1073.82,-1842.94 1079.57,-1846.93"/>
<text text-anchor="middle" x="1064.5" y="-1915.4" font-family="Times Roman,serif" font-size="14.00">137324</text>
</g>
<!-- N7 -->
<g id="node8" class="node"><title>N7</title>
<polygon fill="none" stroke="black" points="872,-1944 724,-1944 724,-1894 872,-1894 872,-1944"/>
<text text-anchor="middle" x="798" y="-1930.37" font-family="Times Roman,serif" font-size="10.70">encoding/xml.getTypeInfo</text>
<text text-anchor="end" x="864.5" y="-1916.37" font-family="Times Roman,serif" font-size="10.70">598 (0.3%)</text>
<text text-anchor="end" x="864.5" y="-1902.37" font-family="Times Roman,serif" font-size="10.70">of 180278 (88.0%)</text>
</g>
<!-- N5&#45;&gt;N7 -->
<g id="edge130" class="edge"><title>N5&#45;&gt;N7</title>
<path fill="none" stroke="black" stroke-width="2" d="M798,-1998.25C798,-1984.93 798,-1968.64 798,-1954.3"/>
<polygon fill="black" stroke="black" points="801.5,-1954.28 798,-1944.28 794.5,-1954.28 801.5,-1954.28"/>
<text text-anchor="middle" x="825.5" y="-1967.4" font-family="Times Roman,serif" font-size="14.00">180278</text>
</g>
<!-- N9 -->
<g id="node10" class="node"><title>N9</title>
<polygon fill="none" stroke="black" points="728,-1835 574,-1835 574,-1791 728,-1791 728,-1835"/>
<text text-anchor="middle" x="651" y="-1822.99" font-family="Times Roman,serif" font-size="8.90">encoding/xml.(*Decoder).Skip</text>
<text text-anchor="end" x="720.5" y="-1810.99" font-family="Times Roman,serif" font-size="8.90">71 (0.0%)</text>
<text text-anchor="end" x="720.5" y="-1798.99" font-family="Times Roman,serif" font-size="8.90">of 133594 (65.2%)</text>
</g>
<!-- N5&#45;&gt;N9 -->
<g id="edge14" class="edge"><title>N5&#45;&gt;N9</title>
<path fill="none" stroke="black" d="M683.652,-1999.24C667.586,-1993.85 651.593,-1987.48 637,-1980 614.207,-1968.32 603.095,-1967.08 592,-1944 575.549,-1909.77 599.534,-1869.92 621.677,-1843.24"/>
<polygon fill="black" stroke="black" points="624.557,-1845.26 628.443,-1835.41 619.258,-1840.69 624.557,-1845.26"/>
<text text-anchor="middle" x="610.5" y="-1915.4" font-family="Times Roman,serif" font-size="14.00">2691</text>
</g>
<!-- N29 -->
<g id="node30" class="node"><title>N29</title>
<polygon fill="none" stroke="black" points="299,-564 175,-564 175,-514 299,-514 299,-564"/>
<text text-anchor="middle" x="237" y="-550.19" font-family="Times Roman,serif" font-size="10.90">runtime.SetFinalizer</text>
<text text-anchor="end" x="291.5" y="-536.19" font-family="Times Roman,serif" font-size="10.90">701 (0.3%)</text>
<text text-anchor="end" x="291.5" y="-522.19" font-family="Times Roman,serif" font-size="10.90">of 7348 (3.6%)</text>
</g>
<!-- N5&#45;&gt;N29 -->
<g id="edge178" class="edge"><title>N5&#45;&gt;N29</title>
<path fill="none" stroke="black" d="M683.666,-2021.42C463.012,-2012.97 0,-1987.13 0,-1919 0,-1919 0,-1919 0,-655 0,-607.194 37.1805,-605.164 79,-582 105.246,-567.463 136.705,-557.603 164.618,-551.036"/>
<polygon fill="black" stroke="black" points="165.737,-554.372 174.725,-548.762 164.201,-547.542 165.737,-554.372"/>
<text text-anchor="middle" x="14" y="-1297.4" font-family="Times Roman,serif" font-size="14.00">280</text>
</g>
<!-- N35 -->
<g id="node36" class="node"><title>N35</title>
<polygon fill="none" stroke="black" points="982,-1839.5 784,-1839.5 784,-1786.5 982,-1786.5 982,-1839.5"/>
<text text-anchor="middle" x="883" y="-1824.7" font-family="Times Roman,serif" font-size="12.00">encoding/xml.(*Decoder).Token</text>
<text text-anchor="end" x="974.5" y="-1809.7" font-family="Times Roman,serif" font-size="12.00">1305 (0.6%)</text>
<text text-anchor="end" x="974.5" y="-1794.7" font-family="Times Roman,serif" font-size="12.00">of 5256 (2.6%)</text>
</g>
<!-- N5&#45;&gt;N35 -->
<g id="edge74" class="edge"><title>N5&#45;&gt;N35</title>
<path fill="none" stroke="black" d="M880.656,-1998.43C905.784,-1986.04 930.55,-1968.46 945,-1944 963.695,-1912.35 940.866,-1874.17 917.816,-1847.21"/>
<polygon fill="black" stroke="black" points="920.284,-1844.72 911.023,-1839.57 915.053,-1849.37 920.284,-1844.72"/>
<text text-anchor="middle" x="969.5" y="-1915.4" font-family="Times Roman,serif" font-size="14.00">1061</text>
</g>
<!-- N8 -->
<g id="node9" class="node"><title>N8</title>
<polygon fill="none" stroke="black" points="1224,-1731.5 972,-1731.5 972,-1672.5 1224,-1672.5 1224,-1731.5"/>
<text text-anchor="middle" x="1098" y="-1715.26" font-family="Times Roman,serif" font-size="13.60">encoding/xml.(*Decoder).rawToken</text>
<text text-anchor="end" x="1216" y="-1698.26" font-family="Times Roman,serif" font-size="13.60">2563 (1.3%)</text>
<text text-anchor="end" x="1216" y="-1681.26" font-family="Times Roman,serif" font-size="13.60">of 178650 (87.3%)</text>
</g>
<!-- N6&#45;&gt;N8 -->
<g id="edge22" class="edge"><title>N6&#45;&gt;N8</title>
<path fill="none" stroke="black" stroke-width="2" d="M1098,-1789.46C1098,-1775.68 1098,-1757.91 1098,-1741.99"/>
<polygon fill="black" stroke="black" points="1101.5,-1741.86 1098,-1731.86 1094.5,-1741.86 1101.5,-1741.86"/>
<text text-anchor="middle" x="1125.5" y="-1755.4" font-family="Times Roman,serif" font-size="14.00">178650</text>
</g>
<!-- N30 -->
<g id="node31" class="node"><title>N30</title>
<polygon fill="none" stroke="black" points="486,-1618 382,-1618 382,-1568 486,-1568 486,-1618"/>
<text text-anchor="middle" x="434" y="-1604.01" font-family="Times Roman,serif" font-size="11.10">runtime.convI2E</text>
<text text-anchor="end" x="478.5" y="-1590.01" font-family="Times Roman,serif" font-size="11.10">784 (0.4%)</text>
<text text-anchor="end" x="478.5" y="-1576.01" font-family="Times Roman,serif" font-size="11.10">of 7154 (3.5%)</text>
</g>
<!-- N6&#45;&gt;N30 -->
<g id="edge144" class="edge"><title>N6&#45;&gt;N30</title>
<path fill="none" stroke="black" d="M1005.94,-1789.48C854.493,-1750.5 565.093,-1674.77 521,-1654 504.12,-1646.05 486.997,-1634.86 472.458,-1624.23"/>
<polygon fill="black" stroke="black" points="474.322,-1621.25 464.218,-1618.06 470.129,-1626.86 474.322,-1621.25"/>
<text text-anchor="middle" x="804.5" y="-1698.4" font-family="Times Roman,serif" font-size="14.00">1147</text>
</g>
<!-- N7&#45;&gt;N6 -->
<g id="edge60" class="edge"><title>N7&#45;&gt;N6</title>
<path fill="none" stroke="black" stroke-width="1.23971" d="M869.096,-1893.88C915.052,-1877.64 974.821,-1856.52 1021.76,-1839.94"/>
<polygon fill="black" stroke="black" points="1023.01,-1843.21 1031.27,-1836.58 1020.68,-1836.61 1023.01,-1843.21"/>
<text text-anchor="middle" x="988" y="-1863.4" font-family="Times Roman,serif" font-size="14.00">42306</text>
</g>
<!-- N7&#45;&gt;N7 -->
<g id="edge150" class="edge"><title>N7&#45;&gt;N7</title>
<path fill="none" stroke="black" d="M872.36,-1927.75C882.916,-1926.33 890,-1923.42 890,-1919 890,-1916.17 887.093,-1913.96 882.228,-1912.36"/>
<polygon fill="black" stroke="black" points="882.871,-1908.92 872.36,-1910.25 881.409,-1915.76 882.871,-1908.92"/>
<text text-anchor="middle" x="913" y="-1915.4" font-family="Times Roman,serif" font-size="14.00">28907</text>
</g>
<!-- N7&#45;&gt;N9 -->
<g id="edge158" class="edge"><title>N7&#45;&gt;N9</title>
<path fill="none" stroke="black" stroke-width="2" d="M723.857,-1898.45C710.665,-1892.61 697.73,-1885.23 687,-1876 677.079,-1867.46 669.281,-1855.48 663.516,-1844.25"/>
<polygon fill="black" stroke="black" points="666.612,-1842.61 659.151,-1835.09 660.293,-1845.62 666.612,-1842.61"/>
<text text-anchor="middle" x="714.5" y="-1863.4" font-family="Times Roman,serif" font-size="14.00">130903</text>
</g>
<!-- N7&#45;&gt;N29 -->
<g id="edge38" class="edge"><title>N7&#45;&gt;N29</title>
<path fill="none" stroke="black" d="M789.996,-1893.86C778.329,-1858.95 755.972,-1798.64 737,-1786 689.355,-1754.25 278.609,-1776.59 222,-1768 161.879,-1758.88 135.222,-1772.65 90,-1732 59.1267,-1704.25 56,-1686.51 56,-1645 56,-1645 56,-1645 56,-655 56,-600.564 114.751,-570.503 165.308,-554.712"/>
<polygon fill="black" stroke="black" points="166.38,-558.045 174.963,-551.834 164.38,-551.337 166.38,-558.045"/>
<text text-anchor="middle" x="70" y="-1231.4" font-family="Times Roman,serif" font-size="14.00">760</text>
</g>
<!-- N7&#45;&gt;N35 -->
<g id="edge42" class="edge"><title>N7&#45;&gt;N35</title>
<path fill="none" stroke="black" d="M818.144,-1893.88C829.162,-1880.14 842.983,-1862.9 855.032,-1847.88"/>
<polygon fill="black" stroke="black" points="857.989,-1849.78 861.515,-1839.79 852.528,-1845.41 857.989,-1849.78"/>
<text text-anchor="middle" x="863.5" y="-1863.4" font-family="Times Roman,serif" font-size="14.00">4127</text>
</g>
<!-- N10 -->
<g id="node11" class="node"><title>N10</title>
<polygon fill="none" stroke="black" points="1459,-1513.5 987,-1513.5 987,-1394.5 1459,-1394.5 1459,-1513.5"/>
<text text-anchor="middle" x="1223" y="-1482.14" font-family="Times Roman,serif" font-size="30.40">encoding/xml.(*Decoder).text</text>
<text text-anchor="end" x="1451.5" y="-1445.14" font-family="Times Roman,serif" font-size="30.40">41263 (20.2%)</text>
<text text-anchor="end" x="1451.5" y="-1408.14" font-family="Times Roman,serif" font-size="30.40">of 76192 (37.2%)</text>
</g>
<!-- N8&#45;&gt;N10 -->
<g id="edge80" class="edge"><title>N8&#45;&gt;N10</title>
<path fill="none" stroke="black" stroke-width="1.79516" d="M1145.22,-1672.35C1163.94,-1658.18 1183.85,-1639.58 1196,-1618 1211.96,-1589.65 1219.1,-1554.46 1222.09,-1523.95"/>
<polygon fill="black" stroke="black" points="1225.59,-1524.06 1222.95,-1513.8 1218.62,-1523.47 1225.59,-1524.06"/>
<text text-anchor="middle" x="1237" y="-1589.4" font-family="Times Roman,serif" font-size="14.00">61261</text>
</g>
<!-- N11 -->
<g id="node12" class="node"><title>N11</title>
<polygon fill="none" stroke="black" points="782,-1332 522,-1332 522,-1270 782,-1270 782,-1332"/>
<text text-anchor="middle" x="652" y="-1315.04" font-family="Times Roman,serif" font-size="14.40">encoding/xml.(*Decoder).readName</text>
<text text-anchor="end" x="774.5" y="-1297.04" font-family="Times Roman,serif" font-size="14.40">3399 (1.7%)</text>
<text text-anchor="end" x="774.5" y="-1279.04" font-family="Times Roman,serif" font-size="14.40">of 43033 (21.0%)</text>
</g>
<!-- N8&#45;&gt;N11 -->
<g id="edge54" class="edge"><title>N8&#45;&gt;N11</title>
<path fill="none" stroke="black" stroke-width="1.25486" d="M1062.85,-1672.32C1044.08,-1656.36 1020.65,-1636.25 1000,-1618 887.894,-1518.94 758.173,-1399.46 693.353,-1339.41"/>
<polygon fill="black" stroke="black" points="695.489,-1336.62 685.775,-1332.39 690.731,-1341.75 695.489,-1336.62"/>
<text text-anchor="middle" x="945" y="-1537.4" font-family="Times Roman,serif" font-size="14.00">42823</text>
</g>
<!-- N12 -->
<g id="node13" class="node"><title>N12</title>
<polygon fill="none" stroke="black" points="1675,-1208 1445,-1208 1445,-1146 1675,-1146 1675,-1208"/>
<text text-anchor="middle" x="1560" y="-1191.4" font-family="Times Roman,serif" font-size="14.00">encoding/xml.(*Decoder).name</text>
<text text-anchor="end" x="1667" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">2911 (1.4%)</text>
<text text-anchor="end" x="1667" y="-1155.4" font-family="Times Roman,serif" font-size="14.00">of 40984 (20.0%)</text>
</g>
<!-- N8&#45;&gt;N12 -->
<g id="edge36" class="edge"><title>N8&#45;&gt;N12</title>
<path fill="none" stroke="black" stroke-width="1.20062" d="M1224.03,-1691.43C1398.94,-1675.04 1694,-1640.37 1694,-1593 1694,-1593 1694,-1593 1694,-1301 1694,-1263.63 1665.57,-1234.37 1634.9,-1213.69"/>
<polygon fill="black" stroke="black" points="1636.52,-1210.57 1626.21,-1208.08 1632.72,-1216.45 1636.52,-1210.57"/>
<text text-anchor="middle" x="1717" y="-1450.4" font-family="Times Roman,serif" font-size="14.00">40972</text>
</g>
<!-- N15 -->
<g id="node16" class="node"><title>N15</title>
<polygon fill="none" stroke="black" points="1187,-1616.5 1009,-1616.5 1009,-1569.5 1187,-1569.5 1187,-1616.5"/>
<text text-anchor="middle" x="1098" y="-1603.41" font-family="Times Roman,serif" font-size="10.10">encoding/xml.(*Decoder).nsname</text>
<text text-anchor="end" x="1179.5" y="-1590.41" font-family="Times Roman,serif" font-size="10.10">347 (0.2%)</text>
<text text-anchor="end" x="1179.5" y="-1577.41" font-family="Times Roman,serif" font-size="10.10">of 23246 (11.4%)</text>
</g>
<!-- N8&#45;&gt;N15 -->
<g id="edge140" class="edge"><title>N8&#45;&gt;N15</title>
<path fill="none" stroke="black" d="M1098,-1672.22C1098,-1658.11 1098,-1641.21 1098,-1626.65"/>
<polygon fill="black" stroke="black" points="1101.5,-1626.53 1098,-1616.53 1094.5,-1626.53 1101.5,-1626.53"/>
<text text-anchor="middle" x="1121" y="-1641.4" font-family="Times Roman,serif" font-size="14.00">23246</text>
</g>
<!-- N8&#45;&gt;N30 -->
<g id="edge62" class="edge"><title>N8&#45;&gt;N30</title>
<path fill="none" stroke="black" d="M971.799,-1698.04C833.758,-1692.47 622.014,-1679.95 546,-1654 532,-1649.22 530.822,-1643.38 518,-1636 510.366,-1631.61 502.233,-1627.16 494.148,-1622.88"/>
<polygon fill="black" stroke="black" points="495.552,-1619.66 485.069,-1618.13 492.306,-1625.87 495.552,-1619.66"/>
<text text-anchor="middle" x="564.5" y="-1641.4" font-family="Times Roman,serif" font-size="14.00">4950</text>
</g>
<!-- N45 -->
<g id="node46" class="node"><title>N45</title>
<polygon fill="none" stroke="black" points="624,-1618 528,-1618 528,-1568 624,-1568 624,-1618"/>
<text text-anchor="middle" x="576" y="-1604.46" font-family="Times Roman,serif" font-size="10.60">stackcacherefill</text>
<text text-anchor="end" x="616.5" y="-1590.46" font-family="Times Roman,serif" font-size="10.60">564 (0.3%)</text>
<text text-anchor="end" x="616.5" y="-1576.46" font-family="Times Roman,serif" font-size="10.60">of 2717 (1.3%)</text>
</g>
<!-- N8&#45;&gt;N45 -->
<g id="edge24" class="edge"><title>N8&#45;&gt;N45</title>
<path fill="none" stroke="black" d="M971.938,-1696.55C834.522,-1689.56 630.18,-1675.68 601,-1654 592.457,-1647.65 586.821,-1637.87 583.108,-1627.98"/>
<polygon fill="black" stroke="black" points="586.36,-1626.65 580,-1618.18 579.687,-1628.77 586.36,-1626.65"/>
<text text-anchor="middle" x="619.5" y="-1641.4" font-family="Times Roman,serif" font-size="14.00">2717</text>
</g>
<!-- N9&#45;&gt;N5 -->
<g id="edge160" class="edge"><title>N9&#45;&gt;N5</title>
<path fill="none" stroke="black" stroke-width="2" d="M646.605,-1835.29C642.393,-1862.99 639.361,-1910.66 660,-1944 673.109,-1965.18 693.96,-1981.45 715.523,-1993.67"/>
<polygon fill="black" stroke="black" points="713.995,-1996.82 724.458,-1998.49 717.318,-1990.66 713.995,-1996.82"/>
<text text-anchor="middle" x="687.5" y="-1915.4" font-family="Times Roman,serif" font-size="14.00">133401</text>
</g>
<!-- N10&#45;&gt;N10 -->
<g id="edge94" class="edge"><title>N10&#45;&gt;N10</title>
<path fill="none" stroke="black" stroke-width="1.0139" d="M1459.18,-1464.21C1470.41,-1461.65 1477,-1458.24 1477,-1454 1477,-1451.22 1474.16,-1448.79 1469.04,-1446.73"/>
<polygon fill="black" stroke="black" points="1469.77,-1443.3 1459.18,-1443.79 1467.76,-1450 1469.77,-1443.3"/>
<text text-anchor="middle" x="1500" y="-1450.4" font-family="Times Roman,serif" font-size="14.00">34600</text>
</g>
<!-- N10&#45;&gt;N11 -->
<g id="edge12" class="edge"><title>N10&#45;&gt;N11</title>
<path fill="none" stroke="black" d="M1000.6,-1394.41C924.948,-1374.14 843.071,-1352.2 777.69,-1334.68"/>
<polygon fill="black" stroke="black" points="778.32,-1331.22 767.755,-1332.02 776.508,-1337.99 778.32,-1331.22"/>
<text text-anchor="middle" x="934" y="-1363.4" font-family="Times Roman,serif" font-size="14.00">210</text>
</g>
<!-- N14 -->
<g id="node15" class="node"><title>N14</title>
<polygon fill="none" stroke="black" points="1441,-964 1135,-964 1135,-872 1441,-872 1441,-964"/>
<text text-anchor="middle" x="1288" y="-939.03" font-family="Times Roman,serif" font-size="23.30">bytes.(*Buffer).ReadByte</text>
<text text-anchor="end" x="1433.5" y="-911.03" font-family="Times Roman,serif" font-size="23.30">19267 (9.4%)</text>
<text text-anchor="end" x="1433.5" y="-883.03" font-family="Times Roman,serif" font-size="23.30">of 34279 (16.7%)</text>
</g>
<!-- N10&#45;&gt;N14 -->
<g id="edge186" class="edge"><title>N10&#45;&gt;N14</title>
<path fill="none" stroke="black" d="M1459.19,-1406.32C1522.94,-1388.43 1579.7,-1366.02 1599,-1340 1717.41,-1180.36 1413.36,-1223.74 1399,-1208 1341.24,-1144.68 1400.67,-1096.38 1366,-1018 1358.93,-1002.01 1348.73,-986.317 1338.04,-972.276"/>
<polygon fill="black" stroke="black" points="1340.64,-969.913 1331.71,-964.21 1335.13,-974.236 1340.64,-969.913"/>
<text text-anchor="middle" x="1417.5" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">2249</text>
</g>
<!-- N25 -->
<g id="node26" class="node"><title>N25</title>
<polygon fill="none" stroke="black" points="1802,-949 1610,-949 1610,-887 1802,-887 1802,-949"/>
<text text-anchor="middle" x="1706" y="-932.04" font-family="Times Roman,serif" font-size="14.40">unicode/utf8.EncodeRune</text>
<text text-anchor="end" x="1794" y="-914.04" font-family="Times Roman,serif" font-size="14.40">3369 (1.6%)</text>
<text text-anchor="end" x="1794" y="-896.04" font-family="Times Roman,serif" font-size="14.40">of 9834 (4.8%)</text>
</g>
<!-- N10&#45;&gt;N25 -->
<g id="edge174" class="edge"><title>N10&#45;&gt;N25</title>
<path fill="none" stroke="black" d="M1459.3,-1415.51C1555.22,-1399.13 1645.87,-1382.35 1655,-1376 1710.94,-1337.08 1715.03,-1309.73 1733,-1244 1748.7,-1186.55 1766.75,-1159.07 1733,-1110 1720.32,-1091.57 1698.68,-1110.43 1686,-1092 1667.36,-1064.9 1682.76,-1050.73 1686,-1018 1687.93,-998.468 1691.94,-977.1 1695.87,-959.148"/>
<polygon fill="black" stroke="black" points="1699.31,-959.812 1698.09,-949.288 1692.48,-958.274 1699.31,-959.812"/>
<text text-anchor="middle" x="1770.5" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">5807</text>
</g>
<!-- N26 -->
<g id="node27" class="node"><title>N26</title>
<polygon fill="none" stroke="black" points="1350,-1339.5 1096,-1339.5 1096,-1262.5 1350,-1262.5 1350,-1339.5"/>
<text text-anchor="middle" x="1223" y="-1318.49" font-family="Times Roman,serif" font-size="18.90">bufio.(*Reader).ReadSlice</text>
<text text-anchor="end" x="1342.5" y="-1295.49" font-family="Times Roman,serif" font-size="18.90">9694 (4.7%)</text>
<text text-anchor="end" x="1342.5" y="-1272.49" font-family="Times Roman,serif" font-size="18.90">of 9822 (4.8%)</text>
</g>
<!-- N10&#45;&gt;N26 -->
<g id="edge18" class="edge"><title>N10&#45;&gt;N26</title>
<path fill="none" stroke="black" d="M1223,-1394.41C1223,-1379.69 1223,-1364.09 1223,-1349.94"/>
<polygon fill="black" stroke="black" points="1226.5,-1349.93 1223,-1339.93 1219.5,-1349.93 1226.5,-1349.93"/>
<text text-anchor="middle" x="1241.5" y="-1363.4" font-family="Times Roman,serif" font-size="14.00">9822</text>
</g>
<!-- N27 -->
<g id="node28" class="node"><title>N27</title>
<polygon fill="none" stroke="black" points="662,-943 570,-943 570,-893 662,-893 662,-943"/>
<text text-anchor="middle" x="616" y="-929.28" font-family="Times Roman,serif" font-size="10.80">_rt0_go</text>
<text text-anchor="end" x="654.5" y="-915.28" font-family="Times Roman,serif" font-size="10.80">653 (0.3%)</text>
<text text-anchor="end" x="654.5" y="-901.28" font-family="Times Roman,serif" font-size="10.80">of 8060 (3.9%)</text>
</g>
<!-- N10&#45;&gt;N27 -->
<g id="edge168" class="edge"><title>N10&#45;&gt;N27</title>
<path fill="none" stroke="black" d="M986.66,-1444.84C806.731,-1432.77 579.08,-1404.78 513,-1340 479.135,-1306.8 494,-1282.42 494,-1235 494,-1235 494,-1235 494,-1055 494,-1010.08 531.035,-973.069 564.294,-948.89"/>
<polygon fill="black" stroke="black" points="566.475,-951.636 572.644,-943.022 562.45,-945.909 566.475,-951.636"/>
<text text-anchor="middle" x="512.5" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">5498</text>
</g>
<!-- N28 -->
<g id="node29" class="node"><title>N28</title>
<polygon fill="none" stroke="black" points="1251,-692 1055,-692 1055,-618 1251,-618 1251,-692"/>
<text text-anchor="middle" x="1153" y="-672.52" font-family="Times Roman,serif" font-size="17.20">bytes.(*Buffer).Write</text>
<text text-anchor="end" x="1243" y="-650.52" font-family="Times Roman,serif" font-size="17.20">6917 (3.4%)</text>
<text text-anchor="end" x="1243" y="-628.52" font-family="Times Roman,serif" font-size="17.20">of 7461 (3.6%)</text>
</g>
<!-- N10&#45;&gt;N28 -->
<g id="edge134" class="edge"><title>N10&#45;&gt;N28</title>
<path fill="none" stroke="black" d="M1316.86,-1394.4C1333.93,-1378.9 1349.36,-1360.66 1359,-1340 1373.66,-1308.59 1363.97,-1296.31 1359,-1262 1342.59,-1148.78 1359.46,-1097.31 1277,-1018 1273.79,-1014.91 1128.57,-967.642 1126,-964 1070.84,-885.694 1105.37,-767.033 1131.58,-701.896"/>
<polygon fill="black" stroke="black" points="1134.96,-702.88 1135.53,-692.301 1128.49,-700.211 1134.96,-702.88"/>
<text text-anchor="middle" x="1345" y="-1051.4" font-family="Times Roman,serif" font-size="14.00">618</text>
</g>
<!-- N31 -->
<g id="node32" class="node"><title>N31</title>
<polygon fill="none" stroke="black" points="1508,-817.5 1284,-817.5 1284,-746.5 1508,-746.5 1508,-817.5"/>
<text text-anchor="middle" x="1396" y="-798.47" font-family="Times Roman,serif" font-size="16.70">bytes.(*Buffer).ReadFrom</text>
<text text-anchor="end" x="1500.5" y="-777.47" font-family="Times Roman,serif" font-size="16.70">6235 (3.0%)</text>
<text text-anchor="end" x="1500.5" y="-756.47" font-family="Times Roman,serif" font-size="16.70">of 6795 (3.3%)</text>
</g>
<!-- N10&#45;&gt;N31 -->
<g id="edge16" class="edge"><title>N10&#45;&gt;N31</title>
<path fill="none" stroke="black" d="M1459.36,-1409.14C1508.67,-1398.07 1552.73,-1386.41 1576,-1376 1657.02,-1339.74 1665.76,-1294.87 1684,-1208 1689.66,-1181.03 1700.45,-1168.11 1684,-1146 1667.38,-1123.66 1646.33,-1144.62 1624,-1128 1595.68,-1106.93 1476.78,-914.808 1422.83,-826.29"/>
<polygon fill="black" stroke="black" points="1425.7,-824.269 1417.51,-817.547 1419.72,-827.909 1425.7,-824.269"/>
<text text-anchor="middle" x="1642.5" y="-1115.4" font-family="Times Roman,serif" font-size="14.00">1931</text>
</g>
<!-- N40 -->
<g id="node41" class="node"><title>N40</title>
<polygon fill="none" stroke="black" points="1590,-1324 1406,-1324 1406,-1278 1590,-1278 1590,-1324"/>
<text text-anchor="middle" x="1498" y="-1306.86" font-family="Times Roman,serif" font-size="14.60">bufio.(*Reader).Buffered</text>
<text text-anchor="end" x="1582" y="-1287.86" font-family="Times Roman,serif" font-size="14.60">3558 (1.7%)</text>
</g>
<!-- N10&#45;&gt;N40 -->
<g id="edge30" class="edge"><title>N10&#45;&gt;N40</title>
<path fill="none" stroke="black" d="M1357.91,-1394.47C1369.58,-1388.5 1381.09,-1382.31 1392,-1376 1415.57,-1362.38 1440.49,-1344.92 1460.24,-1330.28"/>
<polygon fill="black" stroke="black" points="1462.46,-1332.99 1468.37,-1324.19 1458.26,-1327.38 1462.46,-1332.99"/>
<text text-anchor="middle" x="1437.5" y="-1363.4" font-family="Times Roman,serif" font-size="14.00">3558</text>
</g>
<!-- N43 -->
<g id="node44" class="node"><title>N43</title>
<polygon fill="none" stroke="black" points="2144,-940 1976,-940 1976,-896 2144,-896 2144,-940"/>
<text text-anchor="middle" x="2060" y="-923.13" font-family="Times Roman,serif" font-size="14.30">unicode/utf8.RuneLen</text>
<text text-anchor="end" x="2136" y="-905.13" font-family="Times Roman,serif" font-size="14.30">3286 (1.6%)</text>
</g>
<!-- N10&#45;&gt;N43 -->
<g id="edge192" class="edge"><title>N10&#45;&gt;N43</title>
<path fill="none" stroke="black" d="M1459.13,-1405.7C1482.36,-1401.5 1505.61,-1397.52 1528,-1394 1595.2,-1383.43 1617.25,-1402.26 1680,-1376 1747.27,-1347.85 1741.47,-1308.06 1798,-1262 1910.28,-1170.52 2001.77,-1216.36 2076,-1092 2102.15,-1048.19 2087.03,-986.842 2073.59,-949.91"/>
<polygon fill="black" stroke="black" points="2076.71,-948.271 2069.87,-940.175 2070.17,-950.766 2076.71,-948.271"/>
<text text-anchor="middle" x="2050.5" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">2233</text>
</g>
<!-- N49 -->
<g id="node50" class="node"><title>N49</title>
<polygon fill="none" stroke="black" points="1040,-1321 846,-1321 846,-1281 1040,-1281 1040,-1321"/>
<text text-anchor="middle" x="943" y="-1305.84" font-family="Times Roman,serif" font-size="12.40">bufio.(*Reader).UnreadRune</text>
<text text-anchor="end" x="1032" y="-1289.84" font-family="Times Roman,serif" font-size="12.40">1615 (0.8%)</text>
</g>
<!-- N10&#45;&gt;N49 -->
<g id="edge46" class="edge"><title>N10&#45;&gt;N49</title>
<path fill="none" stroke="black" d="M1048.88,-1394.41C1037.83,-1388.71 1027.1,-1382.57 1017,-1376 997.418,-1363.25 978.954,-1344.55 965.368,-1329.02"/>
<polygon fill="black" stroke="black" points="967.879,-1326.57 958.727,-1321.23 962.552,-1331.11 967.879,-1326.57"/>
<text text-anchor="middle" x="1035.5" y="-1363.4" font-family="Times Roman,serif" font-size="14.00">1615</text>
</g>
<!-- N11&#45;&gt;N11 -->
<g id="edge84" class="edge"><title>N11&#45;&gt;N11</title>
<path fill="none" stroke="black" d="M782.378,-1310.56C793.242,-1308.51 800,-1305.32 800,-1301 800,-1298.23 797.226,-1295.93 792.377,-1294.09"/>
<polygon fill="black" stroke="black" points="792.942,-1290.62 782.378,-1291.44 791.144,-1297.39 792.942,-1290.62"/>
<text text-anchor="middle" x="814" y="-1297.4" font-family="Times Roman,serif" font-size="14.00">583</text>
</g>
<!-- N11&#45;&gt;N14 -->
<g id="edge10" class="edge"><title>N11&#45;&gt;N14</title>
<path fill="none" stroke="black" d="M782.241,-1271.24C800.559,-1267.73 819.205,-1264.51 837,-1262 946.87,-1246.52 979.971,-1276.7 1086,-1244 1116.45,-1234.61 1122.35,-1226.9 1148,-1208 1209.28,-1162.84 1240.65,-1160.42 1274,-1092 1291.7,-1055.68 1294.76,-1009.99 1293.63,-974.542"/>
<polygon fill="black" stroke="black" points="1297.12,-974.201 1293.18,-964.364 1290.13,-974.508 1297.12,-974.201"/>
<text text-anchor="middle" x="1287" y="-1115.4" font-family="Times Roman,serif" font-size="14.00">19090</text>
</g>
<!-- N16 -->
<g id="node17" class="node"><title>N16</title>
<polygon fill="none" stroke="black" points="980,-1084.5 782,-1084.5 782,-1025.5 980,-1025.5 980,-1084.5"/>
<text text-anchor="middle" x="881" y="-1068.53" font-family="Times Roman,serif" font-size="13.30">encoding/xml.isNameString</text>
<text text-anchor="end" x="972.5" y="-1051.53" font-family="Times Roman,serif" font-size="13.30">2262 (1.1%)</text>
<text text-anchor="end" x="972.5" y="-1034.53" font-family="Times Roman,serif" font-size="13.30">of 19498 (9.5%)</text>
</g>
<!-- N11&#45;&gt;N16 -->
<g id="edge40" class="edge"><title>N11&#45;&gt;N16</title>
<path fill="none" stroke="black" d="M644.831,-1269.91C638.933,-1236.16 635.22,-1182.24 661,-1146 675.319,-1125.87 724.229,-1104.7 772.306,-1087.85"/>
<polygon fill="black" stroke="black" points="773.589,-1091.11 781.9,-1084.54 771.306,-1084.49 773.589,-1091.11"/>
<text text-anchor="middle" x="679.5" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">2166</text>
</g>
<!-- N18 -->
<g id="node19" class="node"><title>N18</title>
<polygon fill="none" stroke="black" points="941,-1200.5 821,-1200.5 821,-1153.5 941,-1153.5 941,-1200.5"/>
<text text-anchor="middle" x="881" y="-1187.68" font-family="Times Roman,serif" font-size="9.80">encoding/xml.isName</text>
<text text-anchor="end" x="933" y="-1174.68" font-family="Times Roman,serif" font-size="9.80">264 (0.1%)</text>
<text text-anchor="end" x="933" y="-1161.68" font-family="Times Roman,serif" font-size="9.80">of 16785 (8.2%)</text>
</g>
<!-- N11&#45;&gt;N18 -->
<g id="edge196" class="edge"><title>N11&#45;&gt;N18</title>
<path fill="none" stroke="black" d="M709.491,-1269.87C745.977,-1250.11 792.832,-1224.74 828.346,-1205.51"/>
<polygon fill="black" stroke="black" points="830.453,-1208.35 837.58,-1200.51 827.12,-1202.2 830.453,-1208.35"/>
<text text-anchor="middle" x="810" y="-1231.4" font-family="Times Roman,serif" font-size="14.00">16785</text>
</g>
<!-- N11&#45;&gt;N28 -->
<g id="edge156" class="edge"><title>N11&#45;&gt;N28</title>
<path fill="none" stroke="black" d="M782.234,-1273.98C914.677,-1243.48 1106.21,-1189.95 1148,-1128 1156.96,-1114.71 1147.54,-1107.95 1146,-1092 1144.82,-1079.79 1144.25,-991.894 1137,-982 1124.52,-964.953 1104.78,-981.542 1093,-964 1030.08,-870.274 1047.54,-813.333 1093,-710 1094.44,-706.732 1096.18,-703.573 1098.14,-700.534"/>
<polygon fill="black" stroke="black" points="1101.1,-702.419 1104.22,-692.295 1095.47,-698.263 1101.1,-702.419"/>
<text text-anchor="middle" x="1155" y="-987.4" font-family="Times Roman,serif" font-size="14.00">375</text>
</g>
<!-- N55 -->
<g id="node56" class="node"><title>N55</title>
<polygon fill="none" stroke="black" points="803,-1200.5 707,-1200.5 707,-1153.5 803,-1153.5 803,-1200.5"/>
<text text-anchor="middle" x="755" y="-1187.59" font-family="Times Roman,serif" font-size="9.90">strings.LastIndex</text>
<text text-anchor="end" x="795.5" y="-1174.59" font-family="Times Roman,serif" font-size="9.90">281 (0.1%)</text>
<text text-anchor="end" x="795.5" y="-1161.59" font-family="Times Roman,serif" font-size="9.90">of 1218 (0.6%)</text>
</g>
<!-- N11&#45;&gt;N55 -->
<g id="edge68" class="edge"><title>N11&#45;&gt;N55</title>
<path fill="none" stroke="black" d="M677.991,-1269.71C693.531,-1251 713.216,-1227.3 728.793,-1208.55"/>
<polygon fill="black" stroke="black" points="731.497,-1210.77 735.194,-1200.84 726.112,-1206.3 731.497,-1210.77"/>
<text text-anchor="middle" x="730.5" y="-1231.4" font-family="Times Roman,serif" font-size="14.00">1218</text>
</g>
<!-- N13 -->
<g id="node14" class="node"><title>N13</title>
<polygon fill="none" stroke="black" points="1937,-1092 1695,-1092 1695,-1018 1937,-1018 1937,-1092"/>
<text text-anchor="middle" x="1816" y="-1072.07" font-family="Times Roman,serif" font-size="17.70">encoding/xml.EscapeText</text>
<text text-anchor="end" x="1929" y="-1050.07" font-family="Times Roman,serif" font-size="17.70">7714 (3.8%)</text>
<text text-anchor="end" x="1929" y="-1028.07" font-family="Times Roman,serif" font-size="17.70">of 37913 (18.5%)</text>
</g>
<!-- N12&#45;&gt;N13 -->
<g id="edge26" class="edge"><title>N12&#45;&gt;N13</title>
<path fill="none" stroke="black" d="M1625.26,-1145.9C1656.68,-1130.93 1694.79,-1112.76 1728.66,-1096.62"/>
<polygon fill="black" stroke="black" points="1730.57,-1099.59 1738.09,-1092.13 1727.56,-1093.27 1730.57,-1099.59"/>
<text text-anchor="middle" x="1718" y="-1115.4" font-family="Times Roman,serif" font-size="14.00">18977</text>
</g>
<!-- N12&#45;&gt;N14 -->
<g id="edge204" class="edge"><title>N12&#45;&gt;N14</title>
<path fill="none" stroke="black" d="M1540.69,-1145.82C1513.91,-1104.48 1462.19,-1031.02 1404,-982 1399.09,-977.867 1393.88,-973.875 1388.48,-970.042"/>
<polygon fill="black" stroke="black" points="1390.1,-966.908 1379.87,-964.152 1386.15,-972.686 1390.1,-966.908"/>
<text text-anchor="middle" x="1519.5" y="-1051.4" font-family="Times Roman,serif" font-size="14.00">2230</text>
</g>
<!-- N19 -->
<g id="node20" class="node"><title>N19</title>
<polygon fill="none" stroke="black" points="967,-944.5 849,-944.5 849,-891.5 967,-891.5 967,-944.5"/>
<text text-anchor="middle" x="908" y="-930.06" font-family="Times Roman,serif" font-size="11.60">runtime.stringiter2</text>
<text text-anchor="end" x="959.5" y="-915.06" font-family="Times Roman,serif" font-size="11.60">1078 (0.5%)</text>
<text text-anchor="end" x="959.5" y="-900.06" font-family="Times Roman,serif" font-size="11.60">of 14793 (7.2%)</text>
</g>
<!-- N12&#45;&gt;N19 -->
<g id="edge124" class="edge"><title>N12&#45;&gt;N19</title>
<path fill="none" stroke="black" d="M1444.81,-1148.55C1440.16,-1147.65 1435.54,-1146.79 1431,-1146 1394.66,-1139.68 1297.82,-1146.65 1266,-1128 1197.27,-1087.71 1227.78,-1026.94 1162,-982 1160.03,-980.655 1051.62,-953.602 977.081,-935.104"/>
<polygon fill="black" stroke="black" points="977.808,-931.678 967.259,-932.667 976.122,-938.472 977.808,-931.678"/>
<text text-anchor="middle" x="1250" y="-1051.4" font-family="Times Roman,serif" font-size="14.00">12906</text>
</g>
<!-- N12&#45;&gt;N27 -->
<g id="edge58" class="edge"><title>N12&#45;&gt;N27</title>
<path fill="none" stroke="black" d="M1444.83,-1148.46C1440.17,-1147.58 1435.54,-1146.76 1431,-1146 1346.45,-1131.95 1321.59,-1150.9 1239,-1128 1203.37,-1118.12 1187.67,-1120.4 1164,-1092 1131.56,-1053.07 1173.31,-1013.98 1134,-982 1108.61,-961.349 872.444,-968.303 840,-964 782.19,-956.334 716.973,-942.32 671.882,-931.767"/>
<polygon fill="black" stroke="black" points="672.545,-928.328 662.008,-929.437 670.937,-935.141 672.545,-928.328"/>
<text text-anchor="middle" x="1178" y="-1051.4" font-family="Times Roman,serif" font-size="14.00">735</text>
</g>
<!-- N42 -->
<g id="node43" class="node"><title>N42</title>
<polygon fill="none" stroke="black" points="2067,-1084.5 1955,-1084.5 1955,-1025.5 2067,-1025.5 2067,-1084.5"/>
<text text-anchor="middle" x="2011" y="-1068.8" font-family="Times Roman,serif" font-size="13.00">hash_insert</text>
<text text-anchor="end" x="2059" y="-1051.8" font-family="Times Roman,serif" font-size="13.00">2010 (1.0%)</text>
<text text-anchor="end" x="2059" y="-1034.8" font-family="Times Roman,serif" font-size="13.00">of 3359 (1.6%)</text>
</g>
<!-- N12&#45;&gt;N42 -->
<g id="edge100" class="edge"><title>N12&#45;&gt;N42</title>
<path fill="none" stroke="black" d="M1675.25,-1155.58C1770.37,-1137.17 1897.32,-1110.72 1946,-1092 1948.53,-1091.03 1951.07,-1089.97 1953.62,-1088.84"/>
<polygon fill="black" stroke="black" points="1955.24,-1091.95 1962.8,-1084.52 1952.26,-1085.62 1955.24,-1091.95"/>
<text text-anchor="middle" x="1901.5" y="-1115.4" font-family="Times Roman,serif" font-size="14.00">3024</text>
</g>
<!-- N13&#45;&gt;N14 -->
<g id="edge96" class="edge"><title>N13&#45;&gt;N14</title>
<path fill="none" stroke="black" d="M1694.84,-1020.8C1649.76,-1008.29 1598.12,-994.219 1551,-982 1518.71,-973.625 1484.1,-964.973 1450.94,-956.842"/>
<polygon fill="black" stroke="black" points="1451.72,-953.428 1441.17,-954.45 1450.05,-960.228 1451.72,-953.428"/>
<text text-anchor="middle" x="1634.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">7981</text>
</g>
<!-- N17 -->
<g id="node18" class="node"><title>N17</title>
<polygon fill="none" stroke="black" points="1958,-950.5 1820,-950.5 1820,-885.5 1958,-885.5 1958,-950.5"/>
<text text-anchor="middle" x="1889" y="-933" font-family="Times Roman,serif" font-size="15.00">unicode.init</text>
<text text-anchor="end" x="1950.5" y="-914" font-family="Times Roman,serif" font-size="15.00">4064 (2.0%)</text>
<text text-anchor="end" x="1950.5" y="-895" font-family="Times Roman,serif" font-size="15.00">of 17138 (8.4%)</text>
</g>
<!-- N13&#45;&gt;N17 -->
<g id="edge146" class="edge"><title>N13&#45;&gt;N17</title>
<path fill="none" stroke="black" d="M1835.75,-1017.93C1845.33,-999.947 1856.88,-978.281 1866.77,-959.726"/>
<polygon fill="black" stroke="black" points="1869.86,-961.368 1871.47,-950.897 1863.68,-958.076 1869.86,-961.368"/>
<text text-anchor="middle" x="1877" y="-987.4" font-family="Times Roman,serif" font-size="14.00">17138</text>
</g>
<!-- N13&#45;&gt;N25 -->
<g id="edge98" class="edge"><title>N13&#45;&gt;N25</title>
<path fill="none" stroke="black" d="M1786.23,-1017.93C1771.09,-999.066 1752.69,-976.148 1737.33,-957.02"/>
<polygon fill="black" stroke="black" points="1739.94,-954.683 1730.95,-949.077 1734.48,-959.066 1739.94,-954.683"/>
<text text-anchor="middle" x="1788.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">4027</text>
</g>
<!-- N13&#45;&gt;N43 -->
<g id="edge52" class="edge"><title>N13&#45;&gt;N43</title>
<path fill="none" stroke="black" d="M1882.03,-1017.93C1922.88,-994.987 1974.43,-966.046 2011.52,-945.221"/>
<polygon fill="black" stroke="black" points="2013.62,-948.058 2020.62,-940.11 2010.19,-941.954 2013.62,-948.058"/>
<text text-anchor="middle" x="1963.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">1053</text>
</g>
<!-- N14&#45;&gt;N28 -->
<g id="edge148" class="edge"><title>N14&#45;&gt;N28</title>
<path fill="none" stroke="black" d="M1229.84,-871.764C1213.76,-856.267 1197.78,-837.836 1187,-818 1167.48,-782.096 1159.15,-736.136 1155.6,-702.178"/>
<polygon fill="black" stroke="black" points="1159.07,-701.676 1154.65,-692.048 1152.1,-702.333 1159.07,-701.676"/>
<text text-anchor="middle" x="1205.5" y="-778.4" font-family="Times Roman,serif" font-size="14.00">6131</text>
</g>
<!-- N14&#45;&gt;N31 -->
<g id="edge152" class="edge"><title>N14&#45;&gt;N31</title>
<path fill="none" stroke="black" d="M1324.56,-871.957C1336.44,-857.002 1349.58,-840.461 1361.31,-825.684"/>
<polygon fill="black" stroke="black" points="1364.19,-827.685 1367.67,-817.677 1358.71,-823.331 1364.19,-827.685"/>
<text text-anchor="middle" x="1369.5" y="-841.4" font-family="Times Roman,serif" font-size="14.00">4864</text>
</g>
<!-- N39 -->
<g id="node40" class="node"><title>N39</title>
<polygon fill="none" stroke="black" points="1485,-678 1269,-678 1269,-632 1485,-632 1485,-678"/>
<text text-anchor="middle" x="1377" y="-660.32" font-family="Times Roman,serif" font-size="15.20">bytes.(*Buffer).WriteString</text>
<text text-anchor="end" x="1477.5" y="-641.32" font-family="Times Roman,serif" font-size="15.20">4240 (2.1%)</text>
</g>
<!-- N14&#45;&gt;N39 -->
<g id="edge138" class="edge"><title>N14&#45;&gt;N39</title>
<path fill="none" stroke="black" d="M1256.07,-871.774C1235.58,-835.923 1216.48,-785.803 1238,-746 1253.1,-718.074 1280.9,-697.341 1307.7,-682.777"/>
<polygon fill="black" stroke="black" points="1309.48,-685.797 1316.73,-678.072 1306.25,-679.589 1309.48,-685.797"/>
<text text-anchor="middle" x="1256.5" y="-778.4" font-family="Times Roman,serif" font-size="14.00">4017</text>
</g>
<!-- N15&#45;&gt;N10 -->
<g id="edge188" class="edge"><title>N15&#45;&gt;N10</title>
<path fill="none" stroke="black" d="M1116.1,-1569.4C1125.13,-1557.9 1136.38,-1544 1147,-1532 1150.13,-1528.47 1153.36,-1524.89 1156.66,-1521.3"/>
<polygon fill="black" stroke="black" points="1159.26,-1523.64 1163.5,-1513.93 1154.13,-1518.87 1159.26,-1523.64"/>
<text text-anchor="middle" x="1165.5" y="-1537.4" font-family="Times Roman,serif" font-size="14.00">1718</text>
</g>
<!-- N15&#45;&gt;N13 -->
<g id="edge4" class="edge"><title>N15&#45;&gt;N13</title>
<path fill="none" stroke="black" d="M1185.24,-1569.47C1187.51,-1568.96 1189.77,-1568.47 1192,-1568 1341.68,-1536.3 1393.12,-1578.21 1532,-1514 1606.39,-1479.61 1597.65,-1428.46 1672,-1394 1717.74,-1372.8 1749.44,-1412.7 1784,-1376 1820.15,-1337.61 1820.43,-1182.03 1818.05,-1102.43"/>
<polygon fill="black" stroke="black" points="1821.54,-1102.06 1817.72,-1092.18 1814.55,-1102.29 1821.54,-1102.06"/>
<text text-anchor="middle" x="1832.5" y="-1297.4" font-family="Times Roman,serif" font-size="14.00">8207</text>
</g>
<!-- N15&#45;&gt;N16 -->
<g id="edge198" class="edge"><title>N15&#45;&gt;N16</title>
<path fill="none" stroke="black" d="M1008.67,-1583.91C824.56,-1563.97 420,-1513.4 420,-1454 420,-1454 420,-1454 420,-1177 420,-1150.09 446.785,-1155.39 472,-1146 601.012,-1097.97 643.911,-1127.19 777,-1092 782.024,-1090.67 787.151,-1089.21 792.302,-1087.66"/>
<polygon fill="black" stroke="black" points="793.709,-1090.88 802.217,-1084.57 791.629,-1084.2 793.709,-1090.88"/>
<text text-anchor="middle" x="443" y="-1297.4" font-family="Times Roman,serif" font-size="14.00">12974</text>
</g>
<!-- N16&#45;&gt;N10 -->
<g id="edge34" class="edge"><title>N16&#45;&gt;N10</title>
<path fill="none" stroke="black" d="M908.648,-1084.54C944.01,-1123.28 1005.83,-1194.29 1049,-1262 1069.73,-1294.52 1063.26,-1309.61 1087,-1340 1100.24,-1356.95 1116.37,-1373.13 1132.84,-1387.7"/>
<polygon fill="black" stroke="black" points="1130.57,-1390.37 1140.42,-1394.28 1135.16,-1385.08 1130.57,-1390.37"/>
<text text-anchor="middle" x="1059" y="-1231.4" font-family="Times Roman,serif" font-size="14.00">12616</text>
</g>
<!-- N16&#45;&gt;N14 -->
<g id="edge190" class="edge"><title>N16&#45;&gt;N14</title>
<path fill="none" stroke="black" d="M968.812,-1025.44C1019.17,-1008.49 1083.69,-986.774 1141.52,-967.308"/>
<polygon fill="black" stroke="black" points="1142.75,-970.586 1151.11,-964.079 1140.52,-963.952 1142.75,-970.586"/>
<text text-anchor="middle" x="1114.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">2729</text>
</g>
<!-- N16&#45;&gt;N19 -->
<g id="edge32" class="edge"><title>N16&#45;&gt;N19</title>
<path fill="none" stroke="black" d="M886.859,-1025.27C890.929,-1004.62 896.381,-976.955 900.729,-954.893"/>
<polygon fill="black" stroke="black" points="904.202,-955.371 902.702,-944.883 897.334,-954.017 904.202,-955.371"/>
<text text-anchor="middle" x="913.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">1582</text>
</g>
<!-- N16&#45;&gt;N27 -->
<g id="edge20" class="edge"><title>N16&#45;&gt;N27</title>
<path fill="none" stroke="black" d="M823.825,-1025.44C778.559,-1002.04 715.729,-969.558 671.03,-946.449"/>
<polygon fill="black" stroke="black" points="672.552,-943.296 662.061,-941.813 669.337,-949.514 672.552,-943.296"/>
<text text-anchor="middle" x="786" y="-987.4" font-family="Times Roman,serif" font-size="14.00">309</text>
</g>
<!-- N20 -->
<g id="node21" class="node"><title>N20</title>
<polygon fill="none" stroke="black" points="2118,-811 1964,-811 1964,-753 2118,-753 2118,-811"/>
<text text-anchor="middle" x="2041" y="-788.73" font-family="Times Roman,serif" font-size="20.30">unicode.to</text>
<text text-anchor="end" x="2110.5" y="-763.73" font-family="Times Roman,serif" font-size="20.30">12360 (6.0%)</text>
</g>
<!-- N17&#45;&gt;N20 -->
<g id="edge142" class="edge"><title>N17&#45;&gt;N20</title>
<path fill="none" stroke="black" d="M1925.41,-885.425C1948.13,-865.091 1977.41,-838.895 2000.82,-817.955"/>
<polygon fill="black" stroke="black" points="2003.39,-820.347 2008.51,-811.071 1998.72,-815.131 2003.39,-820.347"/>
<text text-anchor="middle" x="2001" y="-841.4" font-family="Times Roman,serif" font-size="14.00">12360</text>
</g>
<!-- N18&#45;&gt;N13 -->
<g id="edge194" class="edge"><title>N18&#45;&gt;N13</title>
<path fill="none" stroke="black" d="M941.199,-1162.36C1008.65,-1146.59 1121.46,-1122.15 1220,-1110 1378.11,-1090.5 1419.52,-1108.26 1578,-1092 1612.74,-1088.44 1650.14,-1083.26 1684.76,-1077.9"/>
<polygon fill="black" stroke="black" points="1685.59,-1081.32 1694.93,-1076.31 1684.51,-1074.4 1685.59,-1081.32"/>
<text text-anchor="middle" x="1243" y="-1115.4" font-family="Times Roman,serif" font-size="14.00">10729</text>
</g>
<!-- N18&#45;&gt;N16 -->
<g id="edge170" class="edge"><title>N18&#45;&gt;N16</title>
<path fill="none" stroke="black" d="M881,-1153.48C881,-1136.93 881,-1114.36 881,-1095.01"/>
<polygon fill="black" stroke="black" points="884.5,-1094.94 881,-1084.94 877.5,-1094.94 884.5,-1094.94"/>
<text text-anchor="middle" x="899.5" y="-1115.4" font-family="Times Roman,serif" font-size="14.00">4358</text>
</g>
<!-- N18&#45;&gt;N27 -->
<g id="edge90" class="edge"><title>N18&#45;&gt;N27</title>
<path fill="none" stroke="black" d="M828.678,-1153.39C799.331,-1138.51 763.257,-1117.32 736,-1092 691.389,-1050.55 654.193,-989.732 633.542,-952.065"/>
<polygon fill="black" stroke="black" points="636.486,-950.15 628.654,-943.014 630.326,-953.476 636.486,-950.15"/>
<text text-anchor="middle" x="754.5" y="-1051.4" font-family="Times Roman,serif" font-size="14.00">1434</text>
</g>
<!-- N21 -->
<g id="node22" class="node"><title>N21</title>
<polygon fill="none" stroke="black" points="847,-805.5 731,-805.5 731,-758.5 847,-758.5 847,-805.5"/>
<text text-anchor="middle" x="789" y="-792.41" font-family="Times Roman,serif" font-size="10.10">runtime.concatstring</text>
<text text-anchor="end" x="839" y="-779.41" font-family="Times Roman,serif" font-size="10.10">374 (0.2%)</text>
<text text-anchor="end" x="839" y="-766.41" font-family="Times Roman,serif" font-size="10.10">of 11955 (5.8%)</text>
</g>
<!-- N19&#45;&gt;N21 -->
<g id="edge44" class="edge"><title>N19&#45;&gt;N21</title>
<path fill="none" stroke="black" d="M884.773,-891.455C865.205,-869.092 837.174,-837.056 816.49,-813.417"/>
<polygon fill="black" stroke="black" points="818.999,-810.97 809.78,-805.749 813.731,-815.579 818.999,-810.97"/>
<text text-anchor="middle" x="871" y="-841.4" font-family="Times Roman,serif" font-size="14.00">11955</text>
</g>
<!-- N22 -->
<g id="node23" class="node"><title>N22</title>
<polygon fill="none" stroke="black" points="577,-690.5 427,-690.5 427,-619.5 577,-619.5 577,-690.5"/>
<text text-anchor="middle" x="502" y="-671.56" font-family="Times Roman,serif" font-size="16.60">runtime.free</text>
<text text-anchor="end" x="569.5" y="-650.56" font-family="Times Roman,serif" font-size="16.60">6112 (3.0%)</text>
<text text-anchor="end" x="569.5" y="-629.56" font-family="Times Roman,serif" font-size="16.60">of 11889 (5.8%)</text>
</g>
<!-- N21&#45;&gt;N22 -->
<g id="edge116" class="edge"><title>N21&#45;&gt;N22</title>
<path fill="none" stroke="black" d="M735.69,-758.41C693.81,-739.878 634.695,-713.719 586.4,-692.348"/>
<polygon fill="black" stroke="black" points="587.766,-689.125 577.205,-688.279 584.934,-695.526 587.766,-689.125"/>
<text text-anchor="middle" x="681.5" y="-715.4" font-family="Times Roman,serif" font-size="14.00">5703</text>
</g>
<!-- N24 -->
<g id="node25" class="node"><title>N24</title>
<polygon fill="none" stroke="black" points="867,-460 711,-460 711,-392 867,-392 867,-460"/>
<text text-anchor="middle" x="789" y="-441.6" font-family="Times Roman,serif" font-size="16.00">runtime.mallocgc</text>
<text text-anchor="end" x="859" y="-421.6" font-family="Times Roman,serif" font-size="16.00">5252 (2.6%)</text>
<text text-anchor="end" x="859" y="-401.6" font-family="Times Roman,serif" font-size="16.00">of 10626 (5.2%)</text>
</g>
<!-- N21&#45;&gt;N24 -->
<g id="edge184" class="edge"><title>N21&#45;&gt;N24</title>
<path fill="none" stroke="black" d="M789,-758.366C789,-699.706 789,-546.696 789,-470.48"/>
<polygon fill="black" stroke="black" points="792.5,-470.253 789,-460.253 785.5,-470.253 792.5,-470.253"/>
<text text-anchor="middle" x="807.5" y="-587.4" font-family="Times Roman,serif" font-size="14.00">4810</text>
</g>
<!-- N44 -->
<g id="node45" class="node"><title>N44</title>
<polygon fill="none" stroke="black" points="676,-448 560,-448 560,-404 676,-404 676,-448"/>
<text text-anchor="middle" x="618" y="-431.58" font-family="Times Roman,serif" font-size="13.80">runtime.malloc</text>
<text text-anchor="end" x="668" y="-413.58" font-family="Times Roman,serif" font-size="13.80">2776 (1.4%)</text>
</g>
<!-- N21&#45;&gt;N44 -->
<g id="edge110" class="edge"><title>N21&#45;&gt;N44</title>
<path fill="none" stroke="black" d="M777.648,-758.366C747.726,-696.072 666.695,-527.377 633.006,-457.241"/>
<polygon fill="black" stroke="black" points="636.062,-455.518 628.577,-448.02 629.752,-458.549 636.062,-455.518"/>
<text text-anchor="middle" x="719.5" y="-587.4" font-family="Times Roman,serif" font-size="14.00">1064</text>
</g>
<!-- N22&#45;&gt;N29 -->
<g id="edge166" class="edge"><title>N22&#45;&gt;N29</title>
<path fill="none" stroke="black" d="M426.922,-619.996C415.016,-613.727 403.008,-606.961 392,-600 381.029,-593.063 380.456,-588.103 369,-582 350.354,-572.067 329.001,-563.895 308.981,-557.442"/>
<polygon fill="black" stroke="black" points="309.866,-554.052 299.278,-554.412 307.78,-560.734 309.866,-554.052"/>
<text text-anchor="middle" x="406" y="-587.4" font-family="Times Roman,serif" font-size="14.00">206</text>
</g>
<!-- N38 -->
<g id="node39" class="node"><title>N38</title>
<polygon fill="none" stroke="black" points="590,-562 414,-562 414,-516 590,-516 590,-562"/>
<text text-anchor="middle" x="502" y="-544.23" font-family="Times Roman,serif" font-size="15.30">runtime.unmarkspan</text>
<text text-anchor="end" x="582" y="-525.23" font-family="Times Roman,serif" font-size="15.30">4321 (2.1%)</text>
</g>
<!-- N22&#45;&gt;N38 -->
<g id="edge180" class="edge"><title>N22&#45;&gt;N38</title>
<path fill="none" stroke="black" d="M502,-619.25C502,-604.251 502,-586.912 502,-572.197"/>
<polygon fill="black" stroke="black" points="505.5,-572.017 502,-562.018 498.5,-572.018 505.5,-572.017"/>
<text text-anchor="middle" x="520.5" y="-587.4" font-family="Times Roman,serif" font-size="14.00">4317</text>
</g>
<!-- N23 -->
<g id="node24" class="node"><title>N23</title>
<polygon fill="none" stroke="black" points="983,-2504 899,-2504 899,-2466 983,-2466 983,-2504"/>
<text text-anchor="middle" x="941" y="-2492.8" font-family="Times Roman,serif" font-size="8.00">procresize</text>
<text text-anchor="end" x="975" y="-2482.8" font-family="Times Roman,serif" font-size="8.00">0 (0.0%)</text>
<text text-anchor="end" x="975" y="-2472.8" font-family="Times Roman,serif" font-size="8.00">of 10821 (5.3%)</text>
</g>
<!-- N33 -->
<g id="node34" class="node"><title>N33</title>
<polygon fill="none" stroke="black" points="1019,-2351 863,-2351 863,-2301 1019,-2301 1019,-2351"/>
<text text-anchor="middle" x="941" y="-2332.06" font-family="Times Roman,serif" font-size="16.60">updatememstats</text>
<text text-anchor="end" x="1011.5" y="-2311.06" font-family="Times Roman,serif" font-size="16.60">6060 (3.0%)</text>
</g>
<!-- N23&#45;&gt;N33 -->
<g id="edge28" class="edge"><title>N23&#45;&gt;N33</title>
<path fill="none" stroke="black" d="M941,-2465.82C941,-2440.07 941,-2393.84 941,-2361.62"/>
<polygon fill="black" stroke="black" points="944.5,-2361.27 941,-2351.27 937.5,-2361.27 944.5,-2361.27"/>
<text text-anchor="middle" x="959.5" y="-2377.4" font-family="Times Roman,serif" font-size="14.00">6060</text>
</g>
<!-- N53 -->
<g id="node54" class="node"><title>N53</title>
<polygon fill="none" stroke="black" points="1219,-2354 1037,-2354 1037,-2298 1219,-2298 1219,-2354"/>
<text text-anchor="middle" x="1128" y="-2339.02" font-family="Times Roman,serif" font-size="12.20">text/tabwriter.(*Writer).reset</text>
<text text-anchor="end" x="1211.5" y="-2323.02" font-family="Times Roman,serif" font-size="12.20">1448 (0.7%)</text>
<text text-anchor="end" x="1211.5" y="-2307.02" font-family="Times Roman,serif" font-size="12.20">of 1496 (0.7%)</text>
</g>
<!-- N23&#45;&gt;N53 -->
<g id="edge64" class="edge"><title>N23&#45;&gt;N53</title>
<path fill="none" stroke="black" d="M963.557,-2465.82C994.119,-2439.83 1049.22,-2392.99 1087.15,-2360.73"/>
<polygon fill="black" stroke="black" points="1089.62,-2363.23 1094.97,-2354.08 1085.09,-2357.89 1089.62,-2363.23"/>
<text text-anchor="middle" x="1090.5" y="-2377.4" font-family="Times Roman,serif" font-size="14.00">1445</text>
</g>
<!-- N34 -->
<g id="node35" class="node"><title>N34</title>
<polygon fill="none" stroke="black" points="828,-337.5 750,-337.5 750,-296.5 828,-296.5 828,-337.5"/>
<text text-anchor="middle" x="789" y="-325.76" font-family="Times Roman,serif" font-size="8.60">MCentral_Free</text>
<text text-anchor="end" x="820.5" y="-314.76" font-family="Times Roman,serif" font-size="8.60">32 (0.0%)</text>
<text text-anchor="end" x="820.5" y="-303.76" font-family="Times Roman,serif" font-size="8.60">of 5362 (2.6%)</text>
</g>
<!-- N24&#45;&gt;N34 -->
<g id="edge66" class="edge"><title>N24&#45;&gt;N34</title>
<path fill="none" stroke="black" d="M789,-391.811C789,-377.82 789,-361.745 789,-348.09"/>
<polygon fill="black" stroke="black" points="792.5,-347.745 789,-337.745 785.5,-347.745 792.5,-347.745"/>
<text text-anchor="middle" x="807.5" y="-361.4" font-family="Times Roman,serif" font-size="14.00">5362</text>
</g>
<!-- N32 -->
<g id="node33" class="node"><title>N32</title>
<polygon fill="none" stroke="black" points="1946,-807 1572,-807 1572,-757 1946,-757 1946,-807"/>
<text text-anchor="middle" x="1759" y="-787.79" font-family="Times Roman,serif" font-size="16.90">unicode/utf8.decodeRuneInStringInternal</text>
<text text-anchor="end" x="1938.5" y="-766.79" font-family="Times Roman,serif" font-size="16.90">6465 (3.2%)</text>
</g>
<!-- N25&#45;&gt;N32 -->
<g id="edge108" class="edge"><title>N25&#45;&gt;N32</title>
<path fill="none" stroke="black" d="M1718.16,-886.799C1726.32,-865.853 1737.08,-838.241 1745.51,-816.618"/>
<polygon fill="black" stroke="black" points="1748.83,-817.738 1749.2,-807.15 1742.31,-815.197 1748.83,-817.738"/>
<text text-anchor="middle" x="1755.5" y="-841.4" font-family="Times Roman,serif" font-size="14.00">6465</text>
</g>
<!-- N27&#45;&gt;N22 -->
<g id="edge92" class="edge"><title>N27&#45;&gt;N22</title>
<path fill="none" stroke="black" d="M577.611,-892.975C553.875,-875.171 525.296,-848.97 511,-818 494.045,-781.271 493.199,-734.827 495.769,-700.92"/>
<polygon fill="black" stroke="black" points="499.268,-701.094 496.663,-690.824 492.295,-700.477 499.268,-701.094"/>
<text text-anchor="middle" x="529.5" y="-778.4" font-family="Times Roman,serif" font-size="14.00">2742</text>
</g>
<!-- N27&#45;&gt;N24 -->
<g id="edge102" class="edge"><title>N27&#45;&gt;N24</title>
<path fill="none" stroke="black" d="M662.006,-914.419C736.432,-905.84 875,-877.099 875,-782 875,-782 875,-782 875,-539 875,-511.565 858.749,-486.629 840.376,-467.204"/>
<polygon fill="black" stroke="black" points="842.789,-464.666 833.26,-460.035 837.821,-469.598 842.789,-464.666"/>
<text text-anchor="middle" x="893.5" y="-651.4" font-family="Times Roman,serif" font-size="14.00">2392</text>
</g>
<!-- N27&#45;&gt;N44 -->
<g id="edge112" class="edge"><title>N27&#45;&gt;N44</title>
<path fill="none" stroke="black" d="M638.758,-892.97C654.566,-873.918 674.443,-846.239 684,-818 696.843,-780.053 687.888,-768.046 689,-728 689.222,-720.003 691.007,-717.744 689,-710 686.704,-701.141 682.277,-700.545 679,-692 676.882,-686.477 640.932,-527.631 625.235,-458.088"/>
<polygon fill="black" stroke="black" points="628.6,-457.101 622.985,-448.117 621.772,-458.642 628.6,-457.101"/>
<text text-anchor="middle" x="693" y="-651.4" font-family="Times Roman,serif" font-size="14.00">458</text>
</g>
<!-- N56 -->
<g id="node57" class="node"><title>N56</title>
<polygon fill="none" stroke="black" points="675,-801 557,-801 557,-763 675,-763 675,-801"/>
<text text-anchor="middle" x="616" y="-786.38" font-family="Times Roman,serif" font-size="11.80">runtime.nanotime</text>
<text text-anchor="end" x="667.5" y="-771.38" font-family="Times Roman,serif" font-size="11.80">1188 (0.6%)</text>
</g>
<!-- N27&#45;&gt;N56 -->
<g id="edge88" class="edge"><title>N27&#45;&gt;N56</title>
<path fill="none" stroke="black" d="M616,-892.738C616,-869.72 616,-835.713 616,-811.465"/>
<polygon fill="black" stroke="black" points="619.5,-811.409 616,-801.409 612.5,-811.409 619.5,-811.409"/>
<text text-anchor="middle" x="630" y="-841.4" font-family="Times Roman,serif" font-size="14.00">633</text>
</g>
<!-- N29&#45;&gt;N22 -->
<g id="edge176" class="edge"><title>N29&#45;&gt;N22</title>
<path fill="none" stroke="black" d="M299.418,-545.851C336.106,-551.742 382.495,-562.518 420,-582 434.988,-589.785 449.424,-600.927 461.895,-612.169"/>
<polygon fill="black" stroke="black" points="459.69,-614.898 469.394,-619.152 464.461,-609.776 459.69,-614.898"/>
<text text-anchor="middle" x="464.5" y="-587.4" font-family="Times Roman,serif" font-size="14.00">2704</text>
</g>
<!-- N29&#45;&gt;N24 -->
<g id="edge78" class="edge"><title>N29&#45;&gt;N24</title>
<path fill="none" stroke="black" d="M299.372,-529.122C404.578,-512.272 612.887,-478.05 685,-460 690.298,-458.674 695.718,-457.217 701.165,-455.675"/>
<polygon fill="black" stroke="black" points="702.356,-458.974 710.979,-452.818 700.399,-452.253 702.356,-458.974"/>
<text text-anchor="middle" x="609.5" y="-483.4" font-family="Times Roman,serif" font-size="14.00">2618</text>
</g>
<!-- N29&#45;&gt;N44 -->
<g id="edge104" class="edge"><title>N29&#45;&gt;N44</title>
<path fill="none" stroke="black" d="M230.446,-513.999C228.807,-501.74 229.496,-487.588 238,-478 258.339,-455.071 445.984,-438.226 549.757,-430.574"/>
<polygon fill="black" stroke="black" points="550.116,-434.057 559.835,-429.84 549.607,-427.075 550.116,-434.057"/>
<text text-anchor="middle" x="252" y="-483.4" font-family="Times Roman,serif" font-size="14.00">994</text>
</g>
<!-- N37 -->
<g id="node38" class="node"><title>N37</title>
<polygon fill="none" stroke="black" points="232,-1476 122,-1476 122,-1432 232,-1432 232,-1476"/>
<text text-anchor="middle" x="177" y="-1463.81" font-family="Times Roman,serif" font-size="9.10">runtime.assertI2TOK</text>
<text text-anchor="end" x="224.5" y="-1451.81" font-family="Times Roman,serif" font-size="9.10">107 (0.1%)</text>
<text text-anchor="end" x="224.5" y="-1439.81" font-family="Times Roman,serif" font-size="9.10">of 4759 (2.3%)</text>
</g>
<!-- N30&#45;&gt;N37 -->
<g id="edge200" class="edge"><title>N30&#45;&gt;N37</title>
<path fill="none" stroke="black" d="M381.657,-1585.21C350.137,-1578.95 310.038,-1568.11 278,-1550 248.121,-1533.11 220.339,-1505.46 201.507,-1484.16"/>
<polygon fill="black" stroke="black" points="203.932,-1481.61 194.742,-1476.34 198.639,-1486.19 203.932,-1481.61"/>
<text text-anchor="middle" x="296.5" y="-1537.4" font-family="Times Roman,serif" font-size="14.00">4759</text>
</g>
<!-- N52 -->
<g id="node53" class="node"><title>N52</title>
<polygon fill="none" stroke="black" points="354,-1477.5 250,-1477.5 250,-1430.5 354,-1430.5 354,-1477.5"/>
<text text-anchor="middle" x="302" y="-1464.77" font-family="Times Roman,serif" font-size="9.70">runtime.assertE2T</text>
<text text-anchor="end" x="346" y="-1451.77" font-family="Times Roman,serif" font-size="9.70">248 (0.1%)</text>
<text text-anchor="end" x="346" y="-1438.77" font-family="Times Roman,serif" font-size="9.70">of 1543 (0.8%)</text>
</g>
<!-- N30&#45;&gt;N52 -->
<g id="edge132" class="edge"><title>N30&#45;&gt;N52</title>
<path fill="none" stroke="black" d="M381.936,-1581.16C363.66,-1574.67 344.375,-1564.82 331,-1550 315.601,-1532.94 308.372,-1507.95 304.982,-1487.75"/>
<polygon fill="black" stroke="black" points="308.422,-1487.08 303.536,-1477.68 301.494,-1488.08 308.422,-1487.08"/>
<text text-anchor="middle" x="349.5" y="-1537.4" font-family="Times Roman,serif" font-size="14.00">1474</text>
</g>
<!-- N31&#45;&gt;N28 -->
<g id="edge50" class="edge"><title>N31&#45;&gt;N28</title>
<path fill="none" stroke="black" d="M1327.99,-746.455C1298.47,-731.026 1263.69,-712.848 1232.94,-696.779"/>
<polygon fill="black" stroke="black" points="1234.45,-693.617 1223.96,-692.087 1231.2,-699.821 1234.45,-693.617"/>
<text text-anchor="middle" x="1303" y="-715.4" font-family="Times Roman,serif" font-size="14.00">337</text>
</g>
<!-- N31&#45;&gt;N31 -->
<g id="edge106" class="edge"><title>N31&#45;&gt;N31</title>
<path fill="none" stroke="black" d="M1508.33,-791.4C1519.14,-789.493 1526,-786.359 1526,-782 1526,-779.207 1523.19,-776.918 1518.32,-775.131"/>
<polygon fill="black" stroke="black" points="1518.88,-771.663 1508.33,-772.6 1517.16,-778.448 1518.88,-771.663"/>
<text text-anchor="middle" x="1540" y="-778.4" font-family="Times Roman,serif" font-size="14.00">322</text>
</g>
<!-- N31&#45;&gt;N39 -->
<g id="edge202" class="edge"><title>N31&#45;&gt;N39</title>
<path fill="none" stroke="black" d="M1390.66,-746.285C1387.92,-728.009 1384.62,-705.908 1381.94,-688.03"/>
<polygon fill="black" stroke="black" points="1385.39,-687.425 1380.45,-678.053 1378.47,-688.461 1385.39,-687.425"/>
<text text-anchor="middle" x="1401" y="-715.4" font-family="Times Roman,serif" font-size="14.00">223</text>
</g>
<!-- N36 -->
<g id="node37" class="node"><title>N36</title>
<polygon fill="none" stroke="black" points="856,-241.5 722,-241.5 722,-200.5 856,-200.5 856,-241.5"/>
<text text-anchor="middle" x="789" y="-229.76" font-family="Times Roman,serif" font-size="8.60">runtime.MCentral_FreeSpan</text>
<text text-anchor="end" x="848" y="-218.76" font-family="Times Roman,serif" font-size="8.60">33 (0.0%)</text>
<text text-anchor="end" x="848" y="-207.76" font-family="Times Roman,serif" font-size="8.60">of 5110 (2.5%)</text>
</g>
<!-- N34&#45;&gt;N36 -->
<g id="edge136" class="edge"><title>N34&#45;&gt;N36</title>
<path fill="none" stroke="black" d="M789,-296.169C789,-283.212 789,-266.316 789,-251.825"/>
<polygon fill="black" stroke="black" points="792.5,-251.79 789,-241.79 785.5,-251.79 792.5,-251.79"/>
<text text-anchor="middle" x="807.5" y="-265.4" font-family="Times Roman,serif" font-size="14.00">5110</text>
</g>
<!-- N35&#45;&gt;N29 -->
<g id="edge154" class="edge"><title>N35&#45;&gt;N29</title>
<path fill="none" stroke="black" d="M783.979,-1788.29C779.267,-1787.45 774.59,-1786.67 770,-1786 695.116,-1774.99 94,-1777.69 94,-1702 94,-1702 94,-1702 94,-1541 94,-1353.41 102,-1306.59 102,-1119 102,-1119 102,-1119 102,-655 102,-616.563 133.87,-588.093 166.641,-568.978"/>
<polygon fill="black" stroke="black" points="168.398,-572.005 175.426,-564.077 164.988,-565.892 168.398,-572.005"/>
<text text-anchor="middle" x="120.5" y="-1173.4" font-family="Times Roman,serif" font-size="14.00">1089</text>
</g>
<!-- N35&#45;&gt;N30 -->
<g id="edge76" class="edge"><title>N35&#45;&gt;N30</title>
<path fill="none" stroke="black" d="M783.973,-1788.33C779.262,-1787.48 774.587,-1786.69 770,-1786 709.005,-1776.8 550.515,-1790.3 493,-1768 469.119,-1758.74 460.239,-1754.5 448,-1732 430.607,-1700.03 428.795,-1657.77 430.273,-1628.28"/>
<polygon fill="black" stroke="black" points="433.783,-1628.24 430.944,-1618.03 426.798,-1627.78 433.783,-1628.24"/>
<text text-anchor="middle" x="466.5" y="-1698.4" font-family="Times Roman,serif" font-size="14.00">1057</text>
</g>
<!-- N41 -->
<g id="node42" class="node"><title>N41</title>
<polygon fill="none" stroke="black" points="852,-146 726,-146 726,-96 852,-96 852,-146"/>
<text text-anchor="middle" x="789" y="-132.1" font-family="Times Roman,serif" font-size="11.00">runtime.SysReserve</text>
<text text-anchor="end" x="844" y="-118.1" font-family="Times Roman,serif" font-size="11.00">740 (0.4%)</text>
<text text-anchor="end" x="844" y="-104.1" font-family="Times Roman,serif" font-size="11.00">of 3365 (1.6%)</text>
</g>
<!-- N36&#45;&gt;N41 -->
<g id="edge172" class="edge"><title>N36&#45;&gt;N41</title>
<path fill="none" stroke="black" d="M789,-200.28C789,-187.666 789,-171.214 789,-156.569"/>
<polygon fill="black" stroke="black" points="792.5,-156.305 789,-146.305 785.5,-156.305 792.5,-156.305"/>
<text text-anchor="middle" x="807.5" y="-169.4" font-family="Times Roman,serif" font-size="14.00">3365</text>
</g>
<!-- N54 -->
<g id="node55" class="node"><title>N54</title>
<polygon fill="none" stroke="black" points="956,-141.5 870,-141.5 870,-100.5 956,-100.5 956,-141.5"/>
<text text-anchor="middle" x="913" y="-129.94" font-family="Times Roman,serif" font-size="8.40">runtime.SysFree</text>
<text text-anchor="end" x="948" y="-118.94" font-family="Times Roman,serif" font-size="8.40">15 (0.0%)</text>
<text text-anchor="end" x="948" y="-107.94" font-family="Times Roman,serif" font-size="8.40">of 1420 (0.7%)</text>
</g>
<!-- N36&#45;&gt;N54 -->
<g id="edge126" class="edge"><title>N36&#45;&gt;N54</title>
<path fill="none" stroke="black" d="M814.693,-200.28C833.48,-185.129 859.136,-164.439 879.526,-147.995"/>
<polygon fill="black" stroke="black" points="881.753,-150.696 887.34,-141.694 877.359,-145.247 881.753,-150.696"/>
<text text-anchor="middle" x="876.5" y="-169.4" font-family="Times Roman,serif" font-size="14.00">1420</text>
</g>
<!-- N37&#45;&gt;N29 -->
<g id="edge182" class="edge"><title>N37&#45;&gt;N29</title>
<path fill="none" stroke="black" d="M185.862,-1431.85C196.809,-1402.45 214,-1348.69 214,-1301 214,-1301 214,-1301 214,-655 214,-627.404 220.341,-596.807 226.364,-573.969"/>
<polygon fill="black" stroke="black" points="229.812,-574.63 229.085,-564.06 223.061,-572.777 229.812,-574.63"/>
<text text-anchor="middle" x="232.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">4652</text>
</g>
<!-- N47 -->
<g id="node48" class="node"><title>N47</title>
<polygon fill="none" stroke="black" points="838,-42 740,-42 740,-2.13163e-14 838,-7.10543e-15 838,-42"/>
<text text-anchor="middle" x="789" y="-25.76" font-family="Times Roman,serif" font-size="13.60">RecordSpan</text>
<text text-anchor="end" x="830" y="-8.76" font-family="Times Roman,serif" font-size="13.60">2528 (1.2%)</text>
</g>
<!-- N41&#45;&gt;N47 -->
<g id="edge114" class="edge"><title>N41&#45;&gt;N47</title>
<path fill="none" stroke="black" d="M789,-95.7658C789,-82.5792 789,-66.318 789,-52.3321"/>
<polygon fill="black" stroke="black" points="792.5,-52.1692 789,-42.1692 785.5,-52.1693 792.5,-52.1692"/>
<text text-anchor="middle" x="807.5" y="-65.4" font-family="Times Roman,serif" font-size="14.00">2519</text>
</g>
<!-- N50 -->
<g id="node51" class="node"><title>N50</title>
<polygon fill="none" stroke="black" points="2302,-938 2162,-938 2162,-898 2302,-898 2302,-938"/>
<text text-anchor="middle" x="2232" y="-922.84" font-family="Times Roman,serif" font-size="12.40">runtime.memmove</text>
<text text-anchor="end" x="2294" y="-906.84" font-family="Times Roman,serif" font-size="12.40">1614 (0.8%)</text>
</g>
<!-- N42&#45;&gt;N50 -->
<g id="edge118" class="edge"><title>N42&#45;&gt;N50</title>
<path fill="none" stroke="black" d="M2058.68,-1025.44C2098.04,-1001.05 2153.31,-966.783 2190.77,-943.558"/>
<polygon fill="black" stroke="black" points="2192.77,-946.439 2199.42,-938.196 2189.08,-940.49 2192.77,-946.439"/>
<text text-anchor="middle" x="2146.5" y="-987.4" font-family="Times Roman,serif" font-size="14.00">1349</text>
</g>
<!-- N46 -->
<g id="node47" class="node"><title>N46</title>
<polygon fill="none" stroke="black" points="421,-938.5 315,-938.5 315,-897.5 421,-897.5 421,-938.5"/>
<text text-anchor="middle" x="368" y="-926.58" font-family="Times Roman,serif" font-size="8.80">stackcacherelease</text>
<text text-anchor="end" x="413" y="-915.58" font-family="Times Roman,serif" font-size="8.80">54 (0.0%)</text>
<text text-anchor="end" x="413" y="-904.58" font-family="Times Roman,serif" font-size="8.80">of 2536 (1.2%)</text>
</g>
<!-- N45&#45;&gt;N46 -->
<g id="edge6" class="edge"><title>N45&#45;&gt;N46</title>
<path fill="none" stroke="black" d="M527.653,-1574.79C486.003,-1558.13 430.381,-1533.23 416,-1514 348.451,-1423.7 360.985,-1057.39 366.325,-948.604"/>
<polygon fill="black" stroke="black" points="369.82,-948.777 366.831,-938.612 362.829,-948.423 369.82,-948.777"/>
<text text-anchor="middle" x="383.5" y="-1231.4" font-family="Times Roman,serif" font-size="14.00">2153</text>
</g>
<!-- N48 -->
<g id="node49" class="node"><title>N48</title>
<polygon fill="none" stroke="black" points="411,-804 325,-804 325,-760 411,-760 411,-804"/>
<text text-anchor="middle" x="368" y="-791.9" font-family="Times Roman,serif" font-size="9.00">stkbucket</text>
<text text-anchor="end" x="403" y="-779.9" font-family="Times Roman,serif" font-size="9.00">90 (0.0%)</text>
<text text-anchor="end" x="403" y="-767.9" font-family="Times Roman,serif" font-size="9.00">of 2482 (1.2%)</text>
</g>
<!-- N46&#45;&gt;N48 -->
<g id="edge70" class="edge"><title>N46&#45;&gt;N48</title>
<path fill="none" stroke="black" d="M368,-897.345C368,-875.27 368,-839.981 368,-814.243"/>
<polygon fill="black" stroke="black" points="371.5,-814.208 368,-804.208 364.5,-814.208 371.5,-814.208"/>
<text text-anchor="middle" x="386.5" y="-841.4" font-family="Times Roman,serif" font-size="14.00">2482</text>
</g>
<!-- N48&#45;&gt;N22 -->
<g id="edge164" class="edge"><title>N48&#45;&gt;N22</title>
<path fill="none" stroke="black" d="M391.341,-759.878C409.463,-742.703 435.133,-718.374 457.187,-697.472"/>
<polygon fill="black" stroke="black" points="459.662,-699.949 464.512,-690.53 454.846,-694.868 459.662,-699.949"/>
<text text-anchor="middle" x="458" y="-715.4" font-family="Times Roman,serif" font-size="14.00">780</text>
</g>
<!-- N48&#45;&gt;N24 -->
<g id="edge72" class="edge"><title>N48&#45;&gt;N24</title>
<path fill="none" stroke="black" d="M411.172,-772.111C458.15,-759.662 533.55,-734.584 586,-692 631.937,-654.704 625.532,-629.363 661,-582 690.59,-542.487 726.386,-499.209 752.591,-468.282"/>
<polygon fill="black" stroke="black" points="755.566,-470.185 759.375,-460.298 750.232,-465.652 755.566,-470.185"/>
<text text-anchor="middle" x="675" y="-587.4" font-family="Times Roman,serif" font-size="14.00">806</text>
</g>
<!-- N48&#45;&gt;N29 -->
<g id="edge2" class="edge"><title>N48&#45;&gt;N29</title>
<path fill="none" stroke="black" d="M347.978,-759.959C332.829,-742.471 312.267,-716.905 298,-692 276.004,-653.601 258.31,-605.717 247.755,-573.848"/>
<polygon fill="black" stroke="black" points="251.005,-572.522 244.583,-564.095 244.348,-574.687 251.005,-572.522"/>
<text text-anchor="middle" x="312" y="-651.4" font-family="Times Roman,serif" font-size="14.00">357</text>
</g>
<!-- N48&#45;&gt;N44 -->
<g id="edge86" class="edge"><title>N48&#45;&gt;N44</title>
<path fill="none" stroke="black" d="M357.114,-759.778C340.137,-721.862 311.788,-642.867 337,-582 372.23,-496.946 478.768,-456.728 550.066,-438.881"/>
<polygon fill="black" stroke="black" points="550.983,-442.26 559.881,-436.509 549.339,-435.456 550.983,-442.26"/>
<text text-anchor="middle" x="351" y="-587.4" font-family="Times Roman,serif" font-size="14.00">257</text>
</g>
<!-- N48&#45;&gt;N48 -->
<g id="edge120" class="edge"><title>N48&#45;&gt;N48</title>
<path fill="none" stroke="black" d="M411.036,-793.42C421.355,-792.527 429,-788.721 429,-782 429,-777.695 425.862,-774.585 420.894,-772.671"/>
<polygon fill="black" stroke="black" points="421.545,-769.232 411.036,-770.58 420.092,-776.079 421.545,-769.232"/>
<text text-anchor="middle" x="447.5" y="-778.4" font-family="Times Roman,serif" font-size="14.00">2071</text>
</g>
<!-- N51&#45;&gt;N6 -->
<g id="edge8" class="edge"><title>N51&#45;&gt;N6</title>
<path fill="none" stroke="black" d="M946.15,-2215.87C1014.64,-2202.27 1149,-2170.11 1149,-2127 1149,-2127 1149,-2127 1149,-1919 1149,-1892.32 1135.71,-1865.26 1122.7,-1845.16"/>
<polygon fill="black" stroke="black" points="1125.49,-1843.03 1116.99,-1836.71 1119.7,-1846.96 1125.49,-1843.03"/>
<text text-anchor="middle" x="1167.5" y="-2021.4" font-family="Times Roman,serif" font-size="14.00">1332</text>
</g>
</g>
</g></svg>
Display the source blob
Display the rendered blob
Raw
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
// example of parallel XML stream processing, using wikidata XML dump
package main
import (
"encoding/xml"
"flag"
"fmt"
"os"
"runtime/pprof"
)
type Redirect struct {
Title string `xml:"title,attr" json:"title"`
}
// A page as it occurs on Wikipedia
type Page struct {
Title string `xml:"title" json:"title"`
CanonicalTitle string `xml:"ctitle" json:"ctitle"`
Redir Redirect `xml:"redirect" json:"redirect"`
Text string `xml:"revision>text" json:"text"`
}
func main() {
cpuprofile := flag.String("cpuprofile", "", "write cpu profile to file")
flag.Parse()
if *cpuprofile != "" {
f, err := os.Create(*cpuprofile)
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile()
}
flag.Usage = func() {
fmt.Fprintf(os.Stderr, "Usage: %s WIKDATA-XML-FILE\n", os.Args[0])
fmt.Fprintf(os.Stderr, "Find dumps under http://dumps.wikimedia.org/wikidatawiki/\n")
flag.PrintDefaults()
}
if flag.NArg() < 1 {
flag.Usage()
os.Exit(1)
}
filename := flag.Args()[0]
handle, err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer handle.Close()
decoder := xml.NewDecoder(handle)
var inElement string
var p Page
for {
// Read tokens from the XML document in a stream.
t, _ := decoder.Token()
if t == nil {
break
}
// Inspect the type of the token just read.
switch se := t.(type) {
case xml.StartElement:
// If we just read a StartElement token
inElement = se.Name.Local
// ...and its name is "page"
if inElement == "page" {
// decode a whole chunk of following XML into the
// variable p which is a Page (se above)
decoder.DecodeElement(&p, &se)
}
default:
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment