tor-commits
Threads by month
- ----- 2025 -----
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
October 2018
- 17 participants
- 2350 discussions

29 Oct '18
commit 5cc4c4ac66ad8d18e202c265248109fc69354f48
Author: juga0 <juga(a)riseup.net>
Date: Mon Oct 29 14:42:56 2018 +0000
Replace min by max in formulae and simplify
---
sbws/lib/v3bwfile.py | 57 ++++++++++++++++++----------------------------------
1 file changed, 19 insertions(+), 38 deletions(-)
diff --git a/sbws/lib/v3bwfile.py b/sbws/lib/v3bwfile.py
index 72ab58c..3665ae4 100644
--- a/sbws/lib/v3bwfile.py
+++ b/sbws/lib/v3bwfile.py
@@ -740,44 +740,25 @@ class V3BWFile(object):
…
[View More]
.. math::
- bwn_i &=
- max\\left(
- \\frac{bw_i}{\\mu},
- \\frac{bwf_i}{\\mu_{bwf}}
- \\right)
- \\times bwobs_i
-
- .. math::
-
- bwn_i &=
- max\\left(
- \\frac{bw_i}{\\mu},
- min \\left(
- bw_i,
- bw_i \\times \\mu
- \\right)
- \\times
- \\frac{bw_i}{\\sum_{i=1}^{n}
- min \\left(bw_i,
- bw_i \\times \\mu
- \\right)}
- \\right)
- \\times bwobs_i \\
-
- &=
- max\\left(
- \\frac{bw_i}{\\frac{\\sum_{i=1}^{n}bw_i}{n}},
- min \\left(
- bw_i,
- bw_i \\times \\frac{\\sum_{i=1}^{n}bw_i}{n}
- \\right)
- \\times
- \\frac{bw_i}{\\sum_{i=1}^{n}
- min \\left(bw_i,
- bw_i \\times \\frac{\\sum_{i=1}^{n}bw_i}{n}
- \\right)}
- \\right)
- \\times bwobs_i
+ bwn_i =& min\\left(bwnew_i,
+ \\sum_{i=1}^{n}bwnew_i \\times 0.05\\right) \\
+
+ &= min\\left(
+ \\left(bwobs_i \\times r_i\\right),
+ \\sum_{i=1}^{n}\\left(bwobs_i \\times r_i\\right)
+ \\times 0.05\\right)\\
+
+ &= min\\left(
+ \\left(bwobs_i \\times max\\left(rf_i, rs_i\\right)\\right),
+ \\sum_{i=1}^{n}\\left(bwobs_i \\times
+ max\\left(rf_i, rs_i\\right)\\right) \\times 0.05\\right)\\
+
+ &= min\\left(
+ \\left(bwobs_i \\times max\\left(\\frac{bwfilt_i}{bwfilt},
+ \\frac{bw_i}{bwstrm}\\right)\\right),
+ \\sum_{i=1}^{n}\\left(bwobs_i \\times
+ max\\left(\\frac{bwfilt_i}{bwfilt},
+ \\frac{bw_i}{bwstrm}\\right)\\right) \\times 0.05\\right)
"""
log.info("Calculating relays' bandwidth using Torflow method.")
[View Less]
1
0
commit 3d20e3bc8c11b03e6398e18b6f168ecc084d406d
Author: juga0 <juga(a)riseup.net>
Date: Mon Oct 29 10:17:34 2018 +0000
Update diagrams generated automatically
---
docs/source/images/classes_sbws.svg | 517 +++++++++++++----------------------
docs/source/images/packages_sbws.svg | 330 +++++-----------------
2 files changed, 262 insertions(+), 585 deletions(-)
diff --git a/docs/source/images/classes_sbws.svg b/docs/source/images/classes_sbws.svg
index 81aee3c..e9258e8 100644
--- …
[View More]a/docs/source/images/classes_sbws.svg
+++ b/docs/source/images/classes_sbws.svg
@@ -4,376 +4,243 @@
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: classes_sbws Pages: 1 -->
-<svg width="2582pt" height="846pt"
- viewBox="0.00 0.00 2582.00 846.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 842)">
+<svg width="1965pt" height="619pt"
+ viewBox="0.00 0.00 1965.00 619.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 615)">
<title>classes_sbws</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-842 2578,-842 2578,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-615 1961,-615 1961,4 -4,4"/>
<!-- 0 -->
<g id="node1" class="node"><title>0</title>
-<polygon fill="none" stroke="black" points="0,-362.5 0,-551.5 173,-551.5 173,-362.5 0,-362.5"/>
-<text text-anchor="middle" x="86.5" y="-536.3" font-family="Times,serif" font-size="14.00">CircuitBuilder</text>
-<polyline fill="none" stroke="black" points="0,-528.5 173,-528.5 "/>
-<text text-anchor="start" x="8" y="-513.3" font-family="Times,serif" font-size="14.00">built_circuits : set</text>
-<text text-anchor="start" x="8" y="-498.3" font-family="Times,serif" font-size="14.00">circuit_timeout</text>
-<text text-anchor="start" x="8" y="-483.3" font-family="Times,serif" font-size="14.00">close_circuits_on_exit : bool</text>
-<text text-anchor="start" x="8" y="-468.3" font-family="Times,serif" font-size="14.00">controller</text>
-<text text-anchor="start" x="8" y="-453.3" font-family="Times,serif" font-size="14.00">relay_list</text>
-<text text-anchor="start" x="8" y="-438.3" font-family="Times,serif" font-size="14.00">relays</text>
-<text text-anchor="start" x="8" y="-423.3" font-family="Times,serif" font-size="14.00">rng : SystemRandom</text>
-<polyline fill="none" stroke="black" points="0,-415.5 173,-415.5 "/>
-<text text-anchor="start" x="8" y="-400.3" font-family="Times,serif" font-size="14.00">build_circuit()</text>
-<text text-anchor="start" x="8" y="-385.3" font-family="Times,serif" font-size="14.00">close_circuit()</text>
-<text text-anchor="start" x="8" y="-370.3" font-family="Times,serif" font-size="14.00">get_circuit_path()</text>
+<polygon fill="none" stroke="black" points="0,-436.5 0,-610.5 173,-610.5 173,-436.5 0,-436.5"/>
+<text text-anchor="middle" x="86.5" y="-595.3" font-family="Times,serif" font-size="14.00">CircuitBuilder</text>
+<polyline fill="none" stroke="black" points="0,-587.5 173,-587.5 "/>
+<text text-anchor="start" x="8" y="-572.3" font-family="Times,serif" font-size="14.00">built_circuits : set</text>
+<text text-anchor="start" x="8" y="-557.3" font-family="Times,serif" font-size="14.00">circuit_timeout</text>
+<text text-anchor="start" x="8" y="-542.3" font-family="Times,serif" font-size="14.00">close_circuits_on_exit : bool</text>
+<text text-anchor="start" x="8" y="-527.3" font-family="Times,serif" font-size="14.00">controller</text>
+<text text-anchor="start" x="8" y="-512.3" font-family="Times,serif" font-size="14.00">relay_list</text>
+<text text-anchor="start" x="8" y="-497.3" font-family="Times,serif" font-size="14.00">relays</text>
+<text text-anchor="start" x="8" y="-482.3" font-family="Times,serif" font-size="14.00">rng : SystemRandom</text>
+<polyline fill="none" stroke="black" points="0,-474.5 173,-474.5 "/>
+<text text-anchor="start" x="8" y="-459.3" font-family="Times,serif" font-size="14.00">build_circuit()</text>
+<text text-anchor="start" x="8" y="-444.3" font-family="Times,serif" font-size="14.00">close_circuit()</text>
</g>
<!-- 1 -->
<g id="node2" class="node"><title>1</title>
-<polygon fill="none" stroke="black" points="165.5,-98 165.5,-227 259.5,-227 259.5,-98 165.5,-98"/>
-<text text-anchor="middle" x="212.5" y="-211.8" font-family="Times,serif" font-size="14.00">Destination</text>
-<polyline fill="none" stroke="black" points="165.5,-204 259.5,-204 "/>
-<text text-anchor="start" x="173.5" y="-188.8" font-family="Times,serif" font-size="14.00">hostname</text>
-<text text-anchor="start" x="173.5" y="-173.8" font-family="Times,serif" font-size="14.00">port</text>
-<text text-anchor="start" x="173.5" y="-158.8" font-family="Times,serif" font-size="14.00">url</text>
-<text text-anchor="start" x="173.5" y="-143.8" font-family="Times,serif" font-size="14.00">verify</text>
-<polyline fill="none" stroke="black" points="165.5,-136 259.5,-136 "/>
-<text text-anchor="start" x="173.5" y="-120.8" font-family="Times,serif" font-size="14.00">from_config()</text>
-<text text-anchor="start" x="173.5" y="-105.8" font-family="Times,serif" font-size="14.00">is_usable()</text>
+<polygon fill="none" stroke="black" points="165.5,-135.5 165.5,-264.5 259.5,-264.5 259.5,-135.5 165.5,-135.5"/>
+<text text-anchor="middle" x="212.5" y="-249.3" font-family="Times,serif" font-size="14.00">Destination</text>
+<polyline fill="none" stroke="black" points="165.5,-241.5 259.5,-241.5 "/>
+<text text-anchor="start" x="173.5" y="-226.3" font-family="Times,serif" font-size="14.00">hostname</text>
+<text text-anchor="start" x="173.5" y="-211.3" font-family="Times,serif" font-size="14.00">port</text>
+<text text-anchor="start" x="173.5" y="-196.3" font-family="Times,serif" font-size="14.00">url</text>
+<text text-anchor="start" x="173.5" y="-181.3" font-family="Times,serif" font-size="14.00">verify</text>
+<polyline fill="none" stroke="black" points="165.5,-173.5 259.5,-173.5 "/>
+<text text-anchor="start" x="173.5" y="-158.3" font-family="Times,serif" font-size="14.00">from_config()</text>
+<text text-anchor="start" x="173.5" y="-143.3" font-family="Times,serif" font-size="14.00">is_usable()</text>
</g>
<!-- 2 -->
<g id="node3" class="node"><title>2</title>
-<polygon fill="none" stroke="black" points="277.5,-120 277.5,-205 377.5,-205 377.5,-120 277.5,-120"/>
-<text text-anchor="middle" x="327.5" y="-189.8" font-family="Times,serif" font-size="14.00">DestinationList</text>
-<polyline fill="none" stroke="black" points="277.5,-182 377.5,-182 "/>
-<polyline fill="none" stroke="black" points="277.5,-158 377.5,-158 "/>
-<text text-anchor="start" x="285.5" y="-142.8" font-family="Times,serif" font-size="14.00">from_config()</text>
-<text text-anchor="start" x="285.5" y="-127.8" font-family="Times,serif" font-size="14.00">next()</text>
+<polygon fill="none" stroke="black" points="277.5,-157.5 277.5,-242.5 377.5,-242.5 377.5,-157.5 277.5,-157.5"/>
+<text text-anchor="middle" x="327.5" y="-227.3" font-family="Times,serif" font-size="14.00">DestinationList</text>
+<polyline fill="none" stroke="black" points="277.5,-219.5 377.5,-219.5 "/>
+<polyline fill="none" stroke="black" points="277.5,-195.5 377.5,-195.5 "/>
+<text text-anchor="start" x="285.5" y="-180.3" font-family="Times,serif" font-size="14.00">from_config()</text>
+<text text-anchor="start" x="285.5" y="-165.3" font-family="Times,serif" font-size="14.00">next()</text>
</g>
<!-- 3 -->
<g id="node4" class="node"><title>3</title>
-<polygon fill="none" stroke="black" points="395.5,-127.5 395.5,-197.5 491.5,-197.5 491.5,-127.5 395.5,-127.5"/>
-<text text-anchor="middle" x="443.5" y="-182.3" font-family="Times,serif" font-size="14.00">DirectoryLock</text>
-<polyline fill="none" stroke="black" points="395.5,-174.5 491.5,-174.5 "/>
-<polyline fill="none" stroke="black" points="395.5,-150.5 491.5,-150.5 "/>
-<text text-anchor="middle" x="443.5" y="-135.3" font-family="Times,serif" font-size="14.00"> </text>
+<polygon fill="none" stroke="black" points="395.5,-165 395.5,-235 491.5,-235 491.5,-165 395.5,-165"/>
+<text text-anchor="middle" x="443.5" y="-219.8" font-family="Times,serif" font-size="14.00">DirectoryLock</text>
+<polyline fill="none" stroke="black" points="395.5,-212 491.5,-212 "/>
+<polyline fill="none" stroke="black" points="395.5,-188 491.5,-188 "/>
+<text text-anchor="middle" x="443.5" y="-172.8" font-family="Times,serif" font-size="14.00"> </text>
</g>
-<!-- 21 -->
-<g id="node22" class="node"><title>21</title>
-<polygon fill="none" stroke="black" points="463,-422 463,-492 522,-492 522,-422 463,-422"/>
-<text text-anchor="middle" x="492.5" y="-476.8" font-family="Times,serif" font-size="14.00">_FLock</text>
-<polyline fill="none" stroke="black" points="463,-469 522,-469 "/>
-<polyline fill="none" stroke="black" points="463,-445 522,-445 "/>
-<text text-anchor="middle" x="492.5" y="-429.8" font-family="Times,serif" font-size="14.00"> </text>
+<!-- 14 -->
+<g id="node15" class="node"><title>14</title>
+<polygon fill="none" stroke="black" points="463,-488.5 463,-558.5 522,-558.5 522,-488.5 463,-488.5"/>
+<text text-anchor="middle" x="492.5" y="-543.3" font-family="Times,serif" font-size="14.00">_FLock</text>
+<polyline fill="none" stroke="black" points="463,-535.5 522,-535.5 "/>
+<polyline fill="none" stroke="black" points="463,-511.5 522,-511.5 "/>
+<text text-anchor="middle" x="492.5" y="-496.3" font-family="Times,serif" font-size="14.00"> </text>
</g>
-<!-- 3->21 -->
-<g id="edge1" class="edge"><title>3->21</title>
-<path fill="none" stroke="black" d="M449.217,-197.626C458.1,-250.653 475.217,-352.828 485.054,-411.552"/>
-<polygon fill="none" stroke="black" points="481.64,-412.355 486.744,-421.639 488.543,-411.198 481.64,-412.355"/>
+<!-- 3->14 -->
+<g id="edge1" class="edge"><title>3->14</title>
+<path fill="none" stroke="black" d="M448.697,-235.102C457.628,-293.7 475.879,-413.445 485.769,-478.338"/>
+<polygon fill="none" stroke="black" points="482.315,-478.906 487.282,-488.264 489.235,-477.851 482.315,-478.906"/>
</g>
<!-- 4 -->
<g id="node5" class="node"><title>4</title>
-<polygon fill="none" stroke="black" points="510,-127.5 510,-197.5 575,-197.5 575,-127.5 510,-127.5"/>
-<text text-anchor="middle" x="542.5" y="-182.3" font-family="Times,serif" font-size="14.00">FileLock</text>
-<polyline fill="none" stroke="black" points="510,-174.5 575,-174.5 "/>
-<polyline fill="none" stroke="black" points="510,-150.5 575,-150.5 "/>
-<text text-anchor="middle" x="542.5" y="-135.3" font-family="Times,serif" font-size="14.00"> </text>
+<polygon fill="none" stroke="black" points="510,-165 510,-235 575,-235 575,-165 510,-165"/>
+<text text-anchor="middle" x="542.5" y="-219.8" font-family="Times,serif" font-size="14.00">FileLock</text>
+<polyline fill="none" stroke="black" points="510,-212 575,-212 "/>
+<polyline fill="none" stroke="black" points="510,-188 575,-188 "/>
+<text text-anchor="middle" x="542.5" y="-172.8" font-family="Times,serif" font-size="14.00"> </text>
</g>
-<!-- 4->21 -->
-<g id="edge2" class="edge"><title>4->21</title>
-<path fill="none" stroke="black" d="M536.667,-197.626C527.602,-250.653 510.136,-352.828 500.098,-411.552"/>
-<polygon fill="none" stroke="black" points="496.609,-411.193 498.374,-421.639 503.509,-412.372 496.609,-411.193"/>
+<!-- 4->14 -->
+<g id="edge2" class="edge"><title>4->14</title>
+<path fill="none" stroke="black" d="M537.196,-235.102C528.083,-293.7 509.46,-413.445 499.368,-478.338"/>
+<polygon fill="none" stroke="black" points="495.903,-477.845 497.824,-488.264 502.82,-478.921 495.903,-477.845"/>
</g>
<!-- 5 -->
<g id="node6" class="node"><title>5</title>
-<polygon fill="none" stroke="black" points="25.5,-127.5 25.5,-197.5 147.5,-197.5 147.5,-127.5 25.5,-127.5"/>
-<text text-anchor="middle" x="86.5" y="-182.3" font-family="Times,serif" font-size="14.00">GapsCircuitBuilder</text>
-<polyline fill="none" stroke="black" points="25.5,-174.5 147.5,-174.5 "/>
-<polyline fill="none" stroke="black" points="25.5,-150.5 147.5,-150.5 "/>
-<text text-anchor="start" x="33.5" y="-135.3" font-family="Times,serif" font-size="14.00">build_circuit()</text>
+<polygon fill="none" stroke="black" points="25.5,-165 25.5,-235 147.5,-235 147.5,-165 25.5,-165"/>
+<text text-anchor="middle" x="86.5" y="-219.8" font-family="Times,serif" font-size="14.00">GapsCircuitBuilder</text>
+<polyline fill="none" stroke="black" points="25.5,-212 147.5,-212 "/>
+<polyline fill="none" stroke="black" points="25.5,-188 147.5,-188 "/>
+<text text-anchor="start" x="33.5" y="-172.8" font-family="Times,serif" font-size="14.00">build_circuit()</text>
</g>
<!-- 5->0 -->
<g id="edge3" class="edge"><title>5->0</title>
-<path fill="none" stroke="black" d="M86.5,-197.626C86.5,-235.434 86.5,-298.228 86.5,-352.442"/>
-<polygon fill="none" stroke="black" points="83.0001,-352.457 86.5,-362.457 90.0001,-352.457 83.0001,-352.457"/>
+<path fill="none" stroke="black" d="M86.5,-235.102C86.5,-280.201 86.5,-361.52 86.5,-426.176"/>
+<polygon fill="none" stroke="black" points="83.0001,-426.402 86.5,-436.402 90.0001,-426.402 83.0001,-426.402"/>
</g>
<!-- 6 -->
<g id="node7" class="node"><title>6</title>
-<polygon fill="none" stroke="black" points="593.5,-128 593.5,-197 727.5,-197 727.5,-128 593.5,-128"/>
-<text text-anchor="middle" x="660.5" y="-181.8" font-family="Times,serif" font-size="14.00" fill="red">PathLengthException</text>
-<polyline fill="none" stroke="black" points="593.5,-174 727.5,-174 "/>
-<text text-anchor="start" x="601.5" y="-158.8" font-family="Times,serif" font-size="14.00" fill="red">errors : NoneType</text>
-<polyline fill="none" stroke="black" points="593.5,-151 727.5,-151 "/>
-<text text-anchor="middle" x="660.5" y="-135.8" font-family="Times,serif" font-size="14.00" fill="red"> </text>
+<polygon fill="none" stroke="black" points="593.5,-165.5 593.5,-234.5 727.5,-234.5 727.5,-165.5 593.5,-165.5"/>
+<text text-anchor="middle" x="660.5" y="-219.3" font-family="Times,serif" font-size="14.00" fill="red">PathLengthException</text>
+<polyline fill="none" stroke="black" points="593.5,-211.5 727.5,-211.5 "/>
+<text text-anchor="start" x="601.5" y="-196.3" font-family="Times,serif" font-size="14.00" fill="red">errors : NoneType</text>
+<polyline fill="none" stroke="black" points="593.5,-188.5 727.5,-188.5 "/>
+<text text-anchor="middle" x="660.5" y="-173.3" font-family="Times,serif" font-size="14.00" fill="red"> </text>
</g>
<!-- 7 -->
<g id="node8" class="node"><title>7</title>
-<polygon fill="none" stroke="black" points="718,-392.5 718,-521.5 909,-521.5 909,-392.5 718,-392.5"/>
-<text text-anchor="middle" x="813.5" y="-506.3" font-family="Times,serif" font-size="14.00">Relay</text>
-<polyline fill="none" stroke="black" points="718,-498.5 909,-498.5 "/>
-<text text-anchor="start" x="726" y="-483.3" font-family="Times,serif" font-size="14.00">address</text>
-<text text-anchor="start" x="726" y="-468.3" font-family="Times,serif" font-size="14.00">average_bandwidth : NoneType</text>
-<text text-anchor="start" x="726" y="-453.3" font-family="Times,serif" font-size="14.00">fingerprint</text>
-<text text-anchor="start" x="726" y="-438.3" font-family="Times,serif" font-size="14.00">master_key_ed25519</text>
-<text text-anchor="start" x="726" y="-423.3" font-family="Times,serif" font-size="14.00">nickname</text>
-<polyline fill="none" stroke="black" points="718,-415.5 909,-415.5 "/>
-<text text-anchor="middle" x="813.5" y="-400.3" font-family="Times,serif" font-size="14.00"> </text>
-</g>
-<!-- 11 -->
-<g id="node12" class="node"><title>11</title>
-<polygon fill="none" stroke="black" points="930.5,-603.5 930.5,-837.5 1086.5,-837.5 1086.5,-603.5 930.5,-603.5"/>
-<text text-anchor="middle" x="1008.5" y="-822.3" font-family="Times,serif" font-size="14.00">Result</text>
-<polyline fill="none" stroke="black" points="930.5,-814.5 1086.5,-814.5 "/>
-<text text-anchor="start" x="938.5" y="-799.3" font-family="Times,serif" font-size="14.00">address</text>
-<text text-anchor="start" x="938.5" y="-784.3" font-family="Times,serif" font-size="14.00">circ</text>
-<text text-anchor="start" x="938.5" y="-769.3" font-family="Times,serif" font-size="14.00">dest_url</text>
-<text text-anchor="start" x="938.5" y="-754.3" font-family="Times,serif" font-size="14.00">fingerprint</text>
-<text text-anchor="start" x="938.5" y="-739.3" font-family="Times,serif" font-size="14.00">master_key_ed25519</text>
-<text text-anchor="start" x="938.5" y="-724.3" font-family="Times,serif" font-size="14.00">nickname</text>
-<text text-anchor="start" x="938.5" y="-709.3" font-family="Times,serif" font-size="14.00">relay_average_bandwidth</text>
-<text text-anchor="start" x="938.5" y="-694.3" font-family="Times,serif" font-size="14.00">scanner</text>
-<text text-anchor="start" x="938.5" y="-679.3" font-family="Times,serif" font-size="14.00">time</text>
-<text text-anchor="start" x="938.5" y="-664.3" font-family="Times,serif" font-size="14.00">type</text>
-<text text-anchor="start" x="938.5" y="-649.3" font-family="Times,serif" font-size="14.00">version</text>
-<polyline fill="none" stroke="black" points="930.5,-641.5 1086.5,-641.5 "/>
-<text text-anchor="start" x="938.5" y="-626.3" font-family="Times,serif" font-size="14.00">from_dict()</text>
-<text text-anchor="start" x="938.5" y="-611.3" font-family="Times,serif" font-size="14.00">to_dict()</text>
-</g>
-<!-- 7->11 -->
-<g id="edge10" class="edge"><title>7->11</title>
-<path fill="none" stroke="black" d="M860.953,-521.636C879.691,-546.764 901.812,-576.429 923.146,-605.038"/>
-<polygon fill="black" stroke="black" points="923.171,-605.071 929.964,-607.49 930.344,-614.691 923.551,-612.272 923.171,-605.071"/>
-<text text-anchor="middle" x="922.5" y="-573.8" font-family="Times,serif" font-size="14.00" fill="green">_relay</text>
+<polygon fill="none" stroke="black" points="746,-105.5 746,-294.5 879,-294.5 879,-105.5 746,-105.5"/>
+<text text-anchor="middle" x="812.5" y="-279.3" font-family="Times,serif" font-size="14.00">Relay</text>
+<polyline fill="none" stroke="black" points="746,-271.5 879,-271.5 "/>
+<text text-anchor="start" x="754" y="-256.3" font-family="Times,serif" font-size="14.00">address</text>
+<text text-anchor="start" x="754" y="-241.3" font-family="Times,serif" font-size="14.00">average_bandwidth</text>
+<text text-anchor="start" x="754" y="-226.3" font-family="Times,serif" font-size="14.00">bandwidth</text>
+<text text-anchor="start" x="754" y="-211.3" font-family="Times,serif" font-size="14.00">exit_policy</text>
+<text text-anchor="start" x="754" y="-196.3" font-family="Times,serif" font-size="14.00">fingerprint</text>
+<text text-anchor="start" x="754" y="-181.3" font-family="Times,serif" font-size="14.00">flags</text>
+<text text-anchor="start" x="754" y="-166.3" font-family="Times,serif" font-size="14.00">master_key_ed25519</text>
+<text text-anchor="start" x="754" y="-151.3" font-family="Times,serif" font-size="14.00">nickname</text>
+<text text-anchor="start" x="754" y="-136.3" font-family="Times,serif" font-size="14.00">observed_bandwidth</text>
+<polyline fill="none" stroke="black" points="746,-128.5 879,-128.5 "/>
+<text text-anchor="start" x="754" y="-113.3" font-family="Times,serif" font-size="14.00">can_exit_to()</text>
</g>
<!-- 8 -->
<g id="node9" class="node"><title>8</title>
-<polygon fill="none" stroke="black" points="1245,-75.5 1245,-249.5 1378,-249.5 1378,-75.5 1245,-75.5"/>
-<text text-anchor="middle" x="1311.5" y="-234.3" font-family="Times,serif" font-size="14.00">Relay</text>
-<polyline fill="none" stroke="black" points="1245,-226.5 1378,-226.5 "/>
-<text text-anchor="start" x="1253" y="-211.3" font-family="Times,serif" font-size="14.00">address</text>
-<text text-anchor="start" x="1253" y="-196.3" font-family="Times,serif" font-size="14.00">average_bandwidth</text>
-<text text-anchor="start" x="1253" y="-181.3" font-family="Times,serif" font-size="14.00">bandwidth</text>
-<text text-anchor="start" x="1253" y="-166.3" font-family="Times,serif" font-size="14.00">exit_policy</text>
-<text text-anchor="start" x="1253" y="-151.3" font-family="Times,serif" font-size="14.00">fingerprint</text>
-<text text-anchor="start" x="1253" y="-136.3" font-family="Times,serif" font-size="14.00">flags</text>
-<text text-anchor="start" x="1253" y="-121.3" font-family="Times,serif" font-size="14.00">master_key_ed25519</text>
-<text text-anchor="start" x="1253" y="-106.3" font-family="Times,serif" font-size="14.00">nickname</text>
-<polyline fill="none" stroke="black" points="1245,-98.5 1378,-98.5 "/>
-<text text-anchor="start" x="1253" y="-83.3" font-family="Times,serif" font-size="14.00">can_exit_to()</text>
+<polygon fill="none" stroke="black" points="897.5,-105.5 897.5,-294.5 1073.5,-294.5 1073.5,-105.5 897.5,-105.5"/>
+<text text-anchor="middle" x="985.5" y="-279.3" font-family="Times,serif" font-size="14.00">RelayList</text>
+<polyline fill="none" stroke="black" points="897.5,-271.5 1073.5,-271.5 "/>
+<text text-anchor="start" x="905.5" y="-256.3" font-family="Times,serif" font-size="14.00">REFRESH_INTERVAL : int</text>
+<text text-anchor="start" x="905.5" y="-241.3" font-family="Times,serif" font-size="14.00">authorities</text>
+<text text-anchor="start" x="905.5" y="-226.3" font-family="Times,serif" font-size="14.00">bad_exits</text>
+<text text-anchor="start" x="905.5" y="-211.3" font-family="Times,serif" font-size="14.00">exits</text>
+<text text-anchor="start" x="905.5" y="-196.3" font-family="Times,serif" font-size="14.00">fast</text>
+<text text-anchor="start" x="905.5" y="-181.3" font-family="Times,serif" font-size="14.00">guards</text>
+<text text-anchor="start" x="905.5" y="-166.3" font-family="Times,serif" font-size="14.00">non_exits</text>
+<text text-anchor="start" x="905.5" y="-151.3" font-family="Times,serif" font-size="14.00">relays</text>
+<text text-anchor="start" x="905.5" y="-136.3" font-family="Times,serif" font-size="14.00">rng : SystemRandom</text>
+<polyline fill="none" stroke="black" points="897.5,-128.5 1073.5,-128.5 "/>
+<text text-anchor="start" x="905.5" y="-113.3" font-family="Times,serif" font-size="14.00">random_relay()</text>
</g>
<!-- 9 -->
<g id="node10" class="node"><title>9</title>
-<polygon fill="none" stroke="black" points="1396.5,-68 1396.5,-257 1572.5,-257 1572.5,-68 1396.5,-68"/>
-<text text-anchor="middle" x="1484.5" y="-241.8" font-family="Times,serif" font-size="14.00">RelayList</text>
-<polyline fill="none" stroke="black" points="1396.5,-234 1572.5,-234 "/>
-<text text-anchor="start" x="1404.5" y="-218.8" font-family="Times,serif" font-size="14.00">REFRESH_INTERVAL : int</text>
-<text text-anchor="start" x="1404.5" y="-203.8" font-family="Times,serif" font-size="14.00">authorities</text>
-<text text-anchor="start" x="1404.5" y="-188.8" font-family="Times,serif" font-size="14.00">bad_exits</text>
-<text text-anchor="start" x="1404.5" y="-173.8" font-family="Times,serif" font-size="14.00">exits</text>
-<text text-anchor="start" x="1404.5" y="-158.8" font-family="Times,serif" font-size="14.00">fast</text>
-<text text-anchor="start" x="1404.5" y="-143.8" font-family="Times,serif" font-size="14.00">guards</text>
-<text text-anchor="start" x="1404.5" y="-128.8" font-family="Times,serif" font-size="14.00">non_exits</text>
-<text text-anchor="start" x="1404.5" y="-113.8" font-family="Times,serif" font-size="14.00">relays</text>
-<text text-anchor="start" x="1404.5" y="-98.8" font-family="Times,serif" font-size="14.00">rng : SystemRandom</text>
-<polyline fill="none" stroke="black" points="1396.5,-91 1572.5,-91 "/>
-<text text-anchor="start" x="1404.5" y="-75.8" font-family="Times,serif" font-size="14.00">random_relay()</text>
+<polygon fill="none" stroke="black" points="1091.5,-128 1091.5,-272 1217.5,-272 1217.5,-128 1091.5,-128"/>
+<text text-anchor="middle" x="1154.5" y="-256.8" font-family="Times,serif" font-size="14.00">RelayPrioritizer</text>
+<polyline fill="none" stroke="black" points="1091.5,-249 1217.5,-249 "/>
+<text text-anchor="start" x="1099.5" y="-233.8" font-family="Times,serif" font-size="14.00">fraction_to_return</text>
+<text text-anchor="start" x="1099.5" y="-218.8" font-family="Times,serif" font-size="14.00">fresh_seconds</text>
+<text text-anchor="start" x="1099.5" y="-203.8" font-family="Times,serif" font-size="14.00">measure_authorities</text>
+<text text-anchor="start" x="1099.5" y="-188.8" font-family="Times,serif" font-size="14.00">min_to_return</text>
+<text text-anchor="start" x="1099.5" y="-173.8" font-family="Times,serif" font-size="14.00">relay_list</text>
+<text text-anchor="start" x="1099.5" y="-158.8" font-family="Times,serif" font-size="14.00">result_dump</text>
+<polyline fill="none" stroke="black" points="1091.5,-151 1217.5,-151 "/>
+<text text-anchor="start" x="1099.5" y="-135.8" font-family="Times,serif" font-size="14.00">best_priority()</text>
</g>
<!-- 10 -->
<g id="node11" class="node"><title>10</title>
-<polygon fill="none" stroke="black" points="1590.5,-90.5 1590.5,-234.5 1716.5,-234.5 1716.5,-90.5 1590.5,-90.5"/>
-<text text-anchor="middle" x="1653.5" y="-219.3" font-family="Times,serif" font-size="14.00">RelayPrioritizer</text>
-<polyline fill="none" stroke="black" points="1590.5,-211.5 1716.5,-211.5 "/>
-<text text-anchor="start" x="1598.5" y="-196.3" font-family="Times,serif" font-size="14.00">fraction_to_return</text>
-<text text-anchor="start" x="1598.5" y="-181.3" font-family="Times,serif" font-size="14.00">fresh_seconds</text>
-<text text-anchor="start" x="1598.5" y="-166.3" font-family="Times,serif" font-size="14.00">measure_authorities</text>
-<text text-anchor="start" x="1598.5" y="-151.3" font-family="Times,serif" font-size="14.00">min_to_return</text>
-<text text-anchor="start" x="1598.5" y="-136.3" font-family="Times,serif" font-size="14.00">relay_list</text>
-<text text-anchor="start" x="1598.5" y="-121.3" font-family="Times,serif" font-size="14.00">result_dump</text>
-<polyline fill="none" stroke="black" points="1590.5,-113.5 1716.5,-113.5 "/>
-<text text-anchor="start" x="1598.5" y="-98.3" font-family="Times,serif" font-size="14.00">best_priority()</text>
+<polygon fill="none" stroke="black" points="1235.5,-165 1235.5,-235 1289.5,-235 1289.5,-165 1235.5,-165"/>
+<text text-anchor="middle" x="1262.5" y="-219.8" font-family="Times,serif" font-size="14.00">State</text>
+<polyline fill="none" stroke="black" points="1235.5,-212 1289.5,-212 "/>
+<polyline fill="none" stroke="black" points="1235.5,-188 1289.5,-188 "/>
+<text text-anchor="start" x="1243.5" y="-172.8" font-family="Times,serif" font-size="14.00">get()</text>
+</g>
+<!-- 11 -->
+<g id="node12" class="node"><title>11</title>
+<polygon fill="none" stroke="black" points="1307.5,-0.5 1307.5,-399.5 1505.5,-399.5 1505.5,-0.5 1307.5,-0.5"/>
+<text text-anchor="middle" x="1406.5" y="-384.3" font-family="Times,serif" font-size="14.00">V3BWFile</text>
+<polyline fill="none" stroke="black" points="1307.5,-376.5 1505.5,-376.5 "/>
+<text text-anchor="start" x="1315.5" y="-361.3" font-family="Times,serif" font-size="14.00">bw_lines</text>
+<text text-anchor="start" x="1315.5" y="-346.3" font-family="Times,serif" font-size="14.00">header</text>
+<text text-anchor="start" x="1315.5" y="-331.3" font-family="Times,serif" font-size="14.00">info_stats</text>
+<text text-anchor="start" x="1315.5" y="-316.3" font-family="Times,serif" font-size="14.00">is_min_perc</text>
+<text text-anchor="start" x="1315.5" y="-301.3" font-family="Times,serif" font-size="14.00">max_bw</text>
+<text text-anchor="start" x="1315.5" y="-286.3" font-family="Times,serif" font-size="14.00">mean_bw</text>
+<text text-anchor="start" x="1315.5" y="-271.3" font-family="Times,serif" font-size="14.00">median_bw</text>
+<text text-anchor="start" x="1315.5" y="-256.3" font-family="Times,serif" font-size="14.00">min_bw</text>
+<text text-anchor="start" x="1315.5" y="-241.3" font-family="Times,serif" font-size="14.00">num</text>
+<text text-anchor="start" x="1315.5" y="-226.3" font-family="Times,serif" font-size="14.00">sum_bw</text>
+<polyline fill="none" stroke="black" points="1307.5,-218.5 1505.5,-218.5 "/>
+<text text-anchor="start" x="1315.5" y="-203.3" font-family="Times,serif" font-size="14.00">bw_kb()</text>
+<text text-anchor="start" x="1315.5" y="-188.3" font-family="Times,serif" font-size="14.00">bw_line_for_node_id()</text>
+<text text-anchor="start" x="1315.5" y="-173.3" font-family="Times,serif" font-size="14.00">bw_sbws_scale()</text>
+<text text-anchor="start" x="1315.5" y="-158.3" font-family="Times,serif" font-size="14.00">bw_torflow_scale()</text>
+<text text-anchor="start" x="1315.5" y="-143.3" font-family="Times,serif" font-size="14.00">from_results()</text>
+<text text-anchor="start" x="1315.5" y="-128.3" font-family="Times,serif" font-size="14.00">from_v100_fpath()</text>
+<text text-anchor="start" x="1315.5" y="-113.3" font-family="Times,serif" font-size="14.00">from_v110_fpath()</text>
+<text text-anchor="start" x="1315.5" y="-98.3" font-family="Times,serif" font-size="14.00">is_max_bw_diff_perc_reached()</text>
+<text text-anchor="start" x="1315.5" y="-83.3" font-family="Times,serif" font-size="14.00">measured_progress_stats()</text>
+<text text-anchor="start" x="1315.5" y="-68.3" font-family="Times,serif" font-size="14.00">read_number_consensus_relays()</text>
+<text text-anchor="start" x="1315.5" y="-53.3" font-family="Times,serif" font-size="14.00">to_plt()</text>
+<text text-anchor="start" x="1315.5" y="-38.3" font-family="Times,serif" font-size="14.00">update_progress()</text>
+<text text-anchor="start" x="1315.5" y="-23.3" font-family="Times,serif" font-size="14.00">warn_if_not_accurate_enough()</text>
+<text text-anchor="start" x="1315.5" y="-8.3" font-family="Times,serif" font-size="14.00">write()</text>
</g>
<!-- 12 -->
<g id="node13" class="node"><title>12</title>
-<polygon fill="none" stroke="black" points="1734.5,-53 1734.5,-272 1902.5,-272 1902.5,-53 1734.5,-53"/>
-<text text-anchor="middle" x="1818.5" y="-256.8" font-family="Times,serif" font-size="14.00">ResultDump</text>
-<polyline fill="none" stroke="black" points="1734.5,-249 1902.5,-249 "/>
-<text text-anchor="start" x="1742.5" y="-233.8" font-family="Times,serif" font-size="14.00">conf</text>
-<text text-anchor="start" x="1742.5" y="-218.8" font-family="Times,serif" font-size="14.00">data : dict</text>
-<text text-anchor="start" x="1742.5" y="-203.8" font-family="Times,serif" font-size="14.00">data_lock : RLock, _RLock</text>
-<text text-anchor="start" x="1742.5" y="-188.8" font-family="Times,serif" font-size="14.00">datadir</text>
-<text text-anchor="start" x="1742.5" y="-173.8" font-family="Times,serif" font-size="14.00">end_event</text>
-<text text-anchor="start" x="1742.5" y="-158.8" font-family="Times,serif" font-size="14.00">fresh_days</text>
-<text text-anchor="start" x="1742.5" y="-143.8" font-family="Times,serif" font-size="14.00">queue : Queue</text>
-<text text-anchor="start" x="1742.5" y="-128.8" font-family="Times,serif" font-size="14.00">thread : Thread</text>
-<polyline fill="none" stroke="black" points="1734.5,-121 1902.5,-121 "/>
-<text text-anchor="start" x="1742.5" y="-105.8" font-family="Times,serif" font-size="14.00">enter()</text>
-<text text-anchor="start" x="1742.5" y="-90.8" font-family="Times,serif" font-size="14.00">handle_result()</text>
-<text text-anchor="start" x="1742.5" y="-75.8" font-family="Times,serif" font-size="14.00">results_for_relay()</text>
-<text text-anchor="start" x="1742.5" y="-60.8" font-family="Times,serif" font-size="14.00">store_result()</text>
+<polygon fill="none" stroke="black" points="1523.5,-23 1523.5,-377 1727.5,-377 1727.5,-23 1523.5,-23"/>
+<text text-anchor="middle" x="1625.5" y="-361.8" font-family="Times,serif" font-size="14.00">V3BWHeader</text>
+<polyline fill="none" stroke="black" points="1523.5,-354 1727.5,-354 "/>
+<text text-anchor="start" x="1531.5" y="-338.8" font-family="Times,serif" font-size="14.00">file_created</text>
+<text text-anchor="start" x="1531.5" y="-323.8" font-family="Times,serif" font-size="14.00">keyvalue_tuple_ls</text>
+<text text-anchor="start" x="1531.5" y="-308.8" font-family="Times,serif" font-size="14.00">keyvalue_unordered_tuple_ls</text>
+<text text-anchor="start" x="1531.5" y="-293.8" font-family="Times,serif" font-size="14.00">keyvalue_v110str_ls</text>
+<text text-anchor="start" x="1531.5" y="-278.8" font-family="Times,serif" font-size="14.00">keyvalue_v200_ls</text>
+<text text-anchor="start" x="1531.5" y="-263.8" font-family="Times,serif" font-size="14.00">latest_bandwidth</text>
+<text text-anchor="start" x="1531.5" y="-248.8" font-family="Times,serif" font-size="14.00">num_lines</text>
+<text text-anchor="start" x="1531.5" y="-233.8" font-family="Times,serif" font-size="14.00">software</text>
+<text text-anchor="start" x="1531.5" y="-218.8" font-family="Times,serif" font-size="14.00">software_version</text>
+<text text-anchor="start" x="1531.5" y="-203.8" font-family="Times,serif" font-size="14.00">strv110</text>
+<text text-anchor="start" x="1531.5" y="-188.8" font-family="Times,serif" font-size="14.00">strv200</text>
+<text text-anchor="start" x="1531.5" y="-173.8" font-family="Times,serif" font-size="14.00">timestamp</text>
+<text text-anchor="start" x="1531.5" y="-158.8" font-family="Times,serif" font-size="14.00">version</text>
+<polyline fill="none" stroke="black" points="1523.5,-151 1727.5,-151 "/>
+<text text-anchor="start" x="1531.5" y="-135.8" font-family="Times,serif" font-size="14.00">add_stats()</text>
+<text text-anchor="start" x="1531.5" y="-120.8" font-family="Times,serif" font-size="14.00">earliest_bandwidth_from_results()</text>
+<text text-anchor="start" x="1531.5" y="-105.8" font-family="Times,serif" font-size="14.00">from_lines_v100()</text>
+<text text-anchor="start" x="1531.5" y="-90.8" font-family="Times,serif" font-size="14.00">from_lines_v110()</text>
+<text text-anchor="start" x="1531.5" y="-75.8" font-family="Times,serif" font-size="14.00">from_results()</text>
+<text text-anchor="start" x="1531.5" y="-60.8" font-family="Times,serif" font-size="14.00">from_text_v110()</text>
+<text text-anchor="start" x="1531.5" y="-45.8" font-family="Times,serif" font-size="14.00">generator_started_from_file()</text>
+<text text-anchor="start" x="1531.5" y="-30.8" font-family="Times,serif" font-size="14.00">latest_bandwidth_from_results()</text>
</g>
<!-- 13 -->
<g id="node14" class="node"><title>13</title>
-<polygon fill="none" stroke="black" points="927,-400 927,-514 1090,-514 1090,-400 927,-400"/>
-<text text-anchor="middle" x="1008.5" y="-498.8" font-family="Times,serif" font-size="14.00">ResultError</text>
-<polyline fill="none" stroke="black" points="927,-491 1090,-491 "/>
-<text text-anchor="start" x="935" y="-475.8" font-family="Times,serif" font-size="14.00">freshness_reduction_factor</text>
-<text text-anchor="start" x="935" y="-460.8" font-family="Times,serif" font-size="14.00">msg</text>
-<text text-anchor="start" x="935" y="-445.8" font-family="Times,serif" font-size="14.00">type</text>
-<polyline fill="none" stroke="black" points="927,-438 1090,-438 "/>
-<text text-anchor="start" x="935" y="-422.8" font-family="Times,serif" font-size="14.00">from_dict()</text>
-<text text-anchor="start" x="935" y="-407.8" font-family="Times,serif" font-size="14.00">to_dict()</text>
-</g>
-<!-- 13->11 -->
-<g id="edge4" class="edge"><title>13->11</title>
-<path fill="none" stroke="black" d="M1008.5,-514.098C1008.5,-537.355 1008.5,-565.35 1008.5,-593.085"/>
-<polygon fill="none" stroke="black" points="1005,-593.282 1008.5,-603.282 1012,-593.282 1005,-593.282"/>
-</g>
-<!-- 14 -->
-<g id="node15" class="node"><title>14</title>
-<polygon fill="none" stroke="black" points="746,-113 746,-212 909,-212 909,-113 746,-113"/>
-<text text-anchor="middle" x="827.5" y="-196.8" font-family="Times,serif" font-size="14.00">ResultErrorAuth</text>
-<polyline fill="none" stroke="black" points="746,-189 909,-189 "/>
-<text text-anchor="start" x="754" y="-173.8" font-family="Times,serif" font-size="14.00">freshness_reduction_factor</text>
-<text text-anchor="start" x="754" y="-158.8" font-family="Times,serif" font-size="14.00">type</text>
-<polyline fill="none" stroke="black" points="746,-151 909,-151 "/>
-<text text-anchor="start" x="754" y="-135.8" font-family="Times,serif" font-size="14.00">from_dict()</text>
-<text text-anchor="start" x="754" y="-120.8" font-family="Times,serif" font-size="14.00">to_dict()</text>
-</g>
-<!-- 14->13 -->
-<g id="edge5" class="edge"><title>14->13</title>
-<path fill="none" stroke="black" d="M853.056,-212.275C870.438,-244.698 894.394,-287.963 917.5,-325 931.281,-347.09 947.213,-370.624 961.859,-391.561"/>
-<polygon fill="none" stroke="black" points="959.002,-393.583 967.615,-399.753 964.729,-389.558 959.002,-393.583"/>
-</g>
-<!-- 15 -->
-<g id="node16" class="node"><title>15</title>
-<polygon fill="none" stroke="black" points="927,-113 927,-212 1090,-212 1090,-113 927,-113"/>
-<text text-anchor="middle" x="1008.5" y="-196.8" font-family="Times,serif" font-size="14.00">ResultErrorCircuit</text>
-<polyline fill="none" stroke="black" points="927,-189 1090,-189 "/>
-<text text-anchor="start" x="935" y="-173.8" font-family="Times,serif" font-size="14.00">freshness_reduction_factor</text>
-<text text-anchor="start" x="935" y="-158.8" font-family="Times,serif" font-size="14.00">type</text>
-<polyline fill="none" stroke="black" points="927,-151 1090,-151 "/>
-<text text-anchor="start" x="935" y="-135.8" font-family="Times,serif" font-size="14.00">from_dict()</text>
-<text text-anchor="start" x="935" y="-120.8" font-family="Times,serif" font-size="14.00">to_dict()</text>
-</g>
-<!-- 15->13 -->
-<g id="edge6" class="edge"><title>15->13</title>
-<path fill="none" stroke="black" d="M1008.5,-212.129C1008.5,-260.66 1008.5,-335.584 1008.5,-389.579"/>
-<polygon fill="none" stroke="black" points="1005,-389.745 1008.5,-399.745 1012,-389.745 1005,-389.745"/>
-</g>
-<!-- 16 -->
-<g id="node17" class="node"><title>16</title>
-<polygon fill="none" stroke="black" points="1108,-120.5 1108,-204.5 1227,-204.5 1227,-120.5 1108,-120.5"/>
-<text text-anchor="middle" x="1167.5" y="-189.3" font-family="Times,serif" font-size="14.00">ResultErrorStream</text>
-<polyline fill="none" stroke="black" points="1108,-181.5 1227,-181.5 "/>
-<text text-anchor="start" x="1116" y="-166.3" font-family="Times,serif" font-size="14.00">type</text>
-<polyline fill="none" stroke="black" points="1108,-158.5 1227,-158.5 "/>
-<text text-anchor="start" x="1116" y="-143.3" font-family="Times,serif" font-size="14.00">from_dict()</text>
-<text text-anchor="start" x="1116" y="-128.3" font-family="Times,serif" font-size="14.00">to_dict()</text>
-</g>
-<!-- 16->13 -->
-<g id="edge7" class="edge"><title>16->13</title>
-<path fill="none" stroke="black" d="M1152.5,-204.705C1139.78,-237.984 1120.17,-285.595 1098.5,-325 1086.17,-347.418 1070.96,-370.783 1056.58,-391.467"/>
-<polygon fill="none" stroke="black" points="1053.58,-389.658 1050.7,-399.854 1059.31,-393.68 1053.58,-389.658"/>
-</g>
-<!-- 17 -->
-<g id="node18" class="node"><title>17</title>
-<polygon fill="none" stroke="black" points="1108.5,-400 1108.5,-514 1202.5,-514 1202.5,-400 1108.5,-400"/>
-<text text-anchor="middle" x="1155.5" y="-498.8" font-family="Times,serif" font-size="14.00">ResultSuccess</text>
-<polyline fill="none" stroke="black" points="1108.5,-491 1202.5,-491 "/>
-<text text-anchor="start" x="1116.5" y="-475.8" font-family="Times,serif" font-size="14.00">downloads</text>
-<text text-anchor="start" x="1116.5" y="-460.8" font-family="Times,serif" font-size="14.00">rtts</text>
-<text text-anchor="start" x="1116.5" y="-445.8" font-family="Times,serif" font-size="14.00">type</text>
-<polyline fill="none" stroke="black" points="1108.5,-438 1202.5,-438 "/>
-<text text-anchor="start" x="1116.5" y="-422.8" font-family="Times,serif" font-size="14.00">from_dict()</text>
-<text text-anchor="start" x="1116.5" y="-407.8" font-family="Times,serif" font-size="14.00">to_dict()</text>
-</g>
-<!-- 17->11 -->
-<g id="edge8" class="edge"><title>17->11</title>
-<path fill="none" stroke="black" d="M1123.96,-514.098C1110.66,-537.763 1094.6,-566.334 1078.74,-594.545"/>
-<polygon fill="none" stroke="black" points="1075.68,-592.85 1073.83,-603.282 1081.78,-596.28 1075.68,-592.85"/>
-</g>
-<!-- 18 -->
-<g id="node19" class="node"><title>18</title>
-<polygon fill="none" stroke="black" points="1921,-90.5 1921,-234.5 2040,-234.5 2040,-90.5 1921,-90.5"/>
-<text text-anchor="middle" x="1980.5" y="-219.3" font-family="Times,serif" font-size="14.00">V3BWFile</text>
-<polyline fill="none" stroke="black" points="1921,-211.5 2040,-211.5 "/>
-<text text-anchor="start" x="1929" y="-196.3" font-family="Times,serif" font-size="14.00">avg_bw</text>
-<text text-anchor="start" x="1929" y="-181.3" font-family="Times,serif" font-size="14.00">bw_lines</text>
-<text text-anchor="start" x="1929" y="-166.3" font-family="Times,serif" font-size="14.00">header</text>
-<text text-anchor="start" x="1929" y="-151.3" font-family="Times,serif" font-size="14.00">num_lines</text>
-<text text-anchor="start" x="1929" y="-136.3" font-family="Times,serif" font-size="14.00">total_bw</text>
-<polyline fill="none" stroke="black" points="1921,-128.5 2040,-128.5 "/>
-<text text-anchor="start" x="1929" y="-113.3" font-family="Times,serif" font-size="14.00">from_arg_results()</text>
-<text text-anchor="start" x="1929" y="-98.3" font-family="Times,serif" font-size="14.00">write()</text>
-</g>
-<!-- 19 -->
-<g id="node20" class="node"><title>19</title>
-<polygon fill="none" stroke="black" points="2058.5,-0.5 2058.5,-324.5 2262.5,-324.5 2262.5,-0.5 2058.5,-0.5"/>
-<text text-anchor="middle" x="2160.5" y="-309.3" font-family="Times,serif" font-size="14.00">V3BWHeader</text>
-<polyline fill="none" stroke="black" points="2058.5,-301.5 2262.5,-301.5 "/>
-<text text-anchor="start" x="2066.5" y="-286.3" font-family="Times,serif" font-size="14.00">file_created</text>
-<text text-anchor="start" x="2066.5" y="-271.3" font-family="Times,serif" font-size="14.00">keyvalue_tuple_ls</text>
-<text text-anchor="start" x="2066.5" y="-256.3" font-family="Times,serif" font-size="14.00">keyvalue_unordered_tuple_ls</text>
-<text text-anchor="start" x="2066.5" y="-241.3" font-family="Times,serif" font-size="14.00">keyvalue_v110str_ls</text>
-<text text-anchor="start" x="2066.5" y="-226.3" font-family="Times,serif" font-size="14.00">keyvalue_v200_ls</text>
-<text text-anchor="start" x="2066.5" y="-211.3" font-family="Times,serif" font-size="14.00">latest_bandwidth</text>
-<text text-anchor="start" x="2066.5" y="-196.3" font-family="Times,serif" font-size="14.00">num_lines</text>
-<text text-anchor="start" x="2066.5" y="-181.3" font-family="Times,serif" font-size="14.00">software</text>
-<text text-anchor="start" x="2066.5" y="-166.3" font-family="Times,serif" font-size="14.00">software_version</text>
-<text text-anchor="start" x="2066.5" y="-151.3" font-family="Times,serif" font-size="14.00">strv110</text>
-<text text-anchor="start" x="2066.5" y="-136.3" font-family="Times,serif" font-size="14.00">strv200</text>
-<text text-anchor="start" x="2066.5" y="-121.3" font-family="Times,serif" font-size="14.00">timestamp</text>
-<text text-anchor="start" x="2066.5" y="-106.3" font-family="Times,serif" font-size="14.00">version</text>
-<polyline fill="none" stroke="black" points="2058.5,-98.5 2262.5,-98.5 "/>
-<text text-anchor="start" x="2066.5" y="-83.3" font-family="Times,serif" font-size="14.00">earliest_bandwidth_from_results()</text>
-<text text-anchor="start" x="2066.5" y="-68.3" font-family="Times,serif" font-size="14.00">from_lines_v110()</text>
-<text text-anchor="start" x="2066.5" y="-53.3" font-family="Times,serif" font-size="14.00">from_results()</text>
-<text text-anchor="start" x="2066.5" y="-38.3" font-family="Times,serif" font-size="14.00">from_text_v110()</text>
-<text text-anchor="start" x="2066.5" y="-23.3" font-family="Times,serif" font-size="14.00">generator_started_from_file()</text>
-<text text-anchor="start" x="2066.5" y="-8.3" font-family="Times,serif" font-size="14.00">latest_bandwidth_from_results()</text>
-</g>
-<!-- 20 -->
-<g id="node21" class="node"><title>20</title>
-<polygon fill="none" stroke="black" points="2280,-53 2280,-272 2447,-272 2447,-53 2280,-53"/>
-<text text-anchor="middle" x="2363.5" y="-256.8" font-family="Times,serif" font-size="14.00">V3BWLine</text>
-<polyline fill="none" stroke="black" points="2280,-249 2447,-249 "/>
-<text text-anchor="start" x="2288" y="-233.8" font-family="Times,serif" font-size="14.00">bw</text>
-<text text-anchor="start" x="2288" y="-218.8" font-family="Times,serif" font-size="14.00">bw_keyvalue_tuple_ls</text>
-<text text-anchor="start" x="2288" y="-203.8" font-family="Times,serif" font-size="14.00">bw_keyvalue_v110str_ls</text>
-<text text-anchor="start" x="2288" y="-188.8" font-family="Times,serif" font-size="14.00">bw_strv110</text>
-<text text-anchor="start" x="2288" y="-173.8" font-family="Times,serif" font-size="14.00">node_id</text>
-<polyline fill="none" stroke="black" points="2280,-166 2447,-166 "/>
-<text text-anchor="start" x="2288" y="-150.8" font-family="Times,serif" font-size="14.00">bw_from_results()</text>
-<text text-anchor="start" x="2288" y="-135.8" font-family="Times,serif" font-size="14.00">from_bw_line_v110()</text>
-<text text-anchor="start" x="2288" y="-120.8" font-family="Times,serif" font-size="14.00">from_data()</text>
-<text text-anchor="start" x="2288" y="-105.8" font-family="Times,serif" font-size="14.00">from_results()</text>
-<text text-anchor="start" x="2288" y="-90.8" font-family="Times,serif" font-size="14.00">last_time_from_results()</text>
-<text text-anchor="start" x="2288" y="-75.8" font-family="Times,serif" font-size="14.00">result_types_from_results()</text>
-<text text-anchor="start" x="2288" y="-60.8" font-family="Times,serif" font-size="14.00">rtt_from_results()</text>
-</g>
-<!-- 22 -->
-<g id="node23" class="node"><title>22</title>
-<polygon fill="none" stroke="black" points="2465,-98 2465,-227 2574,-227 2574,-98 2465,-98"/>
-<text text-anchor="middle" x="2519.5" y="-211.8" font-family="Times,serif" font-size="14.00">_ResultType</text>
-<polyline fill="none" stroke="black" points="2465,-204 2574,-204 "/>
-<text text-anchor="start" x="2473" y="-188.8" font-family="Times,serif" font-size="14.00">Error : str</text>
-<text text-anchor="start" x="2473" y="-173.8" font-family="Times,serif" font-size="14.00">ErrorAuth : str</text>
-<text text-anchor="start" x="2473" y="-158.8" font-family="Times,serif" font-size="14.00">ErrorCircuit : str</text>
-<text text-anchor="start" x="2473" y="-143.8" font-family="Times,serif" font-size="14.00">ErrorStream : str</text>
-<text text-anchor="start" x="2473" y="-128.8" font-family="Times,serif" font-size="14.00">Success : str</text>
-<polyline fill="none" stroke="black" points="2465,-121 2574,-121 "/>
-<text text-anchor="middle" x="2519.5" y="-105.8" font-family="Times,serif" font-size="14.00"> </text>
-</g>
-<!-- 23 -->
-<g id="node24" class="node"><title>23</title>
-<polygon fill="none" stroke="black" points="2483.5,-422 2483.5,-492 2555.5,-492 2555.5,-422 2483.5,-422"/>
-<text text-anchor="middle" x="2519.5" y="-476.8" font-family="Times,serif" font-size="14.00">_StrEnum</text>
-<polyline fill="none" stroke="black" points="2483.5,-469 2555.5,-469 "/>
-<polyline fill="none" stroke="black" points="2483.5,-445 2555.5,-445 "/>
-<text text-anchor="middle" x="2519.5" y="-429.8" font-family="Times,serif" font-size="14.00"> </text>
-</g>
-<!-- 22->23 -->
-<g id="edge9" class="edge"><title>22->23</title>
-<path fill="none" stroke="black" d="M2519.5,-227.329C2519.5,-283.08 2519.5,-362.557 2519.5,-411.628"/>
-<polygon fill="none" stroke="black" points="2516,-411.917 2519.5,-421.917 2523,-411.917 2516,-411.917"/>
+<polygon fill="none" stroke="black" points="1746,-53 1746,-347 1957,-347 1957,-53 1746,-53"/>
+<text text-anchor="middle" x="1851.5" y="-331.8" font-family="Times,serif" font-size="14.00">V3BWLine</text>
+<polyline fill="none" stroke="black" points="1746,-324 1957,-324 "/>
+<text text-anchor="start" x="1754" y="-308.8" font-family="Times,serif" font-size="14.00">bw</text>
+<text text-anchor="start" x="1754" y="-293.8" font-family="Times,serif" font-size="14.00">bw_keyvalue_tuple_ls</text>
+<text text-anchor="start" x="1754" y="-278.8" font-family="Times,serif" font-size="14.00">bw_keyvalue_v110str_ls</text>
+<text text-anchor="start" x="1754" y="-263.8" font-family="Times,serif" font-size="14.00">bw_strv110</text>
+<text text-anchor="start" x="1754" y="-248.8" font-family="Times,serif" font-size="14.00">node_id</text>
+<polyline fill="none" stroke="black" points="1746,-241 1957,-241 "/>
+<text text-anchor="start" x="1754" y="-225.8" font-family="Times,serif" font-size="14.00">bw_mean_from_results()</text>
+<text text-anchor="start" x="1754" y="-210.8" font-family="Times,serif" font-size="14.00">bw_median_from_results()</text>
+<text text-anchor="start" x="1754" y="-195.8" font-family="Times,serif" font-size="14.00">desc_bw_obs_last_from_results()</text>
+<text text-anchor="start" x="1754" y="-180.8" font-family="Times,serif" font-size="14.00">desc_bw_obs_mean_from_results()</text>
+<text text-anchor="start" x="1754" y="-165.8" font-family="Times,serif" font-size="14.00">from_bw_line_v110()</text>
+<text text-anchor="start" x="1754" y="-150.8" font-family="Times,serif" font-size="14.00">from_data()</text>
+<text text-anchor="start" x="1754" y="-135.8" font-family="Times,serif" font-size="14.00">from_results()</text>
+<text text-anchor="start" x="1754" y="-120.8" font-family="Times,serif" font-size="14.00">last_time_from_results()</text>
+<text text-anchor="start" x="1754" y="-105.8" font-family="Times,serif" font-size="14.00">result_types_from_results()</text>
+<text text-anchor="start" x="1754" y="-90.8" font-family="Times,serif" font-size="14.00">results_away_each_other()</text>
+<text text-anchor="start" x="1754" y="-75.8" font-family="Times,serif" font-size="14.00">results_recent_than()</text>
+<text text-anchor="start" x="1754" y="-60.8" font-family="Times,serif" font-size="14.00">rtt_from_results()</text>
</g>
</g>
</svg>
diff --git a/docs/source/images/packages_sbws.svg b/docs/source/images/packages_sbws.svg
index 526f4c8..7b8236e 100644
--- a/docs/source/images/packages_sbws.svg
+++ b/docs/source/images/packages_sbws.svg
@@ -4,315 +4,125 @@
<!-- Generated by graphviz version 2.38.0 (20140413.2041)
-->
<!-- Title: packages_sbws Pages: 1 -->
-<svg width="1263pt" height="404pt"
- viewBox="0.00 0.00 1263.00 404.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 400)">
+<svg width="8800pt" height="44pt"
+ viewBox="0.00 0.00 8800.00 44.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
+<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 40)">
<title>packages_sbws</title>
-<polygon fill="white" stroke="none" points="-4,4 -4,-400 1259,-400 1259,4 -4,4"/>
+<polygon fill="white" stroke="none" points="-4,4 -4,-40 8796,-40 8796,4 -4,4"/>
<!-- 0 -->
<g id="node1" class="node"><title>0</title>
-<polygon fill="none" stroke="black" points="931,-252 877,-252 877,-216 931,-216 931,-252"/>
-<text text-anchor="middle" x="904" y="-230.3" font-family="Times,serif" font-size="14.00">sbws</text>
+<polygon fill="none" stroke="black" points="347,-36 0,-36 0,-0 347,-0 347,-36"/>
+<text text-anchor="middle" x="173.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/__init__.py</text>
</g>
<!-- 1 -->
<g id="node2" class="node"><title>1</title>
-<polygon fill="none" stroke="black" points="827.5,-36 756.5,-36 756.5,-0 827.5,-0 827.5,-36"/>
-<text text-anchor="middle" x="792" y="-14.3" font-family="Times,serif" font-size="14.00">sbws.core</text>
+<polygon fill="none" stroke="black" points="738.5,-36 364.5,-36 364.5,-0 738.5,-0 738.5,-36"/>
+<text text-anchor="middle" x="551.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/core/__init__.py</text>
</g>
<!-- 2 -->
<g id="node3" class="node"><title>2</title>
-<polygon fill="none" stroke="black" points="1065,-252 949,-252 949,-216 1065,-216 1065,-252"/>
-<text text-anchor="middle" x="1007" y="-230.3" font-family="Times,serif" font-size="14.00">sbws.core.cleanup</text>
-</g>
-<!-- 7 -->
-<g id="node8" class="node"><title>7</title>
-<polygon fill="none" stroke="black" points="617,-396 531,-396 531,-360 617,-360 617,-396"/>
-<text text-anchor="middle" x="574" y="-374.3" font-family="Times,serif" font-size="14.00">sbws.globals</text>
-</g>
-<!-- 2->7 -->
-<g id="edge1" class="edge"><title>2->7</title>
-<path fill="none" stroke="black" d="M993.59,-252.311C975.153,-275.63 942.398,-315.234 926,-324 875.33,-351.088 712.565,-366.787 627.274,-373.351"/>
-<polygon fill="black" stroke="black" points="617.269,-374.106 626.902,-368.866 622.255,-373.729 627.241,-373.353 627.241,-373.353 627.241,-373.353 622.255,-373.729 627.58,-377.84 617.269,-374.106 617.269,-374.106"/>
-</g>
-<!-- 18 -->
-<g id="node19" class="node"><title>18</title>
-<polygon fill="none" stroke="black" points="917,-324 807,-324 807,-288 917,-288 917,-324"/>
-<text text-anchor="middle" x="862" y="-302.3" font-family="Times,serif" font-size="14.00">sbws.util.filelock</text>
-</g>
-<!-- 2->18 -->
-<g id="edge2" class="edge"><title>2->18</title>
-<path fill="none" stroke="black" d="M971.529,-252.124C951.883,-261.608 927.278,-273.487 906.368,-283.581"/>
-<polygon fill="black" stroke="black" points="897.356,-287.932 904.405,-279.532 901.859,-285.758 906.361,-283.584 906.361,-283.584 906.361,-283.584 901.859,-285.758 908.318,-287.637 897.356,-287.932 897.356,-287.932"/>
+<polygon fill="none" stroke="black" points="1128,-36 757,-36 757,-0 1128,-0 1128,-36"/>
+<text text-anchor="middle" x="942.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/core/cleanup.py</text>
</g>
<!-- 3 -->
<g id="node4" class="node"><title>3</title>
-<polygon fill="none" stroke="black" points="738,-36 618,-36 618,-0 738,-0 738,-36"/>
-<text text-anchor="middle" x="678" y="-14.3" font-family="Times,serif" font-size="14.00">sbws.core.generate</text>
-</g>
-<!-- 3->7 -->
-<g id="edge3" class="edge"><title>3->7</title>
-<path fill="none" stroke="black" d="M617.707,-23.3661C577.412,-29.0683 525.329,-42.1364 489,-72 454.76,-100.147 444,-116.676 444,-161 444,-161 444,-161 444,-235 444,-288.377 494.589,-330.418 532.651,-354.495"/>
-<polygon fill="black" stroke="black" points="541.531,-359.935 530.653,-358.548 537.267,-357.323 533.004,-354.711 533.004,-354.711 533.004,-354.711 537.267,-357.323 535.355,-350.874 541.531,-359.935 541.531,-359.935"/>
-</g>
-<!-- 13 -->
-<g id="node14" class="node"><title>13</title>
-<polygon fill="none" stroke="black" points="637.5,-180 510.5,-180 510.5,-144 637.5,-144 637.5,-180"/>
-<text text-anchor="middle" x="574" y="-158.3" font-family="Times,serif" font-size="14.00">sbws.lib.resultdump</text>
-</g>
-<!-- 3->13 -->
-<g id="edge4" class="edge"><title>3->13</title>
-<path fill="none" stroke="black" d="M665.455,-36.1285C647.34,-60.8628 613.727,-106.758 592.685,-135.488"/>
-<polygon fill="black" stroke="black" points="586.589,-143.811 588.868,-133.084 589.544,-139.777 592.498,-135.743 592.498,-135.743 592.498,-135.743 589.544,-139.777 596.129,-138.402 586.589,-143.811 586.589,-143.811"/>
-</g>
-<!-- 14 -->
-<g id="node15" class="node"><title>14</title>
-<polygon fill="none" stroke="black" points="857.5,-108 744.5,-108 744.5,-72 857.5,-72 857.5,-108"/>
-<text text-anchor="middle" x="801" y="-86.3" font-family="Times,serif" font-size="14.00">sbws.lib.v3bwfile</text>
-</g>
-<!-- 3->14 -->
-<g id="edge5" class="edge"><title>3->14</title>
-<path fill="none" stroke="black" d="M708.089,-36.1239C724.32,-45.3612 744.542,-56.8692 761.971,-66.7884"/>
-<polygon fill="black" stroke="black" points="770.795,-71.8102 759.878,-70.775 766.45,-69.3371 762.104,-66.864 762.104,-66.864 762.104,-66.864 766.45,-69.3371 764.33,-62.953 770.795,-71.8102 770.795,-71.8102"/>
-</g>
-<!-- 22 -->
-<g id="node23" class="node"><title>22</title>
-<polygon fill="none" stroke="black" points="782.5,-180 655.5,-180 655.5,-144 782.5,-144 782.5,-180"/>
-<text text-anchor="middle" x="719" y="-158.3" font-family="Times,serif" font-size="14.00">sbws.util.timestamp</text>
-</g>
-<!-- 3->22 -->
-<g id="edge6" class="edge"><title>3->22</title>
-<path fill="none" stroke="black" d="M682.946,-36.1285C689.964,-60.4364 702.883,-105.181 711.2,-133.987"/>
-<polygon fill="black" stroke="black" points="714.037,-143.811 706.939,-135.452 712.65,-139.007 711.263,-134.203 711.263,-134.203 711.263,-134.203 712.65,-139.007 715.586,-132.955 714.037,-143.811 714.037,-143.811"/>
+<polygon fill="none" stroke="black" points="1521,-36 1146,-36 1146,-0 1521,-0 1521,-36"/>
+<text text-anchor="middle" x="1333.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/core/generate.py</text>
</g>
<!-- 4 -->
<g id="node5" class="node"><title>4</title>
-<polygon fill="none" stroke="black" points="1175,-252 1083,-252 1083,-216 1175,-216 1175,-252"/>
-<text text-anchor="middle" x="1129" y="-230.3" font-family="Times,serif" font-size="14.00">sbws.core.init</text>
-</g>
-<!-- 4->7 -->
-<g id="edge7" class="edge"><title>4->7</title>
-<path fill="none" stroke="black" d="M1082.72,-250.468C1057.9,-259.696 1027.32,-272.612 1002,-288 980.702,-300.947 981.79,-313.907 959,-324 900.712,-349.814 718.7,-366.397 627.378,-373.311"/>
-<polygon fill="black" stroke="black" points="617.236,-374.068 626.873,-368.836 622.222,-373.696 627.208,-373.324 627.208,-373.324 627.208,-373.324 622.222,-373.696 627.543,-377.811 617.236,-374.068 617.236,-374.068"/>
-</g>
-<!-- 17 -->
-<g id="node18" class="node"><title>17</title>
-<polygon fill="none" stroke="black" points="1255,-324 1151,-324 1151,-288 1255,-288 1255,-324"/>
-<text text-anchor="middle" x="1203" y="-302.3" font-family="Times,serif" font-size="14.00">sbws.util.config</text>
-</g>
-<!-- 4->17 -->
-<g id="edge8" class="edge"><title>4->17</title>
-<path fill="none" stroke="black" d="M1147.29,-252.303C1156.43,-260.95 1167.64,-271.551 1177.6,-280.973"/>
-<polygon fill="black" stroke="black" points="1184.92,-287.896 1174.56,-284.293 1181.29,-284.46 1177.65,-281.024 1177.65,-281.024 1177.65,-281.024 1181.29,-284.46 1180.75,-277.755 1184.92,-287.896 1184.92,-287.896"/>
-</g>
-<!-- 23 -->
-<g id="node24" class="node"><title>23</title>
-<polygon fill="none" stroke="black" points="1133,-324 1011,-324 1011,-288 1133,-288 1133,-324"/>
-<text text-anchor="middle" x="1072" y="-302.3" font-family="Times,serif" font-size="14.00">sbws.util.userquery</text>
-</g>
-<!-- 4->23 -->
-<g id="edge9" class="edge"><title>4->23</title>
-<path fill="none" stroke="black" d="M1114.91,-252.303C1108.08,-260.695 1099.74,-270.93 1092.24,-280.139"/>
-<polygon fill="black" stroke="black" points="1085.93,-287.896 1088.75,-277.3 1089.08,-284.018 1092.24,-280.141 1092.24,-280.141 1092.24,-280.141 1089.08,-284.018 1095.73,-282.983 1085.93,-287.896 1085.93,-287.896"/>
+<polygon fill="none" stroke="black" points="1910,-36 1539,-36 1539,-0 1910,-0 1910,-36"/>
+<text text-anchor="middle" x="1724.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/core/scanner.py</text>
</g>
<!-- 5 -->
<g id="node6" class="node"><title>5</title>
-<polygon fill="none" stroke="black" points="116,-180 7.10543e-15,-180 7.10543e-15,-144 116,-144 116,-180"/>
-<text text-anchor="middle" x="58" y="-158.3" font-family="Times,serif" font-size="14.00">sbws.core.scanner</text>
-</g>
-<!-- 5->7 -->
-<g id="edge10" class="edge"><title>5->7</title>
-<path fill="none" stroke="black" d="M54.6795,-180.339C51.9918,-199.546 50.6854,-230.621 65,-252 104.369,-310.797 139.534,-302.66 207,-324 315.082,-358.187 448.118,-370.419 520.64,-374.725"/>
-<polygon fill="black" stroke="black" points="530.891,-375.304 520.653,-379.232 525.899,-375.022 520.907,-374.74 520.907,-374.74 520.907,-374.74 525.899,-375.022 521.161,-370.247 530.891,-375.304 530.891,-375.304"/>
-</g>
-<!-- 20 -->
-<g id="node21" class="node"><title>20</title>
-<polygon fill="none" stroke="black" points="211.5,-252 98.5,-252 98.5,-216 211.5,-216 211.5,-252"/>
-<text text-anchor="middle" x="155" y="-230.3" font-family="Times,serif" font-size="14.00">sbws.util.requests</text>
-</g>
-<!-- 5->20 -->
-<g id="edge11" class="edge"><title>5->20</title>
-<path fill="none" stroke="black" d="M81.9775,-180.303C94.3113,-189.204 109.516,-200.177 122.853,-209.801"/>
-<polygon fill="black" stroke="black" points="131.298,-215.896 120.556,-213.693 127.244,-212.97 123.189,-210.044 123.189,-210.044 123.189,-210.044 127.244,-212.97 125.823,-206.395 131.298,-215.896 131.298,-215.896"/>
-</g>
-<!-- 21 -->
-<g id="node22" class="node"><title>21</title>
-<polygon fill="none" stroke="black" points="311.5,-324 216.5,-324 216.5,-288 311.5,-288 311.5,-324"/>
-<text text-anchor="middle" x="264" y="-302.3" font-family="Times,serif" font-size="14.00">sbws.util.stem</text>
-</g>
-<!-- 5->21 -->
-<g id="edge12" class="edge"><title>5->21</title>
-<path fill="none" stroke="black" d="M59.3951,-180.216C61.9301,-200.199 69.0498,-232.853 89,-252 120.298,-282.038 168.047,-295.109 205.766,-300.768"/>
-<polygon fill="black" stroke="black" points="216.117,-302.176 205.601,-305.287 211.162,-301.502 206.208,-300.828 206.208,-300.828 206.208,-300.828 211.162,-301.502 206.814,-296.369 216.117,-302.176 216.117,-302.176"/>
+<polygon fill="none" stroke="black" points="2281,-36 1928,-36 1928,-0 2281,-0 2281,-36"/>
+<text text-anchor="middle" x="2104.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/core/stats.py</text>
</g>
<!-- 6 -->
<g id="node7" class="node"><title>6</title>
-<polygon fill="none" stroke="black" points="596,-108 498,-108 498,-72 596,-72 596,-108"/>
-<text text-anchor="middle" x="547" y="-86.3" font-family="Times,serif" font-size="14.00">sbws.core.stats</text>
+<polygon fill="none" stroke="black" points="2640,-36 2299,-36 2299,-0 2640,-0 2640,-36"/>
+<text text-anchor="middle" x="2469.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/globals.py</text>
</g>
-<!-- 6->7 -->
-<g id="edge13" class="edge"><title>6->7</title>
-<path fill="none" stroke="black" d="M526.177,-108.385C516.542,-117.802 506.115,-130.303 501,-144 495.403,-158.989 498.176,-164.251 501,-180 512.435,-243.771 543.147,-313.889 560.879,-350.845"/>
-<polygon fill="black" stroke="black" points="565.299,-359.929 556.877,-352.906 563.111,-355.433 560.924,-350.937 560.924,-350.937 560.924,-350.937 563.111,-355.433 564.97,-348.968 565.299,-359.929 565.299,-359.929"/>
-</g>
-<!-- 6->13 -->
-<g id="edge14" class="edge"><title>6->13</title>
-<path fill="none" stroke="black" d="M553.674,-108.303C556.715,-116.187 560.383,-125.696 563.761,-134.454"/>
-<polygon fill="black" stroke="black" points="567.403,-143.896 559.605,-136.185 565.603,-139.231 563.804,-134.566 563.804,-134.566 563.804,-134.566 565.603,-139.231 568.002,-132.946 567.403,-143.896 567.403,-143.896"/>
+<!-- 7 -->
+<g id="node8" class="node"><title>7</title>
+<polygon fill="none" stroke="black" points="3023,-36 2658,-36 2658,-0 3023,-0 3023,-36"/>
+<text text-anchor="middle" x="2840.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/lib/__init__.py</text>
</g>
<!-- 8 -->
<g id="node9" class="node"><title>8</title>
-<polygon fill="none" stroke="black" points="908,-36 846,-36 846,-0 908,-0 908,-36"/>
-<text text-anchor="middle" x="877" y="-14.3" font-family="Times,serif" font-size="14.00">sbws.lib</text>
+<polygon fill="none" stroke="black" points="3434,-36 3041,-36 3041,-0 3434,-0 3434,-36"/>
+<text text-anchor="middle" x="3237.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/lib/circuitbuilder.py</text>
</g>
<!-- 9 -->
<g id="node10" class="node"><title>9</title>
-<polygon fill="none" stroke="black" points="416,-180 278,-180 278,-144 416,-144 416,-180"/>
-<text text-anchor="middle" x="347" y="-158.3" font-family="Times,serif" font-size="14.00">sbws.lib.circuitbuilder</text>
-</g>
-<!-- 11 -->
-<g id="node12" class="node"><title>11</title>
-<polygon fill="none" stroke="black" points="415.5,-252 306.5,-252 306.5,-216 415.5,-216 415.5,-252"/>
-<text text-anchor="middle" x="361" y="-230.3" font-family="Times,serif" font-size="14.00">sbws.lib.relaylist</text>
-</g>
-<!-- 9->11 -->
-<g id="edge15" class="edge"><title>9->11</title>
-<path fill="none" stroke="black" d="M350.461,-180.303C352.003,-188.017 353.858,-197.288 355.578,-205.888"/>
-<polygon fill="black" stroke="black" points="357.579,-215.896 351.205,-206.972 356.599,-210.993 355.618,-206.09 355.618,-206.09 355.618,-206.09 356.599,-210.993 360.031,-205.207 357.579,-215.896 357.579,-215.896"/>
-</g>
-<!-- 9->21 -->
-<g id="edge16" class="edge"><title>9->21</title>
-<path fill="none" stroke="black" d="M327.428,-180.113C317.264,-189.823 305.275,-202.674 297,-216 285.027,-235.283 276.385,-259.579 270.955,-277.913"/>
-<polygon fill="black" stroke="black" points="268.199,-287.674 266.586,-276.828 269.558,-282.862 270.916,-278.051 270.916,-278.051 270.916,-278.051 269.558,-282.862 275.247,-279.273 268.199,-287.674 268.199,-287.674"/>
+<polygon fill="none" stroke="black" points="3832.5,-36 3452.5,-36 3452.5,-0 3832.5,-0 3832.5,-36"/>
+<text text-anchor="middle" x="3642.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/lib/destination.py</text>
</g>
<!-- 10 -->
<g id="node11" class="node"><title>10</title>
-<polygon fill="none" stroke="black" points="259.5,-180 134.5,-180 134.5,-144 259.5,-144 259.5,-180"/>
-<text text-anchor="middle" x="197" y="-158.3" font-family="Times,serif" font-size="14.00">sbws.lib.destination</text>
-</g>
-<!-- 10->20 -->
-<g id="edge17" class="edge"><title>10->20</title>
-<path fill="none" stroke="black" d="M186.618,-180.303C181.735,-188.441 175.813,-198.311 170.421,-207.299"/>
-<polygon fill="black" stroke="black" points="165.263,-215.896 166.549,-205.005 167.835,-211.608 170.408,-207.321 170.408,-207.321 170.408,-207.321 167.835,-211.608 174.266,-209.636 165.263,-215.896 165.263,-215.896"/>
-</g>
-<!-- 10->21 -->
-<g id="edge18" class="edge"><title>10->21</title>
-<path fill="none" stroke="black" d="M205.082,-180.129C216.652,-204.65 238.034,-249.968 251.61,-278.741"/>
-<polygon fill="black" stroke="black" points="255.89,-287.811 247.553,-280.687 253.756,-283.289 251.622,-278.767 251.622,-278.767 251.622,-278.767 253.756,-283.289 255.692,-276.847 255.89,-287.811 255.89,-287.811"/>
+<polygon fill="none" stroke="black" points="4214.5,-36 3850.5,-36 3850.5,-0 4214.5,-0 4214.5,-36"/>
+<text text-anchor="middle" x="4032.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/lib/relaylist.py</text>
</g>
-<!-- 11->7 -->
-<g id="edge19" class="edge"><title>11->7</title>
-<path fill="none" stroke="black" d="M370.254,-252.087C381.809,-271.946 403.34,-304.481 430,-324 457.014,-343.779 492.211,-356.912 521.045,-365.157"/>
-<polygon fill="black" stroke="black" points="530.955,-367.872 520.121,-369.569 526.133,-366.551 521.311,-365.229 521.311,-365.229 521.311,-365.229 526.133,-366.551 522.5,-360.889 530.955,-367.872 530.955,-367.872"/>
-</g>
-<!-- 11->21 -->
-<g id="edge20" class="edge"><title>11->21</title>
-<path fill="none" stroke="black" d="M337.022,-252.303C324.689,-261.204 309.484,-272.177 296.147,-281.801"/>
-<polygon fill="black" stroke="black" points="287.702,-287.896 293.177,-278.395 291.756,-284.97 295.811,-282.044 295.811,-282.044 295.811,-282.044 291.756,-284.97 298.444,-285.693 287.702,-287.896 287.702,-287.896"/>
+<!-- 11 -->
+<g id="node12" class="node"><title>11</title>
+<polygon fill="none" stroke="black" points="4634,-36 4233,-36 4233,-0 4634,-0 4634,-36"/>
+<text text-anchor="middle" x="4433.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/lib/relayprioritizer.py</text>
</g>
<!-- 12 -->
<g id="node13" class="node"><title>12</title>
-<polygon fill="none" stroke="black" points="1072,-36 926,-36 926,-0 1072,-0 1072,-36"/>
-<text text-anchor="middle" x="999" y="-14.3" font-family="Times,serif" font-size="14.00">sbws.lib.relayprioritizer</text>
-</g>
-<!-- 13->7 -->
-<g id="edge21" class="edge"><title>13->7</title>
-<path fill="none" stroke="black" d="M574,-180.151C574,-217.168 574,-304.819 574,-349.614"/>
-<polygon fill="black" stroke="black" points="574,-359.768 569.5,-349.768 574,-354.768 574,-349.768 574,-349.768 574,-349.768 574,-354.768 578.5,-349.768 574,-359.768 574,-359.768"/>
-</g>
-<!-- 13->11 -->
-<g id="edge22" class="edge"><title>13->11</title>
-<path fill="none" stroke="black" d="M522.167,-180.034C492.147,-189.9 454.177,-202.378 422.633,-212.745"/>
-<polygon fill="black" stroke="black" points="413.066,-215.889 421.161,-208.492 417.816,-214.328 422.566,-212.767 422.566,-212.767 422.566,-212.767 417.816,-214.328 423.971,-217.042 413.066,-215.889 413.066,-215.889"/>
-</g>
-<!-- 13->18 -->
-<g id="edge23" class="edge"><title>13->18</title>
-<path fill="none" stroke="black" d="M608.74,-180.129C661.175,-205.982 760.501,-254.955 817.948,-283.28"/>
-<polygon fill="black" stroke="black" points="827.137,-287.811 816.178,-287.425 822.653,-285.6 818.168,-283.388 818.168,-283.388 818.168,-283.388 822.653,-285.6 820.158,-279.352 827.137,-287.811 827.137,-287.811"/>
-</g>
-<!-- 14->0 -->
-<g id="edge24" class="edge"><title>14->0</title>
-<path fill="none" stroke="black" d="M825.611,-108.037C838.008,-117.539 852.578,-130.222 863,-144 877.288,-162.889 888.161,-187.555 895.108,-206.128"/>
-<polygon fill="black" stroke="black" points="898.56,-215.744 890.946,-207.852 896.871,-211.038 895.181,-206.332 895.181,-206.332 895.181,-206.332 896.871,-211.038 899.417,-204.811 898.56,-215.744 898.56,-215.744"/>
+<polygon fill="none" stroke="black" points="5020.5,-36 4652.5,-36 4652.5,-0 5020.5,-0 5020.5,-36"/>
+<text text-anchor="middle" x="4836.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/lib/v3bwfile.py</text>
</g>
-<!-- 14->7 -->
-<g id="edge25" class="edge"><title>14->7</title>
-<path fill="none" stroke="black" d="M802.536,-108.084C803.46,-126.789 802.682,-157.159 791,-180 750.345,-259.487 663.477,-322.56 612.845,-354.377"/>
-<polygon fill="black" stroke="black" points="604.134,-359.767 610.27,-350.678 608.386,-357.136 612.638,-354.505 612.638,-354.505 612.638,-354.505 608.386,-357.136 615.006,-358.332 604.134,-359.767 604.134,-359.767"/>
-</g>
-<!-- 14->13 -->
-<g id="edge26" class="edge"><title>14->13</title>
-<path fill="none" stroke="black" d="M745.76,-108.034C713.629,-117.943 672.952,-130.486 639.25,-140.879"/>
-<polygon fill="black" stroke="black" points="629.488,-143.889 637.718,-136.642 634.266,-142.416 639.044,-140.942 639.044,-140.942 639.044,-140.942 634.266,-142.416 640.37,-145.243 629.488,-143.889 629.488,-143.889"/>
-</g>
-<!-- 14->18 -->
-<g id="edge27" class="edge"><title>14->18</title>
-<path fill="none" stroke="black" d="M809.899,-108.313C814.865,-118.5 820.865,-131.75 825,-144 840.493,-189.898 851.649,-245.317 857.446,-277.713"/>
-<polygon fill="black" stroke="black" points="859.205,-287.769 853.049,-278.694 858.344,-282.844 857.482,-277.919 857.482,-277.919 857.482,-277.919 858.344,-282.844 861.915,-277.144 859.205,-287.769 859.205,-287.769"/>
+<!-- 13 -->
+<g id="node14" class="node"><title>13</title>
+<polygon fill="none" stroke="black" points="5368,-36 5039,-36 5039,-0 5368,-0 5368,-36"/>
+<text text-anchor="middle" x="5203.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/sbws.py</text>
</g>
-<!-- 14->22 -->
-<g id="edge28" class="edge"><title>14->22</title>
-<path fill="none" stroke="black" d="M780.73,-108.303C770.502,-117.035 757.939,-127.76 746.822,-137.25"/>
-<polygon fill="black" stroke="black" points="739.037,-143.896 743.72,-133.98 742.839,-140.649 746.642,-137.403 746.642,-137.403 746.642,-137.403 742.839,-140.649 749.564,-140.826 739.037,-143.896 739.037,-143.896"/>
+<!-- 14 -->
+<g id="node15" class="node"><title>14</title>
+<polygon fill="none" stroke="black" points="5755,-36 5386,-36 5386,-0 5755,-0 5755,-36"/>
+<text text-anchor="middle" x="5570.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/__init__.py</text>
</g>
<!-- 15 -->
<g id="node16" class="node"><title>15</title>
-<polygon fill="none" stroke="black" points="1142,-108 1068,-108 1068,-72 1142,-72 1142,-108"/>
-<text text-anchor="middle" x="1105" y="-86.3" font-family="Times,serif" font-size="14.00">sbws.sbws</text>
-</g>
-<!-- 15->17 -->
-<g id="edge29" class="edge"><title>15->17</title>
-<path fill="none" stroke="black" d="M1118.63,-108.128C1136.35,-131.26 1167.05,-174.396 1184,-216 1192.09,-235.843 1196.94,-259.64 1199.71,-277.632"/>
-<polygon fill="black" stroke="black" points="1201.15,-287.739 1195.29,-278.472 1200.44,-282.789 1199.74,-277.839 1199.74,-277.839 1199.74,-277.839 1200.44,-282.789 1204.2,-277.206 1201.15,-287.739 1201.15,-287.739"/>
-</g>
-<!-- 19 -->
-<g id="node20" class="node"><title>19</title>
-<polygon fill="none" stroke="black" points="1058,-180 956,-180 956,-144 1058,-144 1058,-180"/>
-<text text-anchor="middle" x="1007" y="-158.3" font-family="Times,serif" font-size="14.00">sbws.util.parser</text>
-</g>
-<!-- 15->19 -->
-<g id="edge30" class="edge"><title>15->19</title>
-<path fill="none" stroke="black" d="M1081.03,-108.124C1068.45,-117.107 1052.87,-128.237 1039.25,-137.966"/>
-<polygon fill="black" stroke="black" points="1031.07,-143.81 1036.59,-134.336 1035.13,-140.904 1039.2,-137.998 1039.2,-137.998 1039.2,-137.998 1035.13,-140.904 1041.82,-141.66 1031.07,-143.81 1031.07,-143.81"/>
+<polygon fill="none" stroke="black" points="6132,-36 5773,-36 5773,-0 6132,-0 6132,-36"/>
+<text text-anchor="middle" x="5952.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/config.py</text>
</g>
<!-- 16 -->
<g id="node17" class="node"><title>16</title>
-<polygon fill="none" stroke="black" points="1155.5,-36 1090.5,-36 1090.5,-0 1155.5,-0 1155.5,-36"/>
-<text text-anchor="middle" x="1123" y="-14.3" font-family="Times,serif" font-size="14.00">sbws.util</text>
-</g>
-<!-- 17->7 -->
-<g id="edge31" class="edge"><title>17->7</title>
-<path fill="none" stroke="black" d="M1150.9,-322.18C1147.9,-322.848 1144.92,-323.462 1142,-324 954.806,-358.531 728.533,-371.086 627.374,-375.199"/>
-<polygon fill="black" stroke="black" points="617.111,-375.605 626.926,-370.714 622.108,-375.407 627.104,-375.21 627.104,-375.21 627.104,-375.21 622.108,-375.407 627.281,-379.706 617.111,-375.605 617.111,-375.605"/>
+<polygon fill="none" stroke="black" points="6515,-36 6150,-36 6150,-0 6515,-0 6515,-36"/>
+<text text-anchor="middle" x="6332.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/filelock.py</text>
</g>
-<!-- 18->7 -->
-<g id="edge32" class="edge"><title>18->7</title>
-<path fill="none" stroke="black" d="M806.643,-320.66C802.029,-321.792 797.435,-322.917 793,-324 736.415,-337.818 671.564,-353.492 627.207,-364.188"/>
-<polygon fill="black" stroke="black" points="617.228,-366.594 625.895,-359.876 622.089,-365.422 626.95,-364.25 626.95,-364.25 626.95,-364.25 622.089,-365.422 628.004,-368.625 617.228,-366.594 617.228,-366.594"/>
+<!-- 17 -->
+<g id="node18" class="node"><title>17</title>
+<polygon fill="none" stroke="black" points="6866.5,-36 6532.5,-36 6532.5,-0 6866.5,-0 6866.5,-36"/>
+<text text-anchor="middle" x="6699.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/fs.py</text>
</g>
-<!-- 19->0 -->
-<g id="edge33" class="edge"><title>19->0</title>
-<path fill="none" stroke="black" d="M981.803,-180.124C968.586,-189.107 952.208,-200.237 937.893,-209.966"/>
-<polygon fill="black" stroke="black" points="929.293,-215.81 935.035,-206.467 933.429,-213 937.564,-210.189 937.564,-210.189 937.564,-210.189 933.429,-213 940.094,-213.911 929.293,-215.81 929.293,-215.81"/>
+<!-- 18 -->
+<g id="node19" class="node"><title>18</title>
+<polygon fill="none" stroke="black" points="7242,-36 6885,-36 6885,-0 7242,-0 7242,-36"/>
+<text text-anchor="middle" x="7063.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/parser.py</text>
</g>
-<!-- 19->2 -->
-<g id="edge34" class="edge"><title>19->2</title>
-<path fill="none" stroke="black" d="M1007,-180.303C1007,-188.017 1007,-197.288 1007,-205.888"/>
-<polygon fill="black" stroke="black" points="1007,-215.896 1002.5,-205.896 1007,-210.896 1007,-205.896 1007,-205.896 1007,-205.896 1007,-210.896 1011.5,-205.896 1007,-215.896 1007,-215.896"/>
+<!-- 19 -->
+<g id="node20" class="node"><title>19</title>
+<polygon fill="none" stroke="black" points="7628.5,-36 7260.5,-36 7260.5,-0 7628.5,-0 7628.5,-36"/>
+<text text-anchor="middle" x="7444.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/requests.py</text>
</g>
-<!-- 20->21 -->
-<g id="edge35" class="edge"><title>20->21</title>
-<path fill="none" stroke="black" d="M181.664,-252.124C195.784,-261.192 213.311,-272.448 228.561,-282.241"/>
-<polygon fill="black" stroke="black" points="237.233,-287.81 226.387,-286.193 233.026,-285.108 228.819,-282.407 228.819,-282.407 228.819,-282.407 233.026,-285.108 231.25,-278.62 237.233,-287.81 237.233,-287.81"/>
+<!-- 20 -->
+<g id="node21" class="node"><title>20</title>
+<polygon fill="none" stroke="black" points="7996,-36 7647,-36 7647,-0 7996,-0 7996,-36"/>
+<text text-anchor="middle" x="7821.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/state.py</text>
</g>
-<!-- 21->7 -->
-<g id="edge36" class="edge"><title>21->7</title>
-<path fill="none" stroke="black" d="M311.758,-317.784C368.272,-330.545 462.093,-351.731 520.859,-365"/>
-<polygon fill="black" stroke="black" points="530.692,-367.221 519.946,-369.408 525.815,-366.119 520.938,-365.018 520.938,-365.018 520.938,-365.018 525.815,-366.119 521.929,-360.629 530.692,-367.221 530.692,-367.221"/>
+<!-- 21 -->
+<g id="node22" class="node"><title>21</title>
+<polygon fill="none" stroke="black" points="8396.5,-36 8014.5,-36 8014.5,-0 8396.5,-0 8396.5,-36"/>
+<text text-anchor="middle" x="8205.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/timestamp.py</text>
</g>
-<!-- 21->21 -->
-<g id="edge37" class="edge"><title>21->21</title>
-<path fill="none" stroke="black" d="M311.69,-292.899C322.013,-294.18 329.5,-298.547 329.5,-306 329.5,-310.775 326.428,-314.283 321.505,-316.524"/>
-<polygon fill="black" stroke="black" points="311.69,-319.101 320.22,-312.209 316.526,-317.831 321.362,-316.562 321.362,-316.562 321.362,-316.562 316.526,-317.831 322.505,-320.914 311.69,-319.101 311.69,-319.101"/>
+<!-- 22 -->
+<g id="node23" class="node"><title>22</title>
+<polygon fill="none" stroke="black" points="8792,-36 8415,-36 8415,-0 8792,-0 8792,-36"/>
+<text text-anchor="middle" x="8603.5" y="-14.3" font-family="Times,serif" font-size="14.00">/home/user/_my/code/bwauth-related/sbws/sbws/util/userquery.py</text>
</g>
</g>
</svg>
[View Less]
1
0
commit d1b5bfb0dd42913edd626b52241d6c43a5a34254
Author: juga0 <juga(a)riseup.net>
Date: Mon Oct 29 10:35:00 2018 +0000
Move examples inside docs/source
By mistake it was moved to docs/ and it couldn't be found by
config.rst. Also fix path line in rst.
---
docs/source/config.rst | 2 +-
docs/{ => source}/examples/config.example.ini | 0
2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/docs/source/config.rst b/docs/source/config.rst
…
[View More]index 84c850f..5e7f14f 100644
--- a/docs/source/config.rst
+++ b/docs/source/config.rst
@@ -27,7 +27,7 @@ The user example config file provided by ``sbws`` might look like this.
.. _init-config:
-.. literalinclude:: examples/config.example.ini
+.. literalinclude:: /examples/config.example.ini
:caption: Example config.example.ini
**No other configuration files are read.**
diff --git a/docs/examples/config.example.ini b/docs/source/examples/config.example.ini
similarity index 100%
rename from docs/examples/config.example.ini
rename to docs/source/examples/config.example.ini
[View Less]
1
0

29 Oct '18
commit ba13945fb2b789dd36bda047761c37b32745fefb
Author: juga0 <juga(a)riseup.net>
Date: Sun Oct 28 11:28:29 2018 +0000
Add documentation about scaling bandwidth
Add documentation about how the bandwidth measurements are
selected and scaled before writing them to the Bandwidth File
---
CHANGELOG.md | 2 ++
docs/source/specification.rst | 36 +++++++++++++++++++++++++++++-------
2 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/CHANGELOG.…
[View More]md b/CHANGELOG.md
index a9ac25d..29d0eeb 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -36,6 +36,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
before, warn about it (#28155)
- When the difference between the total consensus bandwidth and the total
in the bandwidth lines is larger than 50%, warn (#28216)
+- Add documentation about how the bandwidth measurements are selected and
+ scaled before writing them to the Bandwidth File (#27692)
## [0.8.0] - 2018-10-08
diff --git a/docs/source/specification.rst b/docs/source/specification.rst
index e46782e..73cfa14 100644
--- a/docs/source/specification.rst
+++ b/docs/source/specification.rst
@@ -171,15 +171,37 @@ state of the Tor network. The bandwidth authorities need to use the results
that have been gathered to inform their vote about relays' bandwidths. To do
this they use sbws generate.
-This command gathers all recent valid results and organizes them by relay. For
-each relay, it first simply calculates the median bandwidth and median RTT of
-all its successful results. This is the final RTT value for the relay (it's
-only used for informational purposes anyway), but we aren't necessarily done
-with the bandwidth values.
+The relays' bandwidth measurements (``Results``) to be added to the Bandwidth
+File MUST be first selected and MUST be then then scaled.
-To support running in parallel with the legacy torflow_, **XXX Explain scaling***
+Selecting bandwidth measurements
+:::::::::::::::::::::::::::::::::::
+
+Each relay bandwidth measurements are selected in the following way:
+
+1. At least two bandwidth measurements (``Result`` s) MUST have been obtained
+ within an arbitrary number of seconds (currently one day).
+ If they are not, the relay MUST NOT be included in the Bandwith File.
+2. The measurements than are are older than an arbitrary number of senconds
+ in the past MUST be discarded.
+ Currently this number is the same as ``data_period`` (5 days).
+
+If the number of relays to include in the Bandwidth File are less than
+a percententage (currently 60%) than the number of relays in the consensus,
+additional Header Lines MUST be added (see XXX) to the Bandwith File and the
+relays SHOULD NOT be included.
+
+Scaling bandwidth measurements
+:::::::::::::::::::::::::::::::::
+
+Consensus bandwidth obtained by new implementations MUST be comparable to the
+consensus bandwidth, therefore they MUST implement torflow_scaling_.
+The bandwidth_file_spec_ appendix B describes torflow scaling and a linear
+scaling method.
.. _torflow: https://gitweb.torproject.org/torflow.git
.. _stem: https://stem.torproject.org
.. _requests: https://docs.python-requests.org/
-.. _peerflow: https://www.nrl.navy.mil/itd/chacs/sites/www.nrl.navy.mil.itd.chacs/files/p…
\ No newline at end of file
+.. _peerflow: https://www.nrl.navy.mil/itd/chacs/sites/www.nrl.navy.mil.itd.chacs/files/p…
+.. _torflow_scaling: https://gitweb.torproject.org/torflow.git/tree/NetworkScanners/BwAuthority/…
+.. _bandwidth_file_spec: https://gitweb.torproject.org/torspec.git/tree/bandwidth-file-spec.txt
\ No newline at end of file
[View Less]
1
0

[translation/torbutton-browseronboardingproperties_completed] Update translations for torbutton-browseronboardingproperties_completed
by translation@torproject.org 29 Oct '18
by translation@torproject.org 29 Oct '18
29 Oct '18
commit fcdcce151840530e19c57e091a80a83996a5fdba
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Oct 29 12:48:33 2018 +0000
Update translations for torbutton-browseronboardingproperties_completed
---
tr/browserOnboarding.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tr/browserOnboarding.properties b/tr/browserOnboarding.properties
index 219f3037e..1b10fd9a0 100644
--- a/tr/browserOnboarding.properties
+++ b/tr/…
[View More]browserOnboarding.properties
@@ -9,7 +9,7 @@ onboarding.tour-tor-welcome.button=Başlayın
onboarding.tour-tor-privacy=Kişisel Gizlilik
onboarding.tour-tor-privacy.title=İzleyenlere ve meraklılara hadlerini bildirin.
-onboarding.tour-tor-privacy.description=Tor Browser çerezleri yalıtır ve kapattıığınızda web tarayıcı geçmişinizi siler. Bu değişiklikler web tarayıcı üzerinde kişisel gizliliğinizin ve güvenliğinizin korunmasını sağlar. Ağ düzeyinde nasıl koruma sağladığımızı öğrenmek için 'Tor Ağo' üzerine tıklayın.
+onboarding.tour-tor-privacy.description=Tor Browser çerezleri yalıtır ve kapattığınızda web tarayıcı geçmişinizi siler. Bu değişiklikler web tarayıcı üzerinde kişisel gizliliğinizin ve güvenliğinizin korunmasını sağlar. Ağ düzeyinde nasıl koruma sağladığımızı öğrenmek için 'Tor Ağı' üzerine tıklayın.
onboarding.tour-tor-privacy.button=Tor Ağına Geç
onboarding.tour-tor-network=Tor Ağı
[View Less]
1
0

[translation/torbutton-browseronboardingproperties] Update translations for torbutton-browseronboardingproperties
by translation@torproject.org 29 Oct '18
by translation@torproject.org 29 Oct '18
29 Oct '18
commit cc54fa6019d92c245175ed0cd06f242397293a5e
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Oct 29 12:48:28 2018 +0000
Update translations for torbutton-browseronboardingproperties
---
tr/browserOnboarding.properties | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tr/browserOnboarding.properties b/tr/browserOnboarding.properties
index 219f3037e..1b10fd9a0 100644
--- a/tr/browserOnboarding.properties
+++ b/tr/browserOnboarding.…
[View More]properties
@@ -9,7 +9,7 @@ onboarding.tour-tor-welcome.button=Başlayın
onboarding.tour-tor-privacy=Kişisel Gizlilik
onboarding.tour-tor-privacy.title=İzleyenlere ve meraklılara hadlerini bildirin.
-onboarding.tour-tor-privacy.description=Tor Browser çerezleri yalıtır ve kapattıığınızda web tarayıcı geçmişinizi siler. Bu değişiklikler web tarayıcı üzerinde kişisel gizliliğinizin ve güvenliğinizin korunmasını sağlar. Ağ düzeyinde nasıl koruma sağladığımızı öğrenmek için 'Tor Ağo' üzerine tıklayın.
+onboarding.tour-tor-privacy.description=Tor Browser çerezleri yalıtır ve kapattığınızda web tarayıcı geçmişinizi siler. Bu değişiklikler web tarayıcı üzerinde kişisel gizliliğinizin ve güvenliğinizin korunmasını sağlar. Ağ düzeyinde nasıl koruma sağladığımızı öğrenmek için 'Tor Ağı' üzerine tıklayın.
onboarding.tour-tor-privacy.button=Tor Ağına Geç
onboarding.tour-tor-network=Tor Ağı
[View Less]
1
0

[translation/torbutton-torbuttondtd_completed] Update translations for torbutton-torbuttondtd_completed
by translation@torproject.org 29 Oct '18
by translation@torproject.org 29 Oct '18
29 Oct '18
commit c0c40eb4903e0dff6a46b67cdae51e44e67c1824
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Oct 29 12:48:08 2018 +0000
Update translations for torbutton-torbuttondtd_completed
---
tr/torbutton.dtd | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tr/torbutton.dtd b/tr/torbutton.dtd
index e349d9130..358a958a4 100644
--- a/tr/torbutton.dtd
+++ b/tr/torbutton.dtd
@@ -42,7 +42,7 @@
<!ENTITY torbutton.prefs.sec_safest_description "Yalnı…
[View More]z durağan siteler ve temel hizmetler için gerekli web sitesi özelliklerine izin verilir. Bu değişiklikler görselleri, ortamları ve betikleri etkiler.">
<!ENTITY torbutton.prefs.sec_safest_list_label "En güvenli ayarlar kullanıldığında:">
<!ENTITY torbutton.prefs.sec_learn_more_label "Ayrıntılı bilgi alın">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript,,HTTPS kullanmayan sitelerde devre dışı bırakılır.">
+<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript, HTTPS kullanmayan sitelerde devre dışı bırakılır.">
<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript betikleri tüm sitelerde varsayılan olarak devre dışı bırakılır.">
<!ENTITY torbutton.prefs.sec_limit_typography "Bazı yazı türleri ve matematik simgeleri devre dışı bırakılır.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Bazı yazı türleri, simgeler, matematik simgeleri ve görseller devre dışı bırakılır.">
[View Less]
1
0

[translation/torbutton-torbuttondtd] Update translations for torbutton-torbuttondtd
by translation@torproject.org 29 Oct '18
by translation@torproject.org 29 Oct '18
29 Oct '18
commit f4327aeabd7eb800c07086586560e333c003424a
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Oct 29 12:48:03 2018 +0000
Update translations for torbutton-torbuttondtd
---
tr/torbutton.dtd | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/tr/torbutton.dtd b/tr/torbutton.dtd
index e349d9130..358a958a4 100644
--- a/tr/torbutton.dtd
+++ b/tr/torbutton.dtd
@@ -42,7 +42,7 @@
<!ENTITY torbutton.prefs.sec_safest_description "Yalnız durağan …
[View More]siteler ve temel hizmetler için gerekli web sitesi özelliklerine izin verilir. Bu değişiklikler görselleri, ortamları ve betikleri etkiler.">
<!ENTITY torbutton.prefs.sec_safest_list_label "En güvenli ayarlar kullanıldığında:">
<!ENTITY torbutton.prefs.sec_learn_more_label "Ayrıntılı bilgi alın">
-<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript,,HTTPS kullanmayan sitelerde devre dışı bırakılır.">
+<!ENTITY torbutton.prefs.sec_js_on_https_sites_only "JavaScript, HTTPS kullanmayan sitelerde devre dışı bırakılır.">
<!ENTITY torbutton.prefs.sec_js_disabled "JavaScript betikleri tüm sitelerde varsayılan olarak devre dışı bırakılır.">
<!ENTITY torbutton.prefs.sec_limit_typography "Bazı yazı türleri ve matematik simgeleri devre dışı bırakılır.">
<!ENTITY torbutton.prefs.sec_limit_graphics_and_typography "Bazı yazı türleri, simgeler, matematik simgeleri ve görseller devre dışı bırakılır.">
[View Less]
1
0

[translation/tor-browser-manual_completed] Update translations for tor-browser-manual_completed
by translation@torproject.org 29 Oct '18
by translation@torproject.org 29 Oct '18
29 Oct '18
commit 25fcb8ac1006e61057e3ba1c3b493f2734bf5fa8
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Oct 29 12:47:34 2018 +0000
Update translations for tor-browser-manual_completed
---
tr/tr.po | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tr/tr.po b/tr/tr.po
index 344a8ca4f..048c34325 100644
--- a/tr/tr.po
+++ b/tr/tr.po
@@ -405,8 +405,8 @@ msgid ""
"the latest version of Tor Browser, hosted at a variety of locations, such as"
" …
[View More]Dropbox, Google Drive and GitHub."
msgstr ""
-"GetTor, iletileri otomatik olarak yanıtlayarak, Dropbox, Google Drive ve "
-"GitHub gibi çeşitli konumlarda barındırılan son Tor Browser sürümü "
+"GetTor; iletileri otomatik olarak yanıtlayarak, Dropbox, Google Drive ve "
+"GitHub gibi çeşitli konumlarda barındırılan en son Tor Browser sürümü "
"bağlantılarını gönderen bir hizmettir."
#: downloading.page:33
[View Less]
1
0

[translation/tor-browser-manual] Update translations for tor-browser-manual
by translation@torproject.org 29 Oct '18
by translation@torproject.org 29 Oct '18
29 Oct '18
commit 575bcf002cfd4a1946db52a1c5c847a8da219a9a
Author: Translation commit bot <translation(a)torproject.org>
Date: Mon Oct 29 12:47:29 2018 +0000
Update translations for tor-browser-manual
---
tr/tr.po | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/tr/tr.po b/tr/tr.po
index 344a8ca4f..048c34325 100644
--- a/tr/tr.po
+++ b/tr/tr.po
@@ -405,8 +405,8 @@ msgid ""
"the latest version of Tor Browser, hosted at a variety of locations, such as"
" Dropbox, …
[View More]Google Drive and GitHub."
msgstr ""
-"GetTor, iletileri otomatik olarak yanıtlayarak, Dropbox, Google Drive ve "
-"GitHub gibi çeşitli konumlarda barındırılan son Tor Browser sürümü "
+"GetTor; iletileri otomatik olarak yanıtlayarak, Dropbox, Google Drive ve "
+"GitHub gibi çeşitli konumlarda barındırılan en son Tor Browser sürümü "
"bağlantılarını gönderen bir hizmettir."
#: downloading.page:33
[View Less]
1
0