NetBSD Problem Report #56129
From tsutsui@ceres.dti.ne.jp Sun Apr 25 15:01:11 2021
Return-Path: <tsutsui@ceres.dti.ne.jp>
Received: from mail.netbsd.org (mail.netbsd.org [199.233.217.200])
(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits))
(Client CN "mail.NetBSD.org", Issuer "mail.NetBSD.org CA" (not verified))
by mollari.NetBSD.org (Postfix) with ESMTPS id 87C351A9269
for <gnats-bugs@gnats.NetBSD.org>; Sun, 25 Apr 2021 15:01:11 +0000 (UTC)
Message-Id: <202104251501.13PF126r023291@ceres.dti.ne.jp>
Date: Mon, 26 Apr 2021 00:01:02 +0900 (JST)
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Reply-To: tsutsui@ceres.dti.ne.jp
To: gnats-bugs@NetBSD.org
Cc: tsutsui@ceres.dti.ne.jp
Subject: ftp(1) should keep control session during large xfer
X-Send-Pr-Version: 3.95
>Number: 56129
>Category: bin
>Synopsis: ftp(1) should keep control session during large xfer
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: lukem
>State: closed
>Class: change-request
>Submitter-Id: net
>Arrival-Date: Sun Apr 25 15:05:00 +0000 2021
>Closed-Date: Sat Aug 13 22:30:10 +0000 2022
>Last-Modified: Tue Nov 07 23:50:01 +0000 2023
>Originator: Izumi Tsutsui
>Release: NetBSD 9.1
>Organization:
>Environment:
System: NetBSD mirage 9.1 NetBSD 9.1 (GENERIC) #0: Sun Oct 18 19:24:30 UTC 2020 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/i386/compile/GENERIC i386
Architecture: i386
Machine: i386
>Description:
During ftp installation using miniroot on slow hp300 and sun3 etc.,
the install script in miniroot use ftp(1) to get binary sets.
However it takes more than 5 minites (300 seconds) to get large sets
like base.tgz and comp.tgz etc., then ftp(1) command complains
---
250 CWD command successful.
local: INSTALL/base.tgz remote: base.tgz
227 Entering Passive Mode (199,233,217,201,203,31)
100% |************************************| 40035KiB 104.99 KiB/s 00:00 ETA
421 Service not available, remote server timed out. Connection closed.
40995866 bytes received in 07:21 (90.60 KiB/s)
ftp: No control connection for command
Extracting base.tgz:
---
I've fixed miniroot script to use auto-fetching with URL per each set
https://mail-index.netbsd.org/source-changes/2020/12/12/msg125060.html
http://cvsweb.netbsd.org/cgi-bin/cvsweb.cgi/src/distrib/miniroot/install.sub.diff?r1=1.58&r2=1.59
so installation now works, but ftp(1) command still comlains as above.
Several ftp clients keep control sessions by sending NOOP or PWD etc.
during large tranfers, so it's worth to add similar mechanism to
NetBSD's ftp(1).
>How-To-Repeat:
See above.
Or downloader comp.tgz on slow machines or via poor network.
>Fix:
N/A
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: bin-bug-people->lukem
Responsible-Changed-By: lukem@NetBSD.org
Responsible-Changed-When: Wed, 02 Jun 2021 14:39:55 +0000
Responsible-Changed-Why:
I'll take it
State-Changed-From-To: open->feedback
State-Changed-By: lukem@NetBSD.org
State-Changed-When: Thu, 03 Jun 2021 10:12:17 +0000
State-Changed-Why:
I've changed ftp.c rev 1.172 to set SO_KEEPALIVE on the control connection.
This was a much simpler change than refactoring to execute "STAT" at intervals
during a transfer, and also mirrors existing behaviour in ftpd.
Does this fix the problem?
From: "Luke Mewburn" <lukem@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/56129 CVS commit: src/usr.bin/ftp
Date: Thu, 3 Jun 2021 10:11:00 +0000
Module Name: src
Committed By: lukem
Date: Thu Jun 3 10:11:00 UTC 2021
Modified Files:
src/usr.bin/ftp: ftp.c
Log Message:
set SO_KEEPALIVE on control connection
Attempt to prevent timeouts of the control connection by setting SO_KEEPALIVE.
This matches the equivalent behaviour in ftpd.
Note: This is a much simpler change than adding a background polling event
to invoke "STAT" (or "NOOP") on the control connection during a transfer.
(It's unclear from RFC 959 whether "NOOP" is even permitted during a transfer).
PR bin/56129
To generate a diff of this commit:
cvs rdiff -u -r1.171 -r1.172 src/usr.bin/ftp/ftp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Luke Mewburn" <lukem@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/56129 CVS commit: src/usr.bin/ftp
Date: Thu, 3 Jun 2021 10:23:33 +0000
Module Name: src
Committed By: lukem
Date: Thu Jun 3 10:23:33 UTC 2021
Modified Files:
src/usr.bin/ftp: Makefile ssl.c ssl.h version.h
Log Message:
use fetch_*() for I/O with SMALLPROG / !WITH_SSL builds
Adapt the SMALLPROG / -UWITH_SSL build to also use the fetch_*()
methods from ssl.c, instead of using stdio, as stdio isn't robust
when using interruptable signals.
Disable ssl-specific support in the fetch_*() methods if WITH_SSL
isn't defined, so SMALLPROG still doesn't have ssl support (as expected).
The resulting SMALLPROG binary is slightly larger than before
(e.g., 157KiB vs 153KiB on amd64).
Set version to 20210603 for this fix and the SO_KEEPALIVE fix for PR 56129.
PR install/56219
To generate a diff of this commit:
cvs rdiff -u -r1.38 -r1.39 src/usr.bin/ftp/Makefile
cvs rdiff -u -r1.9 -r1.10 src/usr.bin/ftp/ssl.c
cvs rdiff -u -r1.4 -r1.5 src/usr.bin/ftp/ssl.h
cvs rdiff -u -r1.92 -r1.93 src/usr.bin/ftp/version.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large xfer)
Date: Sun, 13 Jun 2021 04:21:09 +0900
> State-Changed-Why:
> I've changed ftp.c rev 1.172 to set SO_KEEPALIVE on the control connection.
> This was a much simpler change than refactoring to execute "STAT" at intervals
> during a transfer, and also mirrors existing behaviour in ftpd.
>
> Does this fix the problem?
I've patched usr.bin/ftp in netbsd-9-2-RELEASE to 20210603 and
built NetBSD/x68k 9.2 INSTALL kernel, but ftp(1) still failed
to fetch base.tgz due to "No control connection for command."
https://pbs.twimg.com/media/E3tCjW2VgAMfjhQ.jpg
---
Izumi Tsutsui
State-Changed-From-To: feedback->open
State-Changed-By: lukem@NetBSD.org
State-Changed-When: Sat, 12 Jun 2021 22:41:33 +0000
State-Changed-Why:
Izumi Tsutsui (submitter) confirms problem still exists.
Izumi; is it possible to provide more details of the remote server
host/path or URI ?
Can you reproduce this with the same download on a "faster" machine
to the same server?
(Or is the 64 KiB/s transfer rate an artifact of the existing
machine being slow, rather than the network connection?)
State-Changed-From-To: open->feedback
State-Changed-By: lukem@NetBSD.org
State-Changed-When: Sat, 12 Jun 2021 22:50:10 +0000
State-Changed-Why:
If possible, could you try to reproduce using the -current ftp(1)?
There are other fixes relating to signal handlers that haven't been
pulled-up to netbsd-9, and there's a _slight_ possibility that they
may also be relevant.
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large xfer)
Date: Sun, 13 Jun 2021 12:15:36 +0900
> Izumi; is it possible to provide more details of the remote server
> host/path or URI ?
1)
https://pbs.twimg.com/media/E3tCjW2VgAMfjhQ.jpg
This one is a patched install RAMDISK with 20210603 ftp fetching
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/x68k/base.tgz
on X68030
https://dmesgd.nycbug.org/index.cgi?do=view&id=6124
2)
https://pbs.twimg.com/media/E3uspBhUYAIFURZ.jpg
This one is a patched /usr/bin/ftp 20210603 against NetBSD 9.2 fetching
ftp://ftp7.jp.netbsd.org/pub/NetBSD/NetBSD-9.2/x68k/base.tgz
on the same X68030
3)
https://pbs.twimg.com/media/E2nuME0UUAAkeo1.jpg
This one is a plain NetBSD/luna68k 9.2 install RAMDISK fetching
ftp://ftp6.jp.netbsd.org/pub/NetBSD/NetBSD-9.2/luna68k/comp.tgz
on LUNA
https://dmesgd.nycbug.org/index.cgi?do=view&id=6115
4)
https://pbs.twimg.com/media/E3uicvFUUAYQ85j.jpg
This one is stock /usr/bin/ftp in NetBSD/hp300 9.1 fetching
ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/hp300/binary/sets/base.tgz
on HP9000/425t
https://dmesgd.nycbug.org/index.cgi?do=view&id=6114
> Can you reproduce this with the same download on a "faster" machine
> to the same server?
On Panasonic CF-NX3 (Core(TM) i3-4010U CPU @ 1.70GHz) and
stock NetBSD/amd64 9.2 with "ifconfig wm0 media 10baseT settings:
https://dmesgd.nycbug.org/index.cgi?do=view&id=6123
fetching ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/i386/binary/sets/debug.tgz
doesn't fail:
https://pbs.twimg.com/media/E3ujd-nVUAEp464.jpg
> (Or is the 64 KiB/s transfer rate an artifact of the existing
> machine being slow, rather than the network connection?)
- 10baseT wm(4) + ahcisata(4) + modern(?) Core-i3 (2C4T) gets
~250KiB/s (ftp.netbsd.org)
-> no control session timeout
- 10baseT le(4) + slow spc(4) SCSI + 68030 or 68040 get
64KiB/s (ftp.netbsd.org) or 125KiB/s (ftp6.jp.netbsd.org)
-> control session timeout (as above)
---
Some threshold around 200KiB/s, or depends on CPU load?
---
Izumi Tsutsui
From: mlelstv@serpens.de (Michael van Elst)
To: gnats-bugs@netbsd.org
Cc:
Subject: Re: bin/56129 (ftp(1) should keep control session during large xfer)
Date: Sun, 13 Jun 2021 06:28:26 -0000 (UTC)
tsutsui@ceres.dti.ne.jp (Izumi Tsutsui) writes:
> Some threshold around 200KiB/s, or depends on CPU load?
Some more datapoints:
Fetching on NetBSD/amiga 8.1 with a 10Mbit ethernet at ~115KiB/s (IPv4)
or ~106KiB/s (IPv6) from ftp6.jp.netbsd.org gets no timeout.
Using a NetBSD-current (1 week old) /rescue/ftp on the same machine
still shows no timeout.
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/56129 CVS commit: [netbsd-9] src/usr.bin/ftp
Date: Mon, 14 Jun 2021 11:45:49 +0000
Module Name: src
Committed By: martin
Date: Mon Jun 14 11:45:49 UTC 2021
Modified Files:
src/usr.bin/ftp [netbsd-9]: ftp.c
Log Message:
Pull up following revision(s) (requested by lukem in ticket #1293):
usr.bin/ftp/ftp.c: revision 1.172
set SO_KEEPALIVE on control connection
Attempt to prevent timeouts of the control connection by setting SO_KEEPALIVE.
This matches the equivalent behaviour in ftpd.
Note: This is a much simpler change than adding a background polling event
to invoke "STAT" (or "NOOP") on the control connection during a transfer.
(It's unclear from RFC 959 whether "NOOP" is even permitted during a transfer).
PR bin/56129
To generate a diff of this commit:
cvs rdiff -u -r1.168.2.3 -r1.168.2.4 src/usr.bin/ftp/ftp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: "Martin Husemann" <martin@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/56129 CVS commit: [netbsd-9] src/usr.bin/ftp
Date: Mon, 14 Jun 2021 11:57:39 +0000
Module Name: src
Committed By: martin
Date: Mon Jun 14 11:57:39 UTC 2021
Modified Files:
src/usr.bin/ftp [netbsd-9]: Makefile ssl.c ssl.h version.h
Log Message:
Pull up following revision(s) (requested by lukem in ticket #1295):
usr.bin/ftp/ssl.c: revision 1.10
usr.bin/ftp/ssl.h: revision 1.5
usr.bin/ftp/version.h: revision 1.93
usr.bin/ftp/Makefile: revision 1.39
use fetch_*() for I/O with SMALLPROG / !WITH_SSL builds
Adapt the SMALLPROG / -UWITH_SSL build to also use the fetch_*()
methods from ssl.c, instead of using stdio, as stdio isn't robust
when using interruptable signals.
Disable ssl-specific support in the fetch_*() methods if WITH_SSL
isn't defined, so SMALLPROG still doesn't have ssl support (as expected).
The resulting SMALLPROG binary is slightly larger than before
(e.g., 157KiB vs 153KiB on amd64).
Set version to 20210603 for this fix and the SO_KEEPALIVE fix for PR 56129.
PR install/56219
To generate a diff of this commit:
cvs rdiff -u -r1.37 -r1.37.12.1 src/usr.bin/ftp/Makefile
cvs rdiff -u -r1.8.2.1 -r1.8.2.2 src/usr.bin/ftp/ssl.c
cvs rdiff -u -r1.4 -r1.4.2.1 src/usr.bin/ftp/ssl.h
cvs rdiff -u -r1.87.18.2 -r1.87.18.3 src/usr.bin/ftp/version.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large xfer)
Date: Sat, 19 Jun 2021 10:08:10 +0900
> State-Changed-Why:
> If possible, could you try to reproduce using the -current ftp(1)?
The control session timeout occurs on NetBSD/x68k INSTALL ramdisk
from NetBSD-daily/HEAD/202106141910Z/
https://pbs.twimg.com/media/E4NPDh7VkAAIISR.jpg
---
Izumi Tsutsui
State-Changed-From-To: feedback->open
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Sat, 19 Jun 2021 20:46:05 +0000
State-Changed-Why:
still borked
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, dholland@NetBSD.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large
xfer)
Date: Sat, 19 Jun 2021 21:01:37 +0000 (UTC)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--0-2040730550-1624136497=:20812
Content-Type: text/plain; charset=US-ASCII; format=flowed
On Sat, 19 Jun 2021, dholland@NetBSD.org wrote:
> Synopsis: ftp(1) should keep control session during large xfer
>
> State-Changed-From-To: feedback->open
> State-Changed-By: dholland@NetBSD.org
> State-Changed-When: Sat, 19 Jun 2021 20:46:05 +0000
> State-Changed-Why:
> still borked
>
I can reproduce this by throttling "get" to 30KB:
$ sudo tcpdump -w tcpdump-ftp.dump -i alc0 port 21
$ ftp -T get,30000 -d ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz
See attachment. Notice in the tcpdump log that for the 1st
file, base.tar.xz, after the xfer completes, the server
sends `226 Transfer complete.'. But, for the next file,
comp.tar.xz, after xfer is finished, the server doesn't
send *anything* at all--not even a FIN/ACK packet corresponding
to the FIN sent by the client after it times out. The kernel
has to send a RST to forcibly close the control connection.
-RVP
--0-2040730550-1624136497=:20812
Content-Type: application/octet-stream; name=tcpdump-ftp.dump
Content-Transfer-Encoding: BASE64
Content-ID: <fb32216a-921f-4ee2-93df-39a793bc5761@SDF.ORG>
Content-Description: tcpdump of FTP control channel
Content-Disposition: attachment; filename=tcpdump-ftp.dump
1MOyoQIABAAAAAAAAAAAAAAABAABAAAAKqTNYG9tDABKAAAASgAAANhHMqiy
iFBGXTJnVAgARQAAPAAAQABABpPnwKhEecfp2cn8wwAVtzMr1gAAAACgAoAA
QUsAAAIEBbQBAwMDBAIICgAAAAEAAAAAK6TNYGWKAABKAAAASgAAAFBGXTJn
VNhHMqiyiAgARSAAPAAAQAAzBqDHx+nZycCoRHkAFfzDQD452bczK9egEhAA
NzMAAAIEBaABAwMGBAIICgAAAAEAAAABK6TNYIaKAABCAAAAQgAAANhHMqiy
iFBGXTJnVAgARQAANAAAQABABpPvwKhEecfp2cn8wwAVtzMr10A+OdqAEBBl
ZYUAAAEBCAoAAAABAAAAASukzWAaAwQAfwAAAH8AAABQRl0yZ1TYRzKosogI
AEUwAHGDdUAAMwYdDcfp2cnAqER5ABX8w0A+Odq3MyvXgBgARKBBAAABAQgK
AAAAAgAAAAEyMjAgZnRwLk5ldEJTRC5vcmcgRlRQIHNlcnZlciAoTmV0QlNE
LWZ0cGQgMjAxODA0MjgpIHJlYWR5Lg0KK6TNYN0DBABSAAAAUgAAANhHMqiy
iFBGXTJnVAgARRAARAAAQABABpPPwKhEecfp2cn8wwAVtzMr10A+OheAGBBl
3VEAAAEBCAoAAAACAAAAAlVTRVIgYW5vbnltb3VzDQorpM1gvmUHAHMAAABz
AAAAUEZdMmdU2EcyqLKICABFMABlhHtAADMGHBPH6dnJwKhEeQAV/MNAPjoX
tzMr54AYAES2UAAAAQEICgAAAAIAAAACMzMxIEd1ZXN0IGxvZ2luIG9rLCB0
eXBlIHlvdXIgbmFtZSBhcyBwYXNzd29yZC4NCiukzWA0ZgcAUwAAAFMAAADY
RzKosohQRl0yZ1QIAEUQAEUcDkAAQAZ3wMCoRHnH6dnJ/MMAFbczK+dAPjpI
gBgQZZcdAAABAQgKAAAAAgAAAAJQQVNTIGFub255bW91c0ANCiukzWAe2AoA
SAAAAEgAAABQRl0yZ1TYRzKosogIAEUwADoAAEAAMwagucfp2cnAqER5ABX8
w0A+Oki3Myv4gBgARAWcAAABAQgKAAAAAwAAAAIyMzAtDQorpM1gV/cKANYF
AADWBQAAUEZdMmdU2EcyqLKICABFMAXIiH9AADMGEqzH6dnJwKhEeQAV/MNA
PjpOtzMr+IAQAETxDgAAAQEICgAAAAMAAAACICAgICAgICBUaGUgTmV0QlNE
IFByb2plY3QgRlRQIFNlcnZlciBsb2NhdGVkIGluIFNhbiBKb3NlLCBDQSwg
VVNBDQogICAgICAgIDEgR2JwcyBjb25uZWN0aXZpdHkNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUxD
T01FISAgICAvKCAgICAgICAgKWANCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIFxf
X18gICAvIHwNCiAgICAgICAgICArLS0tIEN1cnJlbnRseSBTdXBwb3J0ZWQg
UGxhdGZvcm1zIC0tLS0rICAgICAgICAgICAgICAvLSBfICBgLS8gICcNCiAg
ICAgICAgICB8IGFjb3JuMzIsIGFsZ29yLCBhbHBoYSwgYW1kNjQsIGFtaWdh
LCB8ICAgICAgICAgICAgICgvXC8gXCBcICAgL1wNCiAgICAgICAgICB8IGFt
aWdhcHBjLCBhcmMsIGF0YXJpLCBiZWJveCwgY2F0cywgICB8ICAgICAgICAg
ICAgIC8gLyAgIHwgYCAgICBcDQogICAgICAgICAgfCAgY2VzZmljLCBjb2Jh
bHQsIGRyZWFtY2FzdCwgZW1pcHMsICAgfCAgICAgICAgICAgICBPIE8gICAp
IC8gICAgfA0KICAgICAgICAgIHwgZXBvYzMyLCBldmJhcm17LDY0fSwgZXZi
bWlwcywgZXZicHBjLHwgICAgICAgICAgICAgYC1eLS0nYDwgICAgICcNCiAg
ICAgICAgICB8ICAgICBldmJzaDMsIGV3czQ4MDBtaXBzLCBocDMwMCwgICAg
ICB8ICAgICAgICAgICAgKF8uKSAgXyAgKSAgIC8NCiAgICAgICAgICB8aHBj
e2FybSxtaXBzLHNofSwgaHBwYSwgaTM4NiwgaWJtbndzLCB8ICAgICAgICAg
ICAgICAuX19fL2AgICAgLw0KICAgICAgICAgIHxpeW9uaXgsIGxhbmRpc2ss
IGx1bmE2OGssbWFjezY4ayxwcGN9LHwgICAgICAgICAgICAgICBgLS0tLS0n
IC8NCiAgICAgICAgICB8IG1pcHNjbywgbW1leWUsIG12bWU2OGssIG12bWVw
cGMsICAgICB8ICA8LS0tLS4gICAgIF9fIC8gX18gICBcDQogICAgICAgICAg
fG5ldHdpbmRlciwgbmV3czY4aywgbmV3c21pcHMsIG5leHQ2OGssfCAgPC0t
LS18PT09PU8pKSk9PSkgXCkgLz09PT0NCiAgICAgICAgICB8b2ZwcGMsIHBt
YXgsIHByZXAsIHJzNjAwMCwgc2FuZHBvaW50LCB8ICA8LS0tLScgICAgYC0t
JyBgLl9fLCcgXA0KICAgICAgICAgIHxzZ2ltaXBzLCBzaGFyaywgc3BhcmN7
LDY0fSwgc3VuezIsM30sIHwgICAgICAgICAgICAgICB8ICAgICAgICB8DQog
ICAgICAgICAgfCAgICAgIHZheCwgeDY4aywgeGVuLCB6YXVydXMgICAgICAg
ICAgfCAgICAgICAgICAgICAgICBcICAgICAgIC8NCiAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAg
ICBfX19fX18oIChfICAvIFxfX19fXw0KICAgICAgICAgIFNlZSBvdXIgd2Vi
c2l0ZSBhdCBodHRwOi8vd3d3Lk5ldEJTRC5vcmcvICAgICAgICAsJyAgLC0t
LS0tJyAgIHwgICAgICAgK6TNYHb3CgBCAAAAQgAAANhHMqiyiFBGXTJnVAgA
RRAANAAAQABABpPfwKhEecfp2cn8wwAVtzMr+EA+P+KAEA+zYAoAAAEBCAoA
AAADAAAAAyukzWBvVw4AAAQAAAAEAABQRl0yZ1TYRzKosogIAEUwA/KMo0AA
MwYQXsfp2cnAqER5ABX8w0A+P+K3Myv4gBgARPCDAAABAQgKAAAAAwAAAANc
DQogICAgICAgICAgIFdlIGxvZyBhbGwgRlRQIHRyYW5zZmVycyBhbmQgY29t
bWFuZHMuICAgICAgICAgIGAtLXtfX19fX19fX19fKSAgKEZMKSBcLw0KICAg
IA0KMjMwLQ0KICAgIEVYUE9SVCBOT1RJQ0UNCiAgICANCiAgICBQbGVhc2Ug
bm90ZSB0aGF0IHBvcnRpb25zIG9mIHRoaXMgRlRQIHNpdGUgY29udGFpbiBj
cnlwdG9ncmFwaGljDQogICAgc29mdHdhcmUgY29udHJvbGxlZCB1bmRlciB0
aGUgRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zIChFQVIpDQog
ICAgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4NCiAgICANCiAg
ICBOb25lIG9mIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRvd25sb2FkZWQgb3Ig
b3RoZXJ3aXNlIGV4cG9ydGVkIG9yDQogICAgcmUtZXhwb3J0ZWQgaW50byAo
b3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IGNvdW50cnkN
CiAgICB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzLiBB
bHNvLCBwZW9wbGUgcGVyc29uYWxseQ0KICAgIG9uIHRoZSBibG9jayBsaXN0
cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIFRyZWFzdXJ5
DQogICAgb3IgdGhlIFVuaXRlZCBTdGF0ZXMgRGVwYXJ0bWVudCBvZiBDb21t
ZXJjZSBhcmUgcHJvaGliaXRlZC4NCiAgICANCiAgICBCeSBkb3dubG9hZGlu
ZyBvciB1c2luZyBzYWlkIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRv
IHRoZQ0KICAgIGZvcmVnb2luZyBhbmQgeW91IGFyZSByZXByZXNlbnRpbmcg
YW5kIHdhcnJhbnRpbmcgdGhhdCB5b3UgYXJlIG5vdA0KICAgIGxvY2F0ZWQg
aW4sIHVuZGVyIHRoZSBjb250cm9sIG9mLCBvciBhIG5hdGlvbmFsIG9yIHJl
c2lkZW50IG9mIGFueQ0KICAgIHN1Y2ggY291bnRyeSBvciBvbiBhbnkgc3Vj
aCBsaXN0Lg0KMjMwIEd1ZXN0IGxvZ2luIG9rLCBhY2Nlc3MgcmVzdHJpY3Rp
b25zIGFwcGx5Lg0KK6TNYFBcDgBIAAAASAAAANhHMqiyiFBGXTJnVAgARRAA
OgAAQABABpPZwKhEecfp2cn8wwAVtzMr+EA+Q6CAGBBlp9QAAAEBCAoAAAAD
AAAAA1NZU1QNCiykzWCJgQIAcwAAAHMAAABQRl0yZ1TYRzKosogIAEUwAGWQ
s0AAMwYP28fp2cnAqER5ABX8w0A+Q6C3Myv+gBgARIumAAABAQgKAAAABAAA
AAMyMTUgVU5JWCBUeXBlOiBMOCBWZXJzaW9uOiBOZXRCU0QtZnRwZCAyMDE4
MDQyOA0KLKTNYAuCAgBIAAAASAAAANhHMqiyiFBGXTJnVAgARRAAOgAAQABA
BpPZwKhEecfp2cn8wwAVtzMr/kA+Q9GAGBBlxq8AAAEBCAoAAAAEAAAABEZF
QVQNCiykzWAe3QUAWgAAAFoAAABQRl0yZ1TYRzKosogIAEUwAEyVAUAAMwYL
psfp2cnAqER5ABX8w0A+Q9G3MywEgBgARJoIAAABAQgKAAAABAAAAAQyMTEt
RmVhdHVyZXMgc3VwcG9ydGVkDQospM1gEs0IAEIAAABCAAAA2EcyqLKIUEZd
MmdUCABFEAA0AABAAEAGk9/AqER5x+nZyfzDABW3MywEQD5D6YAQEGVbQwAA
AQEICgAAAAQAAAAELKTNYOgoDACYAAAAmAAAAFBGXTJnVNhHMqiyiAgARTAA
ipf+QAAzBghrx+nZycCoRHkAFfzDQD5D6bczLASAGABEku4AAAEBCAoAAAAF
AAAABCBNRFRNDQogTUxTVCBUeXBlKjtTaXplKjtNb2RpZnkqO1Blcm0qO1Vu
aXF1ZSo7DQogUkVTVCBTVFJFQU0NCiBTSVpFDQogVFZGUw0KMjExIEVuZA0K
LKTNYNwpDABKAAAASgAAANhHMqiyiFBGXTJnVAgARRAAPAAAQABABpPXwKhE
ecfp2cn8wwAVtzMsBEA+RD+AGBBliOkAAAEBCAoAAAAFAAAABVRZUEUgSQ0K
LaTNYDlGAABWAAAAVgAAAFBGXTJnVNhHMqiyiAgARTAASJ7zQAAzBgG4x+nZ
ycCoRHkAFfzDQD5EP7czLAyAGABE2AQAAAEBCAoAAAAFAAAABTIwMCBUeXBl
IHNldCB0byBJLg0KLaTNYJZGAABLAAAASwAAANhHMqiyiFBGXTJnVAgARRAA
PQAAQABABpPWwKhEecfp2cn8wwAVtzMsDEA+RFOAGBBl9sMAAAEBCAoAAAAF
AAAABUNXRCBwdWINCi2kzWB7owMAXwAAAF8AAABQRl0yZ1TYRzKosogIAEUw
AFGgukAAMwb/58fp2cnAqER5ABX8w0A+RFO3MywVgBgARI1cAAABAQgKAAAA
BgAAAAUyNTAgQ1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4NCi2kzWDaowMATgAA
AE4AAADYRzKosohQRl0yZ1QIAEUQAEAAAEAAQAaT08CoRHnH6dnJ/MMAFbcz
LBVAPkRwgBgQZbAlAAABAQgKAAAABgAAAAZDV0QgTmV0QlNEDQotpM1gVQIH
AEgAAABIAAAAUEZdMmdU2EcyqLKICABFMAA6AABAADMGoLnH6dnJwKhEeQAV
/MNAPkRwtzMsIYAYAET7QQAAAQEICgAAAAYAAAAGMjUwLQ0KLaTNYI4FCgBC
AAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn8wwAV
tzMsIUA+RHaAEBBlWpQAAAEBCAoAAAAHAAAABi2kzWBSYg0AbgQAAG4EAABQ
Rl0yZ1TYRzKosogIAEUwBGCty0AAMwbux8fp2cnAqER5ABX8w0A+RHa3Mywh
gBgARF2BAAABAQgKAAAABwAAAAcgICAgRVhQT1JUIE5PVElDRQ0KICAgIA0K
ICAgIFBsZWFzZSBub3RlIHRoYXQgcG9ydGlvbnMgb2YgdGhpcyBGVFAgc2l0
ZSBjb250YWluIGNyeXB0b2dyYXBoaWMNCiAgICBzb2Z0d2FyZSBjb250cm9s
bGVkIHVuZGVyIHRoZSBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlv
bnMgKEVBUikNCiAgICBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNh
Lg0KICAgIA0KICAgIE5vbmUgb2YgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZG93
bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3INCiAgICByZS1leHBv
cnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBh
bnkgY291bnRyeQ0KICAgIHRvIHdoaWNoIHRoZSBVLlMuIGhhcyBlbWJhcmdv
ZWQgZ29vZHMuIEFsc28sIHBlb3BsZSBwZXJzb25hbGx5DQogICAgb24gdGhl
IGJsb2NrIGxpc3RzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIERlcGFydG1lbnQg
b2YgVHJlYXN1cnkNCiAgICBvciB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRt
ZW50IG9mIENvbW1lcmNlIGFyZSBwcm9oaWJpdGVkLg0KICAgIA0KICAgIEJ5
IGRvd25sb2FkaW5nIG9yIHVzaW5nIHNhaWQgc29mdHdhcmUsIHlvdSBhcmUg
YWdyZWVpbmcgdG8gdGhlDQogICAgZm9yZWdvaW5nIGFuZCB5b3UgYXJlIHJl
cHJlc2VudGluZyBhbmQgd2FycmFudGluZyB0aGF0IHlvdSBhcmUgbm90DQog
ICAgbG9jYXRlZCBpbiwgdW5kZXIgdGhlIGNvbnRyb2wgb2YsIG9yIGEgbmF0
aW9uYWwgb3IgcmVzaWRlbnQgb2YgYW55DQogICAgc3VjaCBjb3VudHJ5IG9y
IG9uIGFueSBzdWNoIGxpc3QuDQoyNTAtDQogICAgUGxlYXNlIHJlYWQgdGhl
IGZpbGUgUkVBRE1FDQogICAgICBpdCB3YXMgbGFzdCBtb2RpZmllZCBvbiBN
b24gTWF5IDE3IDEyOjIzOjE0IDIwMjEgLSAzMyBkYXlzIGFnbw0KICAgIFBs
ZWFzZSByZWFkIHRoZSBmaWxlIFJFQURNRS5leHBvcnQtY29udHJvbA0KICAg
ICAgaXQgd2FzIGxhc3QgbW9kaWZpZWQgb24gV2VkIEZlYiAxMCAwNjoyMjoy
MiAyMDE2IC0gMTk1NCBkYXlzIGFnbw0KMjUwIENXRCBjb21tYW5kIHN1Y2Nl
c3NmdWwuDQotpM1gs2cNAFIAAABSAAAA2EcyqLKIUEZdMmdUCABFEABEAABA
AEAGk8/AqER5x+nZyfzDABW3MywhQD5IooAYEGVQdgAAAQEICgAAAAcAAAAH
Q1dEIE5ldEJTRC05LjINCi6kzWBNiAEASAAAAEgAAABQRl0yZ1TYRzKosogI
AEUwADoAAEAAMwagucfp2cnAqER5ABX8w0A+SKK3MywxgBgARPb8AAABAQgK
AAAACAAAAAcyNTAtDQoupM1gXIcEAEIAAABCAAAA2EcyqLKIUEZdMmdUCABF
EAA0AABAAEAGk9/AqER5x+nZyfzDABW3MywxQD5IqIAQEGVWTwAAAQEICgAA
AAgAAAAILqTNYJvnBwDMAAAAzAAAAFBGXTJnVNhHMqiyiAgARTAAvriAQAAz
Bue0x+nZycCoRHkAFfzDQD5IqLczLDGAGABEC+oAAAEBCAoAAAAIAAAACCAg
ICBQbGVhc2UgcmVhZCB0aGUgZmlsZSBSRUFETUUuZmlsZXMNCiAgICAgIGl0
IHdhcyBsYXN0IG1vZGlmaWVkIG9uIFdlZCBNYXkgMTIgMTc6NDg6MjYgMjAy
MSAtIDM4IGRheXMgYWdvDQoyNTAgQ1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4N
Ci6kzWCU6AcATQAAAE0AAADYRzKosohQRl0yZ1QIAEUQAD8AAEAAQAaT1MCo
RHnH6dnJ/MMAFbczLDFAPkkygBgQZcqJAAABAQgKAAAACAAAAAhDV0QgYW1k
NjQNCi6kzWDmQwsAXwAAAF8AAABQRl0yZ1TYRzKosogIAEUwAFG9LUAAMwbj
dMfp2cnAqER5ABX8w0A+STK3Myw8gBgARIhQAAABAQgKAAAACQAAAAgyNTAg
Q1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4NCi6kzWBJRAsATgAAAE4AAADYRzKo
sohQRl0yZ1QIAEUQAEAAAEAAQAaT08CoRHnH6dnJ/MMAFbczLDxAPklPgBgQ
ZX3BAAABAQgKAAAACQAAAAlDV0QgYmluYXJ5DQoupM1gvp8OAF8AAABfAAAA
UEZdMmdU2EcyqLKICABFMABRwvpAADMG3afH6dnJwKhEeQAV/MNAPklPtzMs
SIAYAESIJgAAAQEICgAAAAkAAAAJMjUwIENXRCBjb21tYW5kIHN1Y2Nlc3Nm
dWwuDQoupM1gIaAOAEwAAABMAAAA2EcyqLKIUEZdMmdUCABFEAA+AABAAEAG
k9XAqER5x+nZyfzDABW3MyxIQD5JbIAYEGXZBQAAAQEICgAAAAkAAAAJQ1dE
IHNldHMNCi+kzWBduwIAXwAAAF8AAABQRl0yZ1TYRzKosogIAEUwAFHE40AA
Mwbbvsfp2cnAqER5ABX8w0A+SWy3MyxSgBgARIf+AAABAQgKAAAACgAAAAky
NTAgQ1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4NCi+kzWCzvAIASgAAAEoAAADY
RzKosohQRl0yZ1QIAEUQADwAAEAAQAaT18CoRHnH6dnJ/MMAFbczLFJAPkmJ
gBgQZYNPAAABAQgKAAAACgAAAApUWVBFIEENCi+kzWBNGgYAVgAAAFYAAABQ
Rl0yZ1TYRzKosogIAEUwAEjGsUAAMwbZ+cfp2cnAqER5ABX8w0A+SYm3Myxa
gBgARNpiAAABAQgKAAAACgAAAAoyMDAgVHlwZSBzZXQgdG8gQS4NCi+kzWCt
GgYASAAAAEgAAADYRzKosohQRl0yZ1QIAEUQADoAAEAAQAaT2cCoRHnH6dnJ
/MMAFbczLFpAPkmdgBgQZa9uAAABAQgKAAAACgAAAApFUFNWDQovpM1gLXsJ
AHIAAAByAAAAUEZdMmdU2EcyqLKICABFMABkyDJAADMG2FzH6dnJwKhEeQAV
/MNAPkmdtzMsYIAYAERDsgAAAQEICgAAAAsAAAAKMjI5IEVudGVyaW5nIEV4
dGVuZGVkIFBhc3NpdmUgTW9kZSAofHx8NTg3NjN8KQ0KL6TNYIF2DABCAAAA
QgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn8wwAVtzMs
YEA+Sc2AEBBlVPUAAAEBCAoAAAALAAAACy+kzWAt3QwATQAAAE0AAADYRzKo
sohQRl0yZ1QIAEUQAD8AAEAAQAaT1MCoRHnH6dnJ/MMAFbczLGBAPknNgBgQ
ZeCRAAABAQgKAAAACwAAAAtOTFNUICoueHoNCjCkzWDM/QAAewAAAHsAAABQ
Rl0yZ1TYRzKosogIAEUwAG3Lc0AAMwbVEsfp2cnAqER5ABX8w0A+Sc23Myxr
gBgARCeAAAABAQgKAAAADAAAAAsxNTAgT3BlbmluZyBBU0NJSSBtb2RlIGRh
dGEgY29ubmVjdGlvbiBmb3IgJ2ZpbGUgbGlzdCcuDQowpM1gAOsDAEIAAABC
AAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5x+nZyfzDABW3Myxr
QD5KBoAQEGVUrwAAAQEICgAAAAwAAAAMMKTNYKhFBwBaAAAAWgAAAFBGXTJn
VNhHMqiyiAgARTAATM6ZQAAzBtINx+nZycCoRHkAFfzDQD5KBrczLGuAGABE
lboAAAEBCAoAAAAMAAAADDIyNiBUcmFuc2ZlciBjb21wbGV0ZS4NCjCkzWBb
RgcASgAAAEoAAADYRzKosohQRl0yZ1QIAEUQADwAAEAAQAaT18CoRHnH6dnJ
/MMAFbczLGtAPkoegBgQZYKVAAABAQgKAAAADAAAAAxUWVBFIEkNCjCkzWCe
pAoAVgAAAFYAAABQRl0yZ1TYRzKosogIAEUwAEjQLkAAMwbQfMfp2cnAqER5
ABX8w0A+Sh63MyxzgBgARNGvAAABAQgKAAAADQAAAAwyMDAgVHlwZSBzZXQg
dG8gSS4NCjCkzWD5pAoAVAAAAFQAAADYRzKosohQRl0yZ1QIAEUQAEY1yUAA
QAZeBMCoRHnH6dnJ/MMAFbczLHNAPkoygBgQZVO4AAABAQgKAAAADQAAAA1T
SVpFIGJhc2UudGFyLnh6DQowpM1gSAUOAFAAAABQAAAAUEZdMmdU2EcyqLKI
CABFMABCAABAADMGoLHH6dnJwKhEeQAV/MNAPkoytzMshYAYAEQnTAAAAQEI
CgAAAA0AAAANMjEzIDQyMzEzMzA0DQowpM1grwUOAEgAAABIAAAA2EcyqLKI
UEZdMmdUCABFEAA6AABAAEAGk9nAqER5x+nZyfzDABW3MyyFQD5KQIAYEGWu
mgAAAQEICgAAAA0AAAANRVBTVg0KMaTNYIMhAgByAAAAcgAAAFBGXTJnVNhH
MqiyiAgARTAAZNQwQAAzBsxex+nZycCoRHkAFfzDQD5KQLczLIuAGABEQt0A
AAEBCAoAAAAOAAAADTIyOSBFbnRlcmluZyBFeHRlbmRlZCBQYXNzaXZlIE1v
ZGUgKHx8fDU4NzY0fCkNCjGkzWB+IwUAQgAAAEIAAADYRzKosohQRl0yZ1QI
AEUQADQAAEAAQAaT38CoRHnH6dnJ/MMAFbczLItAPkpwgBAQZVQhAAABAQgK
AAAADgAAAA4xpM1gno8FAFQAAABUAAAA2EcyqLKIUEZdMmdUCABFEABG2kRA
AEAGuYjAqER5x+nZyfzDABW3MyyLQD5KcIAYEGVaVwAAAQEICgAAAA4AAAAO
UkVUUiBiYXNlLnRhci54eg0KMaTNYNj3CACPAAAAjwAAAFBGXTJnVNhHMqiy
iAgARTAAgdmZQAAzBsbYx+nZycCoRHkAFfzDQD5KcLczLJ2AGABE0YQAAAEB
CAoAAAAPAAAADjE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVj
dGlvbiBmb3IgJ2Jhc2UudGFyLnh6JyAoNDIzMTMzMDQgYnl0ZXMpLg0KMaTN
YEkBDABCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp
2cn8wwAVtzMsnUA+Sr2AEBBlU8AAAAEBCAoAAAAPAAAAD56pzWBMQAMAWgAA
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
QD5LdFAUEGWL/QAA
--0-2040730550-1624136497=:20812--
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large
xfer)
Date: Sat, 19 Jun 2021 23:32:00 +0000 (UTC)
On Sat, 19 Jun 2021, RVP wrote:
> I can reproduce this by throttling "get" to 30KB:
>
> $ sudo tcpdump -w tcpdump-ftp.dump -i alc0 port 21
> $ ftp -T get,30000 -d ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz
>
> See attachment. Notice in the tcpdump log that for the 1st
> file, base.tar.xz, after the xfer completes, the server
> sends `226 Transfer complete.'. But, for the next file,
> comp.tar.xz, after xfer is finished, the server doesn't
> send *anything* at all--not even a FIN/ACK packet corresponding
> to the FIN sent by the client after it times out. The kernel
> has to send a RST to forcibly close the control connection.
>
I'm inclined to blame the FTP NAT impl. on my ISP-provided DSL-router.
A same test of downloading similarly-sized files using NetBSD's own
ftpd (on localhost--I have no other NetBSD machines) completed without
any problems.
-RVP
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large
xfer)
Date: Sun, 20 Jun 2021 20:38:24 +0000 (UTC)
On Sat, 19 Jun 2021, RVP wrote:
> I'm inclined to blame the FTP NAT impl. on my ISP-provided DSL-router.
>
In my case it definitely is the broken FTP NAT in my DSL-router:
In the previous FTP download tests, since:
base.tar.xz -> DL time = 42313304 bytes received in 23:44 -> ctl. conn OK
comp.tar.xz -> DL time = 60781064 bytes received in 34:06 -> ctl. conn closed
I set TCP keepalive to 20 mins:
$ sudo sysctl -w net.inet.tcp.keepidle=$(( (20*60) * $(sysctl -n net.inet.tcp.slowhz) ))
And, using NetBSD-ftp 20210603, all the files came through without a
hitch:
-----
$ ftp -T get,30000 -d ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz
Get transfer rate throttle: on; maximum: 30000; increment 1024.
isipv6addr: got 0 for ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz
fetch_ftp: `ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz'
parse_url: URL `ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz'
parse_url: user `<null>' pass `<null>' host ftp.netbsd.org port ftp(21) path `pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz'
fetch_ftp: user `<null>' pass `<null>' host ftp.netbsd.org port ftp path `pub/NetBSD/NetBSD-9.2/amd64/binary/sets' dir `pub/NetBSD/NetBSD-9.2/amd64/binary/sets' file `*.xz'
Trying [2001:470:a085:999::21]:21 ...
setupsockbufsize: rcvbuf_size determined as 32768
setupsockbufsize: sndbuf_size determined as 32768
ftp: Can't connect to `2001:470:a085:999::21:21': No route to host
Trying 199.233.217.201:21 ...
Connected to ftp.netbsd.org.
220 ftp.NetBSD.org FTP server (NetBSD-ftpd 20180428) ready.
ftp_login: user `<null>' pass `<null>' host `ftp.netbsd.org'
---> USER anonymous
331 Guest login ok, type your name as password.
---> PASS XXXX
230-
...
19703048 bytes received in 11:08 (28.79 KiB/s)
---> MDTM xserver.tar.xz
213 20210512195146
remotemodtime: parsed time `20210512195146' as 1620849106, Wed, 12 May 2021 19:51:46 +0000
---> QUIT
221-
Data traffic for this session was 696130340 bytes in 21 files.
Total traffic for this session was 696140384 bytes in 22 transfers.
221 Thank you for using the FTP service on ftp.NetBSD.org.
$
-----
Reinforcing my notion that my DSL router has a flawed FTP NAT impl.,
I see that NetBSD sending a RST packet after the ctl. conn. is closed:
-----
08:49:51.192501 IP 192.168.68.121.65314 > 199.233.217.201.21: Flags [F.], seq 321, ack 4693, win 4197, options [nop,nop,TS val 23453 ecr 21360], length 0
08:50:55.192257 IP 192.168.68.121.65314 > 199.233.217.201.21: Flags [F.], seq 321, ack 4693, win 4197, options [nop,nop,TS val 23581 ecr 21360], length 0
08:51:59.192000 IP 192.168.68.121.65314 > 199.233.217.201.21: Flags [F.], seq 321, ack 4693, win 4197, options [nop,nop,TS val 23709 ecr 21360], length 0
08:53:03.191753 IP 192.168.68.121.65314 > 199.233.217.201.21: Flags [F.], seq 321, ack 4693, win 4197, options [nop,nop,TS val 23837 ecr 21360], length 0
08:54:07.191498 IP 192.168.68.121.65314 > 199.233.217.201.21: Flags [R.], seq 322, ack 4693, win 4197, length 0
-----
causes my wired connection to the wireless extender to drop its
carrier (this happens pretty consistently, though god knows why):
-----
Jun 20 08:55:58 x202e dhcpcd[444]: alc0: carrier lost - roaming
Jun 20 08:56:17 x202e dhcpcd[444]: alc0: carrier acquired
Jun 20 08:56:17 x202e dhcpcd[444]: alc0: IAID 5d:32:67:54
Jun 20 08:56:18 x202e dhcpcd[444]: alc0: soliciting an IPv6 router
Jun 20 08:56:19 x202e dhcpcd[444]: alc0: Router Advertisement from fe80::da47:32ff:fea8:b288
Jun 20 08:56:19 x202e dhcpcd[444]: alc0: no global addresses for default route
Jun 20 08:56:19 x202e dhcpcd[444]: alc0: soliciting a DHCPv6 lease
Jun 20 08:57:18 x202e dhcpcd[444]: alc0: carrier lost - roaming
Jun 20 08:57:35 x202e dhcpcd[444]: alc0: carrier acquired
Jun 20 08:57:35 x202e dhcpcd[444]: alc0: IAID 5d:32:67:54
Jun 20 08:57:36 x202e dhcpcd[444]: alc0: soliciting an IPv6 router
Jun 20 08:57:36 x202e dhcpcd[444]: alc0: Router Advertisement from fe80::da47:32ff:fea8:b288
Jun 20 08:57:36 x202e dhcpcd[444]: alc0: no global addresses for default route
Jun 20 08:57:36 x202e dhcpcd[444]: alc0: soliciting a DHCPv6 lease
-----
-RVP
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
To: gnats-bugs@netbsd.org
Cc: rvp@SDF.ORG, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during largexfer)
Date: Wed, 23 Jun 2021 02:45:26 +0900
> I can reproduce this by throttling "get" to 30KB:
>
> $ sudo tcpdump -w tcpdump-ftp.dump -i alc0 port 21
> $ ftp -T get,30000 -d ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/*.xz
:
Today I cannot reproduce the control session timeout on
my HP9000/425t (68040 25MHz / 48MB):
https://pbs.twimg.com/media/E4f1dL1VkAc3hEh.jpg
either on GENERIC and /usr/bin/ftp or RAMDISK kernel crunched one.
I'll also check again slower 68030 machines (luna68k and x68k).
---
Izumi Tsutsui
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during
largexfer)
Date: Tue, 22 Jun 2021 21:06:31 +0000 (UTC)
On Tue, 22 Jun 2021, Izumi Tsutsui wrote:
> Today I cannot reproduce the control session timeout on
> my HP9000/425t (68040 25MHz / 48MB):
> https://pbs.twimg.com/media/E4f1dL1VkAc3hEh.jpg
> either on GENERIC and /usr/bin/ftp or RAMDISK kernel crunched one.
>
> I'll also check again slower 68030 machines (luna68k and x68k).
>
From the screenshot:
41046620 bytes received in 06:00 (111.23 KiB/s)
That's just 6 mins. Try downloading `debug.tar.xz' which should
take more than 15 mins. From your past screenshots, my feeling
is that any _single_ transfer which leaves the control connection
idle for >15min. will simply be dropped silently by your FTP NAT.
-RVP
From: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
To: rvp@SDF.ORG
Cc: gnats-bugs@netbsd.org, lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session duringlargexfer)
Date: Thu, 24 Jun 2021 00:21:27 +0900
> > Today I cannot reproduce the control session timeout on
> > my HP9000/425t (68040 25MHz / 48MB):
> > https://pbs.twimg.com/media/E4f1dL1VkAc3hEh.jpg
> > either on GENERIC and /usr/bin/ftp or RAMDISK kernel crunched one.
> >
> > I'll also check again slower 68030 machines (luna68k and x68k).
> >
>
> From the screenshot:
>
> 41046620 bytes received in 06:00 (111.23 KiB/s)
>
> That's just 6 mins. Try downloading `debug.tar.xz' which should
> take more than 15 mins. From your past screenshots, my feeling
> is that any _single_ transfer which leaves the control connection
> idle for >15min.
The similar timeout occured 6minsq or 8 mins so there might be
more conditions, but anyway I'll try reproduce on slower machines
or large files.
https://pbs.twimg.com/media/E3uicvFUUAYQ85j.jpg
https://pbs.twimg.com/media/E3uspBhUYAIFURZ.jpg
> will simply be dropped silently by your FTP NAT.
Yes, there are two NAT (NetBSD/i386 9.2 npf with ipfilter compat one,
and NTT(the line service provider)'s "Home Gateway"), so they could be
problematic.
Thanks,
---
Izumi Tsutsui
From: RVP <rvp@SDF.ORG>
To: Izumi Tsutsui <tsutsui@ceres.dti.ne.jp>
Cc: gnats-bugs@netbsd.org, lukem@netbsd.org
Subject: Re: bin/56129 (ftp(1) should keep control session duringlargexfer)
Date: Wed, 23 Jun 2021 20:31:39 +0000 (UTC)
On Thu, 24 Jun 2021, Izumi Tsutsui wrote:
> The similar timeout occured 6minsq or 8 mins so there might be
> more conditions, but anyway I'll try reproduce on slower machines
> or large files.
> https://pbs.twimg.com/media/E3uicvFUUAYQ85j.jpg
> https://pbs.twimg.com/media/E3uspBhUYAIFURZ.jpg
>
Hmm, now I wonder if you have the same problem that I have: an
overly aggressive FTP NAT timeout (my timeouts are pretty consistent:
~30 mins). Can you do a tcpdump of port 21?
In any case, ftp(1) will have to be modified to either:
a) send periodic keepalive commands during long xfers, or
b) for non-nteractive xfers, re-connect and fetch the rest of the
files in a list. (Most of the code for this is already there;
just needs a bit of re-arrangement.)
-RVP
From: =?UTF-8?B?SmFyb23DrXIgRG9sZcSNZWs=?= <jaromir.dolecek@gmail.com>
To: "gnats-bugs@NetBSD.org" <gnats-bugs@netbsd.org>
Cc:
Subject: Re: bin/56129 (ftp(1) should keep control session duringlargexfer)
Date: Wed, 23 Jun 2021 22:46:19 +0200
Le mer. 23 juin 2021 =C3=A0 22:35, RVP <rvp@sdf.org> a =C3=A9crit :
> In any case, ftp(1) will have to be modified to either:
> a) send periodic keepalive commands during long xfers, or
> b) for non-nteractive xfers, re-connect and fetch the rest of the
> files in a list. (Most of the code for this is already there;
> just needs a bit of re-arrangement.)
ftp client enables SO_KEEPALIVE, which should be the same as actually
sending a dummy command every so often.
I have no idea why it doesn't help. Maybe the keep-alive packets get
ignored by the router, and it doesn't refresh it's NAT inactivity
timeout.
Did anyone confirm via tcpdump whether the keep-alive packets are
actually sent by the kernel for the control connection?
Jaromir
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, jaromir.dolecek@gmail.com, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session duringlargexfer)
Date: Wed, 23 Jun 2021 21:21:06 +0000 (UTC)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--0-2045945096-1624483267=:12300
Content-Type: text/plain; charset=ISO-8859-2; format=flowed
Content-Transfer-Encoding: 8BIT
On Wed, 23 Jun 2021, Jaromír Doleček wrote:
> ftp client enables SO_KEEPALIVE, which should be the same as actually
> sending a dummy command every so often.
>
The system-wide keepalive timeout is 2 hrs, but, my gateway times out
idle connections after ~ 30 mins.
> Did anyone confirm via tcpdump whether the keep-alive packets are
> actually sent by the kernel for the control connection?
>
Yes, they are sent:
https://mail-index.netbsd.org/netbsd-bugs/2021/06/20/msg072210.html
I have the tcpdump for that session; just didn't post it as I didn't
feel it was necessary because of the other logs I included.
-RVP
--0-2045945096-1624483267=:12300--
From: Havard Eidnes <he@NetBSD.org>
To: gnats-bugs@netbsd.org, rvp@SDF.ORG
Cc: lukem@netbsd.org, netbsd-bugs@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large
xfer)
Date: Thu, 24 Jun 2021 00:45:15 +0200 (CEST)
> I set TCP keepalive to 20 mins:
>
> $ sudo sysctl -w net.inet.tcp.keepidle=3D$(( (20*60) * $(sysctl -n n=
et.inet.tcp.slowhz) ))
Oh?
On my host that operation would set it to 40 minutes.
tcp(4) says the default value for TCP_KEEPIDLE is 4 hours, which
corresponds to
net.inet.tcp.keepidle =3D 14400
which means this value should be specified in seconds.
So if you have a device on the path with a 30min NAT translation
time-out, you'll still lose.
Regards,
- H=E5vard
From: RVP <rvp@SDF.ORG>
To: Havard Eidnes <he@NetBSD.org>
Cc: gnats-bugs@netbsd.org, lukem@netbsd.org, tsutsui@ceres.dti.ne.jp
Subject: Re: bin/56129 (ftp(1) should keep control session during large
xfer)
Date: Wed, 23 Jun 2021 23:08:27 +0000 (UTC)
This message is in MIME format. The first part should be readable text,
while the remaining parts are likely unreadable without MIME-aware tools.
--0-577458017-1624489708=:10413
Content-Type: text/plain; charset=US-ASCII; format=flowed
On Thu, 24 Jun 2021, Havard Eidnes wrote:
>> I set TCP keepalive to 20 mins:
>>
>> $ sudo sysctl -w net.inet.tcp.keepidle=$(( (20*60) * $(sysctl -n net.inet.tcp.slowhz) ))
>
> On my host that operation would set it to 40 minutes.
>
> tcp(4) says the default value for TCP_KEEPIDLE is 4 hours, which
> corresponds to
>
> net.inet.tcp.keepidle = 14400
>
> which means this value should be specified in seconds.
>
Yes, this puzzled me a bit too. But, sysctl(7) says:
tcp.slowhz
The units for tcp.keepidle and tcp.keepintvl; those
variables are in ticks of a clock that ticks tcp.slowhz
times per second. (That is, their values must be divided
by the tcp.slowhz value to get times in seconds.)
And, the timestamps in the tcpdump (attached) correspond.
$ uname -a
NetBSD x202e.localdomain 9.99.82 NetBSD 9.99.82 (GENERIC) #0: Sat May 8 19:36:28 UTC 2021 mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/amd64/compile/GENERIC amd64
-RVP
--0-577458017-1624489708=:10413
Content-Type: application/octet-stream; name=tcpdump-20min_keepalive.dump
Content-Transfer-Encoding: BASE64
Content-ID: <ef91273b-3f8c-5889-a25-b2e5eaace29c@SDF.ORG>
Content-Description: tcpdump for FTP with 20 min keepalive.
Content-Disposition: attachment; filename=tcpdump-20min_keepalive.dump
1MOyoQIABAAAAAAAAAAAAAAABAABAAAAlwPPYGzRBABKAAAASgAAANhHMqiy
iFBGXTJnVAgARQAAPAAAQABABpPnwKhEecfp2cn98wAVhyiy5wAAAACgAoAA
6RQAAAIEBbQBAwMDBAIICgAAAAEAAAAAlwPPYIdJCABKAAAASgAAAFBGXTJn
VNhHMqiyiAgARSAAPAAAQAAzBqDHx+nZycCoRHkAFf3z4acjc4cosuigEhAA
U/kAAAIEBaABAwMGBAIICgAAAAEAAAABlwPPYKtJCABCAAAAQgAAANhHMqiy
iFBGXTJnVAgARQAANAAAQABABpPvwKhEecfp2cn98wAVhyiy6OGnI3SAEBBl
gksAAAEBCAoAAAABAAAAAZgDz2CRrgwAfwAAAH8AAABQRl0yZ1TYRzKosogI
AEUwAHGeckAAMwYCEMfp2cnAqER5ABX98+GnI3SHKLLogBgARL0GAAABAQgK
AAAAAwAAAAEyMjAgZnRwLk5ldEJTRC5vcmcgRlRQIHNlcnZlciAoTmV0QlNE
LWZ0cGQgMjAxODA0MjgpIHJlYWR5Lg0KmAPPYOSvDABSAAAAUgAAANhHMqiy
iFBGXTJnVAgARRAARAAAQABABpPPwKhEecfp2cn98wAVhyiy6OGnI7GAGBBl
+hQAAAEBCAoAAAAEAAAAA1VTRVIgYW5vbnltb3VzDQqZA89gD9wAAHMAAABz
AAAAUEZdMmdU2EcyqLKICABFMABlom5AADMG/h/H6dnJwKhEeQAV/fPhpyOx
hyiy+IAYAETTEgAAAQEICgAAAAQAAAAEMzMxIEd1ZXN0IGxvZ2luIG9rLCB0
eXBlIHlvdXIgbmFtZSBhcyBwYXNzd29yZC4NCpkDz2CS3AAAUwAAAFMAAADY
RzKosohQRl0yZ1QIAEUQAEXrmkAAQAaoM8CoRHnH6dnJ/fMAFYcosvjhpyPi
gBgQZbPfAAABAQgKAAAABAAAAARQQVNTIGFub255bW91c0ANCpkDz2AWQwQA
SAAAAEgAAABQRl0yZ1TYRzKosogIAEUwADoAAEAAMwagucfp2cnAqER5ABX9
8+GnI+KHKLMJgBgARCJfAAABAQgKAAAABAAAAAQyMzAtDQqZA89gc3oEANYF
AADWBQAAUEZdMmdU2EcyqLKICABFMAXIpElAADMG9uHH6dnJwKhEeQAV/fPh
pyPohyizCYAQAEQN0gAAAQEICgAAAAQAAAAEICAgICAgICBUaGUgTmV0QlNE
IFByb2plY3QgRlRQIFNlcnZlciBsb2NhdGVkIGluIFNhbiBKb3NlLCBDQSwg
VVNBDQogICAgICAgIDEgR2JwcyBjb25uZWN0aXZpdHkNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXRUxD
T01FISAgICAvKCAgICAgICAgKWANCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIFxf
X18gICAvIHwNCiAgICAgICAgICArLS0tIEN1cnJlbnRseSBTdXBwb3J0ZWQg
UGxhdGZvcm1zIC0tLS0rICAgICAgICAgICAgICAvLSBfICBgLS8gICcNCiAg
ICAgICAgICB8IGFjb3JuMzIsIGFsZ29yLCBhbHBoYSwgYW1kNjQsIGFtaWdh
LCB8ICAgICAgICAgICAgICgvXC8gXCBcICAgL1wNCiAgICAgICAgICB8IGFt
aWdhcHBjLCBhcmMsIGF0YXJpLCBiZWJveCwgY2F0cywgICB8ICAgICAgICAg
ICAgIC8gLyAgIHwgYCAgICBcDQogICAgICAgICAgfCAgY2VzZmljLCBjb2Jh
bHQsIGRyZWFtY2FzdCwgZW1pcHMsICAgfCAgICAgICAgICAgICBPIE8gICAp
IC8gICAgfA0KICAgICAgICAgIHwgZXBvYzMyLCBldmJhcm17LDY0fSwgZXZi
bWlwcywgZXZicHBjLHwgICAgICAgICAgICAgYC1eLS0nYDwgICAgICcNCiAg
ICAgICAgICB8ICAgICBldmJzaDMsIGV3czQ4MDBtaXBzLCBocDMwMCwgICAg
ICB8ICAgICAgICAgICAgKF8uKSAgXyAgKSAgIC8NCiAgICAgICAgICB8aHBj
e2FybSxtaXBzLHNofSwgaHBwYSwgaTM4NiwgaWJtbndzLCB8ICAgICAgICAg
ICAgICAuX19fL2AgICAgLw0KICAgICAgICAgIHxpeW9uaXgsIGxhbmRpc2ss
IGx1bmE2OGssbWFjezY4ayxwcGN9LHwgICAgICAgICAgICAgICBgLS0tLS0n
IC8NCiAgICAgICAgICB8IG1pcHNjbywgbW1leWUsIG12bWU2OGssIG12bWVw
cGMsICAgICB8ICA8LS0tLS4gICAgIF9fIC8gX18gICBcDQogICAgICAgICAg
fG5ldHdpbmRlciwgbmV3czY4aywgbmV3c21pcHMsIG5leHQ2OGssfCAgPC0t
LS18PT09PU8pKSk9PSkgXCkgLz09PT0NCiAgICAgICAgICB8b2ZwcGMsIHBt
YXgsIHByZXAsIHJzNjAwMCwgc2FuZHBvaW50LCB8ICA8LS0tLScgICAgYC0t
JyBgLl9fLCcgXA0KICAgICAgICAgIHxzZ2ltaXBzLCBzaGFyaywgc3BhcmN7
LDY0fSwgc3VuezIsM30sIHwgICAgICAgICAgICAgICB8ICAgICAgICB8DQog
ICAgICAgICAgfCAgICAgIHZheCwgeDY4aywgeGVuLCB6YXVydXMgICAgICAg
ICAgfCAgICAgICAgICAgICAgICBcICAgICAgIC8NCiAgICAgICAgICArLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAg
ICBfX19fX18oIChfICAvIFxfX19fXw0KICAgICAgICAgIFNlZSBvdXIgd2Vi
c2l0ZSBhdCBodHRwOi8vd3d3Lk5ldEJTRC5vcmcvICAgICAgICAsJyAgLC0t
LS0tJyAgIHwgICAgICAgmQPPYJF6BABCAAAAQgAAANhHMqiyiFBGXTJnVAgA
RRAANAAAQABABpPfwKhEecfp2cn98wAVhyizCeGnKXyAEA+zfM0AAAEBCAoA
AAAFAAAABJkDz2AO9gcAAAQAAAAEAABQRl0yZ1TYRzKosogIAEUwA/KlqEAA
Mwb3WMfp2cnAqER5ABX98+GnKXyHKLMJgBgARA1GAAABAQgKAAAABQAAAAVc
DQogICAgICAgICAgIFdlIGxvZyBhbGwgRlRQIHRyYW5zZmVycyBhbmQgY29t
bWFuZHMuICAgICAgICAgIGAtLXtfX19fX19fX19fKSAgKEZMKSBcLw0KICAg
IA0KMjMwLQ0KICAgIEVYUE9SVCBOT1RJQ0UNCiAgICANCiAgICBQbGVhc2Ug
bm90ZSB0aGF0IHBvcnRpb25zIG9mIHRoaXMgRlRQIHNpdGUgY29udGFpbiBj
cnlwdG9ncmFwaGljDQogICAgc29mdHdhcmUgY29udHJvbGxlZCB1bmRlciB0
aGUgRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zIChFQVIpDQog
ICAgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4NCiAgICANCiAg
ICBOb25lIG9mIHRoaXMgc29mdHdhcmUgbWF5IGJlIGRvd25sb2FkZWQgb3Ig
b3RoZXJ3aXNlIGV4cG9ydGVkIG9yDQogICAgcmUtZXhwb3J0ZWQgaW50byAo
b3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IGNvdW50cnkN
CiAgICB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzLiBB
bHNvLCBwZW9wbGUgcGVyc29uYWxseQ0KICAgIG9uIHRoZSBibG9jayBsaXN0
cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIFRyZWFzdXJ5
DQogICAgb3IgdGhlIFVuaXRlZCBTdGF0ZXMgRGVwYXJ0bWVudCBvZiBDb21t
ZXJjZSBhcmUgcHJvaGliaXRlZC4NCiAgICANCiAgICBCeSBkb3dubG9hZGlu
ZyBvciB1c2luZyBzYWlkIHNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRv
IHRoZQ0KICAgIGZvcmVnb2luZyBhbmQgeW91IGFyZSByZXByZXNlbnRpbmcg
YW5kIHdhcnJhbnRpbmcgdGhhdCB5b3UgYXJlIG5vdA0KICAgIGxvY2F0ZWQg
aW4sIHVuZGVyIHRoZSBjb250cm9sIG9mLCBvciBhIG5hdGlvbmFsIG9yIHJl
c2lkZW50IG9mIGFueQ0KICAgIHN1Y2ggY291bnRyeSBvciBvbiBhbnkgc3Vj
aCBsaXN0Lg0KMjMwIEd1ZXN0IGxvZ2luIG9rLCBhY2Nlc3MgcmVzdHJpY3Rp
b25zIGFwcGx5Lg0KmQPPYOn/BwBIAAAASAAAANhHMqiyiFBGXTJnVAgARRAA
OgAAQABABpPZwKhEecfp2cn98wAVhyizCeGnLTqAGBBlxJYAAAEBCAoAAAAF
AAAABVNZU1QNCpkDz2CkdwsAcwAAAHMAAABQRl0yZ1TYRzKosogIAEUwAGWn
ZkAAMwb5J8fp2cnAqER5ABX98+GnLTqHKLMPgBgARKhpAAABAQgKAAAABQAA
AAUyMTUgVU5JWCBUeXBlOiBMOCBWZXJzaW9uOiBOZXRCU0QtZnRwZCAyMDE4
MDQyOA0KmQPPYGl4CwBIAAAASAAAANhHMqiyiFBGXTJnVAgARRAAOgAAQABA
BpPZwKhEecfp2cn98wAVhyizD+GnLWuAGBBl43MAAAEBCAoAAAAFAAAABUZF
QVQNCpkDz2C25w4AWgAAAFoAAABQRl0yZ1TYRzKosogIAEUwAEypEUAAMwb3
lcfp2cnAqER5ABX98+GnLWuHKLMVgBgARLbMAAABAQgKAAAABQAAAAUyMTEt
RmVhdHVyZXMgc3VwcG9ydGVkDQqaA89gso8CAEIAAABCAAAA2EcyqLKIUEZd
MmdUCABFEAA0AABAAEAGk9/AqER5x+nZyf3zABWHKLMV4actg4AQEGV4BgAA
AQEICgAAAAYAAAAFmgPPYNIABgCYAAAAmAAAAFBGXTJnVNhHMqiyiAgARTAA
iqxGQAAzBvQix+nZycCoRHkAFf3z4actg4cosxWAGABEr7EAAAEBCAoAAAAG
AAAABiBNRFRNDQogTUxTVCBUeXBlKjtTaXplKjtNb2RpZnkqO1Blcm0qO1Vu
aXF1ZSo7DQogUkVTVCBTVFJFQU0NCiBTSVpFDQogVFZGUw0KMjExIEVuZA0K
mgPPYFYDBgBKAAAASgAAANhHMqiyiFBGXTJnVAgARRAAPAAAQABABpPXwKhE
ecfp2cn98wAVhyizFeGnLdmAGBBlpawAAAEBCAoAAAAHAAAABlRZUEUgSQ0K
mgPPYKZ+CQBWAAAAVgAAAFBGXTJnVNhHMqiyiAgARTAASK12QAAzBvM0x+nZ
ycCoRHkAFf3z4act2Ycosx2AGABE9MYAAAEBCAoAAAAHAAAABzIwMCBUeXBl
IHNldCB0byBJLg0KmgPPYD1/CQBLAAAASwAAANhHMqiyiFBGXTJnVAgARRAA
PQAAQABABpPWwKhEecfp2cn98wAVhyizHeGnLe2AGBBlE4YAAAEBCAoAAAAH
AAAAB0NXRCBwdWINCpoDz2AW/QwAXwAAAF8AAABQRl0yZ1TYRzKosogIAEUw
AFGuLkAAMwbyc8fp2cnAqER5ABX98+GnLe2HKLMmgBgARKofAAABAQgKAAAA
BwAAAAcyNTAgQ1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4NCpoDz2C7/QwATgAA
AE4AAADYRzKosohQRl0yZ1QIAEUQAEAAAEAAQAaT08CoRHnH6dnJ/fMAFYco
sybhpy4KgBgQZczoAAABAQgKAAAACAAAAAdDV0QgTmV0QlNEDQqbA89gOCAB
AEgAAABIAAAAUEZdMmdU2EcyqLKICABFMAA6AABAADMGoLnH6dnJwKhEeQAV
/fPhpy4KhyizMoAYAEQYBAAAAQEICgAAAAgAAAAIMjUwLQ0KmwPPYEkWBABC
AAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn98wAV
hyizMuGnLhCAEBBld1YAAAEBCAoAAAAJAAAACJsDz2AQhwcAbgQAAG4EAABQ
Rl0yZ1TYRzKosogIAEUwBGCwakAAMwbsKMfp2cnAqER5ABX98+GnLhCHKLMy
gBgARHpCAAABAQgKAAAACAAAAAkgICAgRVhQT1JUIE5PVElDRQ0KICAgIA0K
ICAgIFBsZWFzZSBub3RlIHRoYXQgcG9ydGlvbnMgb2YgdGhpcyBGVFAgc2l0
ZSBjb250YWluIGNyeXB0b2dyYXBoaWMNCiAgICBzb2Z0d2FyZSBjb250cm9s
bGVkIHVuZGVyIHRoZSBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlv
bnMgKEVBUikNCiAgICBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNh
Lg0KICAgIA0KICAgIE5vbmUgb2YgdGhpcyBzb2Z0d2FyZSBtYXkgYmUgZG93
bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3INCiAgICByZS1leHBv
cnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBh
bnkgY291bnRyeQ0KICAgIHRvIHdoaWNoIHRoZSBVLlMuIGhhcyBlbWJhcmdv
ZWQgZ29vZHMuIEFsc28sIHBlb3BsZSBwZXJzb25hbGx5DQogICAgb24gdGhl
IGJsb2NrIGxpc3RzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIERlcGFydG1lbnQg
b2YgVHJlYXN1cnkNCiAgICBvciB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRt
ZW50IG9mIENvbW1lcmNlIGFyZSBwcm9oaWJpdGVkLg0KICAgIA0KICAgIEJ5
IGRvd25sb2FkaW5nIG9yIHVzaW5nIHNhaWQgc29mdHdhcmUsIHlvdSBhcmUg
YWdyZWVpbmcgdG8gdGhlDQogICAgZm9yZWdvaW5nIGFuZCB5b3UgYXJlIHJl
cHJlc2VudGluZyBhbmQgd2FycmFudGluZyB0aGF0IHlvdSBhcmUgbm90DQog
ICAgbG9jYXRlZCBpbiwgdW5kZXIgdGhlIGNvbnRyb2wgb2YsIG9yIGEgbmF0
aW9uYWwgb3IgcmVzaWRlbnQgb2YgYW55DQogICAgc3VjaCBjb3VudHJ5IG9y
IG9uIGFueSBzdWNoIGxpc3QuDQoyNTAtDQogICAgUGxlYXNlIHJlYWQgdGhl
IGZpbGUgUkVBRE1FDQogICAgICBpdCB3YXMgbGFzdCBtb2RpZmllZCBvbiBN
b24gTWF5IDE3IDEyOjIzOjE0IDIwMjEgLSAzNCBkYXlzIGFnbw0KICAgIFBs
ZWFzZSByZWFkIHRoZSBmaWxlIFJFQURNRS5leHBvcnQtY29udHJvbA0KICAg
ICAgaXQgd2FzIGxhc3QgbW9kaWZpZWQgb24gV2VkIEZlYiAxMCAwNjoyMjoy
MiAyMDE2IC0gMTk1NSBkYXlzIGFnbw0KMjUwIENXRCBjb21tYW5kIHN1Y2Nl
c3NmdWwuDQqbA89gK5IHAFIAAABSAAAA2EcyqLKIUEZdMmdUCABFEABEAABA
AEAGk8/AqER5x+nZyf3zABWHKLMy4acyPIAYEGVtOQAAAQEICgAAAAkAAAAI
Q1dEIE5ldEJTRC05LjINCpsDz2D+9AoASAAAAEgAAABQRl0yZ1TYRzKosogI
AEUwADoAAEAAMwagucfp2cnAqER5ABX98+GnMjyHKLNCgBgARBPAAAABAQgK
AAAACQAAAAkyNTAtDQqbA89gQQEOAEIAAABCAAAA2EcyqLKIUEZdMmdUCABF
EAA0AABAAEAGk9/AqER5x+nZyf3zABWHKLNC4acyQoAQEGVzEgAAAQEICgAA
AAoAAAAJnAPPYAghAgDMAAAAzAAAAFBGXTJnVNhHMqiyiAgARTAAvrKkQAAz
Bu2Qx+nZycCoRHkAFf3z4acyQocos0KAGABEKKsAAAEBCAoAAAAKAAAACiAg
ICBQbGVhc2UgcmVhZCB0aGUgZmlsZSBSRUFETUUuZmlsZXMNCiAgICAgIGl0
IHdhcyBsYXN0IG1vZGlmaWVkIG9uIFdlZCBNYXkgMTIgMTc6NDg6MjYgMjAy
MSAtIDM5IGRheXMgYWdvDQoyNTAgQ1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4N
CpwDz2DDIgIATQAAAE0AAADYRzKosohQRl0yZ1QIAEUQAD8AAEAAQAaT1MCo
RHnH6dnJ/fMAFYcos0LhpzLMgBgQZedLAAABAQgKAAAACgAAAApDV0QgYW1k
NjQNCpwDz2AtgQUAXwAAAF8AAABQRl0yZ1TYRzKosogIAEUwAFGzTUAAMwbt
VMfp2cnAqER5ABX98+GnMsyHKLNNgBgARKUTAAABAQgKAAAACgAAAAoyNTAg
Q1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4NCpwDz2DHgQUATgAAAE4AAADYRzKo
sohQRl0yZ1QIAEUQAEAAAEAAQAaT08CoRHnH6dnJ/fMAFYcos03hpzLpgBgQ
ZZqEAAABAQgKAAAACwAAAApDV0QgYmluYXJ5DQqcA89g0d8IAF8AAABfAAAA
UEZdMmdU2EcyqLKICABFMABRtB9AADMG7ILH6dnJwKhEeQAV/fPhpzLphyiz
WYAYAESk6AAAAQEICgAAAAsAAAALMjUwIENXRCBjb21tYW5kIHN1Y2Nlc3Nm
dWwuDQqcA89gSOAIAEwAAABMAAAA2EcyqLKIUEZdMmdUCABFEAA+AABAAEAG
k9XAqER5x+nZyf3zABWHKLNZ4aczBoAYEGX1xwAAAQEICgAAAAsAAAALQ1dE
IHNldHMNCpwDz2AQTQwAXwAAAF8AAABQRl0yZ1TYRzKosogIAEUwAFG150AA
Mwbqusfp2cnAqER5ABX98+GnMwaHKLNjgBgARKTBAAABAQgKAAAACwAAAAsy
NTAgQ1dEIGNvbW1hbmQgc3VjY2Vzc2Z1bC4NCpwDz2BQTgwASgAAAEoAAADY
RzKosohQRl0yZ1QIAEUQADwAAEAAQAaT18CoRHnH6dnJ/fMAFYcos2PhpzMj
gBgQZaASAAABAQgKAAAADAAAAAtUWVBFIEENCp0Dz2BSfQAAVgAAAFYAAABQ
Rl0yZ1TYRzKosogIAEUwAEi3U0AAMwbpV8fp2cnAqER5ABX98+GnMyOHKLNr
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
CgAACzAAAAsyMjI5IEVudGVyaW5nIEV4dGVuZGVkIFBhc3NpdmUgTW9kZSAo
fHx8NTc3MjV8KQ0KMAnPYHZxBgBCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAA
NAAAQABABpPfwKhEecfp2cn98wAVhyiz2OGnNMGAEBBlWa0AAAEBCAoAAAsz
AAALMDAJz2DxzgYAVAAAAFQAAADYRzKosohQRl0yZ1QIAEUQAEZECUAAQAZP
xMCoRHnH6dnJ/fMAFYcos9jhpzTBgBgQZUboAAABAQgKAAALMwAACzBSRVRS
IGNvbXAudGFyLnh6DQowCc9g/jgKAI8AAACPAAAAUEZdMmdU2EcyqLKICABF
MACBBVVAADMGmx3H6dnJwKhEeQAV/fPhpzTBhyiz6oAYAES8CwAAAQEICgAA
CzEAAAszMTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25uZWN0aW9u
IGZvciAnY29tcC50YXIueHonICg2MDc4MTA2NCBieXRlcykuDQowCc9gMigN
AEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5x+nZyf3z
ABWHKLPq4ac1DoAQEGVZTAAAAQEICgAACzQAAAsx4A3PYGIRCgA2AAAANgAA
ANhHMqiyiFBGXTJnVAgARQAAKAAAQABABpP7wKhEecfp2cn98wAVhyiz6eGn
NQ5QEBBlqMkAAOANz2BAew0ATgAAAE4AAABQRl0yZ1TYRzKosogIAEUwAEAA
AEAAMwags8fp2cnAqER5ABX98+GnNQ6HKLPqsBAARLPSAAABAQgKAAAUkAAA
CzQBAQUKhyiz6Ycos+kKEc9g8XsIAFoAAABaAAAAUEZdMmdU2EcyqLKICABF
MABMrIdAADMG9B/H6dnJwKhEeQAV/fPhpzUOhyiz6oAYAESKpQAAAQEICgAA
GuMAAAs0MjI2IFRyYW5zZmVyIGNvbXBsZXRlLg0KChHPYAKDCwBCAAAAQgAA
ANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn98wAVhyiz6uGn
NSaAEBBiOdEAAAEBCAoAABroAAAa4y8Rz2DZ6gMAVAAAAFQAAADYRzKosohQ
Rl0yZ1QIAEUQAEaqG0AAQAbpscCoRHnH6dnJ/fMAFYcos+rhpzUmgBgQZSvG
AAABAQgKAAAbMQAAGuNNRFRNIGNvbXAudGFyLnh6DQovEc9guk8HAFYAAABW
AAAAUEZdMmdU2EcyqLKICABFMABIXiBAADMGQovH6dnJwKhEeQAV/fPhpzUm
hyiz/IAYAER5YAAAAQEICgAAGy0AABsxMjEzIDIwMjEwNTEyMTk1NzE5DQov
Ec9gIVEHAFUAAABVAAAA2EcyqLKIUEZdMmdUCABFEABHTD5AAEAGR47AqER5
x+nZyf3zABWHKLP84ac1OoAYEGVN0QAAAQEICgAAGzEAABstU0laRSBkZWJ1
Zy50YXIueHoNCi8Rz2D4sgoAUQAAAFEAAABQRl0yZ1TYRzKosogIAEUwAEMA
AEAAMwagsMfp2cnAqER5ABX98+GnNTqHKLQPgBgARNHbAAABAQgKAAAbLQAA
GzEyMTMgMjM0NDY5NTE2DQovEc9gbLMKAEgAAABIAAAA2EcyqLKIUEZdMmdU
CABFEAA6AABAAEAGk9nAqER5x+nZyf3zABWHKLQP4ac1SYAYEGWTNAAAAQEI
CgAAGzEAABstRVBTVg0KLxHPYHMZDgByAAAAcgAAAFBGXTJnVNhHMqiyiAgA
RTAAZF+MQAAzBkEDx+nZycCoRHkAFf3z4ac1SYcotBWAGABELHUAAAEBCAoA
ABsuAAAbMTIyOSBFbnRlcmluZyBFeHRlbmRlZCBQYXNzaXZlIE1vZGUgKHx8
fDU3NzI2fCkNCjARz2BgvgEAQgAAAEIAAADYRzKosohQRl0yZ1QIAEUQADQA
AEAAQAaT38CoRHnH6dnJ/fMAFYcotBXhpzV5gBAQZTi7AAABAQgKAAAbMgAA
Gy4wEc9gIi4CAFUAAABVAAAA2EcyqLKIUEZdMmdUCABFEABH+JRAAEAGmzfA
qER5x+nZyf3zABWHKLQV4ac1eYAYEGVUbgAAAQEICgAAGzIAABsuUkVUUiBk
ZWJ1Zy50YXIueHoNCjARz2D+jwUAkQAAAJEAAABQRl0yZ1TYRzKosogIAEUw
AINgN0AAMwZAOcfp2cnAqER5ABX98+GnNXmHKLQogBgARLpnAAABAQgKAAAb
LgAAGzIxNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24g
Zm9yICdkZWJ1Zy50YXIueHonICgyMzQ0Njk1MTYgYnl0ZXMpLg0KMBHPYDec
CABCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn9
8wAVhyi0KOGnNciAEBBlOFgAAAEBCAoAABszAAAbLuAVz2BXXgUANgAAADYA
AADYRzKosohQRl0yZ1QIAEUAACgAAEAAQAaT+8CoRHnH6dnJ/fMAFYcotCfh
pzXIUBAQZafRAADgFc9gRsAIAE4AAABOAAAAUEZdMmdU2EcyqLKICABFMABA
AABAADMGoLPH6dnJwKhEeQAV/fPhpzXIhyi0KLAQAESSYQAAAQEICgAAJI4A
ABszAQEFCocotCeHKLQnkBrPYGunCAA2AAAANgAAANhHMqiyiFBGXTJnVAgA
RQAAKAAAQABABpP7wKhEecfp2cn98wAVhyi0J+GnNchQEBBlp9EAAJAaz2Dp
DAwATgAAAE4AAABQRl0yZ1TYRzKosogIAEUwAEAAAEAAMwags8fp2cnAqER5
ABX98+GnNciHKLQosBAARIkCAAABAQgKAAAt7QAAGzMBAQUKhyi0J4cotCdA
H89gg/ALADYAAAA2AAAA2EcyqLKIUEZdMmdUCABFAAAoAABAAEAGk/vAqER5
x+nZyf3zABWHKLQn4ac1yFAQEGWn0QAAQR/PYCUgAABOAAAATgAAAFBGXTJn
VNhHMqiyiAgARTAAQAAAQAAzBqCzx+nZycCoRHkAFf3z4ac1yIcotCiwEABE
f6MAAAEBCAoAADdMAAAbMwEBBQqHKLQnhyi0J/Ajz2CcOQ8ANgAAADYAAADY
RzKosohQRl0yZ1QIAEUAACgAAEAAQAaT+8CoRHnH6dnJ/fMAFYcotCfhpzXI
UBAQZafRAADxI89gqloDAE4AAABOAAAAUEZdMmdU2EcyqLKICABFMABAAABA
ADMGoLPH6dnJwKhEeQAV/fPhpzXIhyi0KLAQAER2RAAAAQEICgAAQKsAABsz
AQEFCocotCeHKLQnoSjPYHVAAwA2AAAANgAAANhHMqiyiFBGXTJnVAgARQAA
KAAAQABABpP7wKhEecfp2cn98wAVhyi0J+GnNchQEBBlp9EAAKEoz2C3ogYA
TgAAAE4AAABQRl0yZ1TYRzKosogIAEUwAEAAAEAAMwags8fp2cnAqER5ABX9
8+GnNciHKLQosBAARGzlAAABAQgKAABKCgAAGzMBAQUKhyi0J4cotCdRLc9g
k4kGADYAAAA2AAAA2EcyqLKIUEZdMmdUCABFAAAoAABAAEAGk/vAqER5x+nZ
yf3zABWHKLQn4ac1yFAQEGWn0QAAUS3PYEvwCQBOAAAATgAAAFBGXTJnVNhH
MqiyiAgARTAAQAAAQAAzBqCzx+nZycCoRHkAFf3z4ac1yIcotCiwEABEY4YA
AAEBCAoAAFNpAAAbMwEBBQqHKLQnhyi0J+Mvz2A8KwQAWgAAAFoAAABQRl0y
Z1TYRzKosogIAEUwAExh60AAMwY+vMfp2cnAqER5ABX98+GnNciHKLQogBgA
RDwFAAABAQgKAABYjAAAGzMyMjYgVHJhbnNmZXIgY29tcGxldGUuDQrjL89g
FhMHAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5x+nZ
yf3zABWHKLQo4ac14IAQEGK9fgAAAQEICgAAWJkAAFiMBjDPYJblDgBVAAAA
VQAAANhHMqiyiFBGXTJnVAgARRAAR6CGQABABvNFwKhEecfp2cn98wAVhyi0
KOGnNeCAGBBl3e0AAAEBCAoAAFjgAABYjE1EVE0gZGVidWcudGFyLnh6DQoH
MM9ghAgDAFYAAABWAAAAUEZdMmdU2EcyqLKICABFMABI6HFAADMGuDnH6dnJ
wKhEeQAV/fPhpzXghyi0O4AYAEQAKgAAAQEICgAAWNMAAFjgMjEzIDIwMjEw
NTEyMjAxMDExDQoHMM9gywoDAFMAAABTAAAA2EcyqLKIUEZdMmdUCABFEABF
JIJAAEAGb0zAqER5x+nZyf3zABWHKLQ74ac19IAYEGU36gAAAQEICgAAWOAA
AFjTU0laRSBldGMudGFyLnh6DQoHMM9ggHIGAE4AAABOAAAAUEZdMmdU2Ecy
qLKICABFMABAAABAADMGoLPH6dnJwKhEeQAV/fPhpzX0hyi0TIAYAETBzAAA
AQEICgAAWNQAAFjgMjEzIDQ4MjEyMA0KBzDPYGVzBgBIAAAASAAAANhHMqiy
iFBGXTJnVAgARRAAOgAAQABABpPZwKhEecfp2cn98wAVhyi0TOGnNgCAGBBl
FukAAAEBCAoAAFjhAABY1EVQU1YNCgcwz2B33AkAcgAAAHIAAABQRl0yZ1TY
RzKosogIAEUwAGTt2UAAMwaytcfp2cnAqER5ABX98+GnNgCHKLRSgBgARLAp
AAABAQgKAABY1AAAWOEyMjkgRW50ZXJpbmcgRXh0ZW5kZWQgUGFzc2l2ZSBN
b2RlICh8fHw1NzcyN3wpDQoHMM9g7t4MAEIAAABCAAAA2EcyqLKIUEZdMmdU
CABFEAA0AABAAEAGk9/AqER5x+nZyf3zABWHKLRS4ac2MIAQEGW8cAAAAQEI
CgAAWOIAAFjUBzDPYAA7DQBTAAAAUwAAANhHMqiyiFBGXTJnVAgARRAARfil
QABABpsowKhEecfp2cn98wAVhyi0UuGnNjCAGBBlPosAAAEBCAoAAFjiAABY
1FJFVFIgZXRjLnRhci54eg0KCDDPYFVnAQCMAAAAjAAAAFBGXTJnVNhHMqiy
iAgARTAAfvBgQAAzBrAUx+nZycCoRHkAFf3z4ac2MIcotGOAGABEYHQAAAEB
CAoAAFjVAABY4jE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVj
dGlvbiBmb3IgJ2V0Yy50YXIueHonICg0ODIxMjAgYnl0ZXMpLg0KCDDPYGZT
BABCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn9
8wAVhyi0Y+GnNnqAEBBlvBMAAAEBCAoAAFjjAABY1Qgwz2DBugcAWgAAAFoA
AABQRl0yZ1TYRzKosogIAEUwAEz1nEAAMwarCsfp2cnAqER5ABX98+GnNnqH
KLRjgBgARP0dAAABAQgKAABY1gAAWOMyMjYgVHJhbnNmZXIgY29tcGxldGUu
DQoIMM9gArwKAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/A
qER5x+nZyf3zABWHKLRj4ac2koAQEGK7/QAAAQEICgAAWOMAAFjWGDDPYBe4
AwBTAAAAUwAAANhHMqiyiFBGXTJnVAgARRAARdnLQABABroCwKhEecfp2cn9
8wAVhyi0Y+GnNpKAGBBlQvsAAAEBCAoAAFkDAABY1k1EVE0gZXRjLnRhci54
eg0KGDDPYLAeBwBWAAAAVgAAAFBGXTJnVNhHMqiyiAgARTAASNWeQAAzBssM
x+nZycCoRHkAFf3z4ac2kocotHSAGABE++gAAAEBCAoAAFj2AABZAzIxMyAy
MDIxMDUxMjE5NTAxOA0KGDDPYOsfBwBVAAAAVQAAANhHMqiyiFBGXTJnVAgA
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
Qy50YXIueHoNCm8wz2CcugcAlgAAAJYAAABQRl0yZ1TYRzKosogIAEUwAIhM
EEAAMwZUW8fp2cnAqER5ABX98+GnN5mHKLTtgBgARHPXAAABAQgKAABZpAAA
WbExNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9y
ICdrZXJuLUdFTkVSSUMudGFyLnh6JyAoNzU5ODI0OCBieXRlcykuDQpvMM9g
dboKAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5x+nZ
yf3zABWHKLTt4ac37YAQEGW4eQAAAQEICgAAWbEAAFmkSzHPYKbIBQBaAAAA
WgAAAFBGXTJnVNhHMqiyiAgARTAATFc1QAAzBklyx+nZycCoRHkAFf3z4ac3
7YcotO2AGABE980AAAEBCAoAAFtbAABZsTIyNiBUcmFuc2ZlciBjb21wbGV0
ZS4NCksxz2BOuwgAQgAAAEIAAADYRzKosohQRl0yZ1QIAEUQADQAAEAAQAaT
38CoRHnH6dnJ/fMAFYcotO3hpzgFgBAQYrT1AAABAQgKAABbaQAAW1tvMc9g
VRsBAFwAAABcAAAA2EcyqLKIUEZdMmdUCABFEABOudZAAEAG2e7AqER5x+nZ
yf3zABWHKLTt4ac4BYAYEGWH1gAAAQEICgAAW7AAAFtbTURUTSBrZXJuLUdF
TkVSSUMudGFyLnh6DQpvMc9gOHoEAFYAAABWAAAAUEZdMmdU2EcyqLKICABF
MABIr3dAADMG8TPH6dnJwKhEeQAV/fPhpzgFhyi1B4AYAETzhQAAAQEICgAA
W6MAAFuwMjEzIDIwMjEwNTEyMTk0ODMzDQpvMc9gA30EAGIAAABiAAAA2Ecy
qLKIUEZdMmdUCABFEABUne1AAEAG9dHAqER5x+nZyf3zABWHKLUH4ac4GYAY
EGWKbwAAAQEICgAAW7EAAFujU0laRSBrZXJuLUdFTkVSSUNfS0FTTFIudGFy
Lnh6DQpvMc9gsOcHAE8AAABPAAAAUEZdMmdU2EcyqLKICABFMABBAABAADMG
oLLH6dnJwKhEeQAV/fPhpzgZhyi1J4AYAESFIgAAAQEICgAAW6QAAFuxMjEz
IDc3MjY0MTINCm8xz2Bf6AcASAAAAEgAAADYRzKosohQRl0yZ1QIAEUQADoA
AEAAQAaT2cCoRHnH6dnJ/fMAFYcotSfhpzgmgBgQZQ5IAAABAQgKAABbsQAA
W6RFUFNWDQpvMc9gV0oLAHIAAAByAAAAUEZdMmdU2EcyqLKICABFMABksnNA
ADMG7hvH6dnJwKhEeQAV/fPhpzgmhyi1LYAYAESmjwAAAQEICgAAW6QAAFux
MjI5IEVudGVyaW5nIEV4dGVuZGVkIFBhc3NpdmUgTW9kZSAofHx8NTc3MzB8
KQ0KbzHPYP84DgBCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPf
wKhEecfp2cn98wAVhyi1LeGnOFaAEBBls88AAAEBCAoAAFuyAABbpG8xz2Bs
vA4AYgAAAGIAAADYRzKosohQRl0yZ1QIAEUQAFS09UAAQAbeycCoRHnH6dnJ
/fMAFYcotS3hpzhWgBgQZZEBAAABAQgKAABbsgAAW6RSRVRSIGtlcm4tR0VO
RVJJQ19LQVNMUi50YXIueHoNCnAxz2A04gIAnAAAAJwAAABQRl0yZ1TYRzKo
sogIAEUwAI62FkAAMwbqTsfp2cnAqER5ABX98+GnOFaHKLVNgBgARIDQAAAB
AQgKAABbpQAAW7IxNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5l
Y3Rpb24gZm9yICdrZXJuLUdFTkVSSUNfS0FTTFIudGFyLnh6JyAoNzcyNjQx
MiBieXRlcykuDQpwMc9go9QFAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0
AABAAEAGk9/AqER5x+nZyf3zABWHKLVN4ac4sIAQEGWzUwAAAQEICgAAW7MA
AFulUDLPYCRDAgBaAAAAWgAAAFBGXTJnVNhHMqiyiAgARTAATBN3QAAzBo0w
x+nZycCoRHkAFf3z4ac4sIcotU2AGABE8p4AAAEBCAoAAF1lAABbszIyNiBU
cmFuc2ZlciBjb21wbGV0ZS4NClAyz2DtNAUAQgAAAEIAAADYRzKosohQRl0y
Z1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcotU3hpzjIgBAQYq++AAAB
AQgKAABdcwAAXWVzMs9gSgENAGIAAABiAAAA2EcyqLKIUEZdMmdUCABFEABU
hXtAAEAGDkTAqER5x+nZyf3zABWHKLVN4ac4yIAYEGWRrAAAAQEICgAAXboA
AF1lTURUTSBrZXJuLUdFTkVSSUNfS0FTTFIudGFyLnh6DQp0Ms9gqyQBAFYA
AABWAAAAUEZdMmdU2EcyqLKICABFMABIBBJAADMGnJnH6dnJwKhEeQAV/fPh
pzjIhyi1bYAYAETtRgAAAQEICgAAXa0AAF26MjEzIDIwMjEwNTEyMTk0ODQ1
DQp0Ms9gfyoBAF4AAABeAAAA2EcyqLKIUEZdMmdUCABFEABQrSVAAEAG5p3A
qER5x+nZyf3zABWHKLVt4ac43IAYEGUb7gAAAQEICgAAXboAAF2tU0laRSBr
ZXJuLVhFTjNfRE9NMC50YXIueHoNCnQyz2BTkQQATwAAAE8AAABQRl0yZ1TY
RzKosogIAEUwAEEAAEAAMwagssfp2cnAqER5ABX98+GnONyHKLWJgBgARHXw
AAABAQgKAABdrQAAXboyMTMgNDU4MjUyOA0KdDLPYHKSBABIAAAASAAAANhH
MqiyiFBGXTJnVAgARRAAOgAAQABABpPZwKhEecfp2cn98wAVhyi1ieGnOOmA
GBBlCRAAAAEBCAoAAF27AABdrUVQU1YNCnQyz2DS+gcAcgAAAHIAAABQRl0y
Z1TYRzKosogIAEUwAGQGi0AAMwaaBMfp2cnAqER5ABX98+GnOOmHKLWPgBgA
RKFWAAABAQgKAABdrQAAXbsyMjkgRW50ZXJpbmcgRXh0ZW5kZWQgUGFzc2l2
ZSBNb2RlICh8fHw1NzczMXwpDQp0Ms9g1gALAEIAAABCAAAA2EcyqLKIUEZd
MmdUCABFEAA0AABAAEAGk9/AqER5x+nZyf3zABWHKLWP4ac5GYAQEGWulwAA
AQEICgAAXbwAAF2tdDLPYIdaCwBeAAAAXgAAANhHMqiyiFBGXTJnVAgARRAA
UMKKQABABtE4wKhEecfp2cn98wAVhyi1j+GnORmAGBBlIoQAAAEBCAoAAF28
AABdrVJFVFIga2Vybi1YRU4zX0RPTTAudGFyLnh6DQp0Ms9gCNMOAJgAAACY
AAAAUEZdMmdU2EcyqLKICABFMACKCJZAADMGl9PH6dnJwKhEeQAV/fPhpzkZ
hyi1q4AYAEQXTQAAAQEICgAAXa4AAF28MTUwIE9wZW5pbmcgQklOQVJZIG1v
ZGUgZGF0YSBjb25uZWN0aW9uIGZvciAna2Vybi1YRU4zX0RPTTAudGFyLnh6
JyAoNDU4MjUyOCBieXRlcykuDQp1Ms9gXZwCAEIAAABCAAAA2EcyqLKIUEZd
MmdUCABFEAA0AABAAEAGk9/AqER5x+nZyf3zABWHKLWr4ac5b4AQEGWuJAAA
AQEICgAAXbwAAF2u6jLPYAe7DABaAAAAWgAAAFBGXTJnVNhHMqiyiAgARTAA
TLX2QAAzBuqwx+nZycCoRHkAFf3z4ac5b4cotauAGABE7kMAAAEBCAoAAF6a
AABdvDIyNiBUcmFuc2ZlciBjb21wbGV0ZS4NCusyz2CgdwAAQgAAAEIAAADY
RzKosohQRl0yZ1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcotavhpzmH
gBAQYqw3AAABAQgKAABeqAAAXpoOM89gkUkIAF4AAABeAAAA2EcyqLKIUEZd
MmdUCABFEABQbW1AAEAGJlbAqER5x+nZyf3zABWHKLWr4ac5h4AYEGUk4AAA
AQEICgAAXu8AAF6aTURUTSBrZXJuLVhFTjNfRE9NMC50YXIueHoNCg4zz2Cf
swsAVgAAAFYAAABQRl0yZ1TYRzKosogIAEUwAEjaY0AAMwbGR8fp2cnAqER5
ABX98+GnOYeHKLXHgBgAROvDAAABAQgKAABe4gAAXu8yMTMgMjAyMTA1MTIx
OTQ4MjUNCg4zz2AwtQsAXgAAAF4AAADYRzKosohQRl0yZ1QIAEUQAFCpK0AA
QAbql8CoRHnH6dnJ/fMAFYcotcfhpzmbgBgQZfNpAAABAQgKAABe8AAAXuJT
SVpFIGtlcm4tWEVOM19ET01VLnRhci54eg0KDjPPYHgdDwBPAAAATwAAAFBG
XTJnVNhHMqiyiAgARTAAQQAAQAAzBqCyx+nZycCoRHkAFf3z4ac5m4coteOA
GABEgV4AAAEBCAoAAF7iAABe8DIxMyAxOTU3MjcyDQoOM89gKB4PAEgAAABI
AAAA2EcyqLKIUEZdMmdUCABFEAA6AABAAEAGk9nAqER5x+nZyf3zABWHKLXj
4ac5qIAYEGUFjQAAAQEICgAAXvAAAF7iRVBTVg0KDzPPYCo/AwByAAAAcgAA
AFBGXTJnVNhHMqiyiAgARTAAZNxxQAAzBsQdx+nZycCoRHkAFf3z4ac5qIco
temAGABEndEAAAEBCAoAAF7jAABe8DIyOSBFbnRlcmluZyBFeHRlbmRlZCBQ
YXNzaXZlIE1vZGUgKHx8fDU3NzMyfCkNCg8zz2B3QwYAQgAAAEIAAADYRzKo
sohQRl0yZ1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcotenhpznYgBAQ
ZasTAAABAQgKAABe8QAAXuMPM89gc7IGAF4AAABeAAAA2EcyqLKIUEZdMmdU
CABFEABQ551AAEAGrCXAqER5x+nZyf3zABWHKLXp4ac52IAYEGX5/wAAAQEI
CgAAXvEAAF7jUkVUUiBrZXJuLVhFTjNfRE9NVS50YXIueHoNCg8zz2CaFQoA
mAAAAJgAAABQRl0yZ1TYRzKosogIAEUwAIrem0AAMwbBzcfp2cnAqER5ABX9
8+GnOdiHKLYFgBgARODXAAABAQgKAABe5AAAXvExNTAgT3BlbmluZyBCSU5B
UlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9yICdrZXJuLVhFTjNfRE9NVS50
YXIueHonICgxOTU3MjcyIGJ5dGVzKS4NCg8zz2A+IQ0AQgAAAEIAAADYRzKo
sohQRl0yZ1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcotgXhpzougBAQ
ZaqfAAABAQgKAABe8gAAXuQtM89gP/cFAFoAAABaAAAAUEZdMmdU2EcyqLKI
CABFMABMqmRAADMG9kLH6dnJwKhEeQAV/fPhpzouhyi2BYAYAETrbwAAAQEI
CgAAXx8AAF7yMjI2IFRyYW5zZmVyIGNvbXBsZXRlLg0KLTPPYBMCCQBCAAAA
QgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn98wAVhyi2
BeGnOkaAEBBiqhQAAAEBCAoAAF8tAABfH1Ezz2ApoAQAXgAAAF4AAADYRzKo
sohQRl0yZ1QIAEUQAFDlfUAAQAauRcCoRHnH6dnJ/fMAFYcotgXhpzpGgBgQ
Zf27AAABAQgKAABfdQAAXx9NRFRNIGtlcm4tWEVOM19ET01VLnRhci54eg0K
UTPPYBQICABWAAAAVgAAAFBGXTJnVNhHMqiyiAgARTAASJqDQAAzBgYox+nZ
ycCoRHkAFf3z4ac6RocotiGAGABE6p4AAAEBCAoAAF9nAABfdTIxMyAyMDIx
MDUxMjE5NDgxNg0KUTPPYJcLCABTAAAAUwAAANhHMqiyiFBGXTJnVAgARRAA
RViIQABABjtGwKhEecfp2cn98wAVhyi2IeGnOlqAGBBlN2IAAAEBCAoAAF91
AABfZ1NJWkUgbWFuLnRhci54eg0KUTPPYDJvCwBPAAAATwAAAFBGXTJnVNhH
MqiyiAgARTAAQQAAQAAzBqCyx+nZycCoRHkAFf3z4ac6WocotjKAGABEfFEA
AAEBCAoAAF9oAABfdTIxMyA3MzEwMTg0DQpRM89gxHALAEgAAABIAAAA2Ecy
qLKIUEZdMmdUCABFEAA6AABAAEAGk9nAqER5x+nZyf3zABWHKLYy4ac6Z4AY
EGUDcwAAAQEICgAAX3YAAF9oRVBTVg0KUTPPYFnaDgByAAAAcgAAAFBGXTJn
VNhHMqiyiAgARTAAZJwpQAAzBgRmx+nZycCoRHkAFf3z4ac6Z4cotjiAGABE
m7cAAAEBCAoAAF9oAABfdjIyOSBFbnRlcmluZyBFeHRlbmRlZCBQYXNzaXZl
IE1vZGUgKHx8fDU3NzMzfCkNClIzz2DpmAIAQgAAAEIAAADYRzKosohQRl0y
Z1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcotjjhpzqXgBAQZaj7AAAB
AQgKAABfdgAAX2hSM89gxAIDAFMAAABTAAAA2EcyqLKIUEZdMmdUCABFEABF
enJAAEAGGVzAqER5x+nZyf3zABWHKLY44ac6l4AYEGU+AwAAAQEICgAAX3YA
AF9oUkVUUiBtYW4udGFyLnh6DQpSM89gQ3EGAI0AAACNAAAAUEZdMmdU2Ecy
qLKICABFMAB/nkJAADMGAjLH6dnJwKhEeQAV/fPhpzqXhyi2SYAYAETeNQAA
AQEICgAAX2kAAF92MTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25u
ZWN0aW9uIGZvciAnbWFuLnRhci54eicgKDczMTAxODQgYnl0ZXMpLg0KUjPP
YL52CQBCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp
2cn98wAVhyi2SeGnOuKAEBBlqJ0AAAEBCAoAAF93AABfaSQ0z2BaqwIAWgAA
AFoAAABQRl0yZ1TYRzKosogIAEUwAEwx/UAAMwZuqsfp2cnAqER5ABX98+Gn
OuKHKLZJgBgAROgFAAABAQgKAABhDAAAX3cyMjYgVHJhbnNmZXIgY29tcGxl
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
/fPhpzxnhyi224AYAETZOwAAAQEICgAAZK8AAGS9MjEzIDIwMjEwNTEyMTk1
MDQ2DQr1Nc9gbjEJAFYAAABWAAAA2EcyqLKIUEZdMmdUCABFEABIcehAAEAG
IePAqER5x+nZyf3zABWHKLbb4ac8e4AYEGUzngAAAQEICgAAZL0AAGSvU0la
RSByZXNjdWUudGFyLnh6DQr1Nc9guZMMAE8AAABPAAAAUEZdMmdU2EcyqLKI
CABFMABBAABAADMGoLLH6dnJwKhEeQAV/fPhpzx7hyi274AYAERm5AAAAQEI
CgAAZK8AAGS9MjEzIDI2ODEzNDgNCvU1z2BTlAwASAAAAEgAAADYRzKosohQ
Rl0yZ1QIAEUQADoAAEAAQAaT2cCoRHnH6dnJ/fMAFYcotu/hpzyIgBgQZfYF
AAABAQgKAABkvgAAZK9FUFNWDQr2Nc9gjrMAAHIAAAByAAAAUEZdMmdU2Ecy
qLKICABFMABkNn1AADMGahLH6dnJwKhEeQAV/fPhpzyIhyi29YAYAESORgAA
AQEICgAAZLAAAGS+MjI5IEVudGVyaW5nIEV4dGVuZGVkIFBhc3NpdmUgTW9k
ZSAofHx8NTc3MzZ8KQ0K9jXPYBqgAwBCAAAAQgAAANhHMqiyiFBGXTJnVAgA
RRAANAAAQABABpPfwKhEecfp2cn98wAVhyi29eGnPLiAEBBlm4wAAAEBCAoA
AGS/AABksPY1z2DXEgQAVgAAAFYAAADYRzKosohQRl0yZ1QIAEUQAEifq0AA
QAb0H8CoRHnH6dnJ/fMAFYcotvXhpzy4gBgQZTo7AAABAQgKAABkvwAAZLBS
RVRSIHJlc2N1ZS50YXIueHoNCvY1z2AZcwcAkAAAAJAAAABQRl0yZ1TYRzKo
sogIAEUwAII4m0AAMwZn1sfp2cnAqER5ABX98+GnPLiHKLcJgBgARC0RAAAB
AQgKAABksAAAZL8xNTAgT3BlbmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5l
Y3Rpb24gZm9yICdyZXNjdWUudGFyLnh6JyAoMjY4MTM0OCBieXRlcykuDQr2
Nc9g4H0KAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5
x+nZyf3zABWHKLcJ4ac9BoAQEGWbKgAAAQEICgAAZL8AAGSwLDbPYBA+CgBa
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
ZYtJAAABAQgKAABn5gAAZ49NRFRNIHRleHQudGFyLnh6DQqKN89gyR0AAFYA
AABWAAAAUEZdMmdU2EcyqLKICABFMABIHfNAADMGgrjH6dnJwKhEeQAV/fPh
pz6Jhyi3mIAYAETSDgAAAQEICgAAZ9cAAGfmMjEzIDIwMjEwNTEyMTk1MDIz
DQqKN89g3R8AAFUAAABVAAAA2EcyqLKIUEZdMmdUCABFEABHelFAAEAGGXvA
qER5x+nZyf3zABWHKLeY4ac+nYAYEGWsYQAAAQEICgAAZ+YAAGfXU0laRSB4
YmFzZS50YXIueHoNCoo3z2B5fwMATwAAAE8AAABQRl0yZ1TYRzKosogIAEUw
AEEAAEAAMwagssfp2cnAqER5ABX98+GnPp2HKLergBgARFi1AAABAQgKAABn
1wAAZ+YyMTMgNjI5MDk5Mg0KijfPYLmAAwBIAAAASAAAANhHMqiyiFBGXTJn
VAgARRAAOgAAQABABpPZwKhEecfp2cn98wAVhyi3q+GnPqqAGBBl7NYAAAEB
CAoAAGfnAABn10VQU1YNCoo3z2D93QYAcgAAAHIAAABQRl0yZ1TYRzKosogI
AEUwAGQgHUAAMwaAcsfp2cnAqER5ABX98+GnPqqHKLexgBgARIUUAAABAQgK
AABn2AAAZ+cyMjkgRW50ZXJpbmcgRXh0ZW5kZWQgUGFzc2l2ZSBNb2RlICh8
fHw1NzczOXwpDQqKN89gcNsJAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0
AABAAEAGk9/AqER5x+nZyf3zABWHKLex4ac+2oAQEGWSXgAAAQEICgAAZ+cA
AGfYijfPYCE6CgBVAAAAVQAAANhHMqiyiFBGXTJnVAgARRAAR2wpQABABiej
wKhEecfp2cn98wAVhyi3seGnPtqAGBBlswAAAAEBCAoAAGfnAABn2FJFVFIg
eGJhc2UudGFyLnh6DQqLN89g1HkAAI8AAACPAAAAUEZdMmdU2EcyqLKICABF
MACBIztAADMGfTfH6dnJwKhEeQAV/fPhpz7ahyi3xIAYAERGMQAAAQEICgAA
Z9kAAGfnMTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25uZWN0aW9u
IGZvciAneGJhc2UudGFyLnh6JyAoNjI5MDk5MiBieXRlcykuDQqLN89g1HID
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
YG4GAABRAAAAUQAAAFBGXTJnVNhHMqiyiAgARSAAQwAAQAAvBqTAx+nZycCo
RHkAFf3z4adACYcouCqAGABENNQAAAEBCAoAAGs5AABrSDIxMyAyNDE3MDAy
MDANCjs5z2C+BgAASAAAAEgAAADYRzKosohQRl0yZ1QIAEUQADoAAEAAQAaT
2cCoRHnH6dnJ/fMAFYcouCrhp0AYgBgQZeQmAAABAQgKAABrSAAAazlFUFNW
DQo7Oc9glXYDAHIAAAByAAAAUEZdMmdU2EcyqLKICABFIABksG9AAC8G9C/H
6dnJwKhEeQAV/fPhp0AYhyi4MIAYAER7bQAAAQEICgAAazkAAGtIMjI5IEVu
dGVyaW5nIEV4dGVuZGVkIFBhc3NpdmUgTW9kZSAofHx8NTc3NDF8KQ0KOznP
YHl5BgBCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp
2cn98wAVhyi4MOGnQEiAEBBlia4AAAEBCAoAAGtJAABrOTs5z2DO2QYAVgAA
AFYAAADYRzKosohQRl0yZ1QIAEUQAEg/IEAAQAZUq8CoRHnH6dnJ/fMAFYco
uDDhp0BIgBgQZShlAAABAQgKAABrSQAAazlSRVRSIHhkZWJ1Zy50YXIueHoN
Cjs5z2CEQAoAkgAAAJIAAABQRl0yZ1TYRzKosogIAEUgAISyyEAALwbxtsfp
2cnAqER5ABX98+GnQEiHKLhEgBgAROsXAAABAQgKAABrOgAAa0kxNTAgT3Bl
bmluZyBCSU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9yICd4ZGVidWcu
dGFyLnh6JyAoMjQxNzAwMjAwIGJ5dGVzKS4NCjs5z2A6MA0AQgAAAEIAAADY
RzKosohQRl0yZ1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcouEThp0CY
gBAQZYlIAAABAQgKAABrSgAAazrrPc9gaxkKADYAAAA2AAAA2EcyqLKIUEZd
MmdUCABFAAAoAABAAEAGk/vAqER5x+nZyf3zABWHKLhD4adAmFAQEGWY5QAA
6z3PYJJ/DQBOAAAATgAAAFBGXTJnVNhHMqiyiAgARSAAQAAAQAAvBqTDx+nZ
ycCoRHkAFf3z4adAmIcouESwEABE2xoAAAEBCAoAAHSZAABrSgEBBQqHKLhD
hyi4Q5tCz2CIYg0ANgAAADYAAADYRzKosohQRl0yZ1QIAEUAACgAAEAAQAaT
+8CoRHnH6dnJ/fMAFYcouEPhp0CYUBAQZZjlAACcQs9g+o0BAE4AAABOAAAA
UEZdMmdU2EcyqLKICABFIABAAABAAC8GpMPH6dnJwKhEeQAV/fPhp0CYhyi4
RLAQAETRuwAAAQEICgAAffgAAGtKAQEFCocouEOHKLhDTEfPYGRpAQA2AAAA
NgAAANhHMqiyiFBGXTJnVAgARQAAKAAAQABABpP7wKhEecfp2cn98wAVhyi4
Q+GnQJhQEBBlmOUAAExHz2AU0AQATgAAAE4AAABQRl0yZ1TYRzKosogIAEUg
AEAAAEAALwakw8fp2cnAqER5ABX98+GnQJiHKLhEsBAARMhcAAABAQgKAACH
VwAAa0oBAQUKhyi4Q4couEP8S89gi7IEADYAAAA2AAAA2EcyqLKIUEZdMmdU
CABFAAAoAABAAEAGk/vAqER5x+nZyf3zABWHKLhD4adAmFAQEGWY5QAA/EvP
YC8bCABOAAAATgAAAFBGXTJnVNhHMqiyiAgARSAAQAAAQAAvBqTDx+nZycCo
RHkAFf3z4adAmIcouESwEABEvv0AAAEBCAoAAJC2AABrSgEBBQqHKLhDhyi4
Q6xQz2CT+wcANgAAADYAAADYRzKosohQRl0yZ1QIAEUAACgAAEAAQAaT+8Co
RHnH6dnJ/fMAFYcouEPhp0CYUBAQZZjlAACsUM9gW10LAE4AAABOAAAAUEZd
MmdU2EcyqLKICABFMABAAABAADMGoLPH6dnJwKhEeQAV/fPhp0CYhyi4RLAQ
AES1ngAAAQEICgAAmhUAAGtKAQEFCocouEOHKLhDXFXPYLBECwA2AAAANgAA
ANhHMqiyiFBGXTJnVAgARQAAKAAAQABABpP7wKhEecfp2cn98wAVhyi4Q+Gn
QJhQEBBlmOUAAFxVz2DEqg4ATgAAAE4AAABQRl0yZ1TYRzKosogIAEUwAEAA
AEAAMwags8fp2cnAqER5ABX98+GnQJiHKLhEsBAARKw+AAABAQgKAACjdQAA
a0oBAQUKhyi4Q4couEPiWM9gySIIAFoAAABaAAAAUEZdMmdU2EcyqLKICABF
MABMedNAADMGJtTH6dnJwKhEeQAV/fPhp0CYhyi4RIAYAESLDgAAAQEICgAA
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
YxIAAAEBCAoAAKrjAACqykVQU1YNCghZz2BnEAoAcgAAAHIAAABQRl0yZ1TY
RzKosogIAEUwAGRYaUAAMwZIJsfp2cnAqER5ABX98+GnQYOHKLitgBgARPpV
AAABAQgKAACqywAAquMyMjkgRW50ZXJpbmcgRXh0ZW5kZWQgUGFzc2l2ZSBN
b2RlICh8fHw1Nzc0M3wpDQoIWc9gfAINAEIAAABCAAAA2EcyqLKIUEZdMmdU
CABFEAA0AABAAEAGk9/AqER5x+nZyf3zABWHKLit4adBs4AQEGUImQAAAQEI
CgAAquQAAKrLCFnPYCFsDQBVAAAAVQAAANhHMqiyiFBGXTJnVAgARRAAR37L
QABABhUBwKhEecfp2cn98wAVhyi4reGnQbOAGBBlKh4AAAEBCAoAAKrkAACq
y1JFVFIgeGZvbnQudGFyLnh6DQoJWc9gdZABAJAAAACQAAAAUEZdMmdU2Ecy
qLKICABFMACCXKdAADMGQ8rH6dnJwKhEeQAV/fPhp0Gzhyi4wIAYAEQXzwAA
AQEICgAAqswAAKrkMTUwIE9wZW5pbmcgQklOQVJZIG1vZGUgZGF0YSBjb25u
ZWN0aW9uIGZvciAneGZvbnQudGFyLnh6JyAoMjc0NTYxMDAgYnl0ZXMpLg0K
CVnPYOV2BABCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhE
ecfp2cn98wAVhyi4wOGnQgGAEBBlCDYAAAEBCAoAAKrlAACqzIFcz2Do9AgA
WgAAAFoAAABQRl0yZ1TYRzKosogIAEUwAEwxBkAAMwZvocfp2cnAqER5ABX9
8+GnQgGHKLjAgBgAREJRAAABAQgKAACxvAAAquUyMjYgVHJhbnNmZXIgY29t
cGxldGUuDQqBXM9ga+MLAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABA
AEAGk9/AqER5x+nZyf3zABWHKLjA4adCGYAQEGL6PwAAAQEICgAAsdYAALG8
pVzPYL7tBwBVAAAAVQAAANhHMqiyiFBGXTJnVAgARRAAR74HQABABtXEwKhE
ecfp2cn98wAVhyi4wOGnQhmAGBBlIIEAAAEBCAoAALIdAACxvE1EVE0geGZv
bnQudGFyLnh6DQqlXM9gBUsLAFYAAABWAAAAUEZdMmdU2EcyqLKICABFMABI
FvpAADMGibHH6dnJwKhEeQAV/fPhp0IZhyi404AYAEQ53AAAAQEICgAAsgQA
ALIdMjEzIDIwMjEwNTEyMTk1MTE1DQqlXM9gJU0LAFcAAABXAAAA2EcyqLKI
UEZdMmdUCABFEABJakxAAEAGKX7AqER5x+nZyf3zABWHKLjT4adCLYAYEGWd
pwAAAQEICgAAsh4AALIEU0laRSB4c2VydmVyLnRhci54eg0KpVzPYI+vDgBQ
AAAAUAAAAFBGXTJnVNhHMqiyiAgARTAAQgAAQAAzBqCxx+nZycCoRHkAFf3z
4adCLYcouOiAGABEx00AAAEBCAoAALIFAACyHjIxMyAxOTcwMzA0OA0KpVzP
YHawDgBIAAAASAAAANhHMqiyiFBGXTJnVAgARRAAOgAAQABABpPZwKhEecfp
2cn98wAVhyi46OGnQjuAGBBlU6MAAAEBCAoAALIeAACyBUVQU1YNCqZcz2Dy
0wIAcgAAAHIAAABQRl0yZ1TYRzKosogIAEUwAGQdYkAAMwaDLcfp2cnAqER5
ABX98+GnQjuHKLjugBgAROrmAAABAQgKAACyBQAAsh4yMjkgRW50ZXJpbmcg
RXh0ZW5kZWQgUGFzc2l2ZSBNb2RlICh8fHw1Nzc0NHwpDQqmXM9gYMgFAEIA
AABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5x+nZyf3zABWH
KLju4adCa4AQEGX5KgAAAQEICgAAsh8AALIFplzPYNgwBgBXAAAAVwAAANhH
MqiyiFBGXTJnVAgARRAASfHkQABABqHlwKhEecfp2cn98wAVhyi47uGnQmuA
GBBlpEMAAAEBCAoAALIfAACyBVJFVFIgeHNlcnZlci50YXIueHoNCqZcz2DN
rAkAkgAAAJIAAABQRl0yZ1TYRzKosogIAEUwAIQg4UAAMwZ/jsfp2cnAqER5
ABX98+GnQmuHKLkDgBgARI7uAAABAQgKAACyBgAAsh8xNTAgT3BlbmluZyBC
SU5BUlkgbW9kZSBkYXRhIGNvbm5lY3Rpb24gZm9yICd4c2VydmVyLnRhci54
eicgKDE5NzAzMDQ4IGJ5dGVzKS4NCqZcz2AupgwAQgAAAEIAAADYRzKosohQ
Rl0yZ1QIAEUQADQAAEAAQAaT38CoRHnH6dnJ/fMAFYcouQPhp0K7gBAQZfjD
AAABAQgKAACyIAAAsgYfX89gkjMAAFoAAABaAAAAUEZdMmdU2EcyqLKICABF
MABMV95AADMGSMnH6dnJwKhEeQAV/fPhp0K7hyi5A4AYAEQ03wAAAQEICgAA
tvYAALIgMjI2IFRyYW5zZmVyIGNvbXBsZXRlLg0KH1/PYK4mAwBCAAAAQgAA
ANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn98wAVhyi5A+Gn
QtOAEBBi7s0AAAEBCAoAALcRAAC29kJfz2BrPQsAVwAAAFcAAADYRzKosohQ
Rl0yZ1QIAEUQAEkkfkAAQAZvTMCoRHnH6dnJ/fMAFYcouQPhp0LTgBgQZZ6i
AAABAQgKAAC3WAAAtvZNRFRNIHhzZXJ2ZXIudGFyLnh6DQpCX89gEpsOAFYA
AABWAAAAUEZdMmdU2EcyqLKICABFMABIxblAADMG2vHH6dnJwKhEeQAV/fPh
p0LThyi5GIAYAEQrZwAAAQEICgAAtz4AALdYMjEzIDIwMjEwNTEyMTk1MTQ2
DQpCX89gupsOAEgAAABIAAAA2EcyqLKIUEZdMmdUCABFEAA6AABAAEAGk9nA
qER5x+nZyf3zABWHKLkY4adC54AYEGVGUQAAAQEICgAAt1gAALc+UVVJVA0K
Q1/PYLzZAgBIAAAASAAAAFBGXTJnVNhHMqiyiAgARTAAOgAAQAAzBqC5x+nZ
ycCoRHkAFf3z4adC54couR6AGABEjbYAAAEBCAoAALc+AAC3WDIyMS0NCkNf
z2Ad2gIACwEAAAsBAABQRl0yZ1TYRzKosogIAEUwAP3GuEAAMwbZPcfp2cnA
qER5ABX98+GnQu2HKLkegBkARJqeAAABAQgKAAC3PgAAt1ggICAgRGF0YSB0
cmFmZmljIGZvciB0aGlzIHNlc3Npb24gd2FzIDY5NjEzMDM0MCBieXRlcyBp
biAyMSBmaWxlcy4NCiAgICBUb3RhbCB0cmFmZmljIGZvciB0aGlzIHNlc3Np
b24gd2FzIDY5NjE0MDM4NCBieXRlcyBpbiAyMiB0cmFuc2ZlcnMuDQoyMjEg
VGhhbmsgeW91IGZvciB1c2luZyB0aGUgRlRQIHNlcnZpY2Ugb24gZnRwLk5l
dEJTRC5vcmcuDQpDX89gJNoCAEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0
AABAAEAGk9/AqER5x+nZyf3zABWHKLke4adDt4AQEEztVAAAAQEICgAAt1kA
ALc+Q1/PYCTbAgBCAAAAQgAAANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPf
wKhEecfp2cn98wAVhyi5HuGnQ7eAERBl7ToAAAEBCAoAALdZAAC3PkNfz2DX
QgYAQgAAAEIAAABQRl0yZ1TYRzKosogIAEUwADQAAEAAMwagv8fp2cnAqER5
ABX98+GnQ7eHKLkfgBAARP1aAAABAQgKAAC3PwAAt1k=
--0-577458017-1624489708=:10413--
From: "Luke Mewburn" <lukem@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/56129 CVS commit: othersrc/usr.bin/tnftp/src
Date: Fri, 27 Aug 2021 01:33:00 +0000
Module Name: othersrc
Committed By: lukem
Date: Fri Aug 27 01:33:00 UTC 2021
Update of /cvsroot/othersrc/usr.bin/tnftp/src
In directory ivanova.netbsd.org:/tmp/cvs-serv779
Log Message:
Import NetBSD ftp 20210826
Notable changes since import tag NetBSD-2021-01-31:
* Use fetch_* instead of stdio to fix support with interruptable signals.
* Fix typos in comments.
* Manual page improvements. NetBSD PR bin/51883.
* Set SO_KEEPALIVE on control connection to attempt to avoid timeouts.
NetBSD PR bin/56129.
* Validate address in server's PASV and LPSV responses.
Previously a hostile server could cause ftp to open a data connection elsewhere.
* Remove unnecessary variable assignments.
Status:
Vendor Tag: NetBSD
Release Tags: NetBSD-20210826
C othersrc/usr.bin/tnftp/src/ssl.h
U othersrc/usr.bin/tnftp/src/complete.c
C othersrc/usr.bin/tnftp/src/fetch.c
U othersrc/usr.bin/tnftp/src/progressbar.c
C othersrc/usr.bin/tnftp/src/ftp.c
U othersrc/usr.bin/tnftp/src/ftp_var.h
U othersrc/usr.bin/tnftp/src/cmdtab.c
C othersrc/usr.bin/tnftp/src/ssl.c
U othersrc/usr.bin/tnftp/src/main.c
C othersrc/usr.bin/tnftp/src/Makefile
U othersrc/usr.bin/tnftp/src/progressbar.h
U othersrc/usr.bin/tnftp/src/ruserpass.c
C othersrc/usr.bin/tnftp/src/version.h
C othersrc/usr.bin/tnftp/src/ftp.1
U othersrc/usr.bin/tnftp/src/cmds.c
U othersrc/usr.bin/tnftp/src/extern.h
C othersrc/usr.bin/tnftp/src/util.c
U othersrc/usr.bin/tnftp/src/domacro.c
8 conflicts created by this import.
Use the following command to help the merge:
cvs checkout -jNetBSD:yesterday -jNetBSD othersrc/usr.bin/tnftp/src
State-Changed-From-To: open->closed
State-Changed-By: tsutsui@NetBSD.org
State-Changed-When: Sat, 13 Aug 2022 22:30:10 +0000
State-Changed-Why:
I've tried ftp install for both NetBSD/luna68k 9.3 on 68030 LUNA
and NetBSD/x68k 9.3 on 68030 X68030 from ftp.NetBSD.org, then
there is no timeout through full upgrade installation.
The installation problem seems solved and maybe I missed something
in my past tests.
From: RVP <rvp@SDF.ORG>
To: gnats-bugs@netbsd.org
Cc: lukem@netbsd.org, tsutsui@NetBSD.org
Subject: Re: bin/56129 (ftp(1) should keep control session during large
xfer)
Date: Tue, 7 Nov 2023 23:44:53 +0000 (UTC)
On Sat, 13 Aug 2022, tsutsui@NetBSD.org wrote:
> State-Changed-From-To: open->closed
> State-Changed-By: tsutsui@NetBSD.org
> State-Changed-When: Sat, 13 Aug 2022 22:30:10 +0000
> State-Changed-Why:
> I've tried ftp install for both NetBSD/luna68k 9.3 on 68030 LUNA
> and NetBSD/x68k 9.3 on 68030 X68030 from ftp.NetBSD.org, then
> there is no timeout through full upgrade installation.
> The installation problem seems solved and maybe I missed something
> in my past tests.
>
Made this patch quite a while ago, then forgot I had done it.
Redone for latest ftp source. It sets TCP_KEEPIDLE & TCP_KEEPINTVL
(tied to `quit_time' now, but, can easily be parametrized) which
is supported on Linux, Free & NetBSD. This should work to keep
the control channel alive.
-RVP
---START---
diff -urN ftp.orig/ftp.c ftp/ftp.c
--- ftp.orig/ftp.c 2023-05-06 03:41:38.122163042 +0000
+++ ftp/ftp.c 2023-11-07 23:41:33.236539000 +0000
@@ -290,6 +290,23 @@
DWARN("setsockopt %s (ignored)", "SO_OOBINLINE");
}
+#if defined(TCP_KEEPIDLE) && defined(TCP_KEEPINTVL)
+#include <netinet/tcp.h>
+{
+ unsigned int idle_time;
+ idle_time = quit_time > 300 ? (quit_time * 3) / 4 : 300;
+ if (setsockopt(s, IPPROTO_TCP, TCP_KEEPIDLE,
+ &idle_time, sizeof(idle_time)) == -1) {
+ DWARN("setsockopt %s (ignored)", "TCP_KEEPIDLE");
+ }
+
+ if (setsockopt(s, IPPROTO_TCP, TCP_KEEPINTVL,
+ &idle_time, sizeof(idle_time)) == -1) {
+ DWARN("setsockopt %s (ignored)", "TCP_KEEPINTVL");
+ }
+}
+#endif
+
return (hostname);
bad:
(void)close(s);
---END---
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.47 2022/09/11 19:34:41 kim Exp $
$NetBSD: gnats_config.sh,v 1.9 2014/08/02 14:16:04 spz Exp $
Copyright © 1994-2023
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.