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
 qn8AAGtKMjI2IFRyYW5zZmVyIGNvbXBsZXRlLg0K4ljPYD0uCwBCAAAAQgAA
 ANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn98wAVhyi4ROGn
 QLCAEBBiCqAAAAEBCAoAAKqYAACqfwZZz2DJjQMAVgAAAFYAAADYRzKosohQ
 Rl0yZ1QIAEUQAEhcEUAAQAY3usCoRHnH6dnJ/fMAFYcouEThp0CwgBgQZa4S
 AAABAQgKAACq3wAAqn9NRFRNIHhkZWJ1Zy50YXIueHoNCgZZz2C49QYAVgAA
 AFYAAABQRl0yZ1TYRzKosogIAEUwAEg+v0AAMwZh7Mfp2cnAqER5ABX98+Gn
 QLCHKLhYgBgARE0/AAABAQgKAACqxwAAqt8yMTMgMjAyMTA1MTIyMDA4MjMN
 CgZZz2Bp9gYAVAAAAFQAAADYRzKosohQRl0yZ1QIAEUQAEYhIEAAQAZyrcCo
 RHnH6dnJ/fMAFYcouFjhp0DEgBgQZQcOAAABAQgKAACq3wAAqsdTSVpFIHhl
 dGMudGFyLnh6DQoGWc9gnF8KAE0AAABNAAAAUEZdMmdU2EcyqLKICABFMAA/
 AABAADMGoLTH6dnJwKhEeQAV/fPhp0DEhyi4aoAYAEQRFAAAAQEICgAAqscA
 AKrfMjEzIDI2MTk2DQoGWc9g6V8KAEgAAABIAAAA2EcyqLKIUEZdMmdUCABF
 EAA6AABAAEAGk9nAqER5x+nZyf3zABWHKLhq4adAz4AYEGVkCgAAAQEICgAA
 qt8AAKrHRVBTVg0KBlnPYLLADQByAAAAcgAAAFBGXTJnVNhHMqiyiAgARTAA
 ZEi6QAAzBlfVx+nZycCoRHkAFf3z4adAz4couHCAGABE+08AAAEBCAoAAKrH
 AACq3zIyOSBFbnRlcmluZyBFeHRlbmRlZCBQYXNzaXZlIE1vZGUgKHx8fDU3
 NzQyfCkNCgdZz2CraQEAQgAAAEIAAADYRzKosohQRl0yZ1QIAEUQADQAAEAA
 QAaT38CoRHnH6dnJ/fMAFYcouHDhp0D/gBAQZQmSAAABAQgKAACq4AAAqscH
 Wc9gYeABAFQAAABUAAAA2EcyqLKIUEZdMmdUCABFEABGBx9AAEAGjK7AqER5
 x+nZyf3zABWHKLhw4adA/4AYEGUNsQAAAQEICgAAquAAAKrHUkVUUiB4ZXRj
 LnRhci54eg0KB1nPYNlBBQCMAAAAjAAAAFBGXTJnVNhHMqiyiAgARTAAfkyN
 QAAzBlPox+nZycCoRHkAFf3z4adA/4couIKAGABELMYAAAEBCAoAAKrIAACq
 4DE1MCBPcGVuaW5nIEJJTkFSWSBtb2RlIGRhdGEgY29ubmVjdGlvbiBmb3Ig
 J3hldGMudGFyLnh6JyAoMjYxOTYgYnl0ZXMpLg0KB1nPYIBHCABCAAAAQgAA
 ANhHMqiyiFBGXTJnVAgARRAANAAAQABABpPfwKhEecfp2cn98wAVhyi4guGn
 QUmAEBBlCTQAAAEBCAoAAKrhAACqyAdZz2APqwsAWgAAAFoAAABQRl0yZ1TY
 RzKosogIAEUwAExTNEAAMwZNc8fp2cnAqER5ABX98+GnQUmHKLiCgBgAREo+
 AAABAQgKAACqyQAAquEyMjYgVHJhbnNmZXIgY29tcGxldGUuDQoHWc9gGbAO
 AEIAAABCAAAA2EcyqLKIUEZdMmdUCABFEAA0AABAAEAGk9/AqER5x+nZyf3z
 ABWHKLiC4adBYYAQEGIJHQAAAQEICgAAquIAAKrJB1nPYHASDwBUAAAAVAAA
 ANhHMqiyiFBGXTJnVAgARRAARhtnQABABnhmwKhEecfp2cn98wAVhyi4guGn
 QWGAGBBlEj8AAAEBCAoAAKriAACqyU1EVE0geGV0Yy50YXIueHoNCghZz2DI
 MQMAVgAAAFYAAABQRl0yZ1TYRzKosogIAEUwAEhUW0AAMwZMUMfp2cnAqER5
 ABX98+GnQWGHKLiUgBgARElJAAABAQgKAACqygAAquIyMTMgMjAyMTA1MTIx
 OTUwMTUNCghZz2BoMgMAVQAAAFUAAADYRzKosohQRl0yZ1QIAEUQAEcP5EAA
 QAaD6MCoRHnH6dnJ/fMAFYcouJThp0F1gBgQZSOAAAABAQgKAACq4wAAqspT
 SVpFIHhmb250LnRhci54eg0KCFnPYBuYBgBQAAAAUAAAAFBGXTJnVNhHMqiy
 iAgARTAAQgAAQAAzBqCxx+nZycCoRHkAFf3z4adBdYcouKeAGABE2cAAAAEB
 CAoAAKrKAACq4zIxMyAyNzQ1NjEwMA0KCFnPYGyYBgBIAAAASAAAANhHMqiy
 iFBGXTJnVAgARRAAOgAAQABABpPZwKhEecfp2cn98wAVhyi4p+GnQYOAGBBl
 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:

NetBSD Home
NetBSD PR Database Search

(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.