summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorColin Watson <cjwatson@debian.org>2019-06-05 06:41:44 +0100
committerColin Watson <cjwatson@debian.org>2019-06-05 06:41:44 +0100
commit102062f825fb26a74295a1c089c00c4c4c76b68a (patch)
tree3db66bc8c8483cce66516dff36f6ef56065143d9
parent3d246f10429fc9a37b98eabef94fe8dc7c61002b (diff)
parentfd0fa130ecf06d7d092932adcd5d77f1549bfc8d (diff)
Import openssh_8.0p1.orig.tar.gz
-rw-r--r--.depend112
-rw-r--r--.gitignore1
-rw-r--r--.skipped-commit-ids1
-rw-r--r--ChangeLog4562
-rw-r--r--INSTALL10
-rw-r--r--Makefile.in10
-rw-r--r--OVERVIEW7
-rw-r--r--PROTOCOL.certkeys3
-rw-r--r--README2
-rw-r--r--README.md74
-rw-r--r--atomicio.c32
-rw-r--r--atomicio.h4
-rw-r--r--audit-bsm.c2
-rw-r--r--audit-linux.c4
-rw-r--r--audit.c2
-rw-r--r--audit.h4
-rw-r--r--auth-pam.c60
-rw-r--r--auth-pam.h2
-rw-r--r--auth.c56
-rw-r--r--auth.h24
-rw-r--r--auth2-hostbased.c10
-rw-r--r--auth2-pubkey.c18
-rw-r--r--auth2.c131
-rw-r--r--authfd.c12
-rw-r--r--channels.c79
-rw-r--r--clientloop.c353
-rw-r--r--config.h.in94
-rwxr-xr-xconfigure2408
-rw-r--r--configure.ac284
-rw-r--r--contrib/cygwin/ssh-host-config59
-rw-r--r--contrib/redhat/openssh.spec2
-rw-r--r--contrib/suse/openssh.spec2
-rw-r--r--crypto_api.h18
-rw-r--r--dh.c6
-rw-r--r--dh.h4
-rw-r--r--dispatch.c6
-rw-r--r--dispatch.h9
-rw-r--r--entropy.c41
-rw-r--r--groupaccess.c5
-rw-r--r--kex.c350
-rw-r--r--kex.h81
-rw-r--r--kexc25519.c182
-rw-r--r--kexc25519c.c169
-rw-r--r--kexc25519s.c158
-rw-r--r--kexdh.c203
-rw-r--r--kexdhc.c224
-rw-r--r--kexdhs.c222
-rw-r--r--kexecdh.c211
-rw-r--r--kexecdhc.c222
-rw-r--r--kexecdhs.c203
-rw-r--r--kexgen.c339
-rw-r--r--kexgex.c30
-rw-r--r--kexgexc.c109
-rw-r--r--kexgexs.c114
-rw-r--r--kexsntrup4591761x25519.c219
-rw-r--r--loginrec.c8
-rw-r--r--loginrec.h5
-rw-r--r--match.c15
-rw-r--r--match.h3
-rw-r--r--misc.c93
-rw-r--r--misc.h11
-rw-r--r--moduli878
-rw-r--r--moduli.02
-rw-r--r--moduli.c21
-rw-r--r--monitor.c234
-rw-r--r--monitor.h13
-rw-r--r--monitor_wrap.c28
-rw-r--r--monitor_wrap.h20
-rw-r--r--mux.c16
-rw-r--r--myproposal.h15
-rw-r--r--opacket.c320
-rw-r--r--opacket.h154
-rw-r--r--openbsd-compat/bsd-cygwin_util.c149
-rw-r--r--openbsd-compat/bsd-cygwin_util.h1
-rw-r--r--openbsd-compat/bsd-misc.c101
-rw-r--r--openbsd-compat/bsd-misc.h20
-rw-r--r--openbsd-compat/libressl-api-compat.c4
-rw-r--r--openbsd-compat/openbsd-compat.h1
-rw-r--r--openbsd-compat/openssl-compat.c22
-rw-r--r--openbsd-compat/openssl-compat.h43
-rw-r--r--openbsd-compat/port-aix.c3
-rw-r--r--openbsd-compat/port-aix.h5
-rw-r--r--openbsd-compat/regress/Makefile.in2
-rw-r--r--openbsd-compat/regress/utimensattest.c97
-rw-r--r--openbsd-compat/sys-queue.h1
-rw-r--r--packet.c94
-rw-r--r--packet.h12
-rw-r--r--progressmeter.c60
-rw-r--r--progressmeter.h3
-rw-r--r--readconf.c55
-rw-r--r--readconf.h6
-rw-r--r--readpass.c15
-rw-r--r--regress/Makefile15
-rw-r--r--regress/agent-pkcs11.sh97
-rw-r--r--regress/agent-timeout.sh8
-rw-r--r--regress/agent.sh7
-rw-r--r--regress/cert-hostkey.sh6
-rw-r--r--regress/cert-userkey.sh4
-rw-r--r--regress/keys-command.sh7
-rw-r--r--regress/keyscan.sh14
-rw-r--r--regress/misc/kexfuzz/Makefile21
-rw-r--r--regress/misc/kexfuzz/kexfuzz.c18
-rw-r--r--regress/multiplex.sh8
-rw-r--r--regress/multipubkey.sh4
-rw-r--r--regress/principals-command.sh7
-rw-r--r--regress/sftp-chroot.sh7
-rw-r--r--regress/sftp-cmds.sh4
-rw-r--r--regress/test-exec.sh10
-rw-r--r--regress/unittests/Makefile.inc35
-rw-r--r--regress/unittests/kex/Makefile21
-rw-r--r--regress/unittests/kex/test_kex.c13
-rw-r--r--regress/unittests/sshbuf/Makefile5
-rw-r--r--regress/unittests/sshbuf/test_sshbuf_fuzz.c9
-rw-r--r--regress/unittests/sshbuf/test_sshbuf_getput_crypto.c157
-rw-r--r--regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c23
-rw-r--r--regress/unittests/sshkey/Makefile4
-rw-r--r--regress/unittests/sshkey/test_fuzz.c57
-rw-r--r--regress/unittests/sshkey/tests.c5
-rw-r--r--regress/unittests/test_helper/test_helper.c33
-rw-r--r--regress/unittests/test_helper/test_helper.h4
-rw-r--r--scp.025
-rw-r--r--scp.130
-rw-r--r--scp.c313
-rw-r--r--servconf.c70
-rw-r--r--servconf.h7
-rw-r--r--serverloop.c383
-rw-r--r--session.c217
-rw-r--r--sftp-client.c58
-rw-r--r--sftp-client.h5
-rw-r--r--sftp-common.c1
-rw-r--r--sftp-server-main.c2
-rw-r--r--sftp-server.02
-rw-r--r--sftp-server.c79
-rw-r--r--sftp.051
-rw-r--r--sftp.154
-rw-r--r--sftp.c118
-rw-r--r--sntrup4591761.c1083
-rw-r--r--sntrup4591761.sh57
-rw-r--r--ssh-add.014
-rw-r--r--ssh-add.123
-rw-r--r--ssh-add.c66
-rw-r--r--ssh-agent.02
-rw-r--r--ssh-agent.c28
-rw-r--r--ssh-ecdsa.c14
-rw-r--r--ssh-keygen.076
-rw-r--r--ssh-keygen.154
-rw-r--r--ssh-keygen.c220
-rw-r--r--ssh-keyscan.02
-rw-r--r--ssh-keyscan.c25
-rw-r--r--ssh-keysign.02
-rw-r--r--ssh-keysign.c17
-rw-r--r--ssh-pkcs11-client.c167
-rw-r--r--ssh-pkcs11-helper.014
-rw-r--r--ssh-pkcs11-helper.827
-rw-r--r--ssh-pkcs11-helper.c106
-rw-r--r--ssh-pkcs11.c1619
-rw-r--r--ssh-pkcs11.h18
-rw-r--r--ssh.044
-rw-r--r--ssh.159
-rw-r--r--ssh.c107
-rw-r--r--ssh.h6
-rw-r--r--ssh_api.c174
-rw-r--r--ssh_config3
-rw-r--r--ssh_config.052
-rw-r--r--ssh_config.549
-rw-r--r--sshbuf-getput-crypto.c63
-rw-r--r--sshbuf.c17
-rw-r--r--sshbuf.h6
-rw-r--r--sshconnect.c278
-rw-r--r--sshconnect.h16
-rw-r--r--sshconnect2.c335
-rw-r--r--sshd.02
-rw-r--r--sshd.c441
-rw-r--r--sshd_config.010
-rw-r--r--sshd_config.58
-rw-r--r--sshkey.c96
-rw-r--r--sshkey.h3
-rw-r--r--version.h4
178 files changed, 11589 insertions, 9915 deletions
diff --git a/.depend b/.depend
index 2b29e3879..c6725ec77 100644
--- a/.depend
+++ b/.depend
@@ -6,47 +6,47 @@ audit-bsm.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-com
6audit-linux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 6audit-linux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
7audit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 7audit.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
8auth-bsdauth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 8auth-bsdauth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
9auth-krb5.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h sshbuf.h sshkey.h misc.h servconf.h uidswap.h hostfile.h auth.h auth-pam.h audit.h loginrec.h 9auth-krb5.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h sshbuf.h sshkey.h misc.h servconf.h uidswap.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
10auth-options.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h sshbuf.h misc.h sshkey.h match.h ssh2.h auth-options.h 10auth-options.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h sshbuf.h misc.h sshkey.h match.h ssh2.h auth-options.h
11auth-pam.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 11auth-pam.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
12auth-passwd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h sshbuf.h ssherr.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h 12auth-passwd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h ssherr.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h
13auth-rhosts.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h uidswap.h pathnames.h log.h misc.h sshbuf.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h 13auth-rhosts.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h uidswap.h pathnames.h log.h misc.h sshbuf.h sshkey.h servconf.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
14auth-shadow.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 14auth-shadow.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
15auth-sia.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 15auth-sia.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
16auth-skey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 16auth-skey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
17auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h sshbuf.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h 17auth.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h groupaccess.h log.h sshbuf.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h canohost.h uidswap.h packet.h openbsd-compat/sys-queue.h dispatch.h authfile.h
18auth.o: authfile.h monitor_wrap.h ssherr.h compat.h channels.h 18auth.o: monitor_wrap.h ssherr.h compat.h channels.h
19auth2-chall.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssherr.h log.h misc.h servconf.h 19auth2-chall.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h ssherr.h log.h misc.h servconf.h
20auth2-gss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 20auth2-gss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
21auth2-hostbased.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h sshbuf.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h monitor_wrap.h 21auth2-hostbased.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h monitor_wrap.h pathnames.h
22auth2-hostbased.o: pathnames.h ssherr.h match.h 22auth2-hostbased.o: ssherr.h match.h
23auth2-kbdint.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h misc.h servconf.h ssherr.h 23auth2-kbdint.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h misc.h servconf.h ssherr.h
24auth2-none.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h ssh2.h ssherr.h monitor_wrap.h 24auth2-none.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h misc.h servconf.h compat.h ssh2.h ssherr.h monitor_wrap.h
25auth2-passwd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h 25auth2-passwd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h ssherr.h log.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h monitor_wrap.h misc.h servconf.h
26auth2-pubkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h sshbuf.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h uidswap.h 26auth2-pubkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h sshbuf.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h uidswap.h auth-options.h
27auth2-pubkey.o: auth-options.h canohost.h monitor_wrap.h authfile.h match.h ssherr.h channels.h session.h 27auth2-pubkey.o: canohost.h monitor_wrap.h authfile.h match.h ssherr.h channels.h session.h
28auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h ssherr.h 28auth2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h sshbuf.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h ssherr.h monitor_wrap.h
29auth2.o: monitor_wrap.h digest.h 29auth2.o: digest.h
30authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h atomicio.h misc.h ssherr.h 30authfd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h compat.h log.h atomicio.h misc.h ssherr.h
31authfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h authfile.h misc.h atomicio.h sshkey.h sshbuf.h ssherr.h krl.h 31authfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h ssh.h log.h authfile.h misc.h atomicio.h sshkey.h sshbuf.h ssherr.h krl.h
32bitmap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h bitmap.h 32bitmap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h bitmap.h
33canohost.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h canohost.h misc.h 33canohost.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h canohost.h misc.h
34chacha.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h chacha.h 34chacha.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h chacha.h
35channels.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ssherr.h sshbuf.h packet.h dispatch.h opacket.h log.h misc.h channels.h compat.h canohost.h sshkey.h authfd.h pathnames.h match.h 35channels.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ssherr.h sshbuf.h packet.h dispatch.h log.h misc.h channels.h compat.h canohost.h sshkey.h authfd.h pathnames.h match.h
36cipher-aes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h 36cipher-aes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h
37cipher-aesctr.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher-aesctr.h rijndael.h 37cipher-aesctr.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher-aesctr.h rijndael.h
38cipher-chachapoly.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sshbuf.h ssherr.h cipher-chachapoly.h chacha.h poly1305.h 38cipher-chachapoly.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sshbuf.h ssherr.h cipher-chachapoly.h chacha.h poly1305.h
39cipher-ctr.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 39cipher-ctr.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
40cipher.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h sshbuf.h ssherr.h digest.h openbsd-compat/openssl-compat.h 40cipher.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h sshbuf.h ssherr.h digest.h openbsd-compat/openssl-compat.h
41cleanup.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h 41cleanup.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h
42clientloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h opacket.h sshbuf.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h 42clientloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h sshbuf.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h
43clientloop.o: myproposal.h log.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h ssherr.h hostfile.h 43clientloop.o: myproposal.h log.h misc.h readconf.h clientloop.h sshconnect.h authfd.h atomicio.h sshpty.h match.h msg.h ssherr.h hostfile.h
44compat.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h compat.h log.h match.h kex.h mac.h 44compat.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h log.h match.h kex.h mac.h crypto_api.h
45crc32.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crc32.h 45crc32.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crc32.h
46dh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 46dh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
47digest-libc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h digest.h 47digest-libc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h digest.h
48digest-openssl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 48digest-openssl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
49dispatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h log.h dispatch.h packet.h openbsd-compat/sys-queue.h opacket.h compat.h ssherr.h 49dispatch.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h log.h dispatch.h packet.h openbsd-compat/sys-queue.h compat.h ssherr.h
50dns.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h ssherr.h dns.h log.h digest.h 50dns.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h ssherr.h dns.h log.h digest.h
51ed25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ge25519.h fe25519.h sc25519.h 51ed25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ge25519.h fe25519.h sc25519.h
52entropy.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 52entropy.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
@@ -60,23 +60,19 @@ gss-serv.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-comp
60hash.o: crypto_api.h includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h log.h ssherr.h 60hash.o: crypto_api.h includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h log.h ssherr.h
61hmac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h digest.h hmac.h 61hmac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h digest.h hmac.h
62hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h misc.h ssherr.h digest.h hmac.h 62hostfile.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h sshkey.h hostfile.h log.h misc.h ssherr.h digest.h hmac.h
63kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h log.h match.h misc.h monitor.h ssherr.h sshbuf.h 63kex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh.h ssh2.h atomicio.h version.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h log.h match.h
64kex.o: digest.h 64kex.o: misc.h monitor.h ssherr.h sshbuf.h digest.h
65kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h log.h digest.h ssherr.h 65kexc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h ssh2.h
66kexc25519c.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssh2.h sshbuf.h digest.h ssherr.h
67kexc25519s.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h kex.h mac.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssh2.h sshbuf.h ssherr.h
68kexdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 66kexdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
69kexdhc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
70kexdhs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
71kexecdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 67kexecdh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
72kexecdhc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 68kexgen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h ssh2.h sshbuf.h digest.h ssherr.h
73kexecdhs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
74kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 69kexgex.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
75kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 70kexgexc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
76kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 71kexgexs.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
72kexsntrup4591761x25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshkey.h kex.h mac.h crypto_api.h sshbuf.h digest.h ssherr.h
77krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h krl.h 73krl.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h sshbuf.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h krl.h
78log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h 74log.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h
79loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h canohost.h auth.h auth-pam.h audit.h sshbuf.h ssherr.h 75loginrec.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h hostfile.h ssh.h loginrec.h log.h atomicio.h packet.h openbsd-compat/sys-queue.h dispatch.h canohost.h auth.h auth-pam.h audit.h sshbuf.h ssherr.h
80logintest.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h loginrec.h 76logintest.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h loginrec.h
81mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h 77mac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h digest.h hmac.h umac.h mac.h misc.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h
82match.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h misc.h 78match.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h match.h misc.h
@@ -84,24 +80,23 @@ md5crypt.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-comp
84misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ssh.h sshbuf.h ssherr.h 80misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h log.h ssh.h sshbuf.h ssherr.h
85moduli.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 81moduli.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
86monitor.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h openbsd-compat/openssl-compat.h atomicio.h xmalloc.h ssh.h sshkey.h sshbuf.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h 82monitor.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h openbsd-compat/openssl-compat.h atomicio.h xmalloc.h ssh.h sshkey.h sshbuf.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h
87monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h dh.h packet.h dispatch.h opacket.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h ssherr.h 83monitor.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h dh.h packet.h dispatch.h auth-options.h sshpty.h channels.h session.h sshlogin.h canohost.h log.h misc.h servconf.h monitor.h monitor_wrap.h monitor_fdpass.h compat.h ssh2.h authfd.h match.h ssherr.h
88monitor_fdpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h monitor_fdpass.h 84monitor_fdpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h monitor_fdpass.h
89monitor_wrap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h hostfile.h auth.h auth-pam.h audit.h loginrec.h 85monitor_wrap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
90monitor_wrap.o: auth-options.h packet.h dispatch.h opacket.h log.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h ssherr.h 86monitor_wrap.o: auth-options.h packet.h dispatch.h log.h monitor.h monitor_wrap.h atomicio.h monitor_fdpass.h misc.h channels.h session.h servconf.h ssherr.h
91msg.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ssherr.h log.h atomicio.h msg.h misc.h 87msg.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshbuf.h ssherr.h log.h atomicio.h msg.h misc.h
92mux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h log.h ssh.h ssh2.h pathnames.h misc.h match.h sshbuf.h channels.h msg.h packet.h dispatch.h opacket.h monitor_fdpass.h sshpty.h sshkey.h readconf.h clientloop.h ssherr.h 88mux.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h log.h ssh.h ssh2.h pathnames.h misc.h match.h sshbuf.h channels.h msg.h packet.h dispatch.h monitor_fdpass.h sshpty.h sshkey.h readconf.h clientloop.h ssherr.h
93nchan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h ssh2.h sshbuf.h ssherr.h packet.h dispatch.h opacket.h channels.h compat.h log.h 89nchan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h ssh2.h sshbuf.h ssherr.h packet.h dispatch.h channels.h compat.h log.h
94opacket.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h 90packet.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h crc32.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h digest.h log.h canohost.h misc.h channels.h
95packet.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h crc32.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h digest.h log.h canohost.h misc.h channels.h ssh.h 91packet.o: ssh.h packet.h dispatch.h ssherr.h sshbuf.h
96packet.o: packet.h dispatch.h opacket.h ssherr.h sshbuf.h
97platform-misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 92platform-misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
98platform-pledge.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 93platform-pledge.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
99platform-tracing.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h 94platform-tracing.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h
100platform.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h 95platform.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h misc.h servconf.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
101poly1305.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h poly1305.h 96poly1305.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h poly1305.h
102progressmeter.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h progressmeter.h atomicio.h misc.h 97progressmeter.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h progressmeter.h atomicio.h misc.h utf8.h
103readconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h xmalloc.h ssh.h ssherr.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h uidswap.h 98readconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/glob.h xmalloc.h ssh.h ssherr.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h pathnames.h log.h sshkey.h misc.h readconf.h match.h kex.h mac.h crypto_api.h
104readconf.o: myproposal.h digest.h 99readconf.o: uidswap.h myproposal.h digest.h
105readpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h pathnames.h log.h ssh.h uidswap.h 100readpass.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h misc.h pathnames.h log.h ssh.h uidswap.h
106rijndael.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h rijndael.h 101rijndael.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h rijndael.h
107sandbox-capsicum.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 102sandbox-capsicum.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
@@ -114,25 +109,26 @@ sandbox-solaris.o: includes.h config.h defines.h platform.h openbsd-compat/openb
114sandbox-systrace.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 109sandbox-systrace.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
115sc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sc25519.h crypto_api.h 110sc25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sc25519.h crypto_api.h
116scp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h atomicio.h pathnames.h log.h misc.h progressmeter.h utf8.h 111scp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssh.h atomicio.h pathnames.h log.h misc.h progressmeter.h utf8.h
117servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h sshbuf.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h match.h channels.h 112servconf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h sshbuf.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h
118servconf.o: groupaccess.h canohost.h packet.h dispatch.h opacket.h ssherr.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h 113servconf.o: match.h channels.h groupaccess.h canohost.h packet.h dispatch.h ssherr.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h
119serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h opacket.h sshbuf.h log.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h 114serverloop.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h sshbuf.h log.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h
120serverloop.o: cipher-aesctr.h rijndael.h kex.h mac.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h ssherr.h 115serverloop.o: rijndael.h kex.h mac.h crypto_api.h hostfile.h auth.h auth-pam.h audit.h loginrec.h session.h auth-options.h serverloop.h ssherr.h
121session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h opacket.h sshbuf.h ssherr.h match.h uidswap.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h 116session.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h sshbuf.h ssherr.h match.h uidswap.h compat.h channels.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h
122session.o: cipher-aesctr.h rijndael.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h kex.h mac.h monitor_wrap.h sftp.h atomicio.h 117session.o: rijndael.h hostfile.h auth.h auth-pam.h audit.h loginrec.h auth-options.h authfd.h pathnames.h log.h misc.h servconf.h sshlogin.h serverloop.h canohost.h session.h kex.h mac.h crypto_api.h monitor_wrap.h sftp.h atomicio.h
123sftp-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h 118sftp-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h sshbuf.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
124sftp-common.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h 119sftp-common.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h ssherr.h sshbuf.h log.h misc.h sftp.h sftp-common.h
125sftp-glob.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h 120sftp-glob.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
126sftp-server-main.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sftp.h misc.h xmalloc.h 121sftp-server-main.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h sftp.h misc.h xmalloc.h
127sftp-server.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h 122sftp-server.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshbuf.h ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h
128sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h pathnames.h misc.h utf8.h sftp.h ssherr.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h 123sftp.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h pathnames.h misc.h utf8.h sftp.h ssherr.h sshbuf.h sftp-common.h sftp-client.h openbsd-compat/glob.h
124sntrup4591761.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h
129ssh-add.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h xmalloc.h ssh.h log.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h ssherr.h digest.h 125ssh-add.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h xmalloc.h ssh.h log.h sshkey.h sshbuf.h authfd.h authfile.h pathnames.h misc.h ssherr.h digest.h
130ssh-agent.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h compat.h log.h misc.h digest.h ssherr.h match.h 126ssh-agent.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h authfd.h compat.h log.h misc.h digest.h ssherr.h match.h
131ssh-dss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 127ssh-dss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
132ssh-ecdsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 128ssh-ecdsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
133ssh-ed25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h sshbuf.h sshkey.h ssherr.h ssh.h 129ssh-ed25519.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h log.h sshbuf.h sshkey.h ssherr.h ssh.h
134ssh-keygen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h uuencode.h sshbuf.h pathnames.h log.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssherr.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h 130ssh-keygen.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h sshkey.h authfile.h uuencode.h sshbuf.h pathnames.h log.h misc.h match.h hostfile.h dns.h ssh.h ssh2.h ssherr.h ssh-pkcs11.h atomicio.h krl.h digest.h utf8.h authfd.h
135ssh-keyscan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h compat.h myproposal.h packet.h dispatch.h opacket.h log.h 131ssh-keyscan.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h crypto_api.h compat.h myproposal.h packet.h dispatch.h log.h
136ssh-keyscan.o: atomicio.h misc.h hostfile.h ssherr.h ssh_api.h ssh2.h dns.h 132ssh-keyscan.o: atomicio.h misc.h hostfile.h ssherr.h ssh_api.h ssh2.h dns.h
137ssh-keysign.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssherr.h 133ssh-keysign.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h log.h sshkey.h ssh.h ssh2.h misc.h sshbuf.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssherr.h
138ssh-pkcs11-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 134ssh-pkcs11-client.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
@@ -140,27 +136,27 @@ ssh-pkcs11-helper.o: includes.h config.h defines.h platform.h openbsd-compat/ope
140ssh-pkcs11.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 136ssh-pkcs11.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
141ssh-rsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 137ssh-rsa.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
142ssh-xmss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 138ssh-xmss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
143ssh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h canohost.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h packet.h dispatch.h opacket.h 139ssh.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/openssl-compat.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h canohost.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h packet.h dispatch.h sshbuf.h
144ssh.o: sshbuf.h channels.h sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h misc.h readconf.h sshconnect.h kex.h mac.h sshpty.h match.h msg.h version.h ssherr.h myproposal.h utf8.h 140ssh.o: channels.h sshkey.h authfd.h authfile.h pathnames.h clientloop.h log.h misc.h readconf.h sshconnect.h kex.h mac.h crypto_api.h sshpty.h match.h msg.h version.h ssherr.h myproposal.h utf8.h
145ssh_api.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h log.h authfile.h misc.h 141ssh_api.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssh_api.h openbsd-compat/sys-queue.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h ssh.h ssh2.h packet.h dispatch.h compat.h log.h authfile.h misc.h
146ssh_api.o: version.h myproposal.h ssherr.h sshbuf.h 142ssh_api.o: version.h myproposal.h ssherr.h sshbuf.h openbsd-compat/openssl-compat.h
147sshbuf-getput-basic.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h 143sshbuf-getput-basic.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h
148sshbuf-getput-crypto.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h 144sshbuf-getput-crypto.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h
149sshbuf-misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h 145sshbuf-misc.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h
150sshbuf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h misc.h 146sshbuf.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ssherr.h sshbuf.h misc.h
151sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h hostfile.h ssh.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h compat.h sshkey.h sshconnect.h log.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h ssh2.h version.h authfile.h 147sshconnect.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h hostfile.h ssh.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h compat.h sshkey.h sshconnect.h log.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h ssh2.h version.h authfile.h ssherr.h
152sshconnect.o: ssherr.h authfd.h 148sshconnect.o: authfd.h kex.h mac.h crypto_api.h
153sshconnect2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h packet.h dispatch.h opacket.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h myproposal.h 149sshconnect2.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshbuf.h packet.h dispatch.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h sshkey.h kex.h mac.h crypto_api.h myproposal.h
154sshconnect2.o: sshconnect.h authfile.h dh.h authfd.h log.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h ssherr.h utf8.h 150sshconnect2.o: sshconnect.h authfile.h dh.h authfd.h log.h misc.h readconf.h match.h canohost.h msg.h pathnames.h uidswap.h hostfile.h ssherr.h utf8.h
155sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h opacket.h log.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h 151sshd.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h log.h sshbuf.h misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h
156sshd.o: poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h ssherr.h 152sshd.o: cipher-aesctr.h rijndael.h digest.h sshkey.h kex.h mac.h crypto_api.h myproposal.h authfile.h pathnames.h atomicio.h canohost.h hostfile.h auth.h auth-pam.h audit.h loginrec.h authfd.h msg.h channels.h session.h monitor.h monitor_wrap.h ssh-sandbox.h auth-options.h version.h ssherr.h
157ssherr.o: ssherr.h 153ssherr.o: ssherr.h
158sshkey-xmss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h 154sshkey-xmss.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h
159sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h sshkey-xmss.h match.h xmss_fast.h openbsd-compat/openssl-compat.h 155sshkey.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h crypto_api.h ssh2.h ssherr.h misc.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h sshkey.h sshkey-xmss.h match.h xmss_fast.h openbsd-compat/openssl-compat.h
160sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h 156sshlogin.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshlogin.h ssherr.h loginrec.h log.h sshbuf.h misc.h servconf.h
161sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h misc.h 157sshpty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h log.h misc.h
162sshtty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h 158sshtty.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h sshpty.h
163ttymodes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h compat.h sshbuf.h ssherr.h ttymodes.h 159ttymodes.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h packet.h openbsd-compat/sys-queue.h dispatch.h log.h compat.h sshbuf.h ssherr.h ttymodes.h
164uidswap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h uidswap.h xmalloc.h 160uidswap.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h log.h uidswap.h xmalloc.h
165umac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h 161umac.o: includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h
166umac128.o: umac.c includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h 162umac128.o: umac.c includes.h config.h defines.h platform.h openbsd-compat/openbsd-compat.h openbsd-compat/base64.h openbsd-compat/sigact.h openbsd-compat/readpassphrase.h openbsd-compat/vis.h openbsd-compat/getrrsetbyname.h openbsd-compat/sha1.h openbsd-compat/sha2.h openbsd-compat/rmd160.h openbsd-compat/md5.h openbsd-compat/blf.h openbsd-compat/getopt.h openbsd-compat/bsd-misc.h openbsd-compat/bsd-setres_id.h openbsd-compat/bsd-signal.h openbsd-compat/bsd-statvfs.h openbsd-compat/bsd-waitpid.h openbsd-compat/bsd-poll.h openbsd-compat/fake-rfc2553.h openbsd-compat/bsd-cygwin_util.h openbsd-compat/port-aix.h openbsd-compat/port-irix.h openbsd-compat/port-linux.h openbsd-compat/port-solaris.h openbsd-compat/port-net.h openbsd-compat/port-uw.h openbsd-compat/bsd-nextstep.h entropy.h xmalloc.h umac.h misc.h rijndael.h
diff --git a/.gitignore b/.gitignore
index 650eb3c3c..e7e02ea72 100644
--- a/.gitignore
+++ b/.gitignore
@@ -26,3 +26,4 @@ ssh-keysign
26ssh-pkcs11-helper 26ssh-pkcs11-helper
27sshd 27sshd
28!regress/misc/fuzz-harness/Makefile 28!regress/misc/fuzz-harness/Makefile
29tags
diff --git a/.skipped-commit-ids b/.skipped-commit-ids
index f1b3b7640..01d447a49 100644
--- a/.skipped-commit-ids
+++ b/.skipped-commit-ids
@@ -5,6 +5,7 @@ fa728823ba21c4b45212750e1d3a4b2086fd1a62 more Makefile refactoring
51de0e85522051eb2ffa00437e1885e9d7b3e0c2e moduli update 51de0e85522051eb2ffa00437e1885e9d7b3e0c2e moduli update
6814b2f670df75759e1581ecef530980b2b3d7e0f remove redundant make defs 6814b2f670df75759e1581ecef530980b2b3d7e0f remove redundant make defs
704431e8e7872f49a2129bf080a6b73c19d576d40 moduli update 704431e8e7872f49a2129bf080a6b73c19d576d40 moduli update
8c07772f58028fda683ee6abd41c73da3ff70d403 moduli update
8 9
9Old upstream tree: 10Old upstream tree:
10 11
diff --git a/ChangeLog b/ChangeLog
index 0307f62e0..fdc0a0619 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,2602 @@
1commit fd0fa130ecf06d7d092932adcd5d77f1549bfc8d
2Author: Damien Miller <djm@mindrot.org>
3Date: Thu Apr 18 08:52:57 2019 +1000
4
5 makedepend
6
7commit 5de397a876b587ba05a9169237deffdc71f273b0
8Author: Damien Miller <djm@mindrot.org>
9Date: Fri Apr 5 11:29:51 2019 -0700
10
11 second thoughts: leave README in place
12
13 A number of contrib/* files refer to the existing README so let's leave
14 it in place for release and add the new markdown version in parallel.
15
16 I'll get rid of README after release.
17
18commit 5d3127d9274519b25ed10e320f45045ba8d7f3be
19Author: Damien Miller <djm@mindrot.org>
20Date: Fri Apr 5 11:29:31 2019 -0700
21
22 Revert "rewrite README"
23
24 This reverts commit 9444d82678cb7781820da4d1c23b3c2b9fb1e12f.
25
26commit 9444d82678cb7781820da4d1c23b3c2b9fb1e12f
27Author: Damien Miller <djm@mindrot.org>
28Date: Fri Apr 5 11:21:48 2019 -0700
29
30 rewrite README
31
32 Include basic build instructions and comments on commonly-used build-
33 time flags, links to the manual pages and other resources.
34
35 Now in Markdown format for better viewing on github, etc.
36
37commit a924de0c4908902433813ba205bee1446bd1a157
38Author: Damien Miller <djm@mindrot.org>
39Date: Fri Apr 5 03:41:52 2019 +1100
40
41 update versions
42
43commit 312dcee739bca5d6878c536537b2a8a497314b75
44Author: djm@openbsd.org <djm@openbsd.org>
45Date: Wed Apr 3 15:48:45 2019 +0000
46
47 upstream: openssh-8.0
48
49 OpenBSD-Commit-ID: 5aafdf218679dab982fea20771afd643be9a127b
50
51commit 885bc114692046d55e2a170b932bdc0092fa3456
52Author: Damien Miller <djm@mindrot.org>
53Date: Thu Apr 4 02:47:40 2019 +1100
54
55 session: Do not use removed API
56
57 from Jakub Jelen
58
59commit 9d7b2882b0c9a5e9bf8312ce4075bf178e2b98be
60Author: djm@openbsd.org <djm@openbsd.org>
61Date: Fri Mar 29 11:31:40 2019 +0000
62
63 upstream: when logging/fataling on error, include a bit more detail
64
65 than just the function name and the error message
66
67 OpenBSD-Commit-ID: dd72d7eba2215fcb89be516c378f633ea5bcca9f
68
69commit 79a87d32783d6c9db40af8f35e091d9d30365ae7
70Author: Darren Tucker <dtucker@dtucker.net>
71Date: Wed Apr 3 06:27:45 2019 +1100
72
73 Remove "struct ssh" from sys_auth_record_login.
74
75 It's not needed, and is not available from the call site in loginrec.c
76 Should only affect AIX, spotted by Kevin Brott.
77
78commit 138c0d52cdc90f9895333b82fc57d81cce7a3d90
79Author: Darren Tucker <dtucker@dtucker.net>
80Date: Tue Apr 2 18:21:35 2019 +1100
81
82 Adapt custom_failed_login to new prototype.
83
84 Spotted by Kevin Brott.
85
86commit a0ca4009ab2f0b1007ec8ab6864dbf9b760a8ed5
87Author: Darren Tucker <dtucker@dtucker.net>
88Date: Mon Apr 1 20:07:23 2019 +1100
89
90 Add includes.h for compat layer.
91
92 Should fix build on AIX 7.2.
93
94commit 00991151786ce9b1d577bdad1f83a81d19c8236d
95Author: Tim Rice <tim@multitalents.net>
96Date: Sun Mar 31 22:14:22 2019 -0700
97
98 Stop USL compilers for erroring with "integral constant expression expected"
99
100commit 43f47ebbdd4037b569c23b8f4f7981f53b567f1d
101Author: Tim Rice <tim@multitalents.net>
102Date: Sun Mar 31 19:22:19 2019 -0700
103
104 Only use O_NOFOLLOW in fchownat and fchmodat if defined
105
106commit 342d6e51589b184c337cccfc4c788b60ff8b3765
107Author: Jakub Jelen <jjelen@redhat.com>
108Date: Fri Mar 29 12:29:41 2019 +0100
109
110 Adjust softhsm2 path on Fedora Linux for regress
111
112 The SoftHSM lives in Fedora in /usr/lib64/pkcs11/libsofthsm2.so
113
114commit f5abb05f8c7358dacdcb866fe2813f6d8efd5830
115Author: Darren Tucker <dtucker@dtucker.net>
116Date: Thu Mar 28 09:26:14 2019 +1100
117
118 Only use O_NOFOLLOW in utimensat if defined.
119
120 Fixes build on systems that don't have it (Solaris <=9) Found by
121 Tom G. Christensen.
122
123commit 786cd4c1837fdc3fe7b4befe54a3f37db7df8715
124Author: Corinna Vinschen <vinschen@redhat.com>
125Date: Wed Mar 27 18:18:21 2019 +0100
126
127 drop old Cygwin considerations
128
129 - Cygwin supports non-DOS characters in filenames
130 - Cygwin does not support Windows XP anymore
131
132 Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
133
134commit 21da87f439b48a85b951ef1518fe85ac0273e719
135Author: djm@openbsd.org <djm@openbsd.org>
136Date: Wed Mar 27 09:29:14 2019 +0000
137
138 upstream: fix interaction between ClientAliveInterval and RekeyLimit
139
140 that could cause connection to close incorrectly; Report and patch from Jakub
141 Jelen in bz#2757; ok dtucker@ markus@
142
143 OpenBSD-Commit-ID: 17229a8a65bd8e6c2080318ec2b7a61e1aede3fb
144
145commit 4f0019a9afdb4a94d83b75e82dbbbe0cbe826c56
146Author: djm@openbsd.org <djm@openbsd.org>
147Date: Mon Mar 25 22:34:52 2019 +0000
148
149 upstream: Fix authentication failures when "AuthenticationMethods
150
151 any" in a Match block overrides a more restrictive global default.
152
153 Spotted by jmc@, ok markus@
154
155 OpenBSD-Commit-ID: a90a4fe2ab81d0eeeb8fdfc21af81f7eabda6666
156
157commit d6e5def308610f194c0ec3ef97a34a3e9630e190
158Author: djm@openbsd.org <djm@openbsd.org>
159Date: Mon Mar 25 22:33:44 2019 +0000
160
161 upstream: whitespace
162
163 OpenBSD-Commit-ID: 106e853ae8a477e8385bc53824d3884a8159db07
164
165commit 26e0cef07b04479537c971dec898741df1290fe5
166Author: dtucker@openbsd.org <dtucker@openbsd.org>
167Date: Mon Mar 25 16:19:44 2019 +0000
168
169 upstream: Expand comment to document rationale for default key
170
171 sizes. "seems worthwhile" deraadt.
172
173 OpenBSD-Commit-ID: 72e5c0983d7da1fb72f191870f36cb58263a2456
174
175commit f47269ea67eb4ff87454bf0d2a03e55532786482
176Author: dtucker@openbsd.org <dtucker@openbsd.org>
177Date: Mon Mar 25 15:49:00 2019 +0000
178
179 upstream: Increase the default RSA key size to 3072 bits. Based on
180
181 the estimates from NIST Special Publication 800-57, 3k bits provides security
182 equivalent to 128 bits which is the smallest symmetric cipher we enable by
183 default. ok markus@ deraadt@
184
185 OpenBSD-Commit-ID: 461dd32ebe808f88f4fc3ec74749b0e6bef2276b
186
187commit 62949c5b37af28d8490d94866e314a76be683a5e
188Author: jmc@openbsd.org <jmc@openbsd.org>
189Date: Fri Mar 22 20:58:34 2019 +0000
190
191 upstream: full stop in the wrong place;
192
193 OpenBSD-Commit-ID: 478a0567c83553a2aebf95d0f1bd67ac1b1253e4
194
195commit 1b1332b5bb975d759a50b37f0e8bc8cfb07a0bb0
196Author: jmc@openbsd.org <jmc@openbsd.org>
197Date: Sat Mar 16 19:14:21 2019 +0000
198
199 upstream: benno helped me clean up the tcp forwarding section;
200
201 OpenBSD-Commit-ID: d4bec27edefde636fb632b7f0b7c656b9c7b7f08
202
203commit 2aee9a49f668092ac5c9d34e904ef7a9722e541d
204Author: markus@openbsd.org <markus@openbsd.org>
205Date: Fri Mar 8 17:24:43 2019 +0000
206
207 upstream: fix use-after-free in ssh-pkcs11; found by hshoexer w/AFL
208
209 OpenBSD-Commit-ID: febce81cca72b71f70513fbee4ff52ca050f675c
210
211commit 9edbd7821e6837e98e7e95546cede804dac96754
212Author: Darren Tucker <dtucker@dtucker.net>
213Date: Thu Mar 14 10:17:28 2019 +1100
214
215 Fix build when configured --without-openssl.
216
217 ok djm@
218
219commit 825ab32f0d04a791e9d19d743c61ff8ed9b4d8e5
220Author: Darren Tucker <dtucker@dtucker.net>
221Date: Thu Mar 14 08:51:17 2019 +1100
222
223 On Cygwin run sshd as SYSTEM where possible.
224
225 Seteuid now creates user token using S4U. We don't create a token
226 from scratch anymore, so we don't need the "Create a process token"
227 privilege. The service can run under SYSTEM again...
228
229 ...unless Cygwin is running on Windows Vista or Windows 7 in the
230 WOW64 32 bit emulation layer. It turns out that WOW64 on these systems
231 didn't implement MsV1_0 S4U Logon so we still need the fallback
232 to NtCreateToken for these systems.
233
234 Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
235
236commit a212107bfdf4d3e870ab7a443e4d906e5b9578c3
237Author: Darren Tucker <dtucker@dtucker.net>
238Date: Wed Mar 13 10:49:16 2019 +1100
239
240 Replace alloca with xcalloc.
241
242 The latter checks for memory exhaustion and integer overflow and may be
243 at a less predictable place. Sanity check by vinschen at redhat.com, ok
244 djm@
245
246commit daa7505aadca68ba1a2c70cbdfce423208eb91ee
247Author: Darren Tucker <dtucker@dtucker.net>
248Date: Tue Mar 12 09:19:19 2019 +1100
249
250 Use Cygwin-specific matching only for users+groups.
251
252 Patch from vinschen at redhat.com, updated a little by me.
253
254commit fd10cf027b56f9aaa80c9e3844626a05066589a4
255Author: dtucker@openbsd.org <dtucker@openbsd.org>
256Date: Wed Mar 6 22:14:23 2019 +0000
257
258 upstream: Move checks for lists of users or groups into their own
259
260 function. This is a no-op on OpenBSD but will make things easier in
261 -portable, eg on systems where these checks should be case-insensitive. ok
262 djm@
263
264 OpenBSD-Commit-ID: 8bc9c8d98670e23f8eaaaefe29c1f98e7ba0487e
265
266commit ab5fee8eb6a011002fd9e32b1597f02aa8804a25
267Author: dtucker@openbsd.org <dtucker@openbsd.org>
268Date: Wed Mar 6 21:06:59 2019 +0000
269
270 upstream: Reset last-seen time when sending a keepalive. Prevents
271
272 sending two keepalives successively and prematurely terminating connection
273 when ClientAliveCount=1. While there, collapse two similar tests into one.
274 ok markus@
275
276 OpenBSD-Commit-ID: 043670d201dfe222537a2a4bed16ce1087de5ddd
277
278commit c13b74530f9f1d9df7aeae012004b31b2de4438e
279Author: naddy@openbsd.org <naddy@openbsd.org>
280Date: Tue Mar 5 16:17:12 2019 +0000
281
282 upstream: PKCS#11 support is no longer limited to RSA; ok benno@
283
284 kn@
285
286 OpenBSD-Commit-ID: 1a9bec64d530aed5f434a960e7515a3e80cbc826
287
288commit e9552d6043db7cd170ac6ba1b4d2c7a5eb2c3201
289Author: djm@openbsd.org <djm@openbsd.org>
290Date: Fri Mar 1 03:29:32 2019 +0000
291
292 upstream: in ssh_set_newkeys(), mention the direction that we're
293
294 keying in debug messages. Previously it would be difficult to tell which
295 direction it was talking about
296
297 OpenBSD-Commit-ID: c2b71bfcceb2a7389b9d0b497fb2122a406a522d
298
299commit 76a24b3fa193a9ca3e47a8779d497cb06500798b
300Author: djm@openbsd.org <djm@openbsd.org>
301Date: Fri Mar 1 02:32:39 2019 +0000
302
303 upstream: Fix two race conditions in sshd relating to SIGHUP:
304
305 1. Recently-forked child processes will briefly remain listening to
306 listen_socks. If the main server sshd process completes its restart
307 via execv() before these sockets are closed by the child processes
308 then it can fail to listen at the desired addresses/ports and/or
309 fail to restart.
310
311 2. When a SIGHUP is received, there may be forked child processes that
312 are awaiting their reexecution state. If the main server sshd
313 process restarts before passing this state, these child processes
314 will yield errors and use a fallback path of reading the current
315 sshd_config from the filesystem rather than use the one that sshd
316 was started with.
317
318 To fix both of these cases, we reuse the startup_pipes that are shared
319 between the main server sshd and forked children. Previously this was
320 used solely to implement tracking of pre-auth child processes for
321 MaxStartups, but this extends the messaging over these pipes to include
322 a child->parent message that the parent process is safe to restart. This
323 message is sent from the child after it has completed its preliminaries:
324 closing listen_socks and receiving its reexec state.
325
326 bz#2953, reported by Michal Koutný; ok markus@ dtucker@
327
328 OpenBSD-Commit-ID: 7df09eacfa3ce13e9a7b1e9f17276ecc924d65ab
329
330commit de817e9dfab99473017d28cdf69e60397d00ea21
331Author: djm@openbsd.org <djm@openbsd.org>
332Date: Fri Mar 1 02:16:47 2019 +0000
333
334 upstream: mention PKCS11Provide=none, reword a little and remove
335
336 mention of RSA keys only (since we support ECDSA now and might support others
337 in the future). Inspired by Jakub Jelen via bz#2974
338
339 OpenBSD-Commit-ID: a92e3686561bf624ccc64ab320c96c9e9a263aa5
340
341commit 95a8058c1a90a27acbb91392ba206854abc85226
342Author: djm@openbsd.org <djm@openbsd.org>
343Date: Fri Mar 1 02:08:50 2019 +0000
344
345 upstream: let PKCS11Provider=none do what users expect
346
347 print PKCS11Provider instead of obsolete SmartcardDevice in config dump.
348
349 bz#2974 ok dtucker@
350
351 OpenBSD-Commit-ID: c303d6f0230a33aa2dd92dc9b68843d56a64f846
352
353commit 8e7bac35aa576d2fd7560836da83733e864ce649
354Author: markus@openbsd.org <markus@openbsd.org>
355Date: Wed Feb 27 19:37:01 2019 +0000
356
357 upstream: dup stdout/in for proxycommand=-, otherwise stdout might
358
359 be redirected to /dev/null; ok djm@
360
361 OpenBSD-Commit-ID: 97dfce4c47ed4055042de8ebde85b7d88793e595
362
363commit 9b61130fbd95d196bce81ebeca94a4cb7c0d5ba0
364Author: djm@openbsd.org <djm@openbsd.org>
365Date: Sat Feb 23 08:20:43 2019 +0000
366
367 upstream: openssh-7.9 accidentally reused the server's algorithm lists
368
369 in the client for KEX, ciphers and MACs. The ciphers and MACs were identical
370 between the client and server, but the error accidentially disabled the
371 diffie-hellman-group-exchange-sha1 KEX method.
372
373 This fixes the client code to use the correct method list, but
374 because nobody complained, it also disables the
375 diffie-hellman-group-exchange-sha1 KEX method.
376
377 Reported by nuxi AT vault24.org via bz#2697; ok dtucker
378
379 OpenBSD-Commit-ID: e30c33a23c10fd536fefa120e86af1842e33fd57
380
381commit 37638c752041d591371900df820f070037878a2d
382Author: Corinna Vinschen <vinschen@redhat.com>
383Date: Wed Feb 20 13:41:25 2019 +0100
384
385 Cygwin: implement case-insensitive Unicode user and group name matching
386
387 The previous revert enabled case-insensitive user names again. This
388 patch implements the case-insensitive user and group name matching.
389 To allow Unicode chars, implement the matcher using wchar_t chars in
390 Cygwin-specific code. Keep the generic code changes as small as possible.
391 Cygwin: implement case-insensitive Unicode user and group name matching
392
393 Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
394
395commit bed1d43698807a07bb4ddb93a46b0bd84b9970b3
396Author: Darren Tucker <dtucker@dtucker.net>
397Date: Fri Feb 22 15:21:21 2019 +1100
398
399 Revert unintended parts of previous commit.
400
401commit f02afa350afac1b2f2d1413259a27a4ba1e2ca24
402Author: Corinna Vinschen <vinschen@redhat.com>
403Date: Wed Feb 20 13:41:24 2019 +0100
404
405 Revert "[auth.c] On Cygwin, refuse usernames that have differences in case"
406
407 This reverts commit acc9b29486dfd649dfda474e5c1a03b317449f1c.
408
409 Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
410
411commit 4c55b674835478eb80a1a7aeae588aa654e2a433
412Author: Corinna Vinschen <vinschen@redhat.com>
413Date: Sat Feb 16 14:13:43 2019 +0100
414
415 Add tags to .gitignore
416
417 Signed-off-by: Corinna Vinschen <vinschen@redhat.com>
418
419commit 625b62634c33eaef4b80d07529954fe5c6435fe5
420Author: djm@openbsd.org <djm@openbsd.org>
421Date: Fri Feb 22 03:37:11 2019 +0000
422
423 upstream: perform removal of agent-forwarding directory in forward
424
425 setup error path with user's privileged. This is a no-op as this code always
426 runs with user privilege now that we no longer support running sshd with
427 privilege separation disabled, but as long as the privsep skeleton is there
428 we should follow the rules.
429 MIME-Version: 1.0
430 Content-Type: text/plain; charset=UTF-8
431 Content-Transfer-Encoding: 8bit
432
433 bz#2969 with patch from Erik Sjölund
434
435 OpenBSD-Commit-ID: 2b708401a5a8d6133c865d7698d9852210dca846
436
437commit d9ecfaba0b2f1887d20e4368230632e709ca83be
438Author: jmc@openbsd.org <jmc@openbsd.org>
439Date: Mon Feb 18 07:02:34 2019 +0000
440
441 upstream: sync the description of ~/.ssh/config with djm's updated
442
443 description in ssh.1; issue pointed out by andreas kahari
444
445 ok dtucker djm
446
447 OpenBSD-Commit-ID: 1b01ef0ae2c6328165150badae317ec92e52b01c
448
449commit 38e83e4f219c752ebb1560633b73f06f0392018b
450Author: djm@openbsd.org <djm@openbsd.org>
451Date: Tue Feb 12 23:53:10 2019 +0000
452
453 upstream: fix regression in r1.302 reported by naddy@ - only the first
454
455 public key from the agent was being attempted for use.
456
457 OpenBSD-Commit-ID: 07116aea521a04888718b2157f1ca723b2f46c8d
458
459commit 5c68ea8da790d711e6dd5f4c30d089c54032c59a
460Author: djm@openbsd.org <djm@openbsd.org>
461Date: Mon Feb 11 09:44:42 2019 +0000
462
463 upstream: cleanup GSSAPI authentication context after completion of the
464
465 authmethod. Move function-static GSSAPI state to the client Authctxt
466 structure. Make static a bunch of functions that aren't used outside this
467 file.
468
469 Based on patch from Markus Schmidt <markus@blueflash.cc>; ok markus@
470
471 OpenBSD-Commit-ID: 497fb792c0ddb4f1ba631b6eed526861f115dbe5
472
473commit a8c807f1956f81a92a758d3d0237d0ff06d0be5d
474Author: benno@openbsd.org <benno@openbsd.org>
475Date: Sun Feb 10 16:35:41 2019 +0000
476
477 upstream: ssh-keygen -D pkcs11.so needs to initialize pkcs11
478
479 interactive, so it can ask for the smartcards PIN. ok markus@
480
481 OpenBSD-Commit-ID: 1be7ccf88f1876e0fc4d7c9b3f96019ac5655bab
482
483commit 3d896c157c722bc47adca51a58dca859225b5874
484Author: djm@openbsd.org <djm@openbsd.org>
485Date: Sun Feb 10 11:15:52 2019 +0000
486
487 upstream: when checking that filenames sent by the server side
488
489 match what the client requested, be prepared to handle shell-style brace
490 alternations, e.g. "{foo,bar}".
491
492 "looks good to me" millert@ + in snaps for the last week courtesy
493 deraadt@
494
495 OpenBSD-Commit-ID: 3b1ce7639b0b25b2248e3a30f561a548f6815f3e
496
497commit 318e4f8548a4f5c0c913f61e27d4fc21ffb1eaae
498Author: djm@openbsd.org <djm@openbsd.org>
499Date: Sun Feb 10 11:10:57 2019 +0000
500
501 upstream: syslog when connection is dropped for attempting to run a
502
503 command when ForceCommand=internal-sftp is in effect; bz2960; ok dtucker@
504
505 OpenBSD-Commit-ID: 8c87fa66d7fc6c0fffa3a3c28e8ab5e8dde234b8
506
507commit 2ff2e19653b8c0798b8b8eff209651bdb1be2761
508Author: Damien Miller <djm@mindrot.org>
509Date: Fri Feb 8 14:53:35 2019 +1100
510
511 don't set $MAIL if UsePam=yes
512
513 PAM typically specifies the user environment if it's enabled, so don't
514 second guess. bz#2937; ok dtucker@
515
516commit 03e92dd27d491fe6d1a54e7b2f44ef1b0a916e52
517Author: Damien Miller <djm@mindrot.org>
518Date: Fri Feb 8 14:50:36 2019 +1100
519
520 use same close logic for stderr as stdout
521
522 Avoids sending SIGPIPE to child processes after their parent exits
523 if they attempt to write to stderr.
524
525 Analysis and patch from JD Paul; patch reworked by Jakub Jelen and
526 myself. bz#2071; ok dtucker@
527
528commit 8c53d409baeeaf652c0c125a9b164edc9dbeb6de
529Author: dtucker@openbsd.org <dtucker@openbsd.org>
530Date: Tue Feb 5 11:35:56 2019 +0000
531
532 upstream: Adapt code in the non-USE_PIPES codepath to the new packet
533
534 API. This code is not normally reachable since USE_PIPES is always defined.
535 bz#2961, patch from adrian.fita at gmail com.
536
537 OpenBSD-Commit-ID: 8d8428d678d1d5eb4bb21921df34e8173e6d238a
538
539commit 7a7fdca78de4b4774950be056099e579ef595414
540Author: djm@openbsd.org <djm@openbsd.org>
541Date: Mon Feb 4 23:37:54 2019 +0000
542
543 upstream: fix NULL-deref crash in PKCS#11 code when attempting
544
545 login to a token requiring a PIN; reported by benno@ fix mostly by markus@
546
547 OpenBSD-Commit-ID: 438d0b114b1b4ba25a9869733db1921209aa9a31
548
549commit cac302a4b42a988e54d32eb254b29b79b648dbf5
550Author: dtucker@openbsd.org <dtucker@openbsd.org>
551Date: Mon Feb 4 02:39:42 2019 +0000
552
553 upstream: Remove obsolete "Protocol" from commented out examples. Patch
554
555 from samy.mahmoudi at gmail com.
556
557 OpenBSD-Commit-ID: 16aede33dae299725a03abdac5dcb4d73f5d0cbf
558
559commit 483b3b638500fd498b4b529356e5a0e18cf76891
560Author: dtucker@openbsd.org <dtucker@openbsd.org>
561Date: Fri Feb 1 03:52:23 2019 +0000
562
563 upstream: Save connection timeout and restore for 2nd and
564
565 subsequent attempts, preventing them from having no timeout. bz#2918, ok
566 djm@
567
568 OpenBSD-Commit-ID: 4977f1d0521d9b6bba0c9a20d3d226cefac48292
569
570commit 5f004620fdc1b2108139300ee12f4014530fb559
571Author: markus@openbsd.org <markus@openbsd.org>
572Date: Wed Jan 30 19:51:15 2019 +0000
573
574 upstream: Add authors for public domain sntrup4591761 code;
575
576 confirmed by Daniel J. Bernstein
577
578 OpenBSD-Commit-ID: b4621f22b8b8ef13e063c852af5e54dbbfa413c1
579
580commit 2c21b75a7be6ebdcbceaebb43157c48dbb36f3d8
581Author: jmc@openbsd.org <jmc@openbsd.org>
582Date: Sun Jan 27 07:14:11 2019 +0000
583
584 upstream: add -T to usage();
585
586 OpenBSD-Commit-ID: a7ae14d9436c64e1bd05022329187ea3a0ce1899
587
588commit 19a0f0529d3df04118da829528cac7ceff380b24
589Author: dtucker@openbsd.org <dtucker@openbsd.org>
590Date: Mon Jan 28 03:50:39 2019 +0000
591
592 upstream: The test sshd_config in in $OBJ.
593
594 OpenBSD-Regress-ID: 1e5d908a286d8e7de3a15a0020c8857f3a7c9172
595
596commit 8fe25440206319d15b52d12b948a5dfdec14dca3
597Author: dtucker@openbsd.org <dtucker@openbsd.org>
598Date: Mon Jan 28 03:28:10 2019 +0000
599
600 upstream: Remove leftover debugging.
601
602 OpenBSD-Regress-ID: 3d86c3d4867e46b35af3fd2ac8c96df0ffdcfeb9
603
604commit e30d32364d12c351eec9e14be6c61116f9d6cc90
605Author: dtucker@openbsd.org <dtucker@openbsd.org>
606Date: Mon Jan 28 00:12:36 2019 +0000
607
608 upstream: Enable ssh-dss for the agent test. Disable it for the
609
610 certificate test.
611
612 OpenBSD-Regress-ID: 388c1e03e1def539d350f139b37d69f12334668d
613
614commit ffdde469ed56249f5dc8af98da468dde35531398
615Author: dtucker@openbsd.org <dtucker@openbsd.org>
616Date: Mon Jan 28 00:08:26 2019 +0000
617
618 upstream: Count the number of key types instead of assuming there
619
620 are only two.
621
622 OpenBSD-Regress-ID: 0998702c41235782cf0beee396ec49b5056eaed9
623
624commit 1d05b4adcba08ab068466e5c08dee2f5417ec53a
625Author: Corinna Vinschen <vinschen@redhat.com>
626Date: Sat Jan 26 23:42:40 2019 +0100
627
628 Cygwin: only tweak sshd_config file if it's new, drop creating sshd user
629
630 The sshd_config tweaks were executed even if the old file was
631 still in place. Fix that. Also disable sshd user creation.
632 It's not used on Cygwin.
633
634commit 89843de0c4c733501f6b4f988098e6e06963df37
635Author: Corinna Vinschen <vinschen@redhat.com>
636Date: Sat Jan 26 23:03:12 2019 +0100
637
638 Cygwin: Change service name to cygsshd
639
640 Microsoft hijacked the sshd service name without asking.
641
642commit 2a9b3a2ce411d16cda9c79ab713c55f65b0ec257
643Author: dtucker@openbsd.org <dtucker@openbsd.org>
644Date: Sun Jan 27 06:30:53 2019 +0000
645
646 upstream: Generate all key supported key types and enable for keyscan
647
648 test.
649
650 OpenBSD-Regress-ID: 72f72ff49946c61bc949e1692dd9e3d71370891b
651
652commit 391ffc4b9d31fa1f4ad566499fef9176ff8a07dc
653Author: djm@openbsd.org <djm@openbsd.org>
654Date: Sat Jan 26 22:41:28 2019 +0000
655
656 upstream: check in scp client that filenames sent during
657
658 remote->local directory copies satisfy the wildcard specified by the user.
659
660 This checking provides some protection against a malicious server
661 sending unexpected filenames, but it comes at a risk of rejecting wanted
662 files due to differences between client and server wildcard expansion rules.
663
664 For this reason, this also adds a new -T flag to disable the check.
665
666 reported by Harry Sintonen
667 fix approach suggested by markus@;
668 has been in snaps for ~1wk courtesy deraadt@
669
670 OpenBSD-Commit-ID: 00f44b50d2be8e321973f3c6d014260f8f7a8eda
671
672commit c2c18a39683db382a15b438632afab3f551d50ce
673Author: djm@openbsd.org <djm@openbsd.org>
674Date: Sat Jan 26 22:35:01 2019 +0000
675
676 upstream: make ssh-keyscan return a non-zero exit status if it
677
678 finds no keys. bz#2903
679
680 OpenBSD-Commit-ID: 89f1081fb81d950ebb48e6e73d21807b2723d488
681
682commit 05b9a466700b44d49492edc2aa415fc2e8913dfe
683Author: dtucker@openbsd.org <dtucker@openbsd.org>
684Date: Thu Jan 24 17:00:29 2019 +0000
685
686 upstream: Accept the host key fingerprint as a synonym for "yes"
687
688 when accepting an unknown host key. This allows you to paste a fingerprint
689 obtained out of band into the yes/no prompt and have the client do the
690 comparison for you. ok markus@ djm@
691
692 OpenBSD-Commit-ID: 3c47d10b9f43d3d345e044fd9ec09709583a2767
693
694commit bdc6c63c80b55bcbaa66b5fde31c1cb1d09a41eb
695Author: dtucker@openbsd.org <dtucker@openbsd.org>
696Date: Thu Jan 24 16:52:17 2019 +0000
697
698 upstream: Have progressmeter force an update at the beginning and
699
700 end of each transfer. Fixes the problem recently introduces where very quick
701 transfers do not display the progressmeter at all. Spotted by naddy@
702
703 OpenBSD-Commit-ID: 68dc46c259e8fdd4f5db3ec2a130f8e4590a7a9a
704
705commit 258e6ca003e47f944688ad8b8de087b58a7d966c
706Author: dtucker@openbsd.org <dtucker@openbsd.org>
707Date: Thu Jan 24 02:42:23 2019 +0000
708
709 upstream: Check for both EAGAIN and EWOULDBLOCK. This is a no-op
710
711 in OpenBSD (they are the same value) but makes things easier in -portable
712 where they may be distinct values. "sigh ok" deraadt@
713
714 (ID sync only, portable already had this change).
715
716 OpenBSD-Commit-ID: 91f2bc7c0ecec905915ed59fa37feb9cc90e17d7
717
718commit 281ce042579b834cdc1e74314f1fb2eeb75d2612
719Author: dtucker@openbsd.org <dtucker@openbsd.org>
720Date: Thu Jan 24 02:34:52 2019 +0000
721
722 upstream: Always initialize 2nd arg to hpdelim2. It populates that
723
724 *ONLY IF* there's a delimiter. If there's not (the common case) it checked
725 uninitialized memory, which usually passed, but if not would cause spurious
726 failures when the uninitialized memory happens to contain "/". ok deraadt.
727
728 OpenBSD-Commit-ID: 4291611eaf2a53d4c92f4a57c7f267c9f944e0d3
729
730commit d05ea255678d9402beda4416cd0360f3e5dfe938
731Author: dtucker@openbsd.org <dtucker@openbsd.org>
732Date: Wed Jan 23 21:50:56 2019 +0000
733
734 upstream: Remove support for obsolete host/port syntax.
735
736 host/port was added in 2001 as an alternative to host:port syntax for
737 the benefit of IPv6 users. These days there are establised standards
738 for this like [::1]:22 and the slash syntax is easily mistaken for CIDR
739 notation, which OpenSSH now supports for some things. Remove the slash
740 notation from ListenAddress and PermitOpen. bz#2335, patch from jjelen
741 at redhat.com, ok markus@
742
743 OpenBSD-Commit-ID: fae5f4e23c51a368d6b2d98376069ac2b10ad4b7
744
745commit 177d6c80c557a5e060cd343a0c116a2f1a7f43db
746Author: dtucker@openbsd.org <dtucker@openbsd.org>
747Date: Wed Jan 23 20:48:52 2019 +0000
748
749 upstream: Remove duplicate word. bz#2958, patch from jjelen at
750
751 redhat.com
752
753 OpenBSD-Commit-ID: cca3965a8333f2b6aae48b79ec1d72f7a830dd2c
754
755commit be3e6cba95dffe5fcf190c713525b48c837e7875
756Author: dtucker@openbsd.org <dtucker@openbsd.org>
757Date: Wed Jan 23 09:49:00 2019 +0000
758
759 upstream: Remove 3 as a guess for possible generator during moduli
760
761 generation. It's not mentioned in RFC4419 and it's not possible for
762 Sophie-Germain primes greater than 5. bz#2330, from Christian Wittenhorst ,
763 ok djm@ tb@
764
765 OpenBSD-Commit-ID: 1467652e6802ad3333b0959282d8d49dfe22c8cd
766
767commit 8976f1c4b2721c26e878151f52bdf346dfe2d54c
768Author: dtucker@openbsd.org <dtucker@openbsd.org>
769Date: Wed Jan 23 08:01:46 2019 +0000
770
771 upstream: Sanitize scp filenames via snmprintf. To do this we move
772
773 the progressmeter formatting outside of signal handler context and have the
774 atomicio callback called for EINTR too. bz#2434 with contributions from djm
775 and jjelen at redhat.com, ok djm@
776
777 OpenBSD-Commit-ID: 1af61c1f70e4f3bd8ab140b9f1fa699481db57d8
778
779commit 6249451f381755f792c6b9e2c2f80cdc699c14e2
780Author: Darren Tucker <dtucker@dtucker.net>
781Date: Thu Jan 24 10:00:20 2019 +1100
782
783 For broken read/readv comparisons, poll(RW).
784
785 In the cases where we can't compare to read or readv function pointers
786 for some reason we currently ifdef out the poll() used to block while
787 waiting for reads or writes, falling back to busy waiting. This restores
788 the poll() in this case, but has it always check for read or write,
789 removing an inline ifdef in the process.
790
791commit 5cb503dff4db251520e8bf7d23b9c97c06eee031
792Author: Darren Tucker <dtucker@dtucker.net>
793Date: Thu Jan 24 09:55:16 2019 +1100
794
795 Include unistd.h for strmode().
796
797commit f236ca2741f29b5c443c0b2db3aa9afb9ad9befe
798Author: Darren Tucker <dtucker@dtucker.net>
799Date: Thu Jan 24 09:50:58 2019 +1100
800
801 Also undef SIMPLEQ_FOREACH_SAFE.
802
803 Prevents macro redefinition warning on at least NetBSD 6.1.
804
805commit be063945e4e7d46b1734d973bf244c350fae172a
806Author: djm@openbsd.org <djm@openbsd.org>
807Date: Wed Jan 23 04:51:02 2019 +0000
808
809 upstream: allow auto-incrementing certificate serial number for certs
810
811 signed in a single commandline.
812
813 OpenBSD-Commit-ID: 39881087641efb8cd83c7ec13b9c98280633f45b
814
815commit 851f80328931975fe68f71af363c4537cb896da2
816Author: djm@openbsd.org <djm@openbsd.org>
817Date: Wed Jan 23 04:16:22 2019 +0000
818
819 upstream: move a bunch of global flag variables to main(); make the
820
821 rest static
822
823 OpenBSD-Commit-ID: fa431d92584e81fe99f95882f4c56b43fe3242dc
824
825commit 2265402dc7d701a9aca9f8a7b7b0fd45b65c479f
826Author: Damien Miller <djm@mindrot.org>
827Date: Wed Jan 23 13:03:16 2019 +1100
828
829 depend
830
831commit 2c223878e53cc46def760add459f5f7c4fb43e35
832Author: djm@openbsd.org <djm@openbsd.org>
833Date: Wed Jan 23 02:01:10 2019 +0000
834
835 upstream: switch mainloop from select(2) to poll(2); ok deraadt@
836
837 OpenBSD-Commit-ID: 37645419a330037d297f6f0adc3b3663e7ae7b2e
838
839commit bb956eaa94757ad058ff43631c3a7d6c94d38c2f
840Author: djm@openbsd.org <djm@openbsd.org>
841Date: Wed Jan 23 00:30:41 2019 +0000
842
843 upstream: pass most arguments to the KEX hash functions as sshbuf
844
845 rather than pointer+length; ok markus@
846
847 OpenBSD-Commit-ID: ef0c89c52ccc89817a13a5205725148a28492bf7
848
849commit d691588b8e29622c66abf8932362b522cf7f4051
850Author: djm@openbsd.org <djm@openbsd.org>
851Date: Tue Jan 22 22:58:50 2019 +0000
852
853 upstream: backoff reading messages from active connections when the
854
855 input buffer is too full to read one, or if the output buffer is too full to
856 enqueue a response; feedback & ok dtucker@
857
858 OpenBSD-Commit-ID: df3c5b6d57c968975875de40d8955cbfed05a6c8
859
860commit f99ef8de967949a1fc25a5c28263ea32736e5943
861Author: djm@openbsd.org <djm@openbsd.org>
862Date: Tue Jan 22 20:48:01 2019 +0000
863
864 upstream: add -m to usage(); reminded by jmc@
865
866 OpenBSD-Commit-ID: bca476a5236e8f94210290b3e6a507af0434613e
867
868commit 41923ce06ac149453debe472238e0cca7d5a2e5f
869Author: djm@openbsd.org <djm@openbsd.org>
870Date: Tue Jan 22 12:03:58 2019 +0000
871
872 upstream: Correct some bugs in PKCS#11 token PIN handling at
873
874 initial login, the attempt at reading the PIN could be skipped in some cases
875 especially on devices with integrated PIN readers.
876
877 based on patch from Daniel Kucera in bz#2652; ok markus@
878
879 OpenBSD-Commit-ID: fad70a61c60610afe8bb0db538c90e343e75e58e
880
881commit 2162171ad517501ba511fa9f8191945d01857bb4
882Author: djm@openbsd.org <djm@openbsd.org>
883Date: Tue Jan 22 12:00:50 2019 +0000
884
885 upstream: Support keys that set the CKA_ALWAYS_AUTHENTICATE by
886
887 requring a fresh login after the C_SignInit operation.
888
889 based on patch from Jakub Jelen in bz#2638; ok markus
890
891 OpenBSD-Commit-ID: a76e66996ba7c0923b46b74d46d499b811786661
892
893commit 7a2cb18a215b2cb335da3dc99489c52a91f4925b
894Author: djm@openbsd.org <djm@openbsd.org>
895Date: Tue Jan 22 11:51:25 2019 +0000
896
897 upstream: Mention that configuration for the destination host is
898
899 not applied to any ProxyJump/-J hosts. This has confused a few people...
900
901 OpenBSD-Commit-ID: 03f4f641df6ca236c1bfc69836a256b873db868b
902
903commit ecd2f33cb772db4fa76776543599f1c1ab6f9fa0
904Author: djm@openbsd.org <djm@openbsd.org>
905Date: Tue Jan 22 11:40:42 2019 +0000
906
907 upstream: Include -m in the synopsis for a few more commands that
908
909 support it
910
911 Be more explicit in the description of -m about where it may be used
912
913 Prompted by Jakub Jelen in bz2904
914
915 OpenBSD-Commit-ID: 3b398ac5e05d8a6356710d0ff114536c9d71046c
916
917commit ff5d2cf4ca373bb4002eef395ed2cbe2ff0826c1
918Author: djm@openbsd.org <djm@openbsd.org>
919Date: Tue Jan 22 11:26:16 2019 +0000
920
921 upstream: print the full pubkey being attempted at loglevel >=
922
923 debug2; bz2939
924
925 OpenBSD-Commit-ID: ac0fe5ca1429ebf4d460bad602adc96de0d7e290
926
927commit 180b520e2bab33b566b4b0cbac7d5f9940935011
928Author: djm@openbsd.org <djm@openbsd.org>
929Date: Tue Jan 22 11:19:42 2019 +0000
930
931 upstream: clarify: ssh-keygen -e only writes public keys, never
932
933 private
934
935 OpenBSD-Commit-ID: 7de7ff6d274d82febf9feb641e2415ffd6a30bfb
936
937commit c45616a199c322ca674315de88e788f1d2596e26
938Author: djm@openbsd.org <djm@openbsd.org>
939Date: Tue Jan 22 11:00:15 2019 +0000
940
941 upstream: mention the new vs. old key formats in the introduction
942
943 and give some hints on how keys may be converted or written in the old
944 format.
945
946 OpenBSD-Commit-ID: 9c90a9f92eddc249e07fad1204d0e15c8aa13823
947
948commit fd8eb1383a34c986a00ef13d745ae9bd3ea21760
949Author: jmc@openbsd.org <jmc@openbsd.org>
950Date: Tue Jan 22 06:58:31 2019 +0000
951
952 upstream: tweak previous;
953
954 OpenBSD-Commit-ID: d2a80e389da8e7ed71978643d8cbaa8605b597a8
955
956commit 68e924d5473c00057f8532af57741d258c478223
957Author: tb@openbsd.org <tb@openbsd.org>
958Date: Mon Jan 21 23:55:12 2019 +0000
959
960 upstream: Forgot to add -J to the synopsis.
961
962 OpenBSD-Commit-ID: 26d95e409a0b72526526fc56ca1caca5cc3d3c5e
963
964commit 622dedf1a884f2927a9121e672bd9955e12ba108
965Author: tb@openbsd.org <tb@openbsd.org>
966Date: Mon Jan 21 22:50:42 2019 +0000
967
968 upstream: Add a -J option as a shortcut for -o Proxyjump= to scp(1)
969
970 and sftp(1) to match ssh(1)'s interface.
971
972 ok djm
973
974 OpenBSD-Commit-ID: a75bc2d5f329caa7229a7e9fe346c4f41c2663fc
975
976commit c882d74652800150d538e22c80dd2bd3cdd5fae2
977Author: Darren Tucker <dtucker@dtucker.net>
978Date: Tue Jan 22 20:38:40 2019 +1100
979
980 Allow building against OpenSSL dev (3.x) version.
981
982commit d5520393572eb24aa0e001a1c61f49b104396e45
983Author: Damien Miller <djm@mindrot.org>
984Date: Tue Jan 22 10:50:40 2019 +1100
985
986 typo
987
988commit 2de9cec54230998ab10161576f77860a2559ccb7
989Author: Damien Miller <djm@mindrot.org>
990Date: Tue Jan 22 10:49:52 2019 +1100
991
992 add missing header
993
994commit 533cfb01e49a2a30354e191669dc3159e03e99a7
995Author: djm@openbsd.org <djm@openbsd.org>
996Date: Mon Jan 21 22:18:24 2019 +0000
997
998 upstream: switch sntrup implementation source from supercop to
999
1000 libpqcrypto; the latter is almost identical but doesn't rely on signed
1001 underflow to implement an optimised integer sort; from markus@
1002
1003 OpenBSD-Commit-ID: cd09bbf0e0fcef1bedca69fdf7990dc360567cf8
1004
1005commit d50ab3cd6fb859888a26b4d4e333239b4f6bf573
1006Author: Damien Miller <djm@mindrot.org>
1007Date: Tue Jan 22 00:02:23 2019 +1100
1008
1009 new files need includes.h
1010
1011commit c7670b091a7174760d619ef6738b4f26b2093301
1012Author: djm@openbsd.org <djm@openbsd.org>
1013Date: Mon Jan 21 12:53:35 2019 +0000
1014
1015 upstream: add "-v" flags to ssh-add and ssh-pkcs11-helper to turn up
1016
1017 debug verbosity.
1018
1019 Make ssh-agent turn on ssh-pkcs11-helper's verbosity when it is run
1020 in debug mode ("ssh-agent -d"), so we get to see errors from the
1021 PKCS#11 code.
1022
1023 ok markus@
1024
1025 OpenBSD-Commit-ID: 0a798643c6a92a508df6bd121253ba1c8bee659d
1026
1027commit 49d8c8e214d39acf752903566b105d06c565442a
1028Author: djm@openbsd.org <djm@openbsd.org>
1029Date: Mon Jan 21 12:50:12 2019 +0000
1030
1031 upstream: adapt to changes in KEX APIs and file removals
1032
1033 OpenBSD-Regress-ID: 54d6857e7c58999c7a6d40942ab0fed3529f43ca
1034
1035commit 35ecc53a83f8e8baab2e37549addfd05c73c30f1
1036Author: djm@openbsd.org <djm@openbsd.org>
1037Date: Mon Jan 21 12:35:20 2019 +0000
1038
1039 upstream: adapt to changes in KEX API and file removals
1040
1041 OpenBSD-Regress-ID: 92cad022d3b0d11e08f3e0055d6a14b8f994c0d7
1042
1043commit 7d69aae64c35868cc4f644583ab973113a79480e
1044Author: djm@openbsd.org <djm@openbsd.org>
1045Date: Mon Jan 21 12:29:35 2019 +0000
1046
1047 upstream: adapt to bignum1 API removal and bignum2 API change
1048
1049 OpenBSD-Regress-ID: cea6ff270f3d560de86b355a87a2c95b55a5ca63
1050
1051commit beab553f0a9578ef9bffe28b2c779725e77b39ec
1052Author: djm@openbsd.org <djm@openbsd.org>
1053Date: Mon Jan 21 09:13:41 2019 +0000
1054
1055 upstream: remove hack to use non-system libcrypto
1056
1057 OpenBSD-Regress-ID: ce72487327eee4dfae1ab0212a1f33871fe0809f
1058
1059commit 4dc06bd57996f1a46b4c3bababe0d09bc89098f7
1060Author: Damien Miller <djm@mindrot.org>
1061Date: Mon Jan 21 23:14:04 2019 +1100
1062
1063 depend
1064
1065commit 70edd73edc4df54e5eee50cd27c25427b34612f8
1066Author: djm@openbsd.org <djm@openbsd.org>
1067Date: Mon Jan 21 12:08:13 2019 +0000
1068
1069 upstream: fix reversed arguments to kex_load_hostkey(); manifested as
1070
1071 errors in cert-hostkey.sh regress failures.
1072
1073 OpenBSD-Commit-ID: 12dab63850b844f84d5a67e86d9e21a42fba93ba
1074
1075commit f1185abbf0c9108e639297addc77f8757ee00eb3
1076Author: djm@openbsd.org <djm@openbsd.org>
1077Date: Mon Jan 21 11:22:00 2019 +0000
1078
1079 upstream: forgot to cvs add this file in previous series of commits;
1080
1081 grrr
1082
1083 OpenBSD-Commit-ID: bcff316c3e7da8fd15333e05d244442c3aaa66b0
1084
1085commit 7bef390b625bdc080f0fd4499ef03cef60fca4fa
1086Author: djm@openbsd.org <djm@openbsd.org>
1087Date: Mon Jan 21 10:44:21 2019 +0000
1088
1089 upstream: nothing shall escape this purge
1090
1091 OpenBSD-Commit-ID: 4795b0ff142b45448f7e15f3c2f77a947191b217
1092
1093commit aaca72d6f1279b842066e07bff797019efeb2c23
1094Author: djm@openbsd.org <djm@openbsd.org>
1095Date: Mon Jan 21 10:40:11 2019 +0000
1096
1097 upstream: rename kex->kem_client_pub -> kex->client_pub now that
1098
1099 KEM has been renamed to kexgen
1100
1101 from markus@ ok djm@
1102
1103 OpenBSD-Commit-ID: fac6da5dc63530ad0da537db022a9a4cfbe8bed8
1104
1105commit 70867e1ca2eb08bbd494fe9c568df4fd3b35b867
1106Author: djm@openbsd.org <djm@openbsd.org>
1107Date: Mon Jan 21 10:38:54 2019 +0000
1108
1109 upstream: merge kexkem[cs] into kexgen
1110
1111 from markus@ ok djm@
1112
1113 OpenBSD-Commit-ID: 87d886b7f1812ff9355fda1435f6ea9b71a0ac89
1114
1115commit 71e67fff946396caa110a7964da23480757258ff
1116Author: djm@openbsd.org <djm@openbsd.org>
1117Date: Mon Jan 21 10:35:09 2019 +0000
1118
1119 upstream: pass values used in KEX hash computation as sshbuf
1120
1121 rather than pointer+len
1122
1123 suggested by me; implemented by markus@ ok me
1124
1125 OpenBSD-Commit-ID: 994f33c464f4a9e0f1d21909fa3e379f5a0910f0
1126
1127commit 4b83e2a2cc0c12e671a77eaba1c1245894f4e884
1128Author: djm@openbsd.org <djm@openbsd.org>
1129Date: Mon Jan 21 10:33:49 2019 +0000
1130
1131 upstream: remove kex_derive_keys_bn wrapper; no unused since the
1132
1133 DH-like KEX methods have moved to KEM
1134
1135 from markus@ ok djm@
1136
1137 OpenBSD-Commit-ID: bde9809103832f349545e4f5bb733d316db9a060
1138
1139commit 92dda34e373832f34a1944e5d9ebbebb184dedc1
1140Author: djm@openbsd.org <djm@openbsd.org>
1141Date: Mon Jan 21 10:29:56 2019 +0000
1142
1143 upstream: use KEM API for vanilla ECDH
1144
1145 from markus@ ok djm@
1146
1147 OpenBSD-Commit-ID: 6fbff96339a929835536b5730585d1d6057a352c
1148
1149commit b72357217cbe510a3ae155307a7be6b9181f1d1b
1150Author: Damien Miller <djm@mindrot.org>
1151Date: Mon Jan 21 23:11:21 2019 +1100
1152
1153 fixup missing ssherr.h
1154
1155commit 9c9c97e14fe190931f341876ad98213e1e1dc19f
1156Author: djm@openbsd.org <djm@openbsd.org>
1157Date: Mon Jan 21 10:28:01 2019 +0000
1158
1159 upstream: use KEM API for vanilla DH KEX
1160
1161 from markus@ ok djm@
1162
1163 OpenBSD-Commit-ID: af56466426b08a8be275412ae2743319e3d277c9
1164
1165commit 2f6a9ddbbf6ca8623c53c323ff17fb6d68d66970
1166Author: djm@openbsd.org <djm@openbsd.org>
1167Date: Mon Jan 21 10:24:09 2019 +0000
1168
1169 upstream: use KEM API for vanilla c25519 KEX
1170
1171 OpenBSD-Commit-ID: 38d937b85ff770886379dd66a8f32ab0c1c35c1f
1172
1173commit dfd591618cdf2c96727ac0eb65f89cf54af0d97e
1174Author: djm@openbsd.org <djm@openbsd.org>
1175Date: Mon Jan 21 10:20:12 2019 +0000
1176
1177 upstream: Add support for a PQC KEX/KEM:
1178
1179 sntrup4591761x25519-sha512@tinyssh.org using the Streamlined NTRU Prime
1180 4591^761 implementation from SUPERCOP coupled with X25519 as a stop-loss. Not
1181 enabled by default.
1182
1183 introduce KEM API; a simplified framework for DH-ish KEX methods.
1184
1185 from markus@ feedback & ok djm@
1186
1187 OpenBSD-Commit-ID: d687f76cffd3561dd73eb302d17a1c3bf321d1a7
1188
1189commit b1b2ff4ed559051d1035419f8f236275fa66d5d6
1190Author: djm@openbsd.org <djm@openbsd.org>
1191Date: Mon Jan 21 10:07:22 2019 +0000
1192
1193 upstream: factor out kex_verify_hostkey() - again, duplicated
1194
1195 almost exactly across client and server for several KEX methods.
1196
1197 from markus@ ok djm@
1198
1199 OpenBSD-Commit-ID: 4e4a16d949dadde002a0aacf6d280a684e20829c
1200
1201commit bb39bafb6dc520cc097780f4611a52da7f19c3e2
1202Author: djm@openbsd.org <djm@openbsd.org>
1203Date: Mon Jan 21 10:05:09 2019 +0000
1204
1205 upstream: factor out kex_load_hostkey() - this is duplicated in
1206
1207 both the client and server implementations for most KEX methods.
1208
1209 from markus@ ok djm@
1210
1211 OpenBSD-Commit-ID: 8232fa7c21fbfbcaf838313b0c166dc6c8762f3c
1212
1213commit dec5e9d33891e3bc3f1395d7db0e56fdc7f86dfc
1214Author: djm@openbsd.org <djm@openbsd.org>
1215Date: Mon Jan 21 10:03:37 2019 +0000
1216
1217 upstream: factor out kex_dh_compute_key() - it's shared between
1218
1219 plain DH KEX and DH GEX in both the client and server implementations
1220
1221 from markus@ ok djm@
1222
1223 OpenBSD-Commit-ID: 12186e18791fffcd4642c82e7e0cfdd7ea37e2ec
1224
1225commit e93bd98eab79b9a78f64ee8dd4dffc4d3979c7ae
1226Author: djm@openbsd.org <djm@openbsd.org>
1227Date: Mon Jan 21 10:00:23 2019 +0000
1228
1229 upstream: factor out DH keygen; it's identical between the client
1230
1231 and the server
1232
1233 from markus@ ok djm@
1234
1235 OpenBSD-Commit-ID: 2be57f6a0d44f1ab2c8de2b1b5d6f530c387fae9
1236
1237commit 5ae3f6d314465026d028af82609c1d49ad197655
1238Author: djm@openbsd.org <djm@openbsd.org>
1239Date: Mon Jan 21 09:55:52 2019 +0000
1240
1241 upstream: save the derived session id in kex_derive_keys() rather
1242
1243 than making each kex method implementation do it.
1244
1245 from markus@ ok djm@
1246
1247 OpenBSD-Commit-ID: d61ade9c8d1e13f665f8663c552abff8c8a30673
1248
1249commit 7be8572b32a15d5c3dba897f252e2e04e991c307
1250Author: djm@openbsd.org <djm@openbsd.org>
1251Date: Mon Jan 21 09:54:11 2019 +0000
1252
1253 upstream: Make sshpkt_get_bignum2() allocate the bignum it is
1254
1255 parsing rather than make the caller do it. Saves a lot of boilerplate code.
1256
1257 from markus@ ok djm@
1258
1259 OpenBSD-Commit-ID: 576bf784f9a240f5a1401f7005364e59aed3bce9
1260
1261commit 803178bd5da7e72be94ba5b4c4c196d4b542da4d
1262Author: djm@openbsd.org <djm@openbsd.org>
1263Date: Mon Jan 21 09:52:25 2019 +0000
1264
1265 upstream: remove obsolete (SSH v.1) sshbuf_get/put_bignum1
1266
1267 functions
1268
1269 from markus@ ok djm@
1270
1271 OpenBSD-Commit-ID: 0380b1b2d9de063de3c5a097481a622e6a04943e
1272
1273commit f3ebaffd8714be31d4345f90af64992de4b3bba2
1274Author: djm@openbsd.org <djm@openbsd.org>
1275Date: Mon Jan 21 09:49:37 2019 +0000
1276
1277 upstream: fix all-zero check in kexc25519_shared_key
1278
1279 from markus@ ok djm@
1280
1281 OpenBSD-Commit-ID: 60b1d364e0d9d34d1d1ef1620cb92e36cf06712d
1282
1283commit 9d1a9771d0ad3a83af733bf3d2650b53f43c269f
1284Author: jmc@openbsd.org <jmc@openbsd.org>
1285Date: Mon Jan 21 07:09:10 2019 +0000
1286
1287 upstream: - -T was added to the first synopsis by mistake - since
1288
1289 "..." denotes optional, no need to surround it in []
1290
1291 ok djm
1292
1293 OpenBSD-Commit-ID: 918f6d8eed4e0d8d9ef5eadae1b8983d796f0e25
1294
1295commit 2f0bad2bf85391dbb41315ab55032ec522660617
1296Author: Darren Tucker <dtucker@dtucker.net>
1297Date: Mon Jan 21 21:28:27 2019 +1100
1298
1299 Make --with-rpath take a flag instead of yes/no.
1300
1301 Linkers need various flags for -rpath and similar, so make --with-rpath
1302 take an optional flag argument which is passed to the linker. ok djm@
1303
1304commit 23490a6c970ea1d03581a3b4208f2eb7a675f453
1305Author: Damien Miller <djm@mindrot.org>
1306Date: Mon Jan 21 15:05:43 2019 +1100
1307
1308 fix previous test
1309
1310commit b6dd3277f2c49f9584a2097bc792e8f480397e87
1311Author: Darren Tucker <dtucker@dtucker.net>
1312Date: Mon Jan 21 13:50:17 2019 +1100
1313
1314 Wrap ECC static globals in EC_KEY_METHOD_NEW too.
1315
1316commit b2eb9db35b7191613f2f4b934d57b25938bb34b3
1317Author: Damien Miller <djm@mindrot.org>
1318Date: Mon Jan 21 12:53:40 2019 +1100
1319
1320 pass TEST_SSH_SSHPKCS11HELPER to regress tests
1321
1322commit ba58a529f45b3dae2db68607d8c54ae96e90e705
1323Author: Damien Miller <djm@mindrot.org>
1324Date: Mon Jan 21 12:31:29 2019 +1100
1325
1326 make agent-pkcs11 search harder for softhsm2.so
1327
1328commit 662be40c62339ab645113c930ce689466f028938
1329Author: djm@openbsd.org <djm@openbsd.org>
1330Date: Mon Jan 21 02:05:38 2019 +0000
1331
1332 upstream: always print the caller's error message in ossl_error(),
1333
1334 even when there are no libcrypto errors to report.
1335
1336 OpenBSD-Commit-ID: 09ebaa8f706e0eccedd209775baa1eee2ada806a
1337
1338commit ce46c3a077dfb4c531ccffcfff03f37775725b75
1339Author: djm@openbsd.org <djm@openbsd.org>
1340Date: Mon Jan 21 02:01:03 2019 +0000
1341
1342 upstream: get the ex_data (pkcs11_key object) back from the keys at
1343
1344 the index at which it was inserted, rather than assuming index 0
1345
1346 OpenBSD-Commit-ID: 1f3a6ce0346c8014e895e50423bef16401510aa8
1347
1348commit 0a5f2ea35626022299ece3c8817a1abe8cf37b3e
1349Author: djm@openbsd.org <djm@openbsd.org>
1350Date: Mon Jan 21 01:05:00 2019 +0000
1351
1352 upstream: GSSAPI code got missed when converting to new packet API
1353
1354 OpenBSD-Commit-ID: 37e4f06ab4a0f4214430ff462ba91acba28b7851
1355
1356commit 2efcf812b4c1555ca3aff744820a3b3bccd68298
1357Author: Damien Miller <djm@mindrot.org>
1358Date: Mon Jan 21 11:57:21 2019 +1100
1359
1360 Fix -Wunused when compiling PKCS#11 without ECDSA
1361
1362commit 3c0c657ed7cd335fc05c0852d88232ca7e92a5d9
1363Author: djm@openbsd.org <djm@openbsd.org>
1364Date: Sun Jan 20 23:26:44 2019 +0000
1365
1366 upstream: allow override of ssh-pkcs11-helper binary via
1367
1368 $TEST_SSH_SSHPKCS11HELPER from markus@
1369
1370 OpenBSD-Regress-ID: 7382a3d76746f5a792d106912a5819fd5e49e469
1371
1372commit 760ae37b4505453c6fa4faf1aa39a8671ab053af
1373Author: djm@openbsd.org <djm@openbsd.org>
1374Date: Sun Jan 20 23:25:25 2019 +0000
1375
1376 upstream: adapt agent-pkcs11.sh test to softhsm2 and add support
1377
1378 for ECDSA keys
1379
1380 work by markus@, ok djm@
1381
1382 OpenBSD-Regress-ID: 1ebc2be0e88eff1b6d8be2f9c00cdc60723509fe
1383
1384commit b2ce8b31a1f974a13e6d12e0a0c132b50bc45115
1385Author: djm@openbsd.org <djm@openbsd.org>
1386Date: Sun Jan 20 23:24:19 2019 +0000
1387
1388 upstream: add "extra:" target to run some extra tests that are not
1389
1390 enabled by default (currently includes agent-pkcs11.sh); from markus@
1391
1392 OpenBSD-Regress-ID: 9a969e1adcd117fea174d368dcb9c61eb50a2a3c
1393
1394commit 632976418d60b7193597bbc6ac7ca33981a41aab
1395Author: djm@openbsd.org <djm@openbsd.org>
1396Date: Mon Jan 21 00:47:34 2019 +0000
1397
1398 upstream: use ECDSA_SIG_set0() instead of poking signature values into
1399
1400 structure directly; the latter works on LibreSSL but not on OpenSSL. From
1401 portable.
1402
1403 OpenBSD-Commit-ID: 5b22a1919d9cee907d3f8a029167f70a481891c6
1404
1405commit 5de6ac2bad11175135d9b819b3546db0ca0b4878
1406Author: Damien Miller <djm@mindrot.org>
1407Date: Mon Jan 21 11:44:19 2019 +1100
1408
1409 remove HAVE_DLOPEN that snuck in
1410
1411 portable doesn't use this
1412
1413commit e2cb445d786f7572da2af93e3433308eaed1093a
1414Author: Damien Miller <djm@mindrot.org>
1415Date: Mon Jan 21 11:32:28 2019 +1100
1416
1417 conditionalise ECDSA PKCS#11 support
1418
1419 Require EC_KEY_METHOD support in libcrypto, evidenced by presence
1420 of EC_KEY_METHOD_new() function.
1421
1422commit fcb1b0937182d0137a3c357c89735d0dc5869d54
1423Author: djm@openbsd.org <djm@openbsd.org>
1424Date: Sun Jan 20 23:12:35 2019 +0000
1425
1426 upstream: we use singleton pkcs#11 RSA_METHOD and EC_KEY_METHOD
1427
1428 now, so there is no need to keep a copy of each in the pkcs11_key object.
1429
1430 work by markus@, ok djm@
1431
1432 OpenBSD-Commit-ID: 43b4856516e45c0595f17a8e95b2daee05f12faa
1433
1434commit 6529409e85890cd6df7e5e81d04e393b1d2e4b0b
1435Author: djm@openbsd.org <djm@openbsd.org>
1436Date: Sun Jan 20 23:11:11 2019 +0000
1437
1438 upstream: KNF previous; from markus@
1439
1440 OpenBSD-Commit-ID: 3dfe35e25b310c3968b1e4e53a0cb1d03bda5395
1441
1442commit 58622a8c82f4e2aad630580543f51ba537c1f39e
1443Author: djm@openbsd.org <djm@openbsd.org>
1444Date: Sun Jan 20 23:10:33 2019 +0000
1445
1446 upstream: use OpenSSL's RSA reference counting hooks to
1447
1448 implicitly clean up pkcs11_key objects when their owning RSA object's
1449 reference count drops to zero. Simplifies the cleanup path and makes it more
1450 like ECDSA's
1451
1452 work by markus@, ok djm@
1453
1454 OpenBSD-Commit-ID: 74b9c98f405cd78f7148e9e4a4982336cd3df25c
1455
1456commit f118542fc82a3b3ab0360955b33bc5a271ea709f
1457Author: djm@openbsd.org <djm@openbsd.org>
1458Date: Sun Jan 20 23:08:24 2019 +0000
1459
1460 upstream: make the PKCS#11 RSA code more like the new PKCS#11
1461
1462 ECDSA code: use a single custom RSA_METHOD instead of a method per key
1463
1464 suggested by me, but markus@ did all the work.
1465 ok djm@
1466
1467 OpenBSD-Commit-ID: 8aafcebe923dc742fc5537a995cee549d07e4b2e
1468
1469commit 445cfce49dfc904c6b8ab25afa2f43130296c1a5
1470Author: djm@openbsd.org <djm@openbsd.org>
1471Date: Sun Jan 20 23:05:52 2019 +0000
1472
1473 upstream: fix leak of ECDSA pkcs11_key objects
1474
1475 work by markus, ok djm@
1476
1477 OpenBSD-Commit-ID: 9fc0c4f1d640aaa5f19b8d70f37ea19b8ad284a1
1478
1479commit 8a2467583f0b5760787273796ec929190c3f16ee
1480Author: djm@openbsd.org <djm@openbsd.org>
1481Date: Sun Jan 20 23:03:26 2019 +0000
1482
1483 upstream: use EVP_PKEY_get0_EC_KEY() instead of direct access of
1484
1485 EC_KEY internals as that won't work on OpenSSL
1486
1487 work by markus@, feedback and ok djm@
1488
1489 OpenBSD-Commit-ID: 4a99cdb89fbd6f5155ef8c521c99dc66e2612700
1490
1491commit 24757c1ae309324e98d50e5935478655be04e549
1492Author: djm@openbsd.org <djm@openbsd.org>
1493Date: Sun Jan 20 23:01:59 2019 +0000
1494
1495 upstream: cleanup PKCS#11 ECDSA pubkey loading: the returned
1496
1497 object should never have a DER header
1498
1499 work by markus; feedback and ok djm@
1500
1501 OpenBSD-Commit-ID: b617fa585eddbbf0b1245b58b7a3c4b8d613db17
1502
1503commit 749aef30321595435ddacef2f31d7a8f2b289309
1504Author: djm@openbsd.org <djm@openbsd.org>
1505Date: Sun Jan 20 23:00:12 2019 +0000
1506
1507 upstream: cleanup unnecessary code in ECDSA pkcs#11 signature
1508
1509 work by markus@, feedback and ok djm@
1510
1511 OpenBSD-Commit-ID: affa5ca7d58d59fbd16169f77771dcdbd2b0306d
1512
1513commit 0c50992af49b562970dd0ba3f8f151f1119e260e
1514Author: djm@openbsd.org <djm@openbsd.org>
1515Date: Sun Jan 20 22:57:45 2019 +0000
1516
1517 upstream: cleanup pkcs#11 client code: use sshkey_new in instead
1518
1519 of stack- allocating a sshkey
1520
1521 work by markus@, ok djm@
1522
1523 OpenBSD-Commit-ID: a048eb6ec8aa7fa97330af927022c0da77521f91
1524
1525commit 854bd8674ee5074a239f7cadf757d55454802e41
1526Author: djm@openbsd.org <djm@openbsd.org>
1527Date: Sun Jan 20 22:54:30 2019 +0000
1528
1529 upstream: allow override of the pkcs#11 helper binary via
1530
1531 $SSH_PKCS11_HELPER; needed for regress tests.
1532
1533 work by markus@, ok me
1534
1535 OpenBSD-Commit-ID: f78d8185500bd7c37aeaf7bd27336db62f0f7a83
1536
1537commit 93f02107f44d63a016d8c23ebd2ca9205c495c48
1538Author: djm@openbsd.org <djm@openbsd.org>
1539Date: Sun Jan 20 22:51:37 2019 +0000
1540
1541 upstream: add support for ECDSA keys in PKCS#11 tokens
1542
1543 Work by markus@ and Pedro Martelletto, feedback and ok me@
1544
1545 OpenBSD-Commit-ID: a37d651e221341376636056512bddfc16efb4424
1546
1547commit aa22c20e0c36c2fc610cfcc793b0d14079c38814
1548Author: djm@openbsd.org <djm@openbsd.org>
1549Date: Sun Jan 20 22:03:29 2019 +0000
1550
1551 upstream: add option to test whether keys in an agent are usable,
1552
1553 by performing a signature and a verification using each key "ssh-add -T
1554 pubkey [...]"
1555
1556 work by markus@, ok djm@
1557
1558 OpenBSD-Commit-ID: 931b888a600b6a883f65375bd5f73a4776c6d19b
1559
1560commit a36b0b14a12971086034d53c0c3dfbad07665abe
1561Author: tb@openbsd.org <tb@openbsd.org>
1562Date: Sun Jan 20 02:01:59 2019 +0000
1563
1564 upstream: Fix BN_is_prime_* calls in SSH, the API returns -1 on
1565
1566 error.
1567
1568 Found thanks to BoringSSL's commit 53409ee3d7595ed37da472bc73b010cd2c8a5ffd
1569 by David Benjamin.
1570
1571 ok djm, dtucker
1572
1573 OpenBSD-Commit-ID: 1ee832be3c44b1337f76b8562ec6d203f3b072f8
1574
1575commit ec4776bb01dd8d61fddc7d2a31ab10bf3d3d829a
1576Author: dtucker@openbsd.org <dtucker@openbsd.org>
1577Date: Sun Jan 20 01:12:40 2019 +0000
1578
1579 upstream: DH-GEX min value is now specified in RFC8270. ok djm@
1580
1581 OpenBSD-Commit-ID: 1229d0feb1d0ecefe05bf67a17578b263e991acc
1582
1583commit c90a7928c4191303e76a8c58b9008d464287ae1b
1584Author: Darren Tucker <dtucker@dtucker.net>
1585Date: Mon Jan 21 09:22:36 2019 +1100
1586
1587 Check for cc before gcc.
1588
1589 If cc is something other than gcc and is the system compiler prefer using
1590 that, unless otherwise told via $CC. ok djm@
1591
1592commit 9b655dc9c9a353f0a527f0c6c43a5e35653c9503
1593Author: Damien Miller <djm@mindrot.org>
1594Date: Sun Jan 20 14:55:27 2019 +1100
1595
1596 last bits of old packet API / active_state global
1597
1598commit 3f0786bbe73609ac96e5a0d91425ee21129f8e04
1599Author: Damien Miller <djm@mindrot.org>
1600Date: Sun Jan 20 10:22:18 2019 +1100
1601
1602 remove PAM dependencies on old packet API
1603
1604 Requires some caching of values, because the PAM code isn't
1605 always called with packet context.
1606
1607commit 08f66d9f17e12c1140d1f1cf5c4dce67e915d3cc
1608Author: Damien Miller <djm@mindrot.org>
1609Date: Sun Jan 20 09:58:45 2019 +1100
1610
1611 remove vestiges of old packet API from loginrec.c
1612
1613commit c327813ea1d740e3e367109c17873815aba1328e
1614Author: Damien Miller <djm@mindrot.org>
1615Date: Sun Jan 20 09:45:38 2019 +1100
1616
1617 depend
1618
1619commit 135e302cfdbe91817294317c337cc38c3ff01cba
1620Author: djm@openbsd.org <djm@openbsd.org>
1621Date: Sat Jan 19 22:30:52 2019 +0000
1622
1623 upstream: fix error in refactor: use ssh_packet_disconnect() instead of
1624
1625 sshpkt_error(). The first one logs the error and exits (what we want) instead
1626 of just logging and blundering on.
1627
1628 OpenBSD-Commit-ID: 39f51b43641dce9ce0f408ea6c0e6e077e2e91ae
1629
1630commit 245c6a0b220b58686ee35bc5fc1c359e9be2faaa
1631Author: djm@openbsd.org <djm@openbsd.org>
1632Date: Sat Jan 19 21:45:31 2019 +0000
1633
1634 upstream: remove last traces of old packet API!
1635
1636 with & ok markus@
1637
1638 OpenBSD-Commit-ID: 9bd10437026423eb8245636ad34797a20fbafd7d
1639
1640commit 04c091fc199f17dacf8921df0a06634b454e2722
1641Author: djm@openbsd.org <djm@openbsd.org>
1642Date: Sat Jan 19 21:43:56 2019 +0000
1643
1644 upstream: remove last references to active_state
1645
1646 with & ok markus@
1647
1648 OpenBSD-Commit-ID: 78619a50ea7e4ca2f3b54d4658b3227277490ba2
1649
1650commit ec00f918b8ad90295044266c433340a8adc93452
1651Author: djm@openbsd.org <djm@openbsd.org>
1652Date: Sat Jan 19 21:43:07 2019 +0000
1653
1654 upstream: convert monitor.c to new packet API
1655
1656 with & ok markus@
1657
1658 OpenBSD-Commit-ID: 61ecd154bd9804461a0cf5f495a29d919e0014d5
1659
1660commit 6350e0316981489d4205952d6904d6fedba5bfe0
1661Author: djm@openbsd.org <djm@openbsd.org>
1662Date: Sat Jan 19 21:42:30 2019 +0000
1663
1664 upstream: convert sshd.c to new packet API
1665
1666 with & ok markus@
1667
1668 OpenBSD-Commit-ID: ea569d3eaf9b5cf1bad52779fbfa5fa0b28af891
1669
1670commit a5e2ad88acff2b7d131ee6d5dc5d339b0f8c6a6d
1671Author: djm@openbsd.org <djm@openbsd.org>
1672Date: Sat Jan 19 21:41:53 2019 +0000
1673
1674 upstream: convert session.c to new packet API
1675
1676 with & ok markus@
1677
1678 OpenBSD-Commit-ID: fae817207e23099ddd248960c984f7b7f26ea68e
1679
1680commit 3a00a921590d4c4b7e96df11bb10e6f9253ad45e
1681Author: djm@openbsd.org <djm@openbsd.org>
1682Date: Sat Jan 19 21:41:18 2019 +0000
1683
1684 upstream: convert auth.c to new packet API
1685
1686 with & ok markus@
1687
1688 OpenBSD-Commit-ID: 7e10359f614ff522b52a3f05eec576257794e8e4
1689
1690commit 7ec5cb4d15ed2f2c5c9f5d00e6b361d136fc1e2d
1691Author: djm@openbsd.org <djm@openbsd.org>
1692Date: Sat Jan 19 21:40:48 2019 +0000
1693
1694 upstream: convert serverloop.c to new packet API
1695
1696 with & ok markus@
1697
1698 OpenBSD-Commit-ID: c92dd19b55457541478f95c0d6b318426d86d885
1699
1700commit 64c9598ac05332d1327cbf55334dee4172d216c4
1701Author: djm@openbsd.org <djm@openbsd.org>
1702Date: Sat Jan 19 21:40:21 2019 +0000
1703
1704 upstream: convert the remainder of sshconnect2.c to new packet
1705
1706 API
1707
1708 with & ok markus@
1709
1710 OpenBSD-Commit-ID: 0986d324f2ceb5e8a12ac21c1bb10b3b4b1e0f71
1711
1712commit bc5e1169d101d16e3a5962a928db2bc49a8ef5a3
1713Author: djm@openbsd.org <djm@openbsd.org>
1714Date: Sat Jan 19 21:39:12 2019 +0000
1715
1716 upstream: convert the remainder of clientloop.c to new packet API
1717
1718 with & ok markus@
1719
1720 OpenBSD-Commit-ID: ce2fbbacb86a290f31da1e7bf04cddf2bdae3d1e
1721
1722commit 5ebce136a6105f084db8f0d7ee41981d42daec40
1723Author: Damien Miller <djm@mindrot.org>
1724Date: Sun Jan 20 09:44:53 2019 +1100
1725
1726 upstream: convert auth2.c to new packet API
1727
1728 OpenBSD-Commit-ID: ed831bb95ad228c6791bc18b60ce7a2edef2c999
1729
1730commit 172a592a53ebe8649c4ac0d7946e6c08eb151af6
1731Author: djm@openbsd.org <djm@openbsd.org>
1732Date: Sat Jan 19 21:37:48 2019 +0000
1733
1734 upstream: convert servconf.c to new packet API
1735
1736 with & ok markus@
1737
1738 OpenBSD-Commit-ID: 126553aecca302c9e02fd77e333b9cb217e623b4
1739
1740commit 8cc7a679d29cf6ecccfa08191e688c7f81ef95c2
1741Author: djm@openbsd.org <djm@openbsd.org>
1742Date: Sat Jan 19 21:37:13 2019 +0000
1743
1744 upstream: convert channels.c to new packet API
1745
1746 with & ok markus@
1747
1748 OpenBSD-Commit-ID: 0b8279b56113cbd4011fc91315c0796b63dc862c
1749
1750commit 06232038c794c7dfcb087be0ab0b3e65b09fd396
1751Author: djm@openbsd.org <djm@openbsd.org>
1752Date: Sat Jan 19 21:36:38 2019 +0000
1753
1754 upstream: convert sshconnect.c to new packet API
1755
1756 with & ok markus@
1757
1758 OpenBSD-Commit-ID: 222337cf6c96c347f1022d976fac74b4257c061f
1759
1760commit 25b2ed667216314471bb66752442c55b95792dc3
1761Author: djm@openbsd.org <djm@openbsd.org>
1762Date: Sat Jan 19 21:36:06 2019 +0000
1763
1764 upstream: convert ssh.c to new packet API
1765
1766 with & ok markus@
1767
1768 OpenBSD-Commit-ID: eb146878b24e85c2a09ee171afa6797c166a2e21
1769
1770commit e3128b38623eef2fa8d6e7ae934d3bd08c7e973e
1771Author: djm@openbsd.org <djm@openbsd.org>
1772Date: Sat Jan 19 21:35:25 2019 +0000
1773
1774 upstream: convert mux.c to new packet API
1775
1776 with & ok markus@
1777
1778 OpenBSD-Commit-ID: 4e3893937bae66416e984b282d8f0f800aafd802
1779
1780commit ed1df7226caf3a943a36d580d4d4e9275f8a61ee
1781Author: djm@openbsd.org <djm@openbsd.org>
1782Date: Sat Jan 19 21:34:45 2019 +0000
1783
1784 upstream: convert sshconnect2.c to new packet API
1785
1786 with & ok markus@
1787
1788 OpenBSD-Commit-ID: 1cb869e0d6e03539f943235641ea070cae2ebc58
1789
1790commit 23f22a4aaa923c61ec49a99ebaa383656e87fa40
1791Author: djm@openbsd.org <djm@openbsd.org>
1792Date: Sat Jan 19 21:33:57 2019 +0000
1793
1794 upstream: convert clientloop.c to new packet API
1795
1796 with & ok markus@
1797
1798 OpenBSD-Commit-ID: 497b36500191f452a22abf283aa8d4a9abaee7fa
1799
1800commit ad60b1179c9682ca5aef0b346f99ef68cbbbc4e5
1801Author: djm@openbsd.org <djm@openbsd.org>
1802Date: Sat Jan 19 21:33:13 2019 +0000
1803
1804 upstream: allow sshpkt_fatal() to take a varargs format; we'll
1805
1806 use this to give packet-related fatal error messages more context (esp. the
1807 remote endpoint) ok markus@
1808
1809 OpenBSD-Commit-ID: de57211f9543426b515a8a10a4f481666b2b2a50
1810
1811commit 0fa174ebe129f3d0aeaf4e2d1dd8de745870d0ff
1812Author: djm@openbsd.org <djm@openbsd.org>
1813Date: Sat Jan 19 21:31:32 2019 +0000
1814
1815 upstream: begin landing remaining refactoring of packet parsing
1816
1817 API, started almost exactly six years ago.
1818
1819 This change stops including the old packet_* API by default and makes
1820 each file that requires the old API include it explicitly. We will
1821 commit file-by-file refactoring to remove the old API in consistent
1822 steps.
1823
1824 with & ok markus@
1825
1826 OpenBSD-Commit-ID: 93c98a6b38f6911fd1ae025a1ec57807fb4d4ef4
1827
1828commit 4ae7f80dfd02f2bde912a67c9f338f61e90fa79f
1829Author: tb@openbsd.org <tb@openbsd.org>
1830Date: Sat Jan 19 04:15:56 2019 +0000
1831
1832 upstream: Print an \r in front of the password prompt so parts of
1833
1834 a password that was entered too early are likely clobbered by the prompt.
1835 Idea from doas.
1836
1837 from and ok djm
1838 "i like it" deraadt
1839
1840 OpenBSD-Commit-ID: 5fb97c68df6d8b09ab37f77bca1d84d799c4084e
1841
1842commit a6258e5dc314c7d504ac9f0fbc3be96475581dbe
1843Author: Darren Tucker <dtucker@dtucker.net>
1844Date: Fri Jan 18 11:09:01 2019 +1100
1845
1846 Add minimal fchownat and fchmodat implementations.
1847
1848 Fixes builds on at least OS X Lion, NetBSD 6 and Solaris 10.
1849
1850commit 091093d25802b87d3b2b09f2c88d9f33e1ae5562
1851Author: Darren Tucker <dtucker@dtucker.net>
1852Date: Fri Jan 18 12:11:42 2019 +1300
1853
1854 Add a minimal implementation of utimensat().
1855
1856 Some systems (eg older OS X) do not have utimensat, so provide minimal
1857 implementation in compat layer. Fixes build on at least El Capitan.
1858
1859commit 609644027dde1f82213699cb6599e584c7efcb75
1860Author: djm@openbsd.org <djm@openbsd.org>
1861Date: Tue Jan 1 22:20:16 2019 +0000
1862
1863 upstream: regress bits for banner processing refactor (this test was
1864
1865 depending on ssh returning a particular error message for banner parsing
1866 failure)
1867
1868 reminded by bluhm@
1869
1870 OpenBSD-Regress-ID: f24fc303d40931157431df589b386abf5e1be575
1871
1872commit f47d72ddad75b93d3cbc781718b0fa9046c03df8
1873Author: djm@openbsd.org <djm@openbsd.org>
1874Date: Thu Jan 17 04:45:09 2019 +0000
1875
1876 upstream: tun_fwd_ifnames variable should b
1877
1878 =?UTF-8?q?e=20extern;=20from=20Hanno=20B=C3=B6ck?=
1879 MIME-Version: 1.0
1880 Content-Type: text/plain; charset=UTF-8
1881 Content-Transfer-Encoding: 8bit
1882
1883 OpenBSD-Commit-ID: d53dede6e521161bf04d39d09947db6253a38271
1884
1885commit 943d0965263cae1c080ce5a9d0b5aa341885e55d
1886Author: djm@openbsd.org <djm@openbsd.org>
1887Date: Thu Jan 17 04:20:53 2019 +0000
1888
1889 upstream: include time.h for time(3)/nanosleep(2); from Ian
1890
1891 McKellar
1892
1893 OpenBSD-Commit-ID: 6412ccd06a88f65b207a1089345f51fa1244ea51
1894
1895commit dbb4dec6d5d671b5e9d67ef02162a610ad052068
1896Author: djm@openbsd.org <djm@openbsd.org>
1897Date: Thu Jan 17 01:50:24 2019 +0000
1898
1899 upstream: many of the global variables in this file can be made static;
1900
1901 patch from Markus Schmidt
1902
1903 OpenBSD-Commit-ID: f3db619f67beb53257b21bac0e92b4fb7d5d5737
1904
1905commit 60d8c84e0887514c99c9ce071965fafaa1c3d34a
1906Author: djm@openbsd.org <djm@openbsd.org>
1907Date: Wed Jan 16 23:23:45 2019 +0000
1908
1909 upstream: Add "-h" flag to sftp chown/chgrp/chmod commands to
1910
1911 request they do not follow symlinks. Requires recently-committed
1912 lsetstat@openssh.com extension on the server side.
1913
1914 ok markus@ dtucker@
1915
1916 OpenBSD-Commit-ID: f93bb3f6f7eb2fb7ef1e59126e72714f1626d604
1917
1918commit dbbc7e0eab7262f34b8e0cd6efecd1c77b905ed0
1919Author: djm@openbsd.org <djm@openbsd.org>
1920Date: Wed Jan 16 23:22:10 2019 +0000
1921
1922 upstream: add support for a "lsetstat@openssh.com" extension. This
1923
1924 replicates the functionality of the existing SSH2_FXP_SETSTAT operation but
1925 does not follow symlinks. Based on a patch from Bert Haverkamp in bz#2067 but
1926 with more attribute modifications supported.
1927
1928 ok markus@ dtucker@
1929
1930 OpenBSD-Commit-ID: f7234f6e90db19655d55d936a115ee4ccb6aaf80
1931
1932commit 4a526941d328fc3d97068c6a4cbd9b71b70fe5e1
1933Author: djm@openbsd.org <djm@openbsd.org>
1934Date: Fri Jan 4 03:27:50 2019 +0000
1935
1936 upstream: eliminate function-static attempt counters for
1937
1938 passwd/kbdint authmethods by moving them to the client authctxt; Patch from
1939 Markus Schmidt, ok markus@
1940
1941 OpenBSD-Commit-ID: 4df4404a5d5416eb056f68e0e2f4fa91ba3b3f7f
1942
1943commit 8a8183474c41bd6cebaa917346b549af2239ba2f
1944Author: djm@openbsd.org <djm@openbsd.org>
1945Date: Fri Jan 4 03:23:00 2019 +0000
1946
1947 upstream: fix memory leak of ciphercontext when rekeying; bz#2942
1948
1949 Patch from Markus Schmidt; ok markus@
1950
1951 OpenBSD-Commit-ID: 7877f1b82e249986f1ef98d0ae76ce987d332bdd
1952
1953commit 5bed70afce0907b6217418d0655724c99b683d93
1954Author: djm@openbsd.org <djm@openbsd.org>
1955Date: Tue Jan 1 23:10:53 2019 +0000
1956
1957 upstream: static on global vars, const on handler tables that contain
1958
1959 function pointers; from Mike Frysinger
1960
1961 OpenBSD-Commit-ID: 7ef2305e50d3caa6326286db43cf2cfaf03960e0
1962
1963commit 007a88b48c97d092ed2f501bbdcb70d9925277be
1964Author: djm@openbsd.org <djm@openbsd.org>
1965Date: Thu Dec 27 23:02:11 2018 +0000
1966
1967 upstream: Request RSA-SHA2 signatures for
1968
1969 rsa-sha2-{256|512}-cert-v01@openssh.com cert algorithms; ok markus@
1970
1971 OpenBSD-Commit-ID: afc6f7ca216ccd821656d1c911d2a3deed685033
1972
1973commit eb347d086c35428c47fe52b34588cbbc9b49d9a6
1974Author: djm@openbsd.org <djm@openbsd.org>
1975Date: Thu Dec 27 03:37:49 2018 +0000
1976
1977 upstream: ssh_packet_set_state() now frees ssh->kex implicitly, so
1978
1979 don't do explicit kex_free() beforehand
1980
1981 OpenBSD-Regress-ID: f2f73bad47f62a2040ccba0a72cadcb12eda49cf
1982
1983commit bb542f0cf6f7511a22a08c492861e256a82376a9
1984Author: tedu@openbsd.org <tedu@openbsd.org>
1985Date: Sat Dec 15 00:50:21 2018 +0000
1986
1987 upstream: remove unused and problematic sudo clean. ok espie
1988
1989 OpenBSD-Regress-ID: ca90c20a15a85b661e13e98b80c10e65cd662f7b
1990
1991commit 0a843d9a0e805f14653a555f5c7a8ba99d62c12d
1992Author: djm@openbsd.org <djm@openbsd.org>
1993Date: Thu Dec 27 03:25:24 2018 +0000
1994
1995 upstream: move client/server SSH-* banners to buffers under
1996
1997 ssh->kex and factor out the banner exchange. This eliminates some common code
1998 from the client and server.
1999
2000 Also be more strict about handling \r characters - these should only
2001 be accepted immediately before \n (pointed out by Jann Horn).
2002
2003 Inspired by a patch from Markus Schmidt.
2004 (lots of) feedback and ok markus@
2005
2006 OpenBSD-Commit-ID: 1cc7885487a6754f63641d7d3279b0941890275b
2007
2008commit 434b587afe41c19391821e7392005068fda76248
2009Author: dtucker@openbsd.org <dtucker@openbsd.org>
2010Date: Fri Dec 7 04:36:09 2018 +0000
2011
2012 upstream: Fix calculation of initial bandwidth limits. Account for
2013
2014 written bytes before the initial timer check so that the first buffer written
2015 is accounted. Set the threshold after which the timer is checked such that
2016 the limit starts being computed as soon as possible, ie after the second
2017 buffer is written. This prevents an initial burst of traffic and provides a
2018 more accurate bandwidth limit. bz#2927, ok djm.
2019
2020 OpenBSD-Commit-ID: ff3ef76e4e43040ec198c2718d5682c36b255cb6
2021
2022commit a6a0788cbbe8dfce2819ee43b09c80725742e21c
2023Author: djm@openbsd.org <djm@openbsd.org>
2024Date: Fri Dec 7 03:39:40 2018 +0000
2025
2026 upstream: only consider the ext-info-c extension during the initial
2027
2028 KEX. It shouldn't be sent in subsequent ones, but if it is present we should
2029 ignore it.
2030
2031 This prevents sshd from sending a SSH_MSG_EXT_INFO for REKEX for buggy
2032 these clients. Reported by Jakub Jelen via bz2929; ok dtucker@
2033
2034 OpenBSD-Commit-ID: 91564118547f7807030ec537480303e2371902f9
2035
2036commit 63bba57a32c5bb6158d57cf4c47022daf89c14a0
2037Author: djm@openbsd.org <djm@openbsd.org>
2038Date: Fri Dec 7 03:33:18 2018 +0000
2039
2040 upstream: fix option letter pasto in previous
2041
2042 OpenBSD-Commit-ID: e26c8bf2f2a808f3c47960e1e490d2990167ec39
2043
2044commit 737e4edd82406595815efadc28ed5161b8b0c01a
2045Author: djm@openbsd.org <djm@openbsd.org>
2046Date: Fri Dec 7 03:32:26 2018 +0000
2047
2048 upstream: mention that the ssh-keygen -F (find host in
2049
2050 authorized_keys) and -R (remove host from authorized_keys) options may accept
2051 either a bare hostname or a [hostname]:port combo. bz#2935
2052
2053 OpenBSD-Commit-ID: 5535cf4ce78375968b0d2cd7aa316fa3eb176780
2054
2055commit 8a22ffaa13391cfe5b40316d938fe0fb931e9296
2056Author: Damien Miller <djm@mindrot.org>
2057Date: Fri Dec 7 15:41:16 2018 +1100
2058
2059 expose $SSH_CONNECTION in the PAM environment
2060
2061 This makes the connection 4-tuple available to PAM modules that
2062 wish to use it in decision-making. bz#2741
2063
2064commit a784fa8c7a7b084d63bae82ccfea902131bb45c5
2065Author: Kevin Adler <kadler@us.ibm.com>
2066Date: Wed Dec 12 22:12:45 2018 -0600
2067
2068 Don't pass loginmsg by address now that it's an sshbuf*
2069
2070 In 120a1ec74, loginmsg was changed from the legacy Buffer type
2071 to struct sshbuf*, but it missed changing calls to
2072 sys_auth_allowed_user and sys_auth_record_login which passed
2073 loginmsg by address. Now that it's a pointer, just pass it directly.
2074
2075 This only affects AIX, unless there are out of tree users.
2076
2077commit 285310b897969a63ef224d39e7cc2b7316d86940
2078Author: djm@openbsd.org <djm@openbsd.org>
2079Date: Fri Dec 7 02:31:20 2018 +0000
2080
2081 upstream: no need to allocate channels_pre/channels_post in
2082
2083 channel_init_channels() as we do it anyway in channel_handler_init() that we
2084 call at the end of the function. Fix from Markus Schmidt via bz#2938
2085
2086 OpenBSD-Commit-ID: 74893638af49e3734f1e33a54af1b7ea533373ed
2087
2088commit 87d6cf1cbc91df6815db8fe0acc7c910bc3d18e4
2089Author: djm@openbsd.org <djm@openbsd.org>
2090Date: Fri Nov 30 02:24:52 2018 +0000
2091
2092 upstream: don't attempt to connect to empty SSH_AUTH_SOCK; bz#293
2093
2094 OpenBSD-Commit-ID: 0e8fc8f19f14b21adef7109e0faa583d87c0e929
2095
2096commit 91b19198c3f604f5eef2c56dbe36f29478243141
2097Author: djm@openbsd.org <djm@openbsd.org>
2098Date: Wed Nov 28 06:00:38 2018 +0000
2099
2100 upstream: don't truncate user or host name in "user@host's
2101
2102 OpenBSD-Commit-ID: e6ca01a8d58004b7f2cac0b1b7ce8f87e425e360
2103
2104commit dd0cf6318d9b4b3533bda1e3bc021b2cd7246b7a
2105Author: jmc@openbsd.org <jmc@openbsd.org>
2106Date: Fri Nov 23 06:58:28 2018 +0000
2107
2108 upstream: tweak previous;
2109
2110 OpenBSD-Commit-ID: 08f096922eb00c98251501c193ff9e83fbb5de4f
2111
2112commit 8a85f5458d1c802471ca899c97f89946f6666e61
2113Author: Darren Tucker <dtucker@dtucker.net>
2114Date: Sun Nov 25 21:44:05 2018 +1100
2115
2116 Include stdio.h for FILE if needed.
2117
2118commit 16fb23f25454991272bfe4598cc05d20fcd25116
2119Author: Darren Tucker <dtucker@dtucker.net>
2120Date: Sun Nov 25 14:05:57 2018 +1100
2121
2122 Reverse order of OpenSSL init functions.
2123
2124 Try the new init function (OPENSSL_init_crypto) before falling back to
2125 the old one (OpenSSL_add_all_algorithms).
2126
2127commit 98f878d2272bf8dff21f2a0265d963c29e33fed2
2128Author: Darren Tucker <dtucker@dtucker.net>
2129Date: Sun Nov 25 14:05:08 2018 +1100
2130
2131 Improve OpenSSL_add_all_algorithms check.
2132
2133 OpenSSL_add_all_algorithms() may be a macro so check for that too.
2134
2135commit 9e34e0c59ab04514f9de9934a772283f7f372afe
2136Author: djm@openbsd.org <djm@openbsd.org>
2137Date: Fri Nov 23 05:08:07 2018 +0000
2138
2139 upstream: add a ssh_config "Match final" predicate
2140
2141 Matches in same pass as "Match canonical" but doesn't require
2142 hostname canonicalisation be enabled. bz#2906 ok markus
2143
2144 OpenBSD-Commit-ID: fba1dfe9f6e0cabcd0e2b3be13f7a434199beffa
2145
2146commit 4da58d58736b065b1182b563d10ad6765d811c6d
2147Author: dtucker@openbsd.org <dtucker@openbsd.org>
2148Date: Fri Nov 23 02:53:57 2018 +0000
2149
2150 upstream: Remove now-unneeded ifdef SIGINFO around handler since it is
2151
2152 now always used for SIGUSR1 even when SIGINFO is not defined. This will make
2153 things simpler in -portable.
2154
2155 OpenBSD-Regress-ID: 4ff0265b335820b0646d37beb93f036ded0dc43f
2156
2157commit c721d5877509875c8515df0215fa1dab862013bc
2158Author: Darren Tucker <dtucker@dtucker.net>
2159Date: Fri Nov 23 14:11:20 2018 +1100
2160
2161 Move RANDOM_SEED_SIZE outside ifdef.
2162
2163 RANDOM_SEED_SIZE is used by both the OpenSSL and non-OpenSSL code
2164 This fixes the build with configureed --without-openssl.
2165
2166commit deb51552c3ce7ce72c8d0232e4f36f2e7c118c7d
2167Author: Darren Tucker <dtucker@dtucker.net>
2168Date: Thu Nov 22 19:59:28 2018 +1100
2169
2170 Resync with OpenBSD by pulling in an ifdef SIGINFO.
2171
2172commit 28c7b2cd050f4416bfcf3869a20e3ea138aa52fe
2173Author: Damien Miller <djm@mindrot.org>
2174Date: Fri Nov 23 10:45:20 2018 +1100
2175
2176 fix configure test for OpenSSL version
2177
2178 square brackets in case statements may be eaten by autoconf.
2179
2180 Report and fix from Filipp Gunbin; tweaked by naddy@
2181
2182commit 42c5ec4b97b6a1bae70f323952d0646af16ce710
2183Author: Damien Miller <djm@mindrot.org>
2184Date: Fri Nov 23 10:40:06 2018 +1100
2185
2186 refactor libcrypto initialisation
2187
2188 Don't call OpenSSL_add_all_algorithms() unless OpenSSL actually
2189 supports it.
2190
2191 Move all libcrypto initialisation to a single function, and call that
2192 from seed_rng() that is called early in each tool's main().
2193
2194 Prompted by patch from Rosen Penev
2195
2196commit 5b60b6c02009547a3e2a99d4886965de2a4719da
2197Author: dtucker@openbsd.org <dtucker@openbsd.org>
2198Date: Thu Nov 22 08:59:11 2018 +0000
2199
2200 upstream: Output info on SIGUSR1 as well as
2201
2202 SIGINFO to resync with portable. (ID sync only).
2203
2204 OpenBSD-Regress-ID: 699d153e2de22dce51a1b270c40a98472d1a1b16
2205
2206commit e4ae345dc75b34fd870c2e8690d831d2c1088eb7
2207Author: dtucker@openbsd.org <dtucker@openbsd.org>
2208Date: Thu Nov 22 08:48:32 2018 +0000
2209
2210 upstream: Append pid to temp files in /var/run and set a cleanup
2211
2212 trap for them. This allows multiple instances of tests to run without
2213 colliding.
2214
2215 OpenBSD-Regress-ID: 57add105ecdfc54752d8003acdd99eb68c3e0b4c
2216
2217commit f72d0f52effca5aa20a193217346615ecd3eed53
2218Author: dtucker@openbsd.org <dtucker@openbsd.org>
2219Date: Wed Oct 31 11:09:27 2018 +0000
2220
2221 upstream: UsePrivilegeSeparation no is deprecated
2222
2223 test "yes" and "sandbox".
2224
2225 OpenBSD-Regress-ID: 80e685ed8990766527dc629b1affc09a75bfe2da
2226
2227commit 35d0e5fefc419bddcbe09d7fc163d8cd3417125b
2228Author: djm@openbsd.org <djm@openbsd.org>
2229Date: Wed Oct 17 23:28:05 2018 +0000
2230
2231 upstream: add some knobs:
2232
2233 UNITTEST_FAST?= no # Skip slow tests (e.g. less intensive fuzzing).
2234 UNITTEST_SLOW?= no # Include slower tests (e.g. more intensive fuzzing).
2235 UNITTEST_VERBOSE?= no # Verbose test output (inc. per-test names).
2236
2237 useful if you want to run the tests as a smoke test to exercise the
2238 functionality without waiting for all the fuzzers to run.
2239
2240 OpenBSD-Regress-ID: e04d82ebec86068198cd903acf1c67563c57315e
2241
2242commit c1941293d9422a14dda372b4c21895e72aa7a063
2243Author: Darren Tucker <dtucker@dtucker.net>
2244Date: Thu Nov 22 15:52:26 2018 +1100
2245
2246 Resync Makefile.inc with upstream.
2247
2248 It's unused in -portable, but having it out of sync makes other syncs
2249 fail to apply.
2250
2251commit 928f1231f65f88cd4c73e6e0edd63d2cf6295d77
2252Author: djm@openbsd.org <djm@openbsd.org>
2253Date: Mon Nov 19 04:12:32 2018 +0000
2254
2255 upstream: silence (to log level debug2) failure messages when
2256
2257 loading the default hostkeys. Hostkeys explicitly specified in the
2258 configuration or on the command-line are still reported as errors, and
2259 failure to load at least one host key remains a fatal error.
2260 MIME-Version: 1.0
2261 Content-Type: text/plain; charset=UTF-8
2262 Content-Transfer-Encoding: 8bit
2263
2264 Based on patch from Dag-Erling Smørgrav via
2265 https://github.com/openssh/openssh-portable/pull/103
2266
2267 ok markus@
2268
2269 OpenBSD-Commit-ID: ffc2e35a75d1008effaf05a5e27425041c27b684
2270
2271commit 7fca94edbe8ca9f879da9fdd2afd959c4180f4c7
2272Author: dtucker@openbsd.org <dtucker@openbsd.org>
2273Date: Sun Nov 18 22:43:29 2018 +0000
2274
2275 upstream: Fix inverted logic for redirecting ProxyCommand stderr to
2276
2277 /dev/null. Fixes mosh in proxycommand mode that was broken by the previous
2278 ProxyCommand change that was reported by matthieu@. ok djm@ danj@
2279
2280 OpenBSD-Commit-ID: c6fc9641bc250221a0a81c6beb2e72d603f8add6
2281
2282commit ccef7c4faf914993b53035cd2b25ce02ab039c9d
2283Author: djm@openbsd.org <djm@openbsd.org>
2284Date: Fri Nov 16 06:17:38 2018 +0000
2285
2286 upstream: redirect stderr of ProxyCommands to /dev/null when ssh is
2287
2288 started with ControlPersist; based on patch from Steffen Prohaska
2289
2290 OpenBSD-Commit-ID: 1bcaa14a03ae80369d31021271ec75dce2597957
2291
2292commit 15182fd96845a03216d7ac5a2cf31c4e77e406e3
2293Author: djm@openbsd.org <djm@openbsd.org>
2294Date: Fri Nov 16 06:10:29 2018 +0000
2295
2296 upstream: make grandparent-parent-child sshbuf chains robust to
2297
2298 use-after-free faults if the ancestors are freed before the descendents.
2299 Nothing in OpenSSH uses this deallocation pattern. Reported by Jann Horn
2300
2301 OpenBSD-Commit-ID: d93501d1d2734245aac802a252b9bb2eccdba0f2
2302
2303commit 2a35862e664afde774d4a72497d394fe7306ccb5
2304Author: djm@openbsd.org <djm@openbsd.org>
2305Date: Fri Nov 16 03:26:01 2018 +0000
2306
2307 upstream: use path_absolute() for pathname checks; from Manoj Ampalam
2308
2309 OpenBSD-Commit-ID: 482ce71a5ea5c5f3bc4d00fd719481a6a584d925
2310
2311commit d0d1dfa55be1c5c0d77ab3096b198a64235f936d
2312Author: Darren Tucker <dtucker@dtucker.net>
2313Date: Fri Nov 16 14:11:44 2018 +1100
2314
2315 Test for OPENSSL_init_crypto before using.
2316
2317 Check for the presence of OPENSSL_init_crypto and all the flags we want
2318 before trying to use it (bz#2931).
2319
2320commit 6010c0303a422a9c5fa8860c061bf7105eb7f8b2
2321Author: djm@openbsd.org <djm@openbsd.org>
2322Date: Fri Nov 16 03:03:10 2018 +0000
2323
2324 upstream: disallow empty incoming filename or ones that refer to the
2325
2326 current directory; based on report/patch from Harry Sintonen
2327
2328 OpenBSD-Commit-ID: f27651b30eaee2df49540ab68d030865c04f6de9
2329
2330commit aaed635e3a401cfcc4cc97f33788179c458901c3
2331Author: djm@openbsd.org <djm@openbsd.org>
2332Date: Fri Nov 16 02:46:20 2018 +0000
2333
2334 upstream: fix bug in client that was keeping a redundant ssh-agent
2335
2336 socket around for the life of the connection; bz#2912; reported by Simon
2337 Tatham; ok dtucker@
2338
2339 OpenBSD-Commit-ID: 4ded588301183d343dce3e8c5fc1398e35058478
2340
2341commit e76135e3007f1564427b2956c628923d8dc2f75a
2342Author: djm@openbsd.org <djm@openbsd.org>
2343Date: Fri Nov 16 02:43:56 2018 +0000
2344
2345 upstream: fix bug in HostbasedAcceptedKeyTypes and
2346
2347 PubkeyAcceptedKeyTypes options. If only RSA-SHA2 siganture types were
2348 specified, then authentication would always fail for RSA keys as the monitor
2349 checks only the base key (not the signature algorithm) type against
2350 *AcceptedKeyTypes. bz#2746; reported by Jakub Jelen; ok dtucker
2351
2352 OpenBSD-Commit-ID: 117bc3dc54578dbdb515a1d3732988cb5b00461b
2353
2354commit 5c1a63562cac0574c226224075b0829a50b48c9d
2355Author: djm@openbsd.org <djm@openbsd.org>
2356Date: Fri Nov 16 02:30:20 2018 +0000
2357
2358 upstream: support a prefix of '@' to suppress echo of sftp batch
2359
2360 commands; bz#2926; ok dtucker@
2361
2362 OpenBSD-Commit-ID: 9d635636bc84aeae796467e059f7634de990a79d
2363
2364commit 90ef45f7aac33eaf55ec344e101548a01e570f29
2365Author: schwarze@openbsd.org <schwarze@openbsd.org>
2366Date: Tue Nov 13 07:22:45 2018 +0000
2367
2368 upstream: fix markup error (missing blank before delimiter); from
2369
2370 Mike Frysinger <vapier at gentoo dot org>
2371
2372 OpenBSD-Commit-ID: 1bc5392f795ca86318d695e0947eaf71a5a4f6d9
2373
2374commit 960e7c672dc106f3b759c081de3edb4d1138b36e
2375Author: djm@openbsd.org <djm@openbsd.org>
2376Date: Fri Nov 9 02:57:58 2018 +0000
2377
2378 upstream: typo in error message; caught by Debian lintian, via
2379
2380 Colin Watson
2381
2382 OpenBSD-Commit-ID: bff614c7bd1f4ca491a84e9b5999f848d0d66758
2383
2384commit 81f1620c836e6c79c0823ba44acca605226a80f1
2385Author: djm@openbsd.org <djm@openbsd.org>
2386Date: Fri Nov 9 02:56:22 2018 +0000
2387
2388 upstream: correct local variable name; from yawang AT microsoft.com
2389
2390 OpenBSD-Commit-ID: a0c228390856a215bb66319c89cb3959d3af8c87
2391
2392commit 1293740e800fa2e5ccd38842a2e4970c6f3b9831
2393Author: dtucker@openbsd.org <dtucker@openbsd.org>
2394Date: Wed Oct 31 11:20:05 2018 +0000
2395
2396 upstream: Import new moduli.
2397
2398 OpenBSD-Commit-ID: c07772f58028fda683ee6abd41c73da3ff70d403
2399
2400commit 46925ae28e53fc9add336a4fcdb7ed4b86c3591c
2401Author: djm@openbsd.org <djm@openbsd.org>
2402Date: Fri Oct 26 01:23:03 2018 +0000
2403
2404 upstream: mention ssh-ed25519-cert-v01@openssh.com in list of cert
2405
2406 key type at start of doc
2407
2408 OpenBSD-Commit-ID: b46b0149256d67f05f2d5d01e160634ed1a67324
2409
2410commit 8d8340e2c215155637fe19cb1a837f71b2d55f7b
2411Author: Darren Tucker <dtucker@dtucker.net>
2412Date: Fri Nov 16 13:32:13 2018 +1100
2413
2414 Remove fallback check for /usr/local/ssl.
2415
2416 If configure could not find a working OpenSSL installation it would
2417 fall back to checking in /usr/local/ssl. This made sense back when
2418 systems did not ship with OpenSSL, but most do and OpenSSL 1.1 doesn't
2419 use that as a default any more. The fallback behaviour also meant
2420 that if you pointed --with-ssl-dir at a specific directory and it
2421 didn't work, it would silently use either the system libs or the ones
2422 in /usr/local/ssl. If you want to use /usr/local/ssl you'll need to
2423 pass configure --with-ssl-dir=/usr/local/ssl. ok djm@
2424
2425commit ce93472134fb22eff73edbcd173a21ae38889331
2426Author: Darren Tucker <dtucker@dtucker.net>
2427Date: Fri Nov 16 12:44:01 2018 +1100
2428
2429 Fix check for OpenSSL 1.0.1 exactly.
2430
2431 Both INSTALL and configure.ac claim OpenSSL >= 1.0.1 is supported; fix
2432 compile-time check for 1.0.1 to match.
2433
2434commit f2970868f86161a22b2c377057fa3891863a692a
2435Author: Darren Tucker <dtucker@dtucker.net>
2436Date: Sun Nov 11 15:58:20 2018 +1100
2437
2438 Improve warnings in cygwin service setup.
2439
2440 bz#2922, patch from vinschen at redhat.com.
2441
2442commit bd2d54fc1eee84bf87158a1277a50e6c8a303339
2443Author: Darren Tucker <dtucker@dtucker.net>
2444Date: Sun Nov 11 15:54:54 2018 +1100
2445
2446 Remove hardcoded service name in cygwin setup.
2447
2448 bz#2922, patch from Christian.Lupien at USherbrooke.ca, sanity check
2449 by vinschen at redhat.com.
2450
2451commit d0153c77bf7964e694f1d26c56c41a571b8e9466
2452Author: Dag-Erling Smørgrav <des@des.no>
2453Date: Tue Oct 9 23:03:40 2018 +0200
2454
2455 AC_CHECK_SIZEOF() no longer needs a second argument.
2456
2457commit 9b47b083ca9d866249ada9f02dbd57c87b13806e
2458Author: Manoj Ampalam <manojamp@microsoft.com>
2459Date: Thu Nov 8 22:41:59 2018 -0800
2460
2461 Fix error message w/out nistp521.
2462
2463 Correct error message when OpenSSL doesn't support certain ECDSA key
2464 lengths.
2465
2466commit 624d19ac2d56fa86a22417c35536caceb3be346f
2467Author: Eneas U de Queiroz <cote2004-github@yahoo.com>
2468Date: Tue Oct 9 16:17:42 2018 -0300
2469
2470 fix compilation with openssl built without ECC
2471
2472 ECDSA code in openssh-compat.h and libressl-api-compat.c needs to be
2473 guarded by OPENSSL_HAS_ECC
2474
2475 Signed-off-by: Eneas U de Queiroz <cote2004-github@yahoo.com>
2476
2477commit 1801cd11d99d05a66ab5248c0555f55909a355ce
2478Author: Darren Tucker <dtucker@dtucker.net>
2479Date: Thu Nov 8 15:03:11 2018 +1100
2480
2481 Simplify OpenSSL 1.1 function checks.
2482
2483 Replace AC_SEARCH_LIBS checks for OpenSSL 1.1 functions with a single
2484 AC_CHECK_FUNCS. ok djm@
2485
2486commit bc32f118d484e4d71d2a0828fd4eab7e4176c9af
2487Author: Darren Tucker <dtucker@dtucker.net>
2488Date: Mon Nov 5 17:31:24 2018 +1100
2489
2490 Fix pasto for HAVE_EVP_CIPHER_CTX_SET_IV.
2491
2492 Prevents unnecessary redefinition. Patch from mforney at mforney.org.
2493
2494commit 3719df60c66abc4b47200d41f571d67772f293ba
2495Author: Darren Tucker <dtucker@dtucker.net>
2496Date: Wed Oct 31 22:21:03 2018 +1100
2497
2498 Import new moduli.
2499
2500commit 595605d4abede475339d6a1f07a8cc674c11d1c3
2501Author: Darren Tucker <dtucker@dtucker.net>
2502Date: Sun Oct 28 15:18:13 2018 +1100
2503
2504 Update check for minimum OpenSSL version.
2505
2506commit 6ab75aba340d827140d7ba719787aabaf39a0355
2507Author: Darren Tucker <dtucker@dtucker.net>
2508Date: Sun Oct 28 15:16:31 2018 +1100
2509
2510 Update required OpenSSL versions to match current.
2511
2512commit c801b0e38eae99427f37869370151b78f8e15c5d
2513Author: Darren Tucker <dtucker@dtucker.net>
2514Date: Sun Oct 28 14:34:12 2018 +1100
2515
2516 Use detected version functions in openssl compat.
2517
2518 Use detected functions in compat layer instead of guessing based on
2519 versions. Really fixes builds with LibreSSL, not just configure.
2520
2521commit 262d81a259d4aa1507c709ec9d5caa21c7740722
2522Author: Darren Tucker <dtucker@dtucker.net>
2523Date: Sat Oct 27 16:45:59 2018 +1100
2524
2525 Check for the existence of openssl version funcs.
2526
2527 Check for the existence of openssl version functions and use the ones
2528 detected instead of trying to guess based on the int32 version
2529 identifier. Fixes builds with LibreSSL.
2530
2531commit 406a24b25d6a2bdd70cacd16de7e899dcb2a8829
2532Author: Damien Miller <djm@mindrot.org>
2533Date: Fri Oct 26 13:43:28 2018 +1100
2534
2535 fix builds on OpenSSL <= 1.0.x
2536
2537 I thought OpenSSL 1.0.x offered the new-style OpenSSL_version_num() API
2538 to obtain version number, but they don't.
2539
2540commit 859754bdeb41373d372e36b5dc89c547453addb3
2541Author: Damien Miller <djm@mindrot.org>
2542Date: Tue Oct 23 17:10:41 2018 +1100
2543
2544 remove remaining references to SSLeay
2545
2546 Prompted by Rosen Penev
2547
2548commit b9fea45a68946c8dfeace72ad1f6657c18f2a98a
2549Author: Damien Miller <djm@mindrot.org>
2550Date: Tue Oct 23 17:10:35 2018 +1100
2551
2552 regen depend
2553
2554commit a65784c9f9c5d00cf1a0e235090170abc8d07c73
2555Author: djm@openbsd.org <djm@openbsd.org>
2556Date: Tue Oct 23 05:56:35 2018 +0000
2557
2558 upstream: refer to OpenSSL not SSLeay;
2559
2560 we're old, but we don't have to act it
2561
2562 OpenBSD-Commit-ID: 9ca38d11f8ed19e61a55108d1e892d696cee08ec
2563
2564commit c0a35265907533be10ca151ac797f34ae0d68969
2565Author: Damien Miller <djm@mindrot.org>
2566Date: Mon Oct 22 11:22:50 2018 +1100
2567
2568 fix compile for openssl 1.0.x w/ --with-ssl-engine
2569
2570 bz#2921, patch from cotequeiroz
2571
2572commit 31b49525168245abe16ad49d7b7f519786b53a38
2573Author: Darren Tucker <dtucker@dtucker.net>
2574Date: Mon Oct 22 20:05:18 2018 +1100
2575
2576 Include openssl compatibility.
2577
2578 Patch from rosenp at gmail.com via openssh-unix-dev.
2579
2580commit a4fc253f5f44f0e4c47aafe2a17d2c46481d3c04
2581Author: djm@openbsd.org <djm@openbsd.org>
2582Date: Fri Oct 19 03:12:42 2018 +0000
2583
2584 upstream: when printing certificate contents "ssh-keygen -Lf
2585
2586 /path/certificate", include the algorithm that the CA used to sign the cert.
2587
2588 OpenBSD-Commit-ID: 1ea20b5048a851a7a0758dcb9777a211a2c0dddd
2589
2590commit 83b3d99d2b47321b7ebb8db6f6ea04f3808bc069
2591Author: florian@openbsd.org <florian@openbsd.org>
2592Date: Mon Oct 15 11:28:50 2018 +0000
2593
2594 upstream: struct sockaddr_storage is guaranteed to be large enough,
2595
2596 no need to check the size. OK kn, deraadt
2597
2598 OpenBSD-Commit-ID: 0aa56e92eb49c79f495b31a5093109ec5841f439
2599
1commit aede1c34243a6f7feae2fb2cb686ade5f9be6f3d 2600commit aede1c34243a6f7feae2fb2cb686ade5f9be6f3d
2Author: Damien Miller <djm@mindrot.org> 2601Author: Damien Miller <djm@mindrot.org>
3Date: Wed Oct 17 11:01:20 2018 +1100 2602Date: Wed Oct 17 11:01:20 2018 +1100
@@ -7741,1966 +10340,3 @@ Date: Mon Apr 17 11:02:31 2017 +0000
7741 -Wpointer-sign and -Wold-style-definition. 10340 -Wpointer-sign and -Wold-style-definition.
7742 10341
7743 Upstream-ID: 5cbe348aa76dc1adf55be6c0e388fafaa945439a 10342 Upstream-ID: 5cbe348aa76dc1adf55be6c0e388fafaa945439a
7744
7745commit 4d827f0d75a53d3952288ab882efbddea7ffadfe
7746Author: djm@openbsd.org <djm@openbsd.org>
7747Date: Tue Apr 4 00:24:56 2017 +0000
7748
7749 upstream commit
7750
7751 disallow creation (of empty files) in read-only mode;
7752 reported by Michal Zalewski, feedback & ok deraadt@
7753
7754 Upstream-ID: 5d9c8f2fa8511d4ecf95322994ffe73e9283899b
7755
7756commit ef47843af0a904a21c920e619c5aec97b65dd9ac
7757Author: deraadt@openbsd.org <deraadt@openbsd.org>
7758Date: Sun Mar 26 00:18:52 2017 +0000
7759
7760 upstream commit
7761
7762 incorrect renditions of this quote bother me
7763
7764 Upstream-ID: 1662be3ebb7a71d543da088119c31d4d463a9e49
7765
7766commit d9048861bea842c4eba9c2dbbf97064cc2a5ef02
7767Author: Darren Tucker <dtucker@zip.com.au>
7768Date: Fri Mar 31 11:04:43 2017 +1100
7769
7770 Check for and use gcc's -pipe.
7771
7772 Speeds up configure and build by a couple of percent. ok djm@
7773
7774commit 282cad2240c4fbc104c2f2df86d688192cbbe4bb
7775Author: Darren Tucker <dtucker@zip.com.au>
7776Date: Wed Mar 29 16:34:44 2017 +1100
7777
7778 Import fmt_scaled.c rev 1.16 from OpenBSD.
7779
7780 Fix overly-conservative overflow checks on mulitplications and add checks
7781 on additions. This allows scan_scaled to work up to +/-LLONG_MAX (LLONG_MIN
7782 will still be flagged as a range error). ok millert@
7783
7784commit c73a229e4edf98920f395e19fd310684fc6bb951
7785Author: Darren Tucker <dtucker@zip.com.au>
7786Date: Wed Mar 29 16:34:02 2017 +1100
7787
7788 Import fmt_scaled.c rev 1.15 from OpenBSD.
7789
7790 Collapse underflow and overflow checks into a single block.
7791 ok djm@ millert@
7792
7793commit d427b73bf5a564f663d16546dbcbd84ba8b9d4af
7794Author: Darren Tucker <dtucker@zip.com.au>
7795Date: Wed Mar 29 16:32:57 2017 +1100
7796
7797 Import fmt_scaled.c rev 1.14 from OpenBSD.
7798
7799 Catch integer underflow in scan_scaled reported by Nicolas Iooss.
7800 ok deraadt@ djm@
7801
7802commit d13281f2964abc5f2e535e1613c77fc61b0c53e7
7803Author: Darren Tucker <dtucker@zip.com.au>
7804Date: Wed Mar 29 12:39:39 2017 +1100
7805
7806 Don't check privsep user or path when unprivileged
7807
7808 If running with privsep (mandatory now) as a non-privileged user, we
7809 don't chroot or change to an unprivileged user however we still checked
7810 the existence of the user and directory. Don't do those checks if we're
7811 not going to use them. Based in part on a patch from Lionel Fourquaux
7812 via Corinna Vinschen, ok djm@
7813
7814commit f2742a481fe151e493765a3fbdef200df2ea7037
7815Author: Darren Tucker <dtucker@zip.com.au>
7816Date: Wed Mar 29 10:50:31 2017 +1100
7817
7818 Remove SHA256 EVP wrapper implementation.
7819
7820 All supported versions of OpenSSL should now have SHA256 so remove our
7821 EVP wrapper implementaion. ok djm@
7822
7823commit 5346f271fc76549caf4a8e65b5fba319be422fe9
7824Author: Darren Tucker <dtucker@zip.com.au>
7825Date: Wed Mar 29 10:23:58 2017 +1100
7826
7827 Remove check for OpenSSL < 0.9.8g.
7828
7829 We no longer support OpenSSL < 1.0.1 so remove check for unreliable ECC
7830 in OpenSSL < 0.9.8g.
7831
7832commit 8fed0a5fe7b4e78a6810b133d8e91be9742ee0a1
7833Author: Darren Tucker <dtucker@zip.com.au>
7834Date: Wed Mar 29 10:16:15 2017 +1100
7835
7836 Remove compat code for OpenSSL < 0.9.7.
7837
7838 Resyncs that code with OpenBSD upstream.
7839
7840commit 608ec1f62ff22fdccc3952e51463d79c43cbd0d3
7841Author: Darren Tucker <dtucker@zip.com.au>
7842Date: Wed Mar 29 09:50:54 2017 +1100
7843
7844 Remove SSHv1 code path.
7845
7846 Server-side support for Protocol 1 has been removed so remove !compat20
7847 PAM code path.
7848
7849commit 7af27bf538cbc493d609753f9a6d43168d438f1b
7850Author: Darren Tucker <dtucker@zip.com.au>
7851Date: Fri Mar 24 09:44:56 2017 +1100
7852
7853 Enable ldns when using ldns-config.
7854
7855 Actually enable ldns when attempting to use ldns-config. bz#2697, patch
7856 from fredrik at fornwall.net.
7857
7858commit 58b8cfa2a062b72139d7229ae8de567f55776f24
7859Author: Damien Miller <djm@mindrot.org>
7860Date: Wed Mar 22 12:43:02 2017 +1100
7861
7862 Missing header on Linux/s390
7863
7864 Patch from Jakub Jelen
7865
7866commit 096fb65084593f9f3c1fc91b6d9052759a272a00
7867Author: djm@openbsd.org <djm@openbsd.org>
7868Date: Mon Mar 20 22:08:06 2017 +0000
7869
7870 upstream commit
7871
7872 remove /usr/bin/time calls around tests, makes diffing test
7873 runs harder. Based on patch from Mike Frysinger
7874
7875 Upstream-Regress-ID: 81c1083b14dcf473b23d2817882f40b346ebc95c
7876
7877commit 6b853c6f8ba5eecc50f3b57af8e63f8184eb0fa6
7878Author: Damien Miller <djm@mindrot.org>
7879Date: Tue Mar 21 08:47:55 2017 +1100
7880
7881 Fix syntax error on Linux/X32
7882
7883 Patch from Mike Frysinger
7884
7885commit d38f05dbdd291212bc95ea80648b72b7177e9f4e
7886Author: Darren Tucker <dtucker@zip.com.au>
7887Date: Mon Mar 20 13:38:27 2017 +1100
7888
7889 Add llabs() implementation.
7890
7891commit 72536316a219b7394996a74691a5d4ec197480f7
7892Author: Damien Miller <djm@mindrot.org>
7893Date: Mon Mar 20 12:23:04 2017 +1100
7894
7895 crank version numbers
7896
7897commit 3be52bc36bdfd24ded7e0f46999e7db520fb4e3f
7898Author: djm@openbsd.org <djm@openbsd.org>
7899Date: Mon Mar 20 01:18:59 2017 +0000
7900
7901 upstream commit
7902
7903 openssh-7.5
7904
7905 Upstream-ID: b8b9a4a949427c393cd868215e1724ceb3467ee5
7906
7907commit db84e52fe9cfad57f22e7e23c5fbf00092385129
7908Author: Damien Miller <djm@mindrot.org>
7909Date: Mon Mar 20 12:07:20 2017 +1100
7910
7911 I'm a doofus.
7912
7913 Unbreak obvious syntax error.
7914
7915commit 89f04852db27643717c9c3a2b0dde97ae50099ee
7916Author: Damien Miller <djm@mindrot.org>
7917Date: Mon Mar 20 11:53:34 2017 +1100
7918
7919 on Cygwin, check paths from server for backslashes
7920
7921 Pointed out by Jann Horn of Google Project Zero
7922
7923commit 7ef1f9bafc2cc8d97ff2fbd4f280002b6e8ea5d9
7924Author: Damien Miller <djm@mindrot.org>
7925Date: Mon Mar 20 11:48:34 2017 +1100
7926
7927 Yet another synonym for ASCII: "646"
7928
7929 Used by NetBSD; this unbreaks mprintf() and friends there for the C
7930 locale (caught by dtucker@ and his menagerie of test systems).
7931
7932commit 9165abfea3f68a0c684a6ed2e575e59bc31a3a6b
7933Author: Damien Miller <djm@mindrot.org>
7934Date: Mon Mar 20 09:58:34 2017 +1100
7935
7936 create test mux socket in /tmp
7937
7938 Creating the socket in $OBJ could blow past the (quite limited)
7939 path limit for Unix domain sockets. As a bandaid for bz#2660,
7940 reported by Colin Watson; ok dtucker@
7941
7942commit 2adbe1e63bc313d03e8e84e652cc623af8ebb163
7943Author: markus@openbsd.org <markus@openbsd.org>
7944Date: Wed Mar 15 07:07:39 2017 +0000
7945
7946 upstream commit
7947
7948 disallow KEXINIT before NEWKEYS; ok djm; report by
7949 vegard.nossum at oracle.com
7950
7951 Upstream-ID: 3668852d1f145050e62f1da08917de34cb0c5234
7952
7953commit 2fbf91684d76d38b9cf06550b69c9e41bca5a71c
7954Author: Darren Tucker <dtucker@zip.com.au>
7955Date: Thu Mar 16 14:05:46 2017 +1100
7956
7957 Include includes.h for compat bits.
7958
7959commit b55f634e96b9c5b0cd991e23a9ca181bec4bdbad
7960Author: Darren Tucker <dtucker@zip.com.au>
7961Date: Thu Mar 16 13:45:17 2017 +1100
7962
7963 Wrap stdint.h in #ifdef HAVE_STDINT_H
7964
7965commit 55a1117d7342a0bf8b793250cf314bab6b482b99
7966Author: Damien Miller <djm@mindrot.org>
7967Date: Thu Mar 16 11:22:42 2017 +1100
7968
7969 Adapt Cygwin config script to privsep knob removal
7970
7971 Patch from Corinna Vinschen.
7972
7973commit 1a321bfdb91defe3c4d9cca5651724ae167e5436
7974Author: deraadt@openbsd.org <deraadt@openbsd.org>
7975Date: Wed Mar 15 03:52:30 2017 +0000
7976
7977 upstream commit
7978
7979 accidents happen to the best of us; ok djm
7980
7981 Upstream-ID: b7a9dbd71011ffde95e06f6945fe7197dedd1604
7982
7983commit 25f837646be8c2017c914d34be71ca435dfc0e07
7984Author: djm@openbsd.org <djm@openbsd.org>
7985Date: Wed Mar 15 02:25:09 2017 +0000
7986
7987 upstream commit
7988
7989 fix regression in 7.4: deletion of PKCS#11-hosted keys
7990 would fail unless they were specified by full physical pathname. Report and
7991 fix from Jakub Jelen via bz#2682; ok dtucker@
7992
7993 Upstream-ID: 5b5bc20ca11cacb5d5eb29c3f93fd18425552268
7994
7995commit a8c5eeacf032a7d3408957e45dd7603cc1baf55f
7996Author: djm@openbsd.org <djm@openbsd.org>
7997Date: Wed Mar 15 02:19:09 2017 +0000
7998
7999 upstream commit
8000
8001 Fix segfault when sshd attempts to load RSA1 keys (can
8002 only happen when protocol v.1 support is enabled for the client). Reported by
8003 Jakub Jelen in bz#2686; ok dtucker
8004
8005 Upstream-ID: 8fdaec2ba4b5f65db1d094f6714ce64b25d871d7
8006
8007commit 66705948c0639a7061a0d0753266da7685badfec
8008Author: djm@openbsd.org <djm@openbsd.org>
8009Date: Tue Mar 14 07:19:07 2017 +0000
8010
8011 upstream commit
8012
8013 Mark the sshd_config UsePrivilegeSeparation option as
8014 deprecated, effectively making privsep mandatory in sandboxing mode. ok
8015 markus@ deraadt@
8016
8017 (note: this doesn't remove the !privsep code paths, though that will
8018 happen eventually).
8019
8020 Upstream-ID: b4c52666256c4dd865f8ce9431af5d6ce2d74a0a
8021
8022commit f86586b03fe6cd8f595289bde200a94bc2c191af
8023Author: Damien Miller <djm@mindrot.org>
8024Date: Tue Mar 14 18:26:29 2017 +1100
8025
8026 Make seccomp-bpf sandbox work on Linux/X32
8027
8028 Allow clock_gettime syscall with X32 bit masked off. Apparently
8029 this is required for at least some kernel versions. bz#2142
8030 Patch mostly by Colin Watson. ok dtucker@
8031
8032commit 2429cf78dd2a9741ce27ba25ac41c535274a0af6
8033Author: Damien Miller <djm@mindrot.org>
8034Date: Tue Mar 14 18:01:52 2017 +1100
8035
8036 require OpenSSL >=1.0.1
8037
8038commit e3ea335abeab731c68f2b2141bee85a4b0bf680f
8039Author: Damien Miller <djm@mindrot.org>
8040Date: Tue Mar 14 17:48:43 2017 +1100
8041
8042 Remove macro trickery; no binary change
8043
8044 This stops the SC_ALLOW(), SC_ALLOW_ARG() and SC_DENY() macros
8045 prepending __NR_ to the syscall number parameter and just makes
8046 them explicit in the macro invocations.
8047
8048 No binary change in stripped object file before/after.
8049
8050commit 5f1596e11d55539678c41f68aed358628d33d86f
8051Author: Damien Miller <djm@mindrot.org>
8052Date: Tue Mar 14 13:15:18 2017 +1100
8053
8054 support ioctls for ICA crypto card on Linux/s390
8055
8056 Based on patch from Eduardo Barretto; ok dtucker@
8057
8058commit b1b22dd0df2668b322dda174e501dccba2cf5c44
8059Author: Darren Tucker <dtucker@zip.com.au>
8060Date: Tue Mar 14 14:19:36 2017 +1100
8061
8062 Plumb conversion test into makefile.
8063
8064commit f57783f1ddfb4cdfbd612c6beb5ec01cb5b9a6b9
8065Author: dtucker@openbsd.org <dtucker@openbsd.org>
8066Date: Tue Mar 14 01:20:29 2017 +0000
8067
8068 upstream commit
8069
8070 Add unit test for convtime().
8071
8072 Upstream-Regress-ID: 8717bc0ca4c21120f6dd3a1d3b7a363f707c31e1
8073
8074commit 8884b7247d094cd11ff9e39c325ba928c5bdbc6c
8075Author: dtucker@openbsd.org <dtucker@openbsd.org>
8076Date: Tue Mar 14 01:10:07 2017 +0000
8077
8078 upstream commit
8079
8080 Add ASSERT_LONG_* helpers.
8081
8082 Upstream-Regress-ID: fe15beaea8f5063c7f21b0660c722648e3d76431
8083
8084commit c6774d21185220c0ba11e8fd204bf0ad1a432071
8085Author: dtucker@openbsd.org <dtucker@openbsd.org>
8086Date: Tue Mar 14 00:55:37 2017 +0000
8087
8088 upstream commit
8089
8090 Fix convtime() overflow test on boundary condition,
8091 spotted by & ok djm.
8092
8093 Upstream-ID: 51f14c507ea87a3022e63f574100613ab2ba5708
8094
8095commit f5746b40cfe6d767c8e128fe50c43274b31cd594
8096Author: dtucker@openbsd.org <dtucker@openbsd.org>
8097Date: Tue Mar 14 00:25:03 2017 +0000
8098
8099 upstream commit
8100
8101 Check for integer overflow when parsing times in
8102 convtime(). Reported by nicolas.iooss at m4x.org, ok djm@
8103
8104 Upstream-ID: 35e6a4e98f6fa24df50bfb8ba1307cf70e966f13
8105
8106commit f5907982f42a8d88a430b8a46752cbb7859ba979
8107Author: Darren Tucker <dtucker@zip.com.au>
8108Date: Tue Mar 14 13:38:15 2017 +1100
8109
8110 Add a "unit" target to run only unit tests.
8111
8112commit 9e96b41682aed793fadbea5ccd472f862179fb02
8113Author: Damien Miller <djm@mindrot.org>
8114Date: Tue Mar 14 12:24:47 2017 +1100
8115
8116 Fix weakness in seccomp-bpf sandbox arg inspection
8117
8118 Syscall arguments are passed via an array of 64-bit values in struct
8119 seccomp_data, but we were only inspecting the bottom 32 bits and not
8120 even those correctly for BE systems.
8121
8122 Fortunately, the only case argument inspection was used was in the
8123 socketcall filtering so using this for sandbox escape seems
8124 impossible.
8125
8126 ok dtucker
8127
8128commit 8ff3fc3f2f7c13e8968717bc2b895ee32c441275
8129Author: djm@openbsd.org <djm@openbsd.org>
8130Date: Sat Mar 11 23:44:16 2017 +0000
8131
8132 upstream commit
8133
8134 regress tests for loading certificates without public keys;
8135 bz#2617 based on patch from Adam Eijdenberg; ok markus@ dtucker@
8136
8137 Upstream-Regress-ID: 0145d19328ed995b73fe2d9da33596b17429d0d0
8138
8139commit 1e24552716194db8f2f620587b876158a9ef56ad
8140Author: djm@openbsd.org <djm@openbsd.org>
8141Date: Sat Mar 11 23:40:26 2017 +0000
8142
8143 upstream commit
8144
8145 allow ssh to use certificates accompanied by a private
8146 key file but no corresponding plain *.pub public key. bz#2617 based on patch
8147 from Adam Eijdenberg; ok dtucker@ markus@
8148
8149 Upstream-ID: 295668dca2c39505281577217583ddd2bd4b00b9
8150
8151commit 0fb1a617a07b8df5de188dd5a0c8bf293d4bfc0e
8152Author: markus@openbsd.org <markus@openbsd.org>
8153Date: Sat Mar 11 13:07:35 2017 +0000
8154
8155 upstream commit
8156
8157 Don't count the initial block twice when computing how
8158 many bytes to discard for the work around for the attacks against CBC-mode.
8159 ok djm@; report from Jean Paul, Kenny, Martin and Torben @ RHUL
8160
8161 Upstream-ID: f445f509a4e0a7ba3b9c0dae7311cb42458dc1e2
8162
8163commit ef653dd5bd5777132d9f9ee356225f9ee3379504
8164Author: dtucker@openbsd.org <dtucker@openbsd.org>
8165Date: Fri Mar 10 07:18:32 2017 +0000
8166
8167 upstream commit
8168
8169 krl.c
8170
8171 Upstream-ID: fc5e695d5d107d730182e2da7b23f00b489e0ee1
8172
8173commit d94c1dfef2ea30ca67b1204ada7c3b537c54f4d0
8174Author: Damien Miller <djm@mindrot.org>
8175Date: Sun Mar 12 10:48:14 2017 +1100
8176
8177 sync fmt_scaled.c with OpenBSD
8178
8179 revision 1.13
8180 date: 2017/03/11 23:37:23; author: djm; state: Exp; lines: +14 -1; commitid: jnFKyHkB3CEiEZ2R;
8181 fix signed integer overflow in scan_scaled. Found by Nicolas Iooss
8182 using AFL against ssh_config. ok deraadt@ millert@
8183 ----------------------------
8184 revision 1.12
8185 date: 2013/11/29 19:00:51; author: deraadt; state: Exp; lines: +6 -5;
8186 fairly simple unsigned char casts for ctype
8187 ok krw
8188 ----------------------------
8189 revision 1.11
8190 date: 2012/11/12 14:07:20; author: halex; state: Exp; lines: +4 -2;
8191 make scan_scaled set errno to EINVAL rather than ERANGE if it encounters
8192 an invalid multiplier, like the man page says it should
8193
8194 "looks sensible" deraadt@, ok ian@
8195 ----------------------------
8196 revision 1.10
8197 date: 2009/06/20 15:00:04; author: martynas; state: Exp; lines: +4 -4;
8198 use llabs instead of the home-grown version; and some comment changes
8199 ok ian@, millert@
8200 ----------------------------
8201
8202commit 894221a63fa061e52e414ca58d47edc5fe645968
8203Author: djm@openbsd.org <djm@openbsd.org>
8204Date: Fri Mar 10 05:01:13 2017 +0000
8205
8206 upstream commit
8207
8208 When updating hostkeys, accept RSA keys if
8209 HostkeyAlgorithms contains any RSA keytype. Previously, ssh could ignore RSA
8210 keys when any of the ssh-rsa-sha2-* methods was enabled in HostkeyAlgorithms
8211 nit ssh-rsa (SHA1 signatures) was not. bz#2650 reported by Luis Ressel; ok
8212 dtucker@
8213
8214 Upstream-ID: c5e8cfee15c42f4a05d126158a0766ea06da79d2
8215
8216commit dd3e2298663f4cc1a06bc69582d00dcfee27d73c
8217Author: djm@openbsd.org <djm@openbsd.org>
8218Date: Fri Mar 10 04:24:55 2017 +0000
8219
8220 upstream commit
8221
8222 make hostname matching really insensitive to case;
8223 bz#2685, reported by Petr Cerny; ok dtucker@
8224
8225 Upstream-ID: e467622ff154269e36ba8b6c9e3d105e1c4a9253
8226
8227commit 77a9be9446697fe8b5499fe651f4a82a71a4b51f
8228Author: djm@openbsd.org <djm@openbsd.org>
8229Date: Fri Mar 10 03:52:48 2017 +0000
8230
8231 upstream commit
8232
8233 reword a comment to make it fit 80 columns
8234
8235 Upstream-ID: 4ef509a66b96c7314bbcc87027c2af71fa9d0ba4
8236
8237commit 61b8ef6a66efaec07e023342cb94a10bdc2254dc
8238Author: djm@openbsd.org <djm@openbsd.org>
8239Date: Fri Mar 10 04:27:32 2017 +0000
8240
8241 upstream commit
8242
8243 better match sshd config parser behaviour: fatal() if
8244 line is overlong, increase line buffer to match sshd's; bz#2651 reported by
8245 Don Fong; ok dtucker@
8246
8247 Upstream-ID: b175ae7e0ba403833f1ee566edf10f67443ccd18
8248
8249commit db2597207e69912f2592cd86a1de8e948a9d7ffb
8250Author: djm@openbsd.org <djm@openbsd.org>
8251Date: Fri Mar 10 04:26:06 2017 +0000
8252
8253 upstream commit
8254
8255 ensure hostname is lower-case before hashing it;
8256 bz#2591 reported by Griff Miller II; ok dtucker@
8257
8258 Upstream-ID: c3b8b93804f376bd00d859b8bcd9fc0d86b4db17
8259
8260commit df9936936c695f85c1038bd706d62edf752aca4b
8261Author: djm@openbsd.org <djm@openbsd.org>
8262Date: Fri Mar 10 04:24:55 2017 +0000
8263
8264 upstream commit
8265
8266 make hostname matching really insensitive to case;
8267 bz#2685, reported by Petr Cerny; ok dtucker@
8268
8269 Upstream-ID: e632b7a9bf0d0558d5ff56dab98b7cca6c3db549
8270
8271commit 67eed24bfa7645d88fa0b883745fccb22a0e527e
8272Author: dtucker@openbsd.org <dtucker@openbsd.org>
8273Date: Fri Mar 10 04:11:00 2017 +0000
8274
8275 upstream commit
8276
8277 Remove old null check from config dumper. Patch from
8278 jjelen at redhat.com vi bz#2687, ok djm@
8279
8280 Upstream-ID: 824ab71467b78c4bab0dd1b3a38e8bc5f63dd528
8281
8282commit 183ba55aaaecca0206184b854ad6155df237adbe
8283Author: djm@openbsd.org <djm@openbsd.org>
8284Date: Fri Mar 10 04:07:20 2017 +0000
8285
8286 upstream commit
8287
8288 fix regression in 7.4 server-sig-algs, where we were
8289 accidentally excluding SHA2 RSA signature methods. bz#2680, patch from Nuno
8290 Goncalves; ok dtucker@
8291
8292 Upstream-ID: 81ac8bfb30960447740b9b8f6a214dcf322f12e8
8293
8294commit 66be4fe8c4435af5bbc82998501a142a831f1181
8295Author: dtucker@openbsd.org <dtucker@openbsd.org>
8296Date: Fri Mar 10 03:53:11 2017 +0000
8297
8298 upstream commit
8299
8300 Check for NULL return value from key_new. Patch from
8301 jjelen at redhat.com via bz#2687, ok djm@
8302
8303 Upstream-ID: 059e33cd43cba88dc8caf0b1936fd4dd88fd5b8e
8304
8305commit ec2892b5c7fea199914cb3a6afb3af38f84990bf
8306Author: djm@openbsd.org <djm@openbsd.org>
8307Date: Fri Mar 10 03:52:48 2017 +0000
8308
8309 upstream commit
8310
8311 reword a comment to make it fit 80 columns
8312
8313 Upstream-ID: b4b48b4487c0821d16e812c40c9b09f03b28e349
8314
8315commit 7fadbb6da3f4122de689165651eb39985e1cba85
8316Author: dtucker@openbsd.org <dtucker@openbsd.org>
8317Date: Fri Mar 10 03:48:57 2017 +0000
8318
8319 upstream commit
8320
8321 Check for NULL argument to sshkey_read. Patch from
8322 jjelen at redhat.com via bz#2687, ok djm@
8323
8324 Upstream-ID: c2d00c2ea50c4861d271d0a586f925cc64a87e0e
8325
8326commit 5a06b9e019e2b0b0f65a223422935b66f3749de3
8327Author: dtucker@openbsd.org <dtucker@openbsd.org>
8328Date: Fri Mar 10 03:45:40 2017 +0000
8329
8330 upstream commit
8331
8332 Plug some mem leaks mostly on error paths. From jjelen
8333 at redhat.com via bz#2687, ok djm@
8334
8335 Upstream-ID: 3fb030149598957a51b7c8beb32bf92cf30c96f2
8336
8337commit f6edbe9febff8121f26835996b1229b5064d31b7
8338Author: dtucker@openbsd.org <dtucker@openbsd.org>
8339Date: Fri Mar 10 03:24:48 2017 +0000
8340
8341 upstream commit
8342
8343 Plug mem leak on GLOB_NOMATCH case. From jjelen at
8344 redhat.com via bz#2687, ok djm@
8345
8346 Upstream-ID: 8016a7ae97719d3aa55fb723fc2ad3200058340d
8347
8348commit 566b3a46e89a2fda2db46f04f2639e92da64a120
8349Author: dtucker@openbsd.org <dtucker@openbsd.org>
8350Date: Fri Mar 10 03:22:40 2017 +0000
8351
8352 upstream commit
8353
8354 Plug descriptor leaks of auth_sock. From jjelen at
8355 redhat.com via bz#2687, ok djm@
8356
8357 Upstream-ID: 248acb99a5ed2fdca37d1aa33c0fcee7be286d88
8358
8359commit 8a2834454c73dfc1eb96453c0e97690595f3f4c2
8360Author: djm@openbsd.org <djm@openbsd.org>
8361Date: Fri Mar 10 03:18:24 2017 +0000
8362
8363 upstream commit
8364
8365 correctly hash hosts with a port number. Reported by Josh
8366 Powers in bz#2692; ok dtucker@
8367
8368 Upstream-ID: 468e357ff143e00acc05bdd2803a696b3d4b6442
8369
8370commit 9747b9c742de409633d4753bf1a752cbd211e2d3
8371Author: djm@openbsd.org <djm@openbsd.org>
8372Date: Fri Mar 10 03:15:58 2017 +0000
8373
8374 upstream commit
8375
8376 don't truncate off \r\n from long stderr lines; bz#2688,
8377 reported by Brian Dyson; ok dtucker@
8378
8379 Upstream-ID: cdfdc4ba90639af807397ce996153c88af046ca4
8380
8381commit 4a4b75adac862029a1064577eb5af299b1580cdd
8382Author: dtucker@openbsd.org <dtucker@openbsd.org>
8383Date: Fri Mar 10 02:59:51 2017 +0000
8384
8385 upstream commit
8386
8387 Validate digest arg in ssh_digest_final; from jjelen at
8388 redhat.com via bz#2687, ok djm@
8389
8390 Upstream-ID: dbe5494dfddfe523fab341a3dab5a79e7338f878
8391
8392commit bee0167be2340d8de4bdc1ab1064ec957c85a447
8393Author: Darren Tucker <dtucker@zip.com.au>
8394Date: Fri Mar 10 13:40:18 2017 +1100
8395
8396 Check for NULL from malloc.
8397
8398 Part of bz#2687, from jjelen at redhat.com.
8399
8400commit da39b09d43b137a5a3d071b51589e3efb3701238
8401Author: Darren Tucker <dtucker@zip.com.au>
8402Date: Fri Mar 10 13:22:32 2017 +1100
8403
8404 If OSX is using launchd, remove screen no.
8405
8406 Check for socket with and without screen number. From Apple and Jakob
8407 Schlyter via bz#2341, with contributions from Ron Frederick, ok djm@
8408
8409commit 8fb15311a011517eb2394bb95a467c209b8b336c
8410Author: djm@openbsd.org <djm@openbsd.org>
8411Date: Wed Mar 8 12:07:47 2017 +0000
8412
8413 upstream commit
8414
8415 quote [host]:port in generated ProxyJump commandline; the
8416 [ / ] characters can confuse some shells (e.g. zsh). Reported by Lauri
8417 Tirkkonen via bugs@
8418
8419 Upstream-ID: 65cdd161460e1351c3d778e974c1c2a4fa4bc182
8420
8421commit 18501151cf272a15b5f2c5e777f2e0933633c513
8422Author: dtucker@openbsd.org <dtucker@openbsd.org>
8423Date: Mon Mar 6 02:03:20 2017 +0000
8424
8425 upstream commit
8426
8427 Check l->hosts before dereferencing; fixes potential null
8428 pointer deref. ok djm@
8429
8430 Upstream-ID: 81c0327c6ec361da794b5c680601195cc23d1301
8431
8432commit d072370793f1a20f01ad827ba8fcd3b8f2c46165
8433Author: dtucker@openbsd.org <dtucker@openbsd.org>
8434Date: Mon Mar 6 00:44:51 2017 +0000
8435
8436 upstream commit
8437
8438 linenum is unsigned long so use %lu in log formats. ok
8439 deraadt@
8440
8441 Upstream-ID: 9dc582d9bb887ebe0164e030d619fc20b1a4ea08
8442
8443commit 12d3767ba4c84c32150cbe6ff6494498780f12c9
8444Author: djm@openbsd.org <djm@openbsd.org>
8445Date: Fri Mar 3 06:13:11 2017 +0000
8446
8447 upstream commit
8448
8449 fix ssh-keygen -H accidentally corrupting known_hosts that
8450 contained already-hashed entries. HKF_MATCH_HOST_HASHED is only set by
8451 hostkeys_foreach() when hostname matching is in use, so we need to look for
8452 the hash marker explicitly.
8453
8454 Upstream-ID: da82ad653b93e8a753580d3cf5cd448bc2520528
8455
8456commit d7abb771bd5a941b26144ba400a34563a1afa589
8457Author: djm@openbsd.org <djm@openbsd.org>
8458Date: Tue Feb 28 06:10:08 2017 +0000
8459
8460 upstream commit
8461
8462 small memleak: free fd_set on connection timeout (though
8463 we are heading to exit anyway). From Tom Rix in bz#2683
8464
8465 Upstream-ID: 10e3dadbb8199845b66581473711642d9e6741c4
8466
8467commit 78142e3ab3887e53a968d6e199bcb18daaf2436e
8468Author: jmc@openbsd.org <jmc@openbsd.org>
8469Date: Mon Feb 27 14:30:33 2017 +0000
8470
8471 upstream commit
8472
8473 errant dot; from klemens nanni
8474
8475 Upstream-ID: 83d93366a5acf47047298c5d3ebc5e7426f37921
8476
8477commit 8071a6924c12bb51406a9a64a4b2892675112c87
8478Author: djm@openbsd.org <djm@openbsd.org>
8479Date: Fri Feb 24 03:16:34 2017 +0000
8480
8481 upstream commit
8482
8483 might as well set the listener socket CLOEXEC
8484
8485 Upstream-ID: 9c538433d6a0ca79f5f21decc5620e46fb68ab57
8486
8487commit d5499190559ebe374bcdfa8805408646ceffad64
8488Author: djm@openbsd.org <djm@openbsd.org>
8489Date: Sun Feb 19 00:11:29 2017 +0000
8490
8491 upstream commit
8492
8493 add test cases for C locale; ok schwarze@
8494
8495 Upstream-Regress-ID: 783d75de35fbc923d46e2a5e6cee30f8f381ba87
8496
8497commit 011c8ffbb0275281a0cf330054cf21be10c43e37
8498Author: djm@openbsd.org <djm@openbsd.org>
8499Date: Sun Feb 19 00:10:57 2017 +0000
8500
8501 upstream commit
8502
8503 Add a common nl_langinfo(CODESET) alias for US-ASCII
8504 "ANSI_X3.4-1968" that is used by Linux. Fixes mprintf output truncation for
8505 non-UTF-8 locales on Linux spotted by dtucker@; ok deraadt@ schwarze@
8506
8507 Upstream-ID: c6808956ebffd64066f9075d839f74ff0dd60719
8508
8509commit 0c4430a19b73058a569573492f55e4c9eeaae67b
8510Author: dtucker@openbsd.org <dtucker@openbsd.org>
8511Date: Tue Feb 7 23:03:11 2017 +0000
8512
8513 upstream commit
8514
8515 Remove deprecated SSH1 options RSAAuthentication and
8516 RhostsRSAAuthentication from regression test sshd_config.
8517
8518 Upstream-Regress-ID: 8066b753d9dce7cf02ff87af5c727ff680d99491
8519
8520commit 3baa4cdd197c95d972ec3d07f1c0d08f2d7d9199
8521Author: dtucker@openbsd.org <dtucker@openbsd.org>
8522Date: Fri Feb 17 02:32:05 2017 +0000
8523
8524 upstream commit
8525
8526 Do not show rsa1 key type in usage when compiled without
8527 SSH1 support.
8528
8529 Upstream-ID: 068b5c41357a02f319957746fa4e84ea73960f57
8530
8531commit ecc35893715f969e98fee118481f404772de4132
8532Author: dtucker@openbsd.org <dtucker@openbsd.org>
8533Date: Fri Feb 17 02:31:14 2017 +0000
8534
8535 upstream commit
8536
8537 ifdef out "rsa1" from the list of supported keytypes when
8538 compiled without SSH1 support. Found by kdunlop at guralp.com, ok djm@
8539
8540 Upstream-ID: cea93a26433d235bb1d64b1d990f19a9c160a70f
8541
8542commit 10577c6d96a55b877a960b2d0b75edef1b9945af
8543Author: djm@openbsd.org <djm@openbsd.org>
8544Date: Fri Feb 17 02:04:15 2017 +0000
8545
8546 upstream commit
8547
8548 For ProxyJump/-J, surround host name with brackets to
8549 allow literal IPv6 addresses. From Dick Visser; ok dtucker@
8550
8551 Upstream-ID: 3a5d3b0171250daf6a5235e91bce09c1d5746bf1
8552
8553commit b2afdaf1b52231aa23d2153f4a8c5a60a694dda4
8554Author: jsg@openbsd.org <jsg@openbsd.org>
8555Date: Wed Feb 15 23:38:31 2017 +0000
8556
8557 upstream commit
8558
8559 Fix memory leaks in match_filter_list() error paths.
8560
8561 ok dtucker@ markus@
8562
8563 Upstream-ID: c7f96ac0877f6dc9188bbc908100a8d246cc7f0e
8564
8565commit 6d5a41b38b55258213ecfaae9df7a758caa752a1
8566Author: djm@openbsd.org <djm@openbsd.org>
8567Date: Wed Feb 15 01:46:47 2017 +0000
8568
8569 upstream commit
8570
8571 fix division by zero crash in "df" output when server
8572 returns zero total filesystem blocks/inodes. Spotted by Guido Vranken; ok
8573 dtucker@
8574
8575 Upstream-ID: 6fb6c2ae6b289aa07b6232dbc0be54682ef5419f
8576
8577commit bd5d7d239525d595ecea92765334af33a45d9d63
8578Author: Darren Tucker <dtucker@zip.com.au>
8579Date: Sun Feb 12 15:45:15 2017 +1100
8580
8581 ifdef out EVP_R_PRIVATE_KEY_DECODE_ERROR
8582
8583 EVP_R_PRIVATE_KEY_DECODE_ERROR was added in OpenSSL 1.0.0 so ifdef out
8584 for the benefit of OpenSSL versions prior to that.
8585
8586commit 155d540d00ff55f063421ec182ec8ff2b7ab6cbe
8587Author: djm@openbsd.org <djm@openbsd.org>
8588Date: Fri Feb 10 04:34:50 2017 +0000
8589
8590 upstream commit
8591
8592 bring back r1.34 that was backed out for problems loading
8593 public keys:
8594
8595 translate OpenSSL error codes to something more
8596 meaninful; bz#2522 reported by Jakub Jelen, ok dtucker@
8597
8598 with additional fix from Jakub Jelen to solve the backout.
8599 bz#2525 bz#2523 re-ok dtucker@
8600
8601 Upstream-ID: a9d5bc0306f4473d9b4f4484f880e95f3c1cc031
8602
8603commit a287c5ad1e0bf9811c7b9221979b969255076019
8604Author: djm@openbsd.org <djm@openbsd.org>
8605Date: Fri Feb 10 03:36:40 2017 +0000
8606
8607 upstream commit
8608
8609 Sanitise escape sequences in key comments sent to printf
8610 but preserve valid UTF-8 when the locale supports it; bz#2520 ok dtucker@
8611
8612 Upstream-ID: e8eed28712ba7b22d49be534237eed019875bd1e
8613
8614commit e40269be388972848aafcca7060111c70aab5b87
8615Author: millert@openbsd.org <millert@openbsd.org>
8616Date: Wed Feb 8 20:32:43 2017 +0000
8617
8618 upstream commit
8619
8620 Avoid printf %s NULL. From semarie@, OK djm@
8621
8622 Upstream-ID: 06beef7344da0208efa9275d504d60d2a5b9266c
8623
8624commit 5b90709ab8704dafdb31e5651073b259d98352bc
8625Author: djm@openbsd.org <djm@openbsd.org>
8626Date: Mon Feb 6 09:22:51 2017 +0000
8627
8628 upstream commit
8629
8630 Restore \r\n newline sequence for server ident string. The CR
8631 got lost in the flensing of SSHv1. Pointed out by Stef Bon
8632
8633 Upstream-ID: 5333fd43ce5396bf5999496096fac5536e678fac
8634
8635commit 97c31c46ee2e6b46dfffdfc4f90bbbf188064cbc
8636Author: djm@openbsd.org <djm@openbsd.org>
8637Date: Fri Feb 3 23:01:42 2017 +0000
8638
8639 upstream commit
8640
8641 unit test for match_filter_list() function; still want a
8642 better name for this...
8643
8644 Upstream-Regress-ID: 840ad6118552c35111f0a897af9c8d93ab8de92a
8645
8646commit f1a193464a7b77646f0d0cedc929068e4a413ab4
8647Author: djm@openbsd.org <djm@openbsd.org>
8648Date: Fri Feb 3 23:05:57 2017 +0000
8649
8650 upstream commit
8651
8652 use ssh_packet_set_log_preamble() to include connection
8653 username in packet log messages, e.g.
8654
8655 Connection closed by invalid user foo 10.1.1.1 port 44056 [preauth]
8656
8657 ok markus@ bz#113
8658
8659 Upstream-ID: 3591b88bdb5416d6066fb3d49d8fff2375bf1a15
8660
8661commit 07edd7e9537ab32aa52abb5fb2a915c350fcf441
8662Author: djm@openbsd.org <djm@openbsd.org>
8663Date: Fri Feb 3 23:03:33 2017 +0000
8664
8665 upstream commit
8666
8667 add ssh_packet_set_log_preamble() to allow inclusion of a
8668 preamble string in disconnect messages; ok markus@
8669
8670 Upstream-ID: 34cb41182cd76d414c214ccb01c01707849afead
8671
8672commit 68bc8cfa7642d3ccbf2cd64281c16b8b9205be59
8673Author: djm@openbsd.org <djm@openbsd.org>
8674Date: Fri Feb 3 23:01:19 2017 +0000
8675
8676 upstream commit
8677
8678 support =- for removing methods from algorithms lists,
8679 e.g. Ciphers=-*cbc; suggested by Cristian Ionescu-Idbohrn in bz#2671 "I like
8680 it" markus@
8681
8682 Upstream-ID: c78c38f9f81a963b33d0eade559f6048add24a6d
8683
8684commit c924b2ef941028a1f31e6e94f54dfeeeef462a4e
8685Author: djm@openbsd.org <djm@openbsd.org>
8686Date: Fri Feb 3 05:05:56 2017 +0000
8687
8688 upstream commit
8689
8690 allow form-feed characters at EOL; bz#2431 ok dtucker@
8691
8692 Upstream-ID: 1f453afaba6da2ae69d6afdf1ae79a917552f1a2
8693
8694commit 523db8540b720c4d21ab0ff6f928476c70c38aab
8695Author: Damien Miller <djm@mindrot.org>
8696Date: Fri Feb 3 16:01:22 2017 +1100
8697
8698 prefer to use ldns-config to find libldns
8699
8700 Should fix bz#2603 - "Build with ldns and without kerberos support
8701 fails if ldns compiled with kerberos support" by including correct
8702 cflags/libs
8703
8704 ok dtucker@
8705
8706commit c998bf0afa1a01257a53793eba57941182e9e0b7
8707Author: dtucker@openbsd.org <dtucker@openbsd.org>
8708Date: Fri Feb 3 02:56:00 2017 +0000
8709
8710 upstream commit
8711
8712 Make ssh_packet_set_rekey_limits take u32 for the number of
8713 seconds until rekeying (negative values are rejected at config parse time).
8714 This allows the removal of some casts and a signed vs unsigned comparison
8715 warning.
8716
8717 rekey_time is cast to int64 for the comparison which is a no-op
8718 on OpenBSD, but should also do the right thing in -portable on
8719 anything still using 32bit time_t (until the system time actually
8720 wraps, anyway).
8721
8722 some early guidance deraadt@, ok djm@
8723
8724 Upstream-ID: c9f18613afb994a07e7622eb326f49de3d123b6c
8725
8726commit 3ec5fa4ba97d4c4853620daea26a33b9f1fe3422
8727Author: jsg@openbsd.org <jsg@openbsd.org>
8728Date: Thu Feb 2 10:54:25 2017 +0000
8729
8730 upstream commit
8731
8732 In vasnmprintf() return an error if malloc fails and
8733 don't set a function argument to the address of free'd memory.
8734
8735 ok djm@
8736
8737 Upstream-ID: 1efffffff2f51d53c9141f245b90ac23d33b9779
8738
8739commit 858252fb1d451ebb0969cf9749116c8f0ee42753
8740Author: dtucker@openbsd.org <dtucker@openbsd.org>
8741Date: Wed Feb 1 02:59:09 2017 +0000
8742
8743 upstream commit
8744
8745 Return true reason for port forwarding failures where
8746 feasible rather than always "administratively prohibited". bz#2674, ok djm@
8747
8748 Upstream-ID: d901d9887951774e604ca970e1827afaaef9e419
8749
8750commit 6ba9f893838489add6ec4213c7a997b425e4a9e0
8751Author: dtucker@openbsd.org <dtucker@openbsd.org>
8752Date: Mon Jan 30 23:27:39 2017 +0000
8753
8754 upstream commit
8755
8756 Small correction to the known_hosts section on when it is
8757 updated. Patch from lkppo at free.fr some time ago, pointed out by smallm at
8758 sdf.org
8759
8760 Upstream-ID: 1834d7af179dea1a12ad2137f84566664af225d5
8761
8762commit c61d5ec3c11e7ff9779b6127421d9f166cf10915
8763Author: Darren Tucker <dtucker@zip.com.au>
8764Date: Fri Feb 3 14:10:34 2017 +1100
8765
8766 Remove _XOPEN_SOURCE from wide char detection.
8767
8768 Having _XOPEN_SOURCE unconditionally causes problems on some platforms
8769 and configurations, notably Solaris 64-bit binaries. It was there for
8770 the benefit of Linux put the required bits in the *-*linux* section.
8771
8772 Patch from yvoinov at gmail.com.
8773
8774commit f25ee13b3e81fd80efeb871dc150fe49d7fc8afd
8775Author: djm@openbsd.org <djm@openbsd.org>
8776Date: Mon Jan 30 05:22:14 2017 +0000
8777
8778 upstream commit
8779
8780 fully unbreak: some $SSH invocations did not have -F
8781 specified and could pick up the ~/.ssh/config of the user running the tests
8782
8783 Upstream-Regress-ID: f362d1892c0d3e66212d5d3fc02d915c58ef6b89
8784
8785commit 6956e21fb26652887475fe77ea40d2efcf25908b
8786Author: djm@openbsd.org <djm@openbsd.org>
8787Date: Mon Jan 30 04:54:07 2017 +0000
8788
8789 upstream commit
8790
8791 partially unbreak: was not specifying hostname on some
8792 $SSH invocations
8793
8794 Upstream-Regress-ID: bc8a5e98e57bad0a92ef4f34ed91c1d18294e2cc
8795
8796commit 52763dd3fe0a4678dafdf7aeb32286e514130afc
8797Author: djm@openbsd.org <djm@openbsd.org>
8798Date: Mon Jan 30 01:03:00 2017 +0000
8799
8800 upstream commit
8801
8802 revise keys/principals command hang fix (bz#2655) to
8803 consume entire output, avoiding sending SIGPIPE to subprocesses early; ok
8804 dtucker@
8805
8806 Upstream-ID: 7cb04b31a61f8c78c4e48ceededcd2fd5c4ee1bc
8807
8808commit 381a2615a154a82c4c53b787f4a564ef894fe9ac
8809Author: djm@openbsd.org <djm@openbsd.org>
8810Date: Mon Jan 30 00:38:50 2017 +0000
8811
8812 upstream commit
8813
8814 small cleanup post SSHv1 removal:
8815
8816 remove SSHv1-isms in commented examples
8817
8818 reorder token table to group deprecated and compile-time conditional tokens
8819 better
8820
8821 fix config dumping code for some compile-time conditional options that
8822 weren't being correctly skipped (SSHv1 and PKCS#11)
8823
8824 Upstream-ID: f2e96b3cb3158d857c5a91ad2e15925df3060105
8825
8826commit 4833d01591b7eb049489d9558b65f5553387ed43
8827Author: djm@openbsd.org <djm@openbsd.org>
8828Date: Mon Jan 30 00:34:01 2017 +0000
8829
8830 upstream commit
8831
8832 some explicit NULL tests when dumping configured
8833 forwardings; from Karsten Weiss
8834
8835 Upstream-ID: 40957b8dea69672b0e50df6b4a91a94e3e37f72d
8836
8837commit 326e2fae9f2e3e067b5651365eba86b35ee5a6b2
8838Author: djm@openbsd.org <djm@openbsd.org>
8839Date: Mon Jan 30 00:32:28 2017 +0000
8840
8841 upstream commit
8842
8843 misplaced braces in test; from Karsten Weiss
8844
8845 Upstream-ID: f7b794074d3aae8e35b69a91d211c599c94afaae
8846
8847commit 3e032a95e46bfaea9f9e857678ac8fa5f63997fb
8848Author: djm@openbsd.org <djm@openbsd.org>
8849Date: Mon Jan 30 00:32:03 2017 +0000
8850
8851 upstream commit
8852
8853 don't dereference authctxt before testing != NULL, it
8854 causes compilers to make assumptions; from Karsten Weiss
8855
8856 Upstream-ID: 794243aad1e976ebc717885b7a97a25e00c031b2
8857
8858commit 01cfaa2b1cfb84f3cdd32d1bf82b120a8d30e057
8859Author: djm@openbsd.org <djm@openbsd.org>
8860Date: Fri Jan 6 02:51:16 2017 +0000
8861
8862 upstream commit
8863
8864 use correct ssh-add program; bz#2654, from Colin Watson
8865
8866 Upstream-Regress-ID: 7042a36e1bdaec6562f6e57e9d047efe9c7a6030
8867
8868commit e5c7ec67cdc42ae2584085e0fc5cc5ee91133cf5
8869Author: dtucker@openbsd.org <dtucker@openbsd.org>
8870Date: Fri Jan 6 02:26:10 2017 +0000
8871
8872 upstream commit
8873
8874 Account for timeouts in the integrity tests as failures.
8875
8876 If the first test in a series for a given MAC happens to modify the low
8877 bytes of a packet length, then ssh will time out and this will be
8878 interpreted as a test failure. Patch from cjwatson at debian.org via
8879 bz#2658.
8880
8881 Upstream-Regress-ID: e7467613b0badedaa300bc6fc7495ec2f44e2fb9
8882
8883commit dbaf599b61bd6e0f8469363a8c8e7f633b334018
8884Author: dtucker@openbsd.org <dtucker@openbsd.org>
8885Date: Fri Jan 6 02:09:25 2017 +0000
8886
8887 upstream commit
8888
8889 Make forwarding test less racy by using unix domain
8890 sockets instead of TCP ports where possible. Patch from cjwatson at
8891 debian.org via bz#2659.
8892
8893 Upstream-Regress-ID: 4756375aac5916ef9d25452a1c1d5fa9e90299a9
8894
8895commit 9390b0031ebd6eb5488d3bc4d4333c528dffc0a6
8896Author: dtucker@openbsd.org <dtucker@openbsd.org>
8897Date: Sun Jan 29 21:35:23 2017 +0000
8898
8899 upstream commit
8900
8901 Fix typo in ~C error message for bad port forward
8902 cancellation. bz#2672, from Brad Marshall via Colin Watson and Ubuntu's
8903 bugtracker.
8904
8905 Upstream-ID: 0d4a7e5ead6cc59c9a44b4c1e5435ab3aada09af
8906
8907commit 4ba15462ca38883b8a61a1eccc093c79462d5414
8908Author: guenther@openbsd.org <guenther@openbsd.org>
8909Date: Sat Jan 21 11:32:04 2017 +0000
8910
8911 upstream commit
8912
8913 The POSIX APIs that that sockaddrs all ignore the s*_len
8914 field in the incoming socket, so userspace doesn't need to set it unless it
8915 has its own reasons for tracking the size along with the sockaddr.
8916
8917 ok phessler@ deraadt@ florian@
8918
8919 Upstream-ID: ca6e49e2f22f2b9e81d6d924b90ecd7e422e7437
8920
8921commit a1187bd3ef3e4940af849ca953a1b849dae78445
8922Author: jmc@openbsd.org <jmc@openbsd.org>
8923Date: Fri Jan 6 16:28:12 2017 +0000
8924
8925 upstream commit
8926
8927 keep the tokens list sorted;
8928
8929 Upstream-ID: b96239dae4fb3aa94146bb381afabcc7740a1638
8930
8931commit b64077f9767634715402014f509e58decf1e140d
8932Author: djm@openbsd.org <djm@openbsd.org>
8933Date: Fri Jan 6 09:27:52 2017 +0000
8934
8935 upstream commit
8936
8937 fix previous
8938
8939 Upstream-ID: c107d6a69bc22325d79fbf78a2a62e04bcac6895
8940
8941commit 5e820e9ea2e949aeb93071fe31c80b0c42f2b2de
8942Author: djm@openbsd.org <djm@openbsd.org>
8943Date: Fri Jan 6 03:53:58 2017 +0000
8944
8945 upstream commit
8946
8947 show a useful error message when included config files
8948 can't be opened; bz#2653, ok dtucker@
8949
8950 Upstream-ID: f598b73b5dfe497344cec9efc9386b4e5a3cb95b
8951
8952commit 13bd2e2d622d01dc85d22b94520a5b243d006049
8953Author: djm@openbsd.org <djm@openbsd.org>
8954Date: Fri Jan 6 03:45:41 2017 +0000
8955
8956 upstream commit
8957
8958 sshd_config is documented to set
8959 GSSAPIStrictAcceptorCheck=yes by default, so actually make it do this.
8960 bz#2637 ok dtucker
8961
8962 Upstream-ID: 99ef8ac51f17f0f7aec166cb2e34228d4d72a665
8963
8964commit f89b928534c9e77f608806a217d39a2960cc7fd0
8965Author: djm@openbsd.org <djm@openbsd.org>
8966Date: Fri Jan 6 03:41:58 2017 +0000
8967
8968 upstream commit
8969
8970 Avoid confusing error message when attempting to use
8971 ssh-keyscan built without SSH protocol v.1 to scan for v.1 keys; bz#2583
8972
8973 Upstream-ID: 5d214abd3a21337d67c6dcc5aa6f313298d0d165
8974
8975commit 0999533014784579aa6f01c2d3a06e3e8804b680
8976Author: dtucker@openbsd.org <dtucker@openbsd.org>
8977Date: Fri Jan 6 02:34:54 2017 +0000
8978
8979 upstream commit
8980
8981 Re-add '%k' token for AuthorizedKeysCommand which was
8982 lost during the re-org in rev 1.235. bz#2656, from jboning at gmail.com.
8983
8984 Upstream-ID: 2884e203c02764d7b3fe7472710d9c24bdc73e38
8985
8986commit 51045869fa084cdd016fdd721ea760417c0a3bf3
8987Author: djm@openbsd.org <djm@openbsd.org>
8988Date: Wed Jan 4 05:37:40 2017 +0000
8989
8990 upstream commit
8991
8992 unbreak Unix domain socket forwarding for root; ok
8993 markus@
8994
8995 Upstream-ID: 6649c76eb7a3fa15409373295ca71badf56920a2
8996
8997commit 58fca12ba967ea5c768653535604e1522d177e44
8998Author: Darren Tucker <dtucker@zip.com.au>
8999Date: Mon Jan 16 09:08:32 2017 +1100
9000
9001 Remove LOGIN_PROGRAM.
9002
9003 UseLogin is gone, remove leftover. bz#2665, from cjwatson at debian.org
9004
9005commit b108ce92aae0ca0376dce9513d953be60e449ae1
9006Author: djm@openbsd.org <djm@openbsd.org>
9007Date: Wed Jan 4 02:21:43 2017 +0000
9008
9009 upstream commit
9010
9011 relax PKCS#11 whitelist a bit to allow libexec as well as
9012 lib directories.
9013
9014 Upstream-ID: cf5617958e2e2d39f8285fd3bc63b557da484702
9015
9016commit c7995f296b9222df2846f56ecf61e5ae13d7a53d
9017Author: djm@openbsd.org <djm@openbsd.org>
9018Date: Tue Jan 3 05:46:51 2017 +0000
9019
9020 upstream commit
9021
9022 check number of entries in SSH2_FXP_NAME response; avoids
9023 unreachable overflow later. Reported by Jann Horn
9024
9025 Upstream-ID: b6b2b434a6d6035b1644ca44f24cd8104057420f
9026
9027commit ddd3d34e5c7979ca6f4a3a98a7d219a4ed3d98c2
9028Author: djm@openbsd.org <djm@openbsd.org>
9029Date: Fri Dec 30 22:08:02 2016 +0000
9030
9031 upstream commit
9032
9033 fix deadlock when keys/principals command produces a lot of
9034 output and a key is matched early; bz#2655, patch from jboning AT gmail.com
9035
9036 Upstream-ID: e19456429bf99087ea994432c16d00a642060afe
9037
9038commit 30eee7d1b2fec33c14870cc11910610be5d2aa6f
9039Author: Darren Tucker <dtucker@zip.com.au>
9040Date: Tue Dec 20 12:16:11 2016 +1100
9041
9042 Re-add missing "Prerequisites" header and fix typo
9043
9044 Patch from HARUYAMA Seigo <haruyama at unixuser org>.
9045
9046commit c8c60f3663165edd6a52632c6ddbfabfce1ca865
9047Author: djm@openbsd.org <djm@openbsd.org>
9048Date: Mon Dec 19 22:35:23 2016 +0000
9049
9050 upstream commit
9051
9052 use standard /bin/sh equality test; from Mike Frysinger
9053
9054 Upstream-Regress-ID: 7b6f0b63525f399844c8ac211003acb8e4b0bec2
9055
9056commit 4a354fc231174901f2629437c2a6e924a2dd6772
9057Author: Damien Miller <djm@mindrot.org>
9058Date: Mon Dec 19 15:59:26 2016 +1100
9059
9060 crank version numbers for release
9061
9062commit 5f8d0bb8413d4d909cc7aa3c616fb0538224c3c9
9063Author: djm@openbsd.org <djm@openbsd.org>
9064Date: Mon Dec 19 04:55:51 2016 +0000
9065
9066 upstream commit
9067
9068 openssh-7.4
9069
9070 Upstream-ID: 1ee404adba6bbe10ae9277cbae3a94abe2867b79
9071
9072commit 3a8213ea0ed843523e34e55ab9c852332bab4c7b
9073Author: djm@openbsd.org <djm@openbsd.org>
9074Date: Mon Dec 19 04:55:18 2016 +0000
9075
9076 upstream commit
9077
9078 remove testcase that depends on exact output and
9079 behaviour of snprintf(..., "%s", NULL)
9080
9081 Upstream-Regress-ID: cab4288531766bd9593cb556613b91a2eeefb56f
9082
9083commit eae735a82d759054f6ec7b4e887fb7a5692c66d7
9084Author: dtucker@openbsd.org <dtucker@openbsd.org>
9085Date: Mon Dec 19 03:32:57 2016 +0000
9086
9087 upstream commit
9088
9089 Use LOGNAME to get current user and fall back to whoami if
9090 not set. Mainly to benefit -portable since some platforms don't have whoami.
9091
9092 Upstream-Regress-ID: e3a16b7836a3ae24dc8f8a4e43fdf8127a60bdfa
9093
9094commit 0d2f88428487518eea60602bd593989013831dcf
9095Author: dtucker@openbsd.org <dtucker@openbsd.org>
9096Date: Fri Dec 16 03:51:19 2016 +0000
9097
9098 upstream commit
9099
9100 Add regression test for AllowUsers and DenyUsers. Patch from
9101 Zev Weiss <zev at bewilderbeest.net>
9102
9103 Upstream-Regress-ID: 8f1aac24d52728398871dac14ad26ea38b533fb9
9104
9105commit 3bc8180a008929f6fe98af4a56fb37d04444b417
9106Author: Darren Tucker <dtucker@zip.com.au>
9107Date: Fri Dec 16 15:02:24 2016 +1100
9108
9109 Add missing monitor.h include.
9110
9111 Fixes warning pointed out by Zev Weiss <zev at bewilderbeest.net>
9112
9113commit 410681f9015d76cc7b137dd90dac897f673244a0
9114Author: djm@openbsd.org <djm@openbsd.org>
9115Date: Fri Dec 16 02:48:55 2016 +0000
9116
9117 upstream commit
9118
9119 revert to rev1.2; the new bits in this test depend on changes
9120 to ssh that aren't yet committed
9121
9122 Upstream-Regress-ID: 828ffc2c7afcf65d50ff2cf3dfc47a073ad39123
9123
9124commit 2f2ffa4fbe4b671bbffa0611f15ba44cff64d58e
9125Author: dtucker@openbsd.org <dtucker@openbsd.org>
9126Date: Fri Dec 16 01:06:27 2016 +0000
9127
9128 upstream commit
9129
9130 Move the "stop sshd" code into its own helper function.
9131 Patch from Zev Weiss <zev at bewilderbeest.net>, ok djm@
9132
9133 Upstream-Regress-ID: a113dea77df5bd97fb4633ea31f3d72dbe356329
9134
9135commit e15e7152331e3976b35475fd4e9c72897ad0f074
9136Author: djm@openbsd.org <djm@openbsd.org>
9137Date: Fri Dec 16 01:01:07 2016 +0000
9138
9139 upstream commit
9140
9141 regression test for certificates along with private key
9142 with no public half. bz#2617, mostly from Adam Eijdenberg
9143
9144 Upstream-Regress-ID: 2e74dc2c726f4dc839609b3ce045466b69f01115
9145
9146commit 9a70ec085faf6e55db311cd1a329f1a35ad2a500
9147Author: dtucker@openbsd.org <dtucker@openbsd.org>
9148Date: Thu Dec 15 23:50:37 2016 +0000
9149
9150 upstream commit
9151
9152 Use $SUDO to read pidfile in case root's umask is
9153 restricted. From portable.
9154
9155 Upstream-Regress-ID: f6b1c7ffbc5a0dfb7d430adb2883344899174a98
9156
9157commit fe06b68f824f8f55670442fb31f2c03526dd326c
9158Author: dtucker@openbsd.org <dtucker@openbsd.org>
9159Date: Thu Dec 15 21:29:05 2016 +0000
9160
9161 upstream commit
9162
9163 Add missing braces in DenyUsers code. Patch from zev at
9164 bewilderbeest.net, ok deraadt@
9165
9166 Upstream-ID: d747ace338dcf943b077925f90f85f789714b54e
9167
9168commit dcc7d74242a574fd5c4afbb4224795b1644321e7
9169Author: dtucker@openbsd.org <dtucker@openbsd.org>
9170Date: Thu Dec 15 21:20:41 2016 +0000
9171
9172 upstream commit
9173
9174 Fix text in error message. Patch from zev at
9175 bewilderbeest.net.
9176
9177 Upstream-ID: deb0486e175e7282f98f9a15035d76c55c84f7f6
9178
9179commit b737e4d7433577403a31cff6614f6a1b0b5e22f4
9180Author: djm@openbsd.org <djm@openbsd.org>
9181Date: Wed Dec 14 00:36:34 2016 +0000
9182
9183 upstream commit
9184
9185 disable Unix-domain socket forwarding when privsep is
9186 disabled
9187
9188 Upstream-ID: ab61516ae0faadad407857808517efa900a0d6d0
9189
9190commit 08a1e7014d65c5b59416a0e138c1f73f417496eb
9191Author: djm@openbsd.org <djm@openbsd.org>
9192Date: Fri Dec 9 03:04:29 2016 +0000
9193
9194 upstream commit
9195
9196 log connections dropped in excess of MaxStartups at
9197 verbose LogLevel; bz#2613 based on diff from Tomas Kuthan; ok dtucker@
9198
9199 Upstream-ID: 703ae690dbf9b56620a6018f8a3b2389ce76d92b
9200
9201commit 10e290ec00964b2bf70faab15a10a5574bb80527
9202Author: Darren Tucker <dtucker@zip.com.au>
9203Date: Tue Dec 13 13:51:32 2016 +1100
9204
9205 Get default of TEST_SSH_UTF8 from environment.
9206
9207commit b9b8ba3f9ed92c6220b58d70d1e6d8aa3eea1104
9208Author: Darren Tucker <dtucker@zip.com.au>
9209Date: Tue Dec 13 12:56:40 2016 +1100
9210
9211 Remove commented-out includes.
9212
9213 These commented-out includes have "Still needed?" comments. Since
9214 they've been commented out for ~13 years I assert that they're not.
9215
9216commit 25275f1c9d5f01a0877d39444e8f90521a598ea0
9217Author: Darren Tucker <dtucker@zip.com.au>
9218Date: Tue Dec 13 12:54:23 2016 +1100
9219
9220 Add prototype for strcasestr in compat library.
9221
9222commit afec07732aa2985142f3e0b9a01eb6391f523dec
9223Author: Darren Tucker <dtucker@zip.com.au>
9224Date: Tue Dec 13 10:23:03 2016 +1100
9225
9226 Add strcasestr to compat library.
9227
9228 Fixes build on (at least) Solaris 10.
9229
9230commit dda78a03af32e7994f132d923c2046e98b7c56c8
9231Author: Damien Miller <djm@mindrot.org>
9232Date: Mon Dec 12 13:57:10 2016 +1100
9233
9234 Force Turkish locales back to C/POSIX; bz#2643
9235
9236 Turkish locales are unique in their handling of the letters 'i' and
9237 'I' (yes, they are different letters) and OpenSSH isn't remotely
9238 prepared to deal with that. For now, the best we can do is to force
9239 OpenSSH to use the C/POSIX locale and try to preserve the UTF-8
9240 encoding if possible.
9241
9242 ok dtucker@
9243
9244commit c35995048f41239fc8895aadc3374c5f75180554
9245Author: Darren Tucker <dtucker@zip.com.au>
9246Date: Fri Dec 9 12:52:02 2016 +1100
9247
9248 exit is in stdlib.h not unistd.h (that's _exit).
9249
9250commit d399a8b914aace62418c0cfa20341aa37a192f98
9251Author: Darren Tucker <dtucker@zip.com.au>
9252Date: Fri Dec 9 12:33:25 2016 +1100
9253
9254 Include <unistd.h> for exit in utf8 locale test.
9255
9256commit 47b8c99ab3221188ad3926108dd9d36da3b528ec
9257Author: Darren Tucker <dtucker@zip.com.au>
9258Date: Thu Dec 8 15:48:34 2016 +1100
9259
9260 Check for utf8 local support before testing it.
9261
9262 Check for utf8 local support and if not found, do not attempt to run the
9263 utf8 tests. Suggested by djm@
9264
9265commit 4089fc1885b3a2822204effbb02b74e3da58240d
9266Author: Darren Tucker <dtucker@zip.com.au>
9267Date: Thu Dec 8 12:57:24 2016 +1100
9268
9269 Use AC_PATH_TOOL for krb5-config.
9270
9271 This will use the host-prefixed version when cross compiling; patch from
9272 david.michael at coreos.com.
9273
9274commit b4867e0712c89b93be905220c82f0a15e6865d1e
9275Author: djm@openbsd.org <djm@openbsd.org>
9276Date: Tue Dec 6 07:48:01 2016 +0000
9277
9278 upstream commit
9279
9280 make IdentityFile successfully load and use certificates that
9281 have no corresponding bare public key. E.g. just a private id_rsa and
9282 certificate id_rsa-cert.pub (and no id_rsa.pub).
9283
9284 bz#2617 ok dtucker@
9285
9286 Upstream-ID: c1e9699b8c0e3b63cc4189e6972e3522b6292604
9287
9288commit c9792783a98881eb7ed295680013ca97a958f8ac
9289Author: Damien Miller <djm@mindrot.org>
9290Date: Fri Nov 25 14:04:21 2016 +1100
9291
9292 Add a gnome-ssh-askpass3 target for GTK+3 version
9293
9294 Based on patch from Colin Watson via bz#2640
9295
9296commit 7be85ae02b9de0993ce0a1d1e978e11329f6e763
9297Author: Damien Miller <djm@mindrot.org>
9298Date: Fri Nov 25 14:03:53 2016 +1100
9299
9300 Make gnome-ssh-askpass2.c GTK+3-friendly
9301
9302 Patch from Colin Watson via bz#2640
9303
9304commit b9844a45c7f0162fd1b5465683879793d4cc4aaa
9305Author: djm@openbsd.org <djm@openbsd.org>
9306Date: Sun Dec 4 23:54:02 2016 +0000
9307
9308 upstream commit
9309
9310 Fix public key authentication when multiple
9311 authentication is in use. Instead of deleting and re-preparing the entire
9312 keys list, just reset the 'used' flags; the keys list is already in a good
9313 order (with already- tried keys at the back)
9314
9315 Analysis and patch from Vincent Brillault on bz#2642; ok dtucker@
9316
9317 Upstream-ID: 7123f12dc2f3bcaae715853035a97923d7300176
9318
9319commit f2398eb774075c687b13af5bc22009eb08889abe
9320Author: dtucker@openbsd.org <dtucker@openbsd.org>
9321Date: Sun Dec 4 22:27:25 2016 +0000
9322
9323 upstream commit
9324
9325 Unlink PidFile on SIGHUP and always recreate it when the
9326 new sshd starts. Regression tests (and possibly other things) depend on the
9327 pidfile being recreated after SIGHUP, and unlinking it means it won't contain
9328 a stale pid if sshd fails to restart. ok djm@ markus@
9329
9330 Upstream-ID: 132dd6dda0c77dd49d2f15b2573b5794f6160870
9331
9332commit 85aa2efeba51a96bf6834f9accf2935d96150296
9333Author: djm@openbsd.org <djm@openbsd.org>
9334Date: Wed Nov 30 03:01:33 2016 +0000
9335
9336 upstream commit
9337
9338 test new behaviour of cert force-command restriction vs.
9339 authorized_key/ principals
9340
9341 Upstream-Regress-ID: 399efa7469d40c404c0b0a295064ce75d495387c
9342
9343commit 5d333131cd8519d022389cfd3236280818dae1bc
9344Author: jmc@openbsd.org <jmc@openbsd.org>
9345Date: Wed Nov 30 06:54:26 2016 +0000
9346
9347 upstream commit
9348
9349 tweak previous; while here fix up FILES and AUTHORS;
9350
9351 Upstream-ID: 93f6e54086145a75df8d8ec7d8689bdadbbac8fa
9352
9353commit 786d5994da79151180cb14a6cf157ebbba61c0cc
9354Author: djm@openbsd.org <djm@openbsd.org>
9355Date: Wed Nov 30 03:07:37 2016 +0000
9356
9357 upstream commit
9358
9359 add a whitelist of paths from which ssh-agent will load
9360 (via ssh-pkcs11-helper) a PKCS#11 module; ok markus@
9361
9362 Upstream-ID: fe79769469d9cd6d26fe0dc15751b83ef2a06e8f
9363
9364commit 7844f357cdd90530eec81340847783f1f1da010b
9365Author: djm@openbsd.org <djm@openbsd.org>
9366Date: Wed Nov 30 03:00:05 2016 +0000
9367
9368 upstream commit
9369
9370 Add a sshd_config DisableForwaring option that disables
9371 X11, agent, TCP, tunnel and Unix domain socket forwarding, as well as
9372 anything else we might implement in the future.
9373
9374 This, like the 'restrict' authorized_keys flag, is intended to be a
9375 simple and future-proof way of restricting an account. Suggested as
9376 a complement to 'restrict' by Jann Horn; ok markus@
9377
9378 Upstream-ID: 203803f66e533a474086b38a59ceb4cf2410fcf7
9379
9380commit fd6dcef2030d23c43f986d26979f84619c10589d
9381Author: djm@openbsd.org <djm@openbsd.org>
9382Date: Wed Nov 30 02:57:40 2016 +0000
9383
9384 upstream commit
9385
9386 When a forced-command appears in both a certificate and
9387 an authorized keys/principals command= restriction, refuse to accept the
9388 certificate unless they are identical.
9389
9390 The previous (documented) behaviour of having the certificate forced-
9391 command override the other could be a bit confused and more error-prone.
9392
9393 Pointed out by Jann Horn of Project Zero; ok dtucker@
9394
9395 Upstream-ID: 79d811b6eb6bbe1221bf146dde6928f92d2cd05f
9396
9397commit 7fc4766ac78abae81ee75b22b7550720bfa28a33
9398Author: dtucker@openbsd.org <dtucker@openbsd.org>
9399Date: Wed Nov 30 00:28:31 2016 +0000
9400
9401 upstream commit
9402
9403 On startup, check to see if sshd is already daemonized
9404 and if so, skip the call to daemon() and do not rewrite the PidFile. This
9405 means that when sshd re-execs itself on SIGHUP the process ID will no longer
9406 change. Should address bz#2641. ok djm@ markus@.
9407
9408 Upstream-ID: 5ea0355580056fb3b25c1fd6364307d9638a37b9
9409
9410commit c9f880c195c65f1dddcbc4ce9d6bfea7747debcc
9411Author: Damien Miller <djm@mindrot.org>
9412Date: Wed Nov 30 13:51:49 2016 +1100
9413
9414 factor out common PRNG reseed before privdrop
9415
9416 Add a call to RAND_poll() to ensure than more than pid+time gets
9417 stirred into child processes states. Prompted by analysis from Jann
9418 Horn at Project Zero. ok dtucker@
9419
9420commit 79e4829ec81dead1b30999e1626eca589319a47f
9421Author: dtucker@openbsd.org <dtucker@openbsd.org>
9422Date: Fri Nov 25 03:02:01 2016 +0000
9423
9424 upstream commit
9425
9426 Allow PuTTY interop tests to run unattended. bz#2639,
9427 patch from cjwatson at debian.org.
9428
9429 Upstream-Regress-ID: 4345253558ac23b2082aebabccd48377433b6fe0
9430
9431commit 504c3a9a1bf090f6b27260fc3e8ea7d984d163dc
9432Author: dtucker@openbsd.org <dtucker@openbsd.org>
9433Date: Fri Nov 25 02:56:49 2016 +0000
9434
9435 upstream commit
9436
9437 Reverse args to sshd-log-wrapper. Matches change in
9438 portable, where it allows sshd do be optionally run under Valgrind.
9439
9440 Upstream-Regress-ID: b438d1c6726dc5caa2a45153e6103a0393faa906
9441
9442commit bd13017736ec2f8f9ca498fe109fb0035f322733
9443Author: dtucker@openbsd.org <dtucker@openbsd.org>
9444Date: Fri Nov 25 02:49:18 2016 +0000
9445
9446 upstream commit
9447
9448 Fix typo in trace message; from portable.
9449
9450 Upstream-Regress-ID: 4c4a2ba0d37faf5fd230a91b4c7edb5699fbd73a
9451
9452commit 7da751d8b007c7f3e814fd5737c2351440d78b4c
9453Author: tb@openbsd.org <tb@openbsd.org>
9454Date: Tue Nov 1 13:43:27 2016 +0000
9455
9456 upstream commit
9457
9458 Clean up MALLOC_OPTIONS. For the unittests, move
9459 MALLOC_OPTIONS and TEST_ENV to unittets/Makefile.inc.
9460
9461 ok otto
9462
9463 Upstream-Regress-ID: 890d497e0a38eeddfebb11cc429098d76cf29f12
9464
9465commit 36f58e68221bced35e06d1cca8d97c48807a8b71
9466Author: tb@openbsd.org <tb@openbsd.org>
9467Date: Mon Oct 31 23:45:08 2016 +0000
9468
9469 upstream commit
9470
9471 Remove the obsolete A and P flags from MALLOC_OPTIONS.
9472
9473 ok dtucker
9474
9475 Upstream-Regress-ID: 6cc25024c8174a87e5734a0dc830194be216dd59
9476
9477commit b0899ee26a6630883c0f2350098b6a35e647f512
9478Author: dtucker@openbsd.org <dtucker@openbsd.org>
9479Date: Tue Nov 29 03:54:50 2016 +0000
9480
9481 upstream commit
9482
9483 Factor out code to disconnect from controlling terminal
9484 into its own function. ok djm@
9485
9486 Upstream-ID: 39fd9e8ebd7222615a837312face5cc7ae962885
9487
9488commit 54d022026aae4f53fa74cc636e4a032d9689b64d
9489Author: djm@openbsd.org <djm@openbsd.org>
9490Date: Fri Nov 25 23:24:45 2016 +0000
9491
9492 upstream commit
9493
9494 use sshbuf_allocate() to pre-allocate the buffer used for
9495 loading keys. This avoids implicit realloc inside the buffer code, which
9496 might theoretically leave fragments of the key on the heap. This doesn't
9497 appear to happen in practice for normal sized keys, but was observed for
9498 novelty oversize ones.
9499
9500 Pointed out by Jann Horn of Project Zero; ok markus@
9501
9502 Upstream-ID: d620e1d46a29fdea56aeadeda120879eddc60ab1
9503
9504commit a9c746088787549bb5b1ae3add7d06a1b6d93d5e
9505Author: djm@openbsd.org <djm@openbsd.org>
9506Date: Fri Nov 25 23:22:04 2016 +0000
9507
9508 upstream commit
9509
9510 split allocation out of sshbuf_reserve() into a separate
9511 sshbuf_allocate() function; ok markus@
9512
9513 Upstream-ID: 11b8a2795afeeb1418d508a2c8095b3355577ec2
9514
9515commit f0ddedee460486fa0e32fefb2950548009e5026e
9516Author: markus@openbsd.org <markus@openbsd.org>
9517Date: Wed Nov 23 23:14:15 2016 +0000
9518
9519 upstream commit
9520
9521 allow ClientAlive{Interval,CountMax} in Match; ok dtucker,
9522 djm
9523
9524 Upstream-ID: 8beb4c1eadd588f1080b58932281983864979f55
9525
9526commit 1a6f9d2e2493d445cd9ee496e6e3c2a2f283f66a
9527Author: djm@openbsd.org <djm@openbsd.org>
9528Date: Tue Nov 8 22:04:34 2016 +0000
9529
9530 upstream commit
9531
9532 unbreak DenyUsers; reported by henning@
9533
9534 Upstream-ID: 1c67d4148f5e953c35acdb62e7c08ae8e33f7cb2
9535
9536commit 010359b32659f455fddd2bd85fd7cc4d7a3b994a
9537Author: djm@openbsd.org <djm@openbsd.org>
9538Date: Sun Nov 6 05:46:37 2016 +0000
9539
9540 upstream commit
9541
9542 Validate address ranges for AllowUser/DenyUsers at
9543 configuration load time and refuse to accept bad ones. It was previously
9544 possible to specify invalid CIDR address ranges (e.g. djm@127.1.2.3/55) and
9545 these would always match.
9546
9547 Thanks to Laurence Parry for a detailed bug report. ok markus (for
9548 a previous diff version)
9549
9550 Upstream-ID: 9dfcdd9672b06e65233ea4434c38226680d40bfb
9551
9552commit efb494e81d1317209256b38b49f4280897c61e69
9553Author: djm@openbsd.org <djm@openbsd.org>
9554Date: Fri Oct 28 03:33:52 2016 +0000
9555
9556 upstream commit
9557
9558 Improve pkcs11_add_provider() logging: demote some
9559 excessively verbose error()s to debug()s, include PKCS#11 provider name and
9560 slot in log messages where possible. bz#2610, based on patch from Jakub Jelen
9561
9562 Upstream-ID: 3223ef693cfcbff9079edfc7e89f55bf63e1973d
9563
9564commit 5ee3fb5affd7646f141749483205ade5fc54adaf
9565Author: Darren Tucker <dtucker@zip.com.au>
9566Date: Tue Nov 1 08:12:33 2016 +1100
9567
9568 Use ptrace(PT_DENY_ATTACH, ..) on OS X.
9569
9570commit 315d2a4e674d0b7115574645cb51f968420ebb34
9571Author: Damien Miller <djm@mindrot.org>
9572Date: Fri Oct 28 14:34:07 2016 +1100
9573
9574 Unbreak AES-CTR ciphers on old (~0.9.8) OpenSSL
9575
9576 ok dtucker@
9577
9578commit a9ff3950b8e80ff971b4d44bbce96df27aed28af
9579Author: Darren Tucker <dtucker@zip.com.au>
9580Date: Fri Oct 28 14:26:58 2016 +1100
9581
9582 Move OPENSSL_NO_RIPEMD160 to compat.
9583
9584 Move OPENSSL_NO_RIPEMD160 to compat and add ifdefs to mac.c around the
9585 ripemd160 MACs.
9586
9587commit bce58885160e5db2adda3054c3b81fe770f7285a
9588Author: Darren Tucker <dtucker@zip.com.au>
9589Date: Fri Oct 28 13:52:31 2016 +1100
9590
9591 Check if RIPEMD160 is disabled in OpenSSL.
9592
9593commit d924640d4c355d1b5eca1f4cc60146a9975dbbff
9594Author: Darren Tucker <dtucker@zip.com.au>
9595Date: Fri Oct 28 13:38:19 2016 +1100
9596
9597 Skip ssh1 specfic ciphers.
9598
9599 cipher-3des1.c and cipher-bf1.c are specific to sshv1 so don't even try
9600 to compile them when Protocol 1 is not enabled.
9601
9602commit 79d078e7a49caef746516d9710ec369ba45feab6
9603Author: jsg@openbsd.org <jsg@openbsd.org>
9604Date: Tue Oct 25 04:08:13 2016 +0000
9605
9606 upstream commit
9607
9608 Fix logic in add_local_forward() that inverted a test
9609 when code was refactored out into bind_permitted(). This broke ssh port
9610 forwarding for non-priv ports as a non root user.
9611
9612 ok dtucker@ 'looks good' deraadt@
9613
9614 Upstream-ID: ddb8156ca03cc99997de284ce7777536ff9570c9
9615
9616commit a903e315dee483e555c8a3a02c2946937f9b4e5d
9617Author: dtucker@openbsd.org <dtucker@openbsd.org>
9618Date: Mon Oct 24 01:09:17 2016 +0000
9619
9620 upstream commit
9621
9622 Remove dead breaks, found via opencoverage.net. ok
9623 deraadt@
9624
9625 Upstream-ID: ad9cc655829d67fad219762810770787ba913069
9626
9627commit b4e96b4c9bea4182846e4942ba2048e6d708ee54
9628Author: Darren Tucker <dtucker@zip.com.au>
9629Date: Wed Oct 26 08:43:25 2016 +1100
9630
9631 Use !=NULL instead of >0 for getdefaultproj.
9632
9633 getdefaultproj() returns a pointer so test it for NULL inequality
9634 instead of >0. Fixes compiler warning and is more correct. Patch from
9635 David Binderman.
9636
9637commit 1c4ef0b808d3d38232aeeb1cebb7e9a43def42c5
9638Author: dtucker@openbsd.org <dtucker@openbsd.org>
9639Date: Sun Oct 23 22:04:05 2016 +0000
9640
9641 upstream commit
9642
9643 Factor out "can bind to low ports" check into its own function. This will
9644 make it easier for Portable to support platforms with permissions models
9645 other than uid==0 (eg bz#2625). ok djm@, "doesn't offend me too much"
9646 deraadt@.
9647
9648 Upstream-ID: 86213df4183e92b8f189a6d2dac858c994bfface
9649
9650commit 0b9ee623d57e5de7e83e66fd61a7ba9a5be98894
9651Author: dtucker@openbsd.org <dtucker@openbsd.org>
9652Date: Wed Oct 19 23:21:56 2016 +0000
9653
9654 upstream commit
9655
9656 When tearing down ControlMaster connecctions, don't
9657 pollute stderr when LogLevel=quiet. Patch from Tim Kuijsten via tech@.
9658
9659 Upstream-ID: d9b3a68b2a7c2f2fc7f74678e29a4618d55ceced
9660
9661commit 09e6a7d8354224933febc08ddcbc2010f542284e
9662Author: Darren Tucker <dtucker@zip.com.au>
9663Date: Mon Oct 24 09:06:18 2016 +1100
9664
9665 Wrap stdint.h include in ifdef.
9666
9667commit 08d9e9516e587b25127545c029e5464b2e7f2919
9668Author: Darren Tucker <dtucker@zip.com.au>
9669Date: Fri Oct 21 09:46:46 2016 +1100
9670
9671 Fix formatting.
9672
9673commit 461f50e7ab8751d3a55e9158c44c13031db7ba1d
9674Author: Darren Tucker <dtucker@zip.com.au>
9675Date: Fri Oct 21 06:55:58 2016 +1100
9676
9677 Update links to https.
9678
9679 www.openssh.com now supports https and ftp.openbsd.org no longer
9680 supports ftp. Make all links to these https.
9681
9682commit dd4e7212a6141f37742de97795e79db51e4427ad
9683Author: Darren Tucker <dtucker@zip.com.au>
9684Date: Fri Oct 21 06:48:46 2016 +1100
9685
9686 Update host key generation examples.
9687
9688 Remove ssh1 host key generation, add ssh-keygen -A
9689
9690commit 6d49ae82634c67e9a4d4af882bee20b40bb8c639
9691Author: Darren Tucker <dtucker@zip.com.au>
9692Date: Fri Oct 21 05:22:55 2016 +1100
9693
9694 Update links.
9695
9696 Make links to openssh.com HTTPS now that it's supported, point release
9697 notes link to the HTML release notes page, and update a couple of other
9698 links and bits of text.
9699
9700commit fe0d1ca6ace06376625084b004ee533f2c2ea9d6
9701Author: Darren Tucker <dtucker@zip.com.au>
9702Date: Thu Oct 20 03:42:09 2016 +1100
9703
9704 Remote channels .orig and .rej files.
9705
9706 These files were incorrectly added during an OpenBSD sync.
diff --git a/INSTALL b/INSTALL
index 3fd265dbf..f1f8f00f3 100644
--- a/INSTALL
+++ b/INSTALL
@@ -13,15 +13,15 @@ OpenSSL)
13Zlib 1.1.4 or 1.2.1.2 or greater (earlier 1.2.x versions have problems): 13Zlib 1.1.4 or 1.2.1.2 or greater (earlier 1.2.x versions have problems):
14http://www.gzip.org/zlib/ 14http://www.gzip.org/zlib/
15 15
16libcrypto (LibreSSL or OpenSSL >= 1.0.1 < 1.1.0) 16libcrypto from either of:
17LibreSSL http://www.libressl.org/ ; or 17 - LibreSSL (http://www.libressl.org/)
18OpenSSL http://www.openssl.org/ 18 - OpenSSL 1.0.x >= 1.0.1 or 1.1.0 >= 1.1.0g (http://www.openssl.org/)
19 19
20LibreSSL/OpenSSL should be compiled as a position-independent library 20LibreSSL/OpenSSL should be compiled as a position-independent library
21(i.e. with -fPIC) otherwise OpenSSH will not be able to link with it. 21(i.e. with -fPIC) otherwise OpenSSH will not be able to link with it.
22If you must use a non-position-independent libcrypto, then you may need 22If you must use a non-position-independent libcrypto, then you may need
23to configure OpenSSH --without-pie. Note that because of API changes, 23to configure OpenSSH --without-pie. Note that due to a bug in EVP_CipherInit
24OpenSSL 1.1.x is not currently supported. 24OpenSSL 1.1 versions prior to 1.1.0g can't be used.
25 25
26The remaining items are optional. 26The remaining items are optional.
27 27
diff --git a/Makefile.in b/Makefile.in
index 126b2c742..6f001bb36 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -88,7 +88,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
88 canohost.o channels.o cipher.o cipher-aes.o cipher-aesctr.o \ 88 canohost.o channels.o cipher.o cipher-aes.o cipher-aesctr.o \
89 cipher-ctr.o cleanup.o \ 89 cipher-ctr.o cleanup.o \
90 compat.o crc32.o fatal.o hostfile.o \ 90 compat.o crc32.o fatal.o hostfile.o \
91 log.o match.o moduli.o nchan.o packet.o opacket.o \ 91 log.o match.o moduli.o nchan.o packet.o \
92 readpass.o ttymodes.o xmalloc.o addrmatch.o \ 92 readpass.o ttymodes.o xmalloc.o addrmatch.o \
93 atomicio.o dispatch.o mac.o uuencode.o misc.o utf8.o \ 93 atomicio.o dispatch.o mac.o uuencode.o misc.o utf8.o \
94 monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \ 94 monitor_fdpass.o rijndael.o ssh-dss.o ssh-ecdsa.o ssh-rsa.o dh.o \
@@ -98,10 +98,11 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
98 ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \ 98 ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \
99 sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o \ 99 sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o \
100 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \ 100 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
101 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \ 101 kexgexc.o kexgexs.o \
102 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \ 102 sntrup4591761.o kexsntrup4591761x25519.o kexgen.o \
103 platform-pledge.o platform-tracing.o platform-misc.o 103 platform-pledge.o platform-tracing.o platform-misc.o
104 104
105
105SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \ 106SSHOBJS= ssh.o readconf.o clientloop.o sshtty.o \
106 sshconnect.o sshconnect2.o mux.o 107 sshconnect.o sshconnect2.o mux.o
107 108
@@ -186,7 +187,7 @@ ssh-agent$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-agent.o ssh-pkcs11-client.o
186ssh-keygen$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keygen.o 187ssh-keygen$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keygen.o
187 $(LD) -o $@ ssh-keygen.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) 188 $(LD) -o $@ ssh-keygen.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
188 189
189ssh-keysign$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keysign.o readconf.o uidswap.o 190ssh-keysign$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-keysign.o readconf.o uidswap.o compat.o
190 $(LD) -o $@ ssh-keysign.o readconf.o uidswap.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS) 191 $(LD) -o $@ ssh-keysign.o readconf.o uidswap.o $(LDFLAGS) -lssh -lopenbsd-compat $(LIBS)
191 192
192ssh-pkcs11-helper$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-pkcs11-helper.o ssh-pkcs11.o 193ssh-pkcs11-helper$(EXEEXT): $(LIBCOMPAT) libssh.a ssh-pkcs11-helper.o ssh-pkcs11.o
@@ -598,6 +599,7 @@ tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS)
598 TEST_SSH_SSHKEYSCAN="$${BUILDDIR}/ssh-keyscan"; \ 599 TEST_SSH_SSHKEYSCAN="$${BUILDDIR}/ssh-keyscan"; \
599 TEST_SSH_SFTP="$${BUILDDIR}/sftp"; \ 600 TEST_SSH_SFTP="$${BUILDDIR}/sftp"; \
600 TEST_SSH_SFTPSERVER="$${BUILDDIR}/sftp-server"; \ 601 TEST_SSH_SFTPSERVER="$${BUILDDIR}/sftp-server"; \
602 TEST_SSH_SSHPKCS11HELPER="$${BUILDDIR}/ssh-pkcs11-helper"; \
601 TEST_SSH_PLINK="plink"; \ 603 TEST_SSH_PLINK="plink"; \
602 TEST_SSH_PUTTYGEN="puttygen"; \ 604 TEST_SSH_PUTTYGEN="puttygen"; \
603 TEST_SSH_CONCH="conch"; \ 605 TEST_SSH_CONCH="conch"; \
diff --git a/OVERVIEW b/OVERVIEW
index 515567f45..cec7cd75b 100644
--- a/OVERVIEW
+++ b/OVERVIEW
@@ -34,11 +34,12 @@ these programs.
34 34
35 - Ssh contains several encryption algorithms. These are all 35 - Ssh contains several encryption algorithms. These are all
36 accessed through the cipher.h interface. The interface code is 36 accessed through the cipher.h interface. The interface code is
37 in cipher.c, and the implementations are in libc. 37 in cipher.c, and the implementations are either in libc or
38 LibreSSL.
38 39
39 Multiple Precision Integer Library 40 Multiple Precision Integer Library
40 41
41 - Uses the SSLeay BIGNUM sublibrary. 42 - Uses the LibreSSL BIGNUM sublibrary.
42 43
43 Random Numbers 44 Random Numbers
44 45
@@ -158,4 +159,4 @@ these programs.
158 uidswap.c uid-swapping 159 uidswap.c uid-swapping
159 xmalloc.c "safe" malloc routines 160 xmalloc.c "safe" malloc routines
160 161
161$OpenBSD: OVERVIEW,v 1.14 2018/07/27 03:55:22 dtucker Exp $ 162$OpenBSD: OVERVIEW,v 1.15 2018/10/23 05:56:35 djm Exp $
diff --git a/PROTOCOL.certkeys b/PROTOCOL.certkeys
index 11363fdc3..48338e671 100644
--- a/PROTOCOL.certkeys
+++ b/PROTOCOL.certkeys
@@ -36,6 +36,7 @@ Certified keys are represented using new key types:
36 ecdsa-sha2-nistp256-cert-v01@openssh.com 36 ecdsa-sha2-nistp256-cert-v01@openssh.com
37 ecdsa-sha2-nistp384-cert-v01@openssh.com 37 ecdsa-sha2-nistp384-cert-v01@openssh.com
38 ecdsa-sha2-nistp521-cert-v01@openssh.com 38 ecdsa-sha2-nistp521-cert-v01@openssh.com
39 ssh-ed25519-cert-v01@openssh.com
39 40
40Two additional types exist for RSA certificates to force use of 41Two additional types exist for RSA certificates to force use of
41SHA-2 signatures (SHA-256 and SHA-512 respectively): 42SHA-2 signatures (SHA-256 and SHA-512 respectively):
@@ -303,4 +304,4 @@ permit-user-rc empty Flag indicating that execution of
303 of this script will not be permitted if 304 of this script will not be permitted if
304 this option is not present. 305 this option is not present.
305 306
306$OpenBSD: PROTOCOL.certkeys,v 1.15 2018/07/03 11:39:54 djm Exp $ 307$OpenBSD: PROTOCOL.certkeys,v 1.16 2018/10/26 01:23:03 djm Exp $
diff --git a/README b/README
index 05916459c..77cb0ef3a 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
1See https://www.openssh.com/releasenotes.html#7.9p1 for the release notes. 1See https://www.openssh.com/releasenotes.html#8.0p1 for the release notes.
2 2
3Please read https://www.openssh.com/report.html for bug reporting 3Please read https://www.openssh.com/report.html for bug reporting
4instructions and note that we do not use Github for bug reporting or 4instructions and note that we do not use Github for bug reporting or
diff --git a/README.md b/README.md
new file mode 100644
index 000000000..4e2624161
--- /dev/null
+++ b/README.md
@@ -0,0 +1,74 @@
1# Portable OpenSSH
2
3OpenSSH is a complete implementation of the SSH protocol (version 2) for secure remote login, command execution and file transfer. It includes a client ``ssh`` and server ``sshd``, file transfer utilities ``scp`` and ``sftp`` as well as tools for key generation (``ssh-keygen``), run-time key storage (``ssh-agent``) and a number of supporting programs.
4
5This is a port of OpenBSD's [OpenSSH](https://openssh.com) to most Unix-like operating systems, including Linux, OS X and Cygwin. Portable OpenSSH polyfills OpenBSD APIs that are not available elsewhere, adds sshd sandboxing for more operating systems and includes support for OS-native authentication and auditing (e.g. using PAM).
6
7## Documentation
8
9The official documentation for OpenSSH are the man pages for each tool:
10
11* [ssh(1)](https://man.openbsd.org/ssh.1)
12* [sshd(8)](https://man.openbsd.org/sshd.8)
13* [ssh-keygen(1)](https://man.openbsd.org/ssh-keygen.1)
14* [ssh-agent(1)](https://man.openbsd.org/ssh-agent.1)
15* [scp(1)](https://man.openbsd.org/scp.1)
16* [sftp(1)](https://man.openbsd.org/sftp.1)
17* [ssh-keyscan(8)](https://man.openbsd.org/ssh-keyscan.8)
18* [sftp-server(8)](https://man.openbsd.org/sftp-server.8)
19
20## Stable Releases
21
22Stable release tarballs are available from a number of [download mirrors](https://www.openssh.com/portable.html#downloads). We recommend the use of a stable release for most users. Please read the [release notes](https://www.openssh.com/releasenotes.html) for details of recent changes and potential incompatibilities.
23
24## Building Portable OpenSSH
25
26### Dependencies
27
28Portable OpenSSH is built using autoconf and make. It requires a working C compiler, standard library and headers, as well as [zlib](https://www.zlib.net/) and ``libcrypto`` from either [LibreSSL](https://www.libressl.org/) or [OpenSSL](https://www.openssl.org) to build. Certain platforms and build-time options may require additional dependencies.
29
30### Building a release
31
32Releases include a pre-built copy of the ``configure`` script and may be built using:
33
34```
35tar zxvf openssh-X.Y.tar.gz
36cd openssh
37./configure # [options]
38make && make tests
39```
40
41See the [Build-time Customisation](#build-time-customisation) section below for configure options. If you plan on installing OpenSSH to your system, then you will usually want to specify destination paths.
42
43### Building from git
44
45If building from git, you'll need [autoconf](https://www.gnu.org/software/autoconf/) installed to build the ``configure`` script. The following commands will check out and build portable OpenSSH from git:
46
47```
48git clone https://github.com/openssh/openssh-portable # or https://anongit.mindrot.org/openssh.git
49cd openssh-portable
50autoreconf
51./configure
52make && make tests
53```
54
55### Build-time Customisation
56
57There are many build-time customisation options available. All Autoconf destination path flags (e.g. ``--prefix``) are supported (and are usually required if you want to install OpenSSH).
58
59For a full list of available flags, run ``configure --help`` but a few of the more frequently-used ones are described below. Some of these flags will require additional libraries and/or headers be installed.
60
61Flag | Meaning
62--- | ---
63``--with-pam`` | Enable [PAM](https://en.wikipedia.org/wiki/Pluggable_authentication_module) support. [OpenPAM](https://www.openpam.org/), [Linux PAM](http://www.linux-pam.org/) and Solaris PAM are supported.
64``--with-libedit`` | Enable [libedit](https://www.thrysoee.dk/editline/) support for sftp.
65``--with-kerberos5`` | Enable Kerberos/GSSAPI support. Both [Heimdal](https://www.h5l.org/) and [MIT](https://web.mit.edu/kerberos/) Kerberos implementations are supported.
66``--with-selinux`` | Enable [SELinux](https://en.wikipedia.org/wiki/Security-Enhanced_Linux) support.
67
68## Development
69
70Portable OpenSSH development is discussed on the [openssh-unix-dev mailing list](https://lists.mindrot.org/mailman/listinfo/openssh-unix-dev) ([archive mirror](https://marc.info/?l=openssh-unix-dev)). Bugs and feature requests are tracked on our [Bugzilla](https://bugzilla.mindrot.org/).
71
72## Reporting bugs
73
74_Non-security_ bugs may be reported to the developers via [Bugzilla](https://bugzilla.mindrot.org/) or via the mailing list above. Security bugs should be reported to [openssh@openssh.com](mailto:openssh.openssh.com).
diff --git a/atomicio.c b/atomicio.c
index f854a06f5..e00c9f0d4 100644
--- a/atomicio.c
+++ b/atomicio.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: atomicio.c,v 1.28 2016/07/27 23:18:12 djm Exp $ */ 1/* $OpenBSD: atomicio.c,v 1.30 2019/01/24 02:42:23 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2006 Damien Miller. All rights reserved. 3 * Copyright (c) 2006 Damien Miller. All rights reserved.
4 * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved. 4 * Copyright (c) 2005 Anil Madhavapeddy. All rights reserved.
@@ -57,20 +57,25 @@ atomicio6(ssize_t (*f) (int, void *, size_t), int fd, void *_s, size_t n,
57 ssize_t res; 57 ssize_t res;
58 struct pollfd pfd; 58 struct pollfd pfd;
59 59
60#ifndef BROKEN_READ_COMPARISON
61 pfd.fd = fd; 60 pfd.fd = fd;
61#ifndef BROKEN_READ_COMPARISON
62 pfd.events = f == read ? POLLIN : POLLOUT; 62 pfd.events = f == read ? POLLIN : POLLOUT;
63#else
64 pfd.events = POLLIN|POLLOUT;
63#endif 65#endif
64 while (n > pos) { 66 while (n > pos) {
65 res = (f) (fd, s + pos, n - pos); 67 res = (f) (fd, s + pos, n - pos);
66 switch (res) { 68 switch (res) {
67 case -1: 69 case -1:
68 if (errno == EINTR) 70 if (errno == EINTR) {
71 /* possible SIGALARM, update callback */
72 if (cb != NULL && cb(cb_arg, 0) == -1) {
73 errno = EINTR;
74 return pos;
75 }
69 continue; 76 continue;
70 if (errno == EAGAIN || errno == EWOULDBLOCK) { 77 } else if (errno == EAGAIN || errno == EWOULDBLOCK) {
71#ifndef BROKEN_READ_COMPARISON
72 (void)poll(&pfd, 1, -1); 78 (void)poll(&pfd, 1, -1);
73#endif
74 continue; 79 continue;
75 } 80 }
76 return 0; 81 return 0;
@@ -114,20 +119,25 @@ atomiciov6(ssize_t (*f) (int, const struct iovec *, int), int fd,
114 /* Make a copy of the iov array because we may modify it below */ 119 /* Make a copy of the iov array because we may modify it below */
115 memcpy(iov, _iov, (size_t)iovcnt * sizeof(*_iov)); 120 memcpy(iov, _iov, (size_t)iovcnt * sizeof(*_iov));
116 121
117#ifndef BROKEN_READV_COMPARISON
118 pfd.fd = fd; 122 pfd.fd = fd;
123#ifndef BROKEN_READV_COMPARISON
119 pfd.events = f == readv ? POLLIN : POLLOUT; 124 pfd.events = f == readv ? POLLIN : POLLOUT;
125#else
126 pfd.events = POLLIN|POLLOUT;
120#endif 127#endif
121 for (; iovcnt > 0 && iov[0].iov_len > 0;) { 128 for (; iovcnt > 0 && iov[0].iov_len > 0;) {
122 res = (f) (fd, iov, iovcnt); 129 res = (f) (fd, iov, iovcnt);
123 switch (res) { 130 switch (res) {
124 case -1: 131 case -1:
125 if (errno == EINTR) 132 if (errno == EINTR) {
133 /* possible SIGALARM, update callback */
134 if (cb != NULL && cb(cb_arg, 0) == -1) {
135 errno = EINTR;
136 return pos;
137 }
126 continue; 138 continue;
127 if (errno == EAGAIN || errno == EWOULDBLOCK) { 139 } else if (errno == EAGAIN || errno == EWOULDBLOCK) {
128#ifndef BROKEN_READV_COMPARISON
129 (void)poll(&pfd, 1, -1); 140 (void)poll(&pfd, 1, -1);
130#endif
131 continue; 141 continue;
132 } 142 }
133 return 0; 143 return 0;
diff --git a/atomicio.h b/atomicio.h
index 0d728ac86..8b3cc6e21 100644
--- a/atomicio.h
+++ b/atomicio.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: atomicio.h,v 1.11 2010/09/22 22:58:51 djm Exp $ */ 1/* $OpenBSD: atomicio.h,v 1.12 2018/12/27 03:25:25 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2006 Damien Miller. All rights reserved.
@@ -29,6 +29,8 @@
29#ifndef _ATOMICIO_H 29#ifndef _ATOMICIO_H
30#define _ATOMICIO_H 30#define _ATOMICIO_H
31 31
32struct iovec;
33
32/* 34/*
33 * Ensure all of data on socket comes through. f==read || f==vwrite 35 * Ensure all of data on socket comes through. f==read || f==vwrite
34 */ 36 */
diff --git a/audit-bsm.c b/audit-bsm.c
index 1409f69ae..0ba16c72c 100644
--- a/audit-bsm.c
+++ b/audit-bsm.c
@@ -391,7 +391,7 @@ audit_session_close(struct logininfo *li)
391} 391}
392 392
393void 393void
394audit_event(ssh_audit_event_t event) 394audit_event(struct ssh *ssh, ssh_audit_event_t event)
395{ 395{
396 char textbuf[BSM_TEXTBUFSZ]; 396 char textbuf[BSM_TEXTBUFSZ];
397 static int logged_in = 0; 397 static int logged_in = 0;
diff --git a/audit-linux.c b/audit-linux.c
index 136ed76bb..3fcbe5c53 100644
--- a/audit-linux.c
+++ b/audit-linux.c
@@ -97,10 +97,8 @@ audit_session_close(struct logininfo *li)
97} 97}
98 98
99void 99void
100audit_event(ssh_audit_event_t event) 100audit_event(struct ssh *ssh, ssh_audit_event_t event)
101{ 101{
102 struct ssh *ssh = active_state; /* XXX */
103
104 switch(event) { 102 switch(event) {
105 case SSH_AUTH_SUCCESS: 103 case SSH_AUTH_SUCCESS:
106 case SSH_CONNECTION_CLOSE: 104 case SSH_CONNECTION_CLOSE:
diff --git a/audit.c b/audit.c
index 33a04376d..dd2f03558 100644
--- a/audit.c
+++ b/audit.c
@@ -131,7 +131,7 @@ audit_connection_from(const char *host, int port)
131 * events and what they mean). 131 * events and what they mean).
132 */ 132 */
133void 133void
134audit_event(ssh_audit_event_t event) 134audit_event(struct ssh *ssh, ssh_audit_event_t event)
135{ 135{
136 debug("audit event euid %d user %s event %d (%s)", geteuid(), 136 debug("audit event euid %d user %s event %d (%s)", geteuid(),
137 audit_username(), event, audit_event_lookup(event)); 137 audit_username(), event, audit_event_lookup(event));
diff --git a/audit.h b/audit.h
index 0b593666d..38cb5ad31 100644
--- a/audit.h
+++ b/audit.h
@@ -27,6 +27,8 @@
27 27
28#include "loginrec.h" 28#include "loginrec.h"
29 29
30struct ssh;
31
30enum ssh_audit_event_type { 32enum ssh_audit_event_type {
31 SSH_LOGIN_EXCEED_MAXTRIES, 33 SSH_LOGIN_EXCEED_MAXTRIES,
32 SSH_LOGIN_ROOT_DENIED, 34 SSH_LOGIN_ROOT_DENIED,
@@ -46,7 +48,7 @@ enum ssh_audit_event_type {
46typedef enum ssh_audit_event_type ssh_audit_event_t; 48typedef enum ssh_audit_event_type ssh_audit_event_t;
47 49
48void audit_connection_from(const char *, int); 50void audit_connection_from(const char *, int);
49void audit_event(ssh_audit_event_t); 51void audit_event(struct ssh *, ssh_audit_event_t);
50void audit_session_open(struct logininfo *); 52void audit_session_open(struct logininfo *);
51void audit_session_close(struct logininfo *); 53void audit_session_close(struct logininfo *);
52void audit_run_command(const char *); 54void audit_run_command(const char *);
diff --git a/auth-pam.c b/auth-pam.c
index 1dec53e92..bde0a8f56 100644
--- a/auth-pam.c
+++ b/auth-pam.c
@@ -248,6 +248,9 @@ static int sshpam_maxtries_reached = 0;
248static char **sshpam_env = NULL; 248static char **sshpam_env = NULL;
249static Authctxt *sshpam_authctxt = NULL; 249static Authctxt *sshpam_authctxt = NULL;
250static const char *sshpam_password = NULL; 250static const char *sshpam_password = NULL;
251static char *sshpam_rhost = NULL;
252static char *sshpam_laddr = NULL;
253static char *sshpam_conninfo = NULL;
251 254
252/* Some PAM implementations don't implement this */ 255/* Some PAM implementations don't implement this */
253#ifndef HAVE_PAM_GETENVLIST 256#ifndef HAVE_PAM_GETENVLIST
@@ -669,13 +672,17 @@ sshpam_cleanup(void)
669} 672}
670 673
671static int 674static int
672sshpam_init(Authctxt *authctxt) 675sshpam_init(struct ssh *ssh, Authctxt *authctxt)
673{ 676{
674 const char *pam_rhost, *pam_user, *user = authctxt->user; 677 const char *pam_user, *user = authctxt->user;
675 const char **ptr_pam_user = &pam_user; 678 const char **ptr_pam_user = &pam_user;
676 struct ssh *ssh = active_state; /* XXX */
677 679
678 if (sshpam_handle != NULL) { 680 if (sshpam_handle == NULL) {
681 if (ssh == NULL) {
682 fatal("%s: called initially with no "
683 "packet context", __func__);
684 }
685 } if (sshpam_handle != NULL) {
679 /* We already have a PAM context; check if the user matches */ 686 /* We already have a PAM context; check if the user matches */
680 sshpam_err = pam_get_item(sshpam_handle, 687 sshpam_err = pam_get_item(sshpam_handle,
681 PAM_USER, (sshpam_const void **)ptr_pam_user); 688 PAM_USER, (sshpam_const void **)ptr_pam_user);
@@ -694,14 +701,33 @@ sshpam_init(Authctxt *authctxt)
694 sshpam_handle = NULL; 701 sshpam_handle = NULL;
695 return (-1); 702 return (-1);
696 } 703 }
697 pam_rhost = auth_get_canonical_hostname(ssh, options.use_dns); 704
698 debug("PAM: setting PAM_RHOST to \"%s\"", pam_rhost); 705 if (ssh != NULL && sshpam_rhost == NULL) {
699 sshpam_err = pam_set_item(sshpam_handle, PAM_RHOST, pam_rhost); 706 /*
700 if (sshpam_err != PAM_SUCCESS) { 707 * We need to cache these as we don't have packet context
701 pam_end(sshpam_handle, sshpam_err); 708 * during the kbdint flow.
702 sshpam_handle = NULL; 709 */
703 return (-1); 710 sshpam_rhost = xstrdup(auth_get_canonical_hostname(ssh,
711 options.use_dns));
712 sshpam_laddr = get_local_ipaddr(
713 ssh_packet_get_connection_in(ssh));
714 xasprintf(&sshpam_conninfo, "SSH_CONNECTION=%.50s %d %.50s %d",
715 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
716 sshpam_laddr, ssh_local_port(ssh));
704 } 717 }
718 if (sshpam_rhost != NULL) {
719 debug("PAM: setting PAM_RHOST to \"%s\"", sshpam_rhost);
720 sshpam_err = pam_set_item(sshpam_handle, PAM_RHOST,
721 sshpam_rhost);
722 if (sshpam_err != PAM_SUCCESS) {
723 pam_end(sshpam_handle, sshpam_err);
724 sshpam_handle = NULL;
725 return (-1);
726 }
727 /* Put SSH_CONNECTION in the PAM environment too */
728 pam_putenv(sshpam_handle, sshpam_conninfo);
729 }
730
705#ifdef PAM_TTY_KLUDGE 731#ifdef PAM_TTY_KLUDGE
706 /* 732 /*
707 * Some silly PAM modules (e.g. pam_time) require a TTY to operate. 733 * Some silly PAM modules (e.g. pam_time) require a TTY to operate.
@@ -755,7 +781,7 @@ sshpam_init_ctx(Authctxt *authctxt)
755 return NULL; 781 return NULL;
756 782
757 /* Initialize PAM */ 783 /* Initialize PAM */
758 if (sshpam_init(authctxt) == -1) { 784 if (sshpam_init(NULL, authctxt) == -1) {
759 error("PAM: initialization failed"); 785 error("PAM: initialization failed");
760 return (NULL); 786 return (NULL);
761 } 787 }
@@ -787,7 +813,6 @@ static int
787sshpam_query(void *ctx, char **name, char **info, 813sshpam_query(void *ctx, char **name, char **info,
788 u_int *num, char ***prompts, u_int **echo_on) 814 u_int *num, char ***prompts, u_int **echo_on)
789{ 815{
790 struct ssh *ssh = active_state; /* XXX */
791 struct sshbuf *buffer; 816 struct sshbuf *buffer;
792 struct pam_ctxt *ctxt = ctx; 817 struct pam_ctxt *ctxt = ctx;
793 size_t plen; 818 size_t plen;
@@ -877,8 +902,7 @@ sshpam_query(void *ctx, char **name, char **info,
877 } 902 }
878 error("PAM: %s for %s%.100s from %.100s", msg, 903 error("PAM: %s for %s%.100s from %.100s", msg,
879 sshpam_authctxt->valid ? "" : "illegal user ", 904 sshpam_authctxt->valid ? "" : "illegal user ",
880 sshpam_authctxt->user, 905 sshpam_authctxt->user, sshpam_rhost);
881 auth_get_canonical_hostname(ssh, options.use_dns));
882 /* FALLTHROUGH */ 906 /* FALLTHROUGH */
883 default: 907 default:
884 *num = 0; 908 *num = 0;
@@ -995,12 +1019,14 @@ KbdintDevice mm_sshpam_device = {
995 * This replaces auth-pam.c 1019 * This replaces auth-pam.c
996 */ 1020 */
997void 1021void
998start_pam(Authctxt *authctxt) 1022start_pam(struct ssh *ssh)
999{ 1023{
1024 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1025
1000 if (!options.use_pam) 1026 if (!options.use_pam)
1001 fatal("PAM: initialisation requested when UsePAM=no"); 1027 fatal("PAM: initialisation requested when UsePAM=no");
1002 1028
1003 if (sshpam_init(authctxt) == -1) 1029 if (sshpam_init(ssh, authctxt) == -1)
1004 fatal("PAM: initialisation failed"); 1030 fatal("PAM: initialisation failed");
1005} 1031}
1006 1032
diff --git a/auth-pam.h b/auth-pam.h
index 419860745..9fcea270f 100644
--- a/auth-pam.h
+++ b/auth-pam.h
@@ -27,7 +27,7 @@
27 27
28struct ssh; 28struct ssh;
29 29
30void start_pam(Authctxt *); 30void start_pam(struct ssh *);
31void finish_pam(void); 31void finish_pam(void);
32u_int do_pam_account(void); 32u_int do_pam_account(void);
33void do_pam_session(struct ssh *); 33void do_pam_session(struct ssh *);
diff --git a/auth.c b/auth.c
index 3ca3762cc..8696f258e 100644
--- a/auth.c
+++ b/auth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth.c,v 1.133 2018/09/12 01:19:12 djm Exp $ */ 1/* $OpenBSD: auth.c,v 1.138 2019/01/19 21:41:18 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -50,6 +50,7 @@
50#include <unistd.h> 50#include <unistd.h>
51#include <limits.h> 51#include <limits.h>
52#include <netdb.h> 52#include <netdb.h>
53#include <time.h>
53 54
54#include "xmalloc.h" 55#include "xmalloc.h"
55#include "match.h" 56#include "match.h"
@@ -96,9 +97,8 @@ static struct sshbuf *auth_debug;
96 * Otherwise true is returned. 97 * Otherwise true is returned.
97 */ 98 */
98int 99int
99allowed_user(struct passwd * pw) 100allowed_user(struct ssh *ssh, struct passwd * pw)
100{ 101{
101 struct ssh *ssh = active_state; /* XXX */
102 struct stat st; 102 struct stat st;
103 const char *hostname = NULL, *ipaddr = NULL, *passwd = NULL; 103 const char *hostname = NULL, *ipaddr = NULL, *passwd = NULL;
104 u_int i; 104 u_int i;
@@ -258,7 +258,7 @@ allowed_user(struct passwd * pw)
258 } 258 }
259 259
260#ifdef CUSTOM_SYS_AUTH_ALLOWED_USER 260#ifdef CUSTOM_SYS_AUTH_ALLOWED_USER
261 if (!sys_auth_allowed_user(pw, &loginmsg)) 261 if (!sys_auth_allowed_user(pw, loginmsg))
262 return 0; 262 return 0;
263#endif 263#endif
264 264
@@ -308,10 +308,10 @@ format_method_key(Authctxt *authctxt)
308} 308}
309 309
310void 310void
311auth_log(Authctxt *authctxt, int authenticated, int partial, 311auth_log(struct ssh *ssh, int authenticated, int partial,
312 const char *method, const char *submethod) 312 const char *method, const char *submethod)
313{ 313{
314 struct ssh *ssh = active_state; /* XXX */ 314 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
315 int level = SYSLOG_LEVEL_VERBOSE; 315 int level = SYSLOG_LEVEL_VERBOSE;
316 const char *authmsg; 316 const char *authmsg;
317 char *extra = NULL; 317 char *extra = NULL;
@@ -356,26 +356,26 @@ auth_log(Authctxt *authctxt, int authenticated, int partial,
356 (strcmp(method, "password") == 0 || 356 (strcmp(method, "password") == 0 ||
357 strncmp(method, "keyboard-interactive", 20) == 0 || 357 strncmp(method, "keyboard-interactive", 20) == 0 ||
358 strcmp(method, "challenge-response") == 0)) 358 strcmp(method, "challenge-response") == 0))
359 record_failed_login(authctxt->user, 359 record_failed_login(ssh, authctxt->user,
360 auth_get_canonical_hostname(ssh, options.use_dns), "ssh"); 360 auth_get_canonical_hostname(ssh, options.use_dns), "ssh");
361# ifdef WITH_AIXAUTHENTICATE 361# ifdef WITH_AIXAUTHENTICATE
362 if (authenticated) 362 if (authenticated)
363 sys_auth_record_login(authctxt->user, 363 sys_auth_record_login(authctxt->user,
364 auth_get_canonical_hostname(ssh, options.use_dns), "ssh", 364 auth_get_canonical_hostname(ssh, options.use_dns), "ssh",
365 &loginmsg); 365 loginmsg);
366# endif 366# endif
367#endif 367#endif
368#ifdef SSH_AUDIT_EVENTS 368#ifdef SSH_AUDIT_EVENTS
369 if (authenticated == 0 && !authctxt->postponed) 369 if (authenticated == 0 && !authctxt->postponed)
370 audit_event(audit_classify_auth(method)); 370 audit_event(ssh, audit_classify_auth(method));
371#endif 371#endif
372} 372}
373 373
374 374
375void 375void
376auth_maxtries_exceeded(Authctxt *authctxt) 376auth_maxtries_exceeded(struct ssh *ssh)
377{ 377{
378 struct ssh *ssh = active_state; /* XXX */ 378 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
379 379
380 error("maximum authentication attempts exceeded for " 380 error("maximum authentication attempts exceeded for "
381 "%s%.100s from %.200s port %d ssh2", 381 "%s%.100s from %.200s port %d ssh2",
@@ -383,7 +383,7 @@ auth_maxtries_exceeded(Authctxt *authctxt)
383 authctxt->user, 383 authctxt->user,
384 ssh_remote_ipaddr(ssh), 384 ssh_remote_ipaddr(ssh),
385 ssh_remote_port(ssh)); 385 ssh_remote_port(ssh));
386 packet_disconnect("Too many authentication failures"); 386 ssh_packet_disconnect(ssh, "Too many authentication failures");
387 /* NOTREACHED */ 387 /* NOTREACHED */
388} 388}
389 389
@@ -437,7 +437,7 @@ expand_authorized_keys(const char *filename, struct passwd *pw)
437 * Ensure that filename starts anchored. If not, be backward 437 * Ensure that filename starts anchored. If not, be backward
438 * compatible and prepend the '%h/' 438 * compatible and prepend the '%h/'
439 */ 439 */
440 if (*file == '/') 440 if (path_absolute(file))
441 return (file); 441 return (file);
442 442
443 i = snprintf(ret, sizeof(ret), "%s/%s", pw->pw_dir, file); 443 i = snprintf(ret, sizeof(ret), "%s/%s", pw->pw_dir, file);
@@ -558,9 +558,8 @@ auth_openprincipals(const char *file, struct passwd *pw, int strict_modes)
558} 558}
559 559
560struct passwd * 560struct passwd *
561getpwnamallow(const char *user) 561getpwnamallow(struct ssh *ssh, const char *user)
562{ 562{
563 struct ssh *ssh = active_state; /* XXX */
564#ifdef HAVE_LOGIN_CAP 563#ifdef HAVE_LOGIN_CAP
565 extern login_cap_t *lc; 564 extern login_cap_t *lc;
566#ifdef BSD_AUTH 565#ifdef BSD_AUTH
@@ -568,8 +567,9 @@ getpwnamallow(const char *user)
568#endif 567#endif
569#endif 568#endif
570 struct passwd *pw; 569 struct passwd *pw;
571 struct connection_info *ci = get_connection_info(1, options.use_dns); 570 struct connection_info *ci;
572 571
572 ci = get_connection_info(ssh, 1, options.use_dns);
573 ci->user = user; 573 ci->user = user;
574 parse_server_match_config(&options, ci); 574 parse_server_match_config(&options, ci);
575 log_change_level(options.log_level); 575 log_change_level(options.log_level);
@@ -584,32 +584,19 @@ getpwnamallow(const char *user)
584#if defined(_AIX) && defined(HAVE_SETAUTHDB) 584#if defined(_AIX) && defined(HAVE_SETAUTHDB)
585 aix_restoreauthdb(); 585 aix_restoreauthdb();
586#endif 586#endif
587#ifdef HAVE_CYGWIN
588 /*
589 * Windows usernames are case-insensitive. To avoid later problems
590 * when trying to match the username, the user is only allowed to
591 * login if the username is given in the same case as stored in the
592 * user database.
593 */
594 if (pw != NULL && strcmp(user, pw->pw_name) != 0) {
595 logit("Login name %.100s does not match stored username %.100s",
596 user, pw->pw_name);
597 pw = NULL;
598 }
599#endif
600 if (pw == NULL) { 587 if (pw == NULL) {
601 logit("Invalid user %.100s from %.100s port %d", 588 logit("Invalid user %.100s from %.100s port %d",
602 user, ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); 589 user, ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
603#ifdef CUSTOM_FAILED_LOGIN 590#ifdef CUSTOM_FAILED_LOGIN
604 record_failed_login(user, 591 record_failed_login(ssh, user,
605 auth_get_canonical_hostname(ssh, options.use_dns), "ssh"); 592 auth_get_canonical_hostname(ssh, options.use_dns), "ssh");
606#endif 593#endif
607#ifdef SSH_AUDIT_EVENTS 594#ifdef SSH_AUDIT_EVENTS
608 audit_event(SSH_INVALID_USER); 595 audit_event(ssh, SSH_INVALID_USER);
609#endif /* SSH_AUDIT_EVENTS */ 596#endif /* SSH_AUDIT_EVENTS */
610 return (NULL); 597 return (NULL);
611 } 598 }
612 if (!allowed_user(pw)) 599 if (!allowed_user(ssh, pw))
613 return (NULL); 600 return (NULL);
614#ifdef HAVE_LOGIN_CAP 601#ifdef HAVE_LOGIN_CAP
615 if ((lc = login_getclass(pw->pw_class)) == NULL) { 602 if ((lc = login_getclass(pw->pw_class)) == NULL) {
@@ -688,9 +675,8 @@ auth_debug_add(const char *fmt,...)
688} 675}
689 676
690void 677void
691auth_debug_send(void) 678auth_debug_send(struct ssh *ssh)
692{ 679{
693 struct ssh *ssh = active_state; /* XXX */
694 char *msg; 680 char *msg;
695 int r; 681 int r;
696 682
@@ -893,7 +879,7 @@ subprocess(const char *tag, struct passwd *pw, const char *command,
893 * If executing an explicit binary, then verify the it exists 879 * If executing an explicit binary, then verify the it exists
894 * and appears safe-ish to execute 880 * and appears safe-ish to execute
895 */ 881 */
896 if (*av[0] != '/') { 882 if (!path_absolute(av[0])) {
897 error("%s path is not absolute", tag); 883 error("%s path is not absolute", tag);
898 return 0; 884 return 0;
899 } 885 }
diff --git a/auth.h b/auth.h
index 977562f0a..bf393e755 100644
--- a/auth.h
+++ b/auth.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth.h,v 1.96 2018/04/10 00:10:49 djm Exp $ */ 1/* $OpenBSD: auth.h,v 1.99 2019/01/19 21:43:56 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -132,8 +132,8 @@ auth_rhosts2(struct passwd *, const char *, const char *, const char *);
132 132
133int auth_password(struct ssh *, const char *); 133int auth_password(struct ssh *, const char *);
134 134
135int hostbased_key_allowed(struct passwd *, const char *, char *, 135int hostbased_key_allowed(struct ssh *, struct passwd *,
136 struct sshkey *); 136 const char *, char *, struct sshkey *);
137int user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int, 137int user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
138 struct sshauthopt **); 138 struct sshauthopt **);
139int auth2_key_already_used(Authctxt *, const struct sshkey *); 139int auth2_key_already_used(Authctxt *, const struct sshkey *);
@@ -166,15 +166,13 @@ int auth_shadow_pwexpired(Authctxt *);
166#include "audit.h" 166#include "audit.h"
167void remove_kbdint_device(const char *); 167void remove_kbdint_device(const char *);
168 168
169void do_authentication2(Authctxt *); 169void do_authentication2(struct ssh *);
170 170
171void auth_log(Authctxt *, int, int, const char *, const char *); 171void auth_log(struct ssh *, int, int, const char *, const char *);
172void auth_maxtries_exceeded(Authctxt *) __attribute__((noreturn)); 172void auth_maxtries_exceeded(struct ssh *) __attribute__((noreturn));
173void userauth_finish(struct ssh *, int, const char *, const char *); 173void userauth_finish(struct ssh *, int, const char *, const char *);
174int auth_root_allowed(struct ssh *, const char *); 174int auth_root_allowed(struct ssh *, const char *);
175 175
176void userauth_send_banner(const char *);
177
178char *auth2_read_banner(void); 176char *auth2_read_banner(void);
179int auth2_methods_valid(const char *, int); 177int auth2_methods_valid(const char *, int);
180int auth2_update_methods_lists(Authctxt *, const char *, const char *); 178int auth2_update_methods_lists(Authctxt *, const char *, const char *);
@@ -188,8 +186,8 @@ void auth2_challenge_stop(struct ssh *);
188int bsdauth_query(void *, char **, char **, u_int *, char ***, u_int **); 186int bsdauth_query(void *, char **, char **, u_int *, char ***, u_int **);
189int bsdauth_respond(void *, u_int, char **); 187int bsdauth_respond(void *, u_int, char **);
190 188
191int allowed_user(struct passwd *); 189int allowed_user(struct ssh *, struct passwd *);
192struct passwd * getpwnamallow(const char *user); 190struct passwd * getpwnamallow(struct ssh *, const char *user);
193 191
194char *expand_authorized_keys(const char *, struct passwd *pw); 192char *expand_authorized_keys(const char *, struct passwd *pw);
195char *authorized_principals_file(struct passwd *); 193char *authorized_principals_file(struct passwd *);
@@ -210,8 +208,8 @@ struct sshkey *get_hostkey_public_by_index(int, struct ssh *);
210struct sshkey *get_hostkey_public_by_type(int, int, struct ssh *); 208struct sshkey *get_hostkey_public_by_type(int, int, struct ssh *);
211struct sshkey *get_hostkey_private_by_type(int, int, struct ssh *); 209struct sshkey *get_hostkey_private_by_type(int, int, struct ssh *);
212int get_hostkey_index(struct sshkey *, int, struct ssh *); 210int get_hostkey_index(struct sshkey *, int, struct ssh *);
213int sshd_hostkey_sign(struct sshkey *, struct sshkey *, u_char **, 211int sshd_hostkey_sign(struct ssh *, struct sshkey *, struct sshkey *,
214 size_t *, const u_char *, size_t, const char *, u_int); 212 u_char **, size_t *, const u_char *, size_t, const char *);
215 213
216/* Key / cert options linkage to auth layer */ 214/* Key / cert options linkage to auth layer */
217const struct sshauthopt *auth_options(struct ssh *); 215const struct sshauthopt *auth_options(struct ssh *);
@@ -224,7 +222,7 @@ void auth_log_authopts(const char *, const struct sshauthopt *, int);
224/* debug messages during authentication */ 222/* debug messages during authentication */
225void auth_debug_add(const char *fmt,...) 223void auth_debug_add(const char *fmt,...)
226 __attribute__((format(printf, 1, 2))); 224 __attribute__((format(printf, 1, 2)));
227void auth_debug_send(void); 225void auth_debug_send(struct ssh *);
228void auth_debug_reset(void); 226void auth_debug_reset(void);
229 227
230struct passwd *fakepw(void); 228struct passwd *fakepw(void);
diff --git a/auth2-hostbased.c b/auth2-hostbased.c
index 764ceff74..0c40fad4e 100644
--- a/auth2-hostbased.c
+++ b/auth2-hostbased.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-hostbased.c,v 1.38 2018/09/20 03:28:06 djm Exp $ */ 1/* $OpenBSD: auth2-hostbased.c,v 1.40 2019/01/19 21:43:56 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -147,7 +147,8 @@ userauth_hostbased(struct ssh *ssh)
147 147
148 /* test for allowed key and correct signature */ 148 /* test for allowed key and correct signature */
149 authenticated = 0; 149 authenticated = 0;
150 if (PRIVSEP(hostbased_key_allowed(authctxt->pw, cuser, chost, key)) && 150 if (PRIVSEP(hostbased_key_allowed(ssh, authctxt->pw, cuser,
151 chost, key)) &&
151 PRIVSEP(sshkey_verify(key, sig, slen, 152 PRIVSEP(sshkey_verify(key, sig, slen,
152 sshbuf_ptr(b), sshbuf_len(b), pkalg, ssh->compat)) == 0) 153 sshbuf_ptr(b), sshbuf_len(b), pkalg, ssh->compat)) == 0)
153 authenticated = 1; 154 authenticated = 1;
@@ -167,10 +168,9 @@ done:
167 168
168/* return 1 if given hostkey is allowed */ 169/* return 1 if given hostkey is allowed */
169int 170int
170hostbased_key_allowed(struct passwd *pw, const char *cuser, char *chost, 171hostbased_key_allowed(struct ssh *ssh, struct passwd *pw,
171 struct sshkey *key) 172 const char *cuser, char *chost, struct sshkey *key)
172{ 173{
173 struct ssh *ssh = active_state; /* XXX */
174 const char *resolvedname, *ipaddr, *lookup, *reason; 174 const char *resolvedname, *ipaddr, *lookup, *reason;
175 HostStatus host_status; 175 HostStatus host_status;
176 int len; 176 int len;
diff --git a/auth2-pubkey.c b/auth2-pubkey.c
index 2fb5950ea..0b3975a74 100644
--- a/auth2-pubkey.c
+++ b/auth2-pubkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-pubkey.c,v 1.86 2018/09/20 03:28:06 djm Exp $ */ 1/* $OpenBSD: auth2-pubkey.c,v 1.87 2019/01/22 11:26:16 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -102,6 +102,22 @@ userauth_pubkey(struct ssh *ssh)
102 (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 || 102 (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
103 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0) 103 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
104 fatal("%s: parse request failed: %s", __func__, ssh_err(r)); 104 fatal("%s: parse request failed: %s", __func__, ssh_err(r));
105
106 if (log_level_get() >= SYSLOG_LEVEL_DEBUG2) {
107 char *keystring;
108 struct sshbuf *pkbuf;
109
110 if ((pkbuf = sshbuf_from(pkblob, blen)) == NULL)
111 fatal("%s: sshbuf_from failed", __func__);
112 if ((keystring = sshbuf_dtob64(pkbuf)) == NULL)
113 fatal("%s: sshbuf_dtob64 failed", __func__);
114 debug2("%s: %s user %s %s public key %s %s", __func__,
115 authctxt->valid ? "valid" : "invalid", authctxt->user,
116 have_sig ? "attempting" : "querying", pkalg, keystring);
117 sshbuf_free(pkbuf);
118 free(keystring);
119 }
120
105 pktype = sshkey_type_from_name(pkalg); 121 pktype = sshkey_type_from_name(pkalg);
106 if (pktype == KEY_UNSPEC) { 122 if (pktype == KEY_UNSPEC) {
107 /* this is perfectly legal */ 123 /* this is perfectly legal */
diff --git a/auth2.c b/auth2.c
index 4d19957a6..16ae1a363 100644
--- a/auth2.c
+++ b/auth2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2.c,v 1.149 2018/07/11 18:53:29 markus Exp $ */ 1/* $OpenBSD: auth2.c,v 1.155 2019/03/25 22:34:52 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -35,6 +35,7 @@
35#include <stdarg.h> 35#include <stdarg.h>
36#include <string.h> 36#include <string.h>
37#include <unistd.h> 37#include <unistd.h>
38#include <time.h>
38 39
39#include "atomicio.h" 40#include "atomicio.h"
40#include "xmalloc.h" 41#include "xmalloc.h"
@@ -137,18 +138,21 @@ auth2_read_banner(void)
137 return (banner); 138 return (banner);
138} 139}
139 140
140void 141static void
141userauth_send_banner(const char *msg) 142userauth_send_banner(struct ssh *ssh, const char *msg)
142{ 143{
143 packet_start(SSH2_MSG_USERAUTH_BANNER); 144 int r;
144 packet_put_cstring(msg); 145
145 packet_put_cstring(""); /* language, unused */ 146 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_BANNER)) != 0 ||
146 packet_send(); 147 (r = sshpkt_put_cstring(ssh, msg)) != 0 ||
148 (r = sshpkt_put_cstring(ssh, "")) != 0 || /* language, unused */
149 (r = sshpkt_send(ssh)) != 0)
150 fatal("%s: %s", __func__, ssh_err(r));
147 debug("%s: sent", __func__); 151 debug("%s: sent", __func__);
148} 152}
149 153
150static void 154static void
151userauth_banner(void) 155userauth_banner(struct ssh *ssh)
152{ 156{
153 char *banner = NULL; 157 char *banner = NULL;
154 158
@@ -157,7 +161,7 @@ userauth_banner(void)
157 161
158 if ((banner = PRIVSEP(auth2_read_banner())) == NULL) 162 if ((banner = PRIVSEP(auth2_read_banner())) == NULL)
159 goto done; 163 goto done;
160 userauth_send_banner(banner); 164 userauth_send_banner(ssh, banner);
161 165
162done: 166done:
163 free(banner); 167 free(banner);
@@ -167,10 +171,10 @@ done:
167 * loop until authctxt->success == TRUE 171 * loop until authctxt->success == TRUE
168 */ 172 */
169void 173void
170do_authentication2(Authctxt *authctxt) 174do_authentication2(struct ssh *ssh)
171{ 175{
172 struct ssh *ssh = active_state; /* XXX */ 176 Authctxt *authctxt = ssh->authctxt;
173 ssh->authctxt = authctxt; /* XXX move to caller */ 177
174 ssh_dispatch_init(ssh, &dispatch_protocol_error); 178 ssh_dispatch_init(ssh, &dispatch_protocol_error);
175 ssh_dispatch_set(ssh, SSH2_MSG_SERVICE_REQUEST, &input_service_request); 179 ssh_dispatch_set(ssh, SSH2_MSG_SERVICE_REQUEST, &input_service_request);
176 ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &authctxt->success); 180 ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &authctxt->success);
@@ -182,10 +186,12 @@ static int
182input_service_request(int type, u_int32_t seq, struct ssh *ssh) 186input_service_request(int type, u_int32_t seq, struct ssh *ssh)
183{ 187{
184 Authctxt *authctxt = ssh->authctxt; 188 Authctxt *authctxt = ssh->authctxt;
185 u_int len; 189 char *service = NULL;
186 int acceptit = 0; 190 int r, acceptit = 0;
187 char *service = packet_get_cstring(&len); 191
188 packet_check_eom(); 192 if ((r = sshpkt_get_cstring(ssh, &service, NULL)) != 0 ||
193 (r = sshpkt_get_end(ssh)) != 0)
194 goto out;
189 195
190 if (authctxt == NULL) 196 if (authctxt == NULL)
191 fatal("input_service_request: no authctxt"); 197 fatal("input_service_request: no authctxt");
@@ -194,20 +200,24 @@ input_service_request(int type, u_int32_t seq, struct ssh *ssh)
194 if (!authctxt->success) { 200 if (!authctxt->success) {
195 acceptit = 1; 201 acceptit = 1;
196 /* now we can handle user-auth requests */ 202 /* now we can handle user-auth requests */
197 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST, &input_userauth_request); 203 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST,
204 &input_userauth_request);
198 } 205 }
199 } 206 }
200 /* XXX all other service requests are denied */ 207 /* XXX all other service requests are denied */
201 208
202 if (acceptit) { 209 if (acceptit) {
203 packet_start(SSH2_MSG_SERVICE_ACCEPT); 210 if ((r = sshpkt_start(ssh, SSH2_MSG_SERVICE_ACCEPT)) != 0 ||
204 packet_put_cstring(service); 211 (r = sshpkt_put_cstring(ssh, service)) != 0 ||
205 packet_send(); 212 (r = sshpkt_send(ssh)) != 0 ||
206 packet_write_wait(); 213 (r = ssh_packet_write_wait(ssh)) != 0)
214 goto out;
207 } else { 215 } else {
208 debug("bad service request %s", service); 216 debug("bad service request %s", service);
209 packet_disconnect("bad service request %s", service); 217 ssh_packet_disconnect(ssh, "bad service request %s", service);
210 } 218 }
219 r = 0;
220 out:
211 free(service); 221 free(service);
212 return 0; 222 return 0;
213} 223}
@@ -255,16 +265,17 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
255{ 265{
256 Authctxt *authctxt = ssh->authctxt; 266 Authctxt *authctxt = ssh->authctxt;
257 Authmethod *m = NULL; 267 Authmethod *m = NULL;
258 char *user, *service, *method, *style = NULL; 268 char *user = NULL, *service = NULL, *method = NULL, *style = NULL;
259 int authenticated = 0; 269 int r, authenticated = 0;
260 double tstart = monotime_double(); 270 double tstart = monotime_double();
261 271
262 if (authctxt == NULL) 272 if (authctxt == NULL)
263 fatal("input_userauth_request: no authctxt"); 273 fatal("input_userauth_request: no authctxt");
264 274
265 user = packet_get_cstring(NULL); 275 if ((r = sshpkt_get_cstring(ssh, &user, NULL)) != 0 ||
266 service = packet_get_cstring(NULL); 276 (r = sshpkt_get_cstring(ssh, &service, NULL)) != 0 ||
267 method = packet_get_cstring(NULL); 277 (r = sshpkt_get_cstring(ssh, &method, NULL)) != 0)
278 goto out;
268 debug("userauth-request for user %s service %s method %s", user, service, method); 279 debug("userauth-request for user %s service %s method %s", user, service, method);
269 debug("attempt %d failures %d", authctxt->attempt, authctxt->failures); 280 debug("attempt %d failures %d", authctxt->attempt, authctxt->failures);
270 281
@@ -273,7 +284,7 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
273 284
274 if (authctxt->attempt++ == 0) { 285 if (authctxt->attempt++ == 0) {
275 /* setup auth context */ 286 /* setup auth context */
276 authctxt->pw = PRIVSEP(getpwnamallow(user)); 287 authctxt->pw = PRIVSEP(getpwnamallow(ssh, user));
277 authctxt->user = xstrdup(user); 288 authctxt->user = xstrdup(user);
278 if (authctxt->pw && strcmp(service, "ssh-connection")==0) { 289 if (authctxt->pw && strcmp(service, "ssh-connection")==0) {
279 authctxt->valid = 1; 290 authctxt->valid = 1;
@@ -283,12 +294,12 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
283 /* Invalid user, fake password information */ 294 /* Invalid user, fake password information */
284 authctxt->pw = fakepw(); 295 authctxt->pw = fakepw();
285#ifdef SSH_AUDIT_EVENTS 296#ifdef SSH_AUDIT_EVENTS
286 PRIVSEP(audit_event(SSH_INVALID_USER)); 297 PRIVSEP(audit_event(ssh, SSH_INVALID_USER));
287#endif 298#endif
288 } 299 }
289#ifdef USE_PAM 300#ifdef USE_PAM
290 if (options.use_pam) 301 if (options.use_pam)
291 PRIVSEP(start_pam(authctxt)); 302 PRIVSEP(start_pam(ssh));
292#endif 303#endif
293 ssh_packet_set_log_preamble(ssh, "%suser %s", 304 ssh_packet_set_log_preamble(ssh, "%suser %s",
294 authctxt->valid ? "authenticating " : "invalid ", user); 305 authctxt->valid ? "authenticating " : "invalid ", user);
@@ -298,13 +309,14 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
298 authctxt->style = style ? xstrdup(style) : NULL; 309 authctxt->style = style ? xstrdup(style) : NULL;
299 if (use_privsep) 310 if (use_privsep)
300 mm_inform_authserv(service, style); 311 mm_inform_authserv(service, style);
301 userauth_banner(); 312 userauth_banner(ssh);
302 if (auth2_setup_methods_lists(authctxt) != 0) 313 if (auth2_setup_methods_lists(authctxt) != 0)
303 packet_disconnect("no authentication methods enabled"); 314 ssh_packet_disconnect(ssh,
315 "no authentication methods enabled");
304 } else if (strcmp(user, authctxt->user) != 0 || 316 } else if (strcmp(user, authctxt->user) != 0 ||
305 strcmp(service, authctxt->service) != 0) { 317 strcmp(service, authctxt->service) != 0) {
306 packet_disconnect("Change of username or service not allowed: " 318 ssh_packet_disconnect(ssh, "Change of username or service "
307 "(%s,%s) -> (%s,%s)", 319 "not allowed: (%s,%s) -> (%s,%s)",
308 authctxt->user, authctxt->service, user, service); 320 authctxt->user, authctxt->service, user, service);
309 } 321 }
310 /* reset state */ 322 /* reset state */
@@ -330,11 +342,12 @@ input_userauth_request(int type, u_int32_t seq, struct ssh *ssh)
330 ensure_minimum_time_since(tstart, 342 ensure_minimum_time_since(tstart,
331 user_specific_delay(authctxt->user)); 343 user_specific_delay(authctxt->user));
332 userauth_finish(ssh, authenticated, method, NULL); 344 userauth_finish(ssh, authenticated, method, NULL);
333 345 r = 0;
346 out:
334 free(service); 347 free(service);
335 free(user); 348 free(user);
336 free(method); 349 free(method);
337 return 0; 350 return r;
338} 351}
339 352
340void 353void
@@ -343,7 +356,7 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
343{ 356{
344 Authctxt *authctxt = ssh->authctxt; 357 Authctxt *authctxt = ssh->authctxt;
345 char *methods; 358 char *methods;
346 int partial = 0; 359 int r, partial = 0;
347 360
348 if (!authctxt->valid && authenticated) 361 if (!authctxt->valid && authenticated)
349 fatal("INTERNAL ERROR: authenticated invalid user %s", 362 fatal("INTERNAL ERROR: authenticated invalid user %s",
@@ -356,7 +369,7 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
356 !auth_root_allowed(ssh, method)) { 369 !auth_root_allowed(ssh, method)) {
357 authenticated = 0; 370 authenticated = 0;
358#ifdef SSH_AUDIT_EVENTS 371#ifdef SSH_AUDIT_EVENTS
359 PRIVSEP(audit_event(SSH_LOGIN_ROOT_DENIED)); 372 PRIVSEP(audit_event(ssh, SSH_LOGIN_ROOT_DENIED));
360#endif 373#endif
361 } 374 }
362 375
@@ -368,7 +381,7 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
368 } 381 }
369 382
370 /* Log before sending the reply */ 383 /* Log before sending the reply */
371 auth_log(authctxt, authenticated, partial, method, submethod); 384 auth_log(ssh, authenticated, partial, method, submethod);
372 385
373 /* Update information exposed to session */ 386 /* Update information exposed to session */
374 if (authenticated || partial) 387 if (authenticated || partial)
@@ -387,8 +400,11 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
387 if ((r = sshbuf_put(loginmsg, "\0", 1)) != 0) 400 if ((r = sshbuf_put(loginmsg, "\0", 1)) != 0)
388 fatal("%s: buffer error: %s", 401 fatal("%s: buffer error: %s",
389 __func__, ssh_err(r)); 402 __func__, ssh_err(r));
390 userauth_send_banner(sshbuf_ptr(loginmsg)); 403 userauth_send_banner(ssh, sshbuf_ptr(loginmsg));
391 packet_write_wait(); 404 if ((r = ssh_packet_write_wait(ssh)) != 0) {
405 sshpkt_fatal(ssh, r,
406 "%s: send PAM banner", __func__);
407 }
392 } 408 }
393 fatal("Access denied for user %s by PAM account " 409 fatal("Access denied for user %s by PAM account "
394 "configuration", authctxt->user); 410 "configuration", authctxt->user);
@@ -398,10 +414,12 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
398 414
399 if (authenticated == 1) { 415 if (authenticated == 1) {
400 /* turn off userauth */ 416 /* turn off userauth */
401 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST, &dispatch_protocol_ignore); 417 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST,
402 packet_start(SSH2_MSG_USERAUTH_SUCCESS); 418 &dispatch_protocol_ignore);
403 packet_send(); 419 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_SUCCESS)) != 0 ||
404 packet_write_wait(); 420 (r = sshpkt_send(ssh)) != 0 ||
421 (r = ssh_packet_write_wait(ssh)) != 0)
422 fatal("%s: %s", __func__, ssh_err(r));
405 /* now we can break out */ 423 /* now we can break out */
406 authctxt->success = 1; 424 authctxt->success = 1;
407 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); 425 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user);
@@ -412,18 +430,19 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
412 authctxt->failures++; 430 authctxt->failures++;
413 if (authctxt->failures >= options.max_authtries) { 431 if (authctxt->failures >= options.max_authtries) {
414#ifdef SSH_AUDIT_EVENTS 432#ifdef SSH_AUDIT_EVENTS
415 PRIVSEP(audit_event(SSH_LOGIN_EXCEED_MAXTRIES)); 433 PRIVSEP(audit_event(ssh, SSH_LOGIN_EXCEED_MAXTRIES));
416#endif 434#endif
417 auth_maxtries_exceeded(authctxt); 435 auth_maxtries_exceeded(ssh);
418 } 436 }
419 methods = authmethods_get(authctxt); 437 methods = authmethods_get(authctxt);
420 debug3("%s: failure partial=%d next methods=\"%s\"", __func__, 438 debug3("%s: failure partial=%d next methods=\"%s\"", __func__,
421 partial, methods); 439 partial, methods);
422 packet_start(SSH2_MSG_USERAUTH_FAILURE); 440 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_FAILURE)) != 0 ||
423 packet_put_cstring(methods); 441 (r = sshpkt_put_cstring(ssh, methods)) != 0 ||
424 packet_put_char(partial); 442 (r = sshpkt_put_u8(ssh, partial)) != 0 ||
425 packet_send(); 443 (r = sshpkt_send(ssh)) != 0 ||
426 packet_write_wait(); 444 (r = ssh_packet_write_wait(ssh)) != 0)
445 fatal("%s: %s", __func__, ssh_err(r));
427 free(methods); 446 free(methods);
428 } 447 }
429} 448}
@@ -558,6 +577,14 @@ auth2_setup_methods_lists(Authctxt *authctxt)
558{ 577{
559 u_int i; 578 u_int i;
560 579
580 /* First, normalise away the "any" pseudo-method */
581 if (options.num_auth_methods == 1 &&
582 strcmp(options.auth_methods[0], "any") == 0) {
583 free(options.auth_methods[0]);
584 options.auth_methods[0] = NULL;
585 options.num_auth_methods = 0;
586 }
587
561 if (options.num_auth_methods == 0) 588 if (options.num_auth_methods == 0)
562 return 0; 589 return 0;
563 debug3("%s: checking methods", __func__); 590 debug3("%s: checking methods", __func__);
diff --git a/authfd.c b/authfd.c
index ecdd869ab..95348abfc 100644
--- a/authfd.c
+++ b/authfd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfd.c,v 1.111 2018/07/09 21:59:10 markus Exp $ */ 1/* $OpenBSD: authfd.c,v 1.113 2018/12/27 23:02:11 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -94,7 +94,7 @@ ssh_get_authentication_socket(int *fdp)
94 *fdp = -1; 94 *fdp = -1;
95 95
96 authsocket = getenv(SSH_AUTHSOCKET_ENV_NAME); 96 authsocket = getenv(SSH_AUTHSOCKET_ENV_NAME);
97 if (!authsocket) 97 if (authsocket == NULL || *authsocket == '\0')
98 return SSH_ERR_AGENT_NOT_PRESENT; 98 return SSH_ERR_AGENT_NOT_PRESENT;
99 99
100 memset(&sunaddr, 0, sizeof(sunaddr)); 100 memset(&sunaddr, 0, sizeof(sunaddr));
@@ -327,10 +327,12 @@ ssh_free_identitylist(struct ssh_identitylist *idl)
327static u_int 327static u_int
328agent_encode_alg(const struct sshkey *key, const char *alg) 328agent_encode_alg(const struct sshkey *key, const char *alg)
329{ 329{
330 if (alg != NULL && key->type == KEY_RSA) { 330 if (alg != NULL && sshkey_type_plain(key->type) == KEY_RSA) {
331 if (strcmp(alg, "rsa-sha2-256") == 0) 331 if (strcmp(alg, "rsa-sha2-256") == 0 ||
332 strcmp(alg, "rsa-sha2-256-cert-v01@openssh.com") == 0)
332 return SSH_AGENT_RSA_SHA2_256; 333 return SSH_AGENT_RSA_SHA2_256;
333 else if (strcmp(alg, "rsa-sha2-512") == 0) 334 if (strcmp(alg, "rsa-sha2-512") == 0 ||
335 strcmp(alg, "rsa-sha2-512-cert-v01@openssh.com") == 0)
334 return SSH_AGENT_RSA_SHA2_512; 336 return SSH_AGENT_RSA_SHA2_512;
335 } 337 }
336 return 0; 338 return 0;
diff --git a/channels.c b/channels.c
index c85d46abd..657381b80 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: channels.c,v 1.386 2018/10/04 01:04:52 djm Exp $ */ 1/* $OpenBSD: channels.c,v 1.389 2019/01/19 21:37:13 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -227,11 +227,7 @@ channel_init_channels(struct ssh *ssh)
227{ 227{
228 struct ssh_channels *sc; 228 struct ssh_channels *sc;
229 229
230 if ((sc = calloc(1, sizeof(*sc))) == NULL || 230 if ((sc = calloc(1, sizeof(*sc))) == NULL)
231 (sc->channel_pre = calloc(SSH_CHANNEL_MAX_TYPE,
232 sizeof(*sc->channel_pre))) == NULL ||
233 (sc->channel_post = calloc(SSH_CHANNEL_MAX_TYPE,
234 sizeof(*sc->channel_post))) == NULL)
235 fatal("%s: allocation failed", __func__); 231 fatal("%s: allocation failed", __func__);
236 sc->channels_alloc = 10; 232 sc->channels_alloc = 10;
237 sc->channels = xcalloc(sc->channels_alloc, sizeof(*sc->channels)); 233 sc->channels = xcalloc(sc->channels_alloc, sizeof(*sc->channels));
@@ -2104,16 +2100,18 @@ channel_handle_efd_read(struct ssh *ssh, Channel *c,
2104 fd_set *readset, fd_set *writeset) 2100 fd_set *readset, fd_set *writeset)
2105{ 2101{
2106 char buf[CHAN_RBUF]; 2102 char buf[CHAN_RBUF];
2107 int r;
2108 ssize_t len; 2103 ssize_t len;
2104 int r, force;
2105
2106 force = c->isatty && c->detach_close && c->istate != CHAN_INPUT_CLOSED;
2109 2107
2110 if (!c->detach_close && !FD_ISSET(c->efd, readset)) 2108 if (c->efd == -1 || (!force && !FD_ISSET(c->efd, readset)))
2111 return 1; 2109 return 1;
2112 2110
2113 len = read(c->efd, buf, sizeof(buf)); 2111 len = read(c->efd, buf, sizeof(buf));
2114 debug2("channel %d: read %zd from efd %d", c->self, len, c->efd); 2112 debug2("channel %d: read %zd from efd %d", c->self, len, c->efd);
2115 if (len < 0 && (errno == EINTR || ((errno == EAGAIN || 2113 if (len < 0 && (errno == EINTR || ((errno == EAGAIN ||
2116 errno == EWOULDBLOCK) && !c->detach_close))) 2114 errno == EWOULDBLOCK) && !force)))
2117 return 1; 2115 return 1;
2118 if (len <= 0) { 2116 if (len <= 0) {
2119 debug2("channel %d: closing read-efd %d", 2117 debug2("channel %d: closing read-efd %d",
@@ -2995,10 +2993,10 @@ channel_input_data(int type, u_int32_t seq, struct ssh *ssh)
2995 return 0; 2993 return 0;
2996 2994
2997 /* Get the data. */ 2995 /* Get the data. */
2998 if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0) 2996 if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0 ||
2997 (r = sshpkt_get_end(ssh)) != 0)
2999 fatal("%s: channel %d: get data: %s", __func__, 2998 fatal("%s: channel %d: get data: %s", __func__,
3000 c->self, ssh_err(r)); 2999 c->self, ssh_err(r));
3001 ssh_packet_check_eom(ssh);
3002 3000
3003 win_len = data_len; 3001 win_len = data_len;
3004 if (c->datagram) 3002 if (c->datagram)
@@ -3072,11 +3070,11 @@ channel_input_extended_data(int type, u_int32_t seq, struct ssh *ssh)
3072 logit("channel %d: bad ext data", c->self); 3070 logit("channel %d: bad ext data", c->self);
3073 return 0; 3071 return 0;
3074 } 3072 }
3075 if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0) { 3073 if ((r = sshpkt_get_string_direct(ssh, &data, &data_len)) != 0 ||
3074 (r = sshpkt_get_end(ssh)) != 0) {
3076 error("%s: parse data: %s", __func__, ssh_err(r)); 3075 error("%s: parse data: %s", __func__, ssh_err(r));
3077 ssh_packet_disconnect(ssh, "Invalid extended_data message"); 3076 ssh_packet_disconnect(ssh, "Invalid extended_data message");
3078 } 3077 }
3079 ssh_packet_check_eom(ssh);
3080 3078
3081 if (data_len > c->local_window) { 3079 if (data_len > c->local_window) {
3082 logit("channel %d: rcvd too much extended_data %zu, win %u", 3080 logit("channel %d: rcvd too much extended_data %zu, win %u",
@@ -3095,8 +3093,12 @@ int
3095channel_input_ieof(int type, u_int32_t seq, struct ssh *ssh) 3093channel_input_ieof(int type, u_int32_t seq, struct ssh *ssh)
3096{ 3094{
3097 Channel *c = channel_from_packet_id(ssh, __func__, "ieof"); 3095 Channel *c = channel_from_packet_id(ssh, __func__, "ieof");
3096 int r;
3098 3097
3099 ssh_packet_check_eom(ssh); 3098 if ((r = sshpkt_get_end(ssh)) != 0) {
3099 error("%s: parse data: %s", __func__, ssh_err(r));
3100 ssh_packet_disconnect(ssh, "Invalid ieof message");
3101 }
3100 3102
3101 if (channel_proxy_upstream(c, type, seq, ssh)) 3103 if (channel_proxy_upstream(c, type, seq, ssh))
3102 return 0; 3104 return 0;
@@ -3116,10 +3118,14 @@ int
3116channel_input_oclose(int type, u_int32_t seq, struct ssh *ssh) 3118channel_input_oclose(int type, u_int32_t seq, struct ssh *ssh)
3117{ 3119{
3118 Channel *c = channel_from_packet_id(ssh, __func__, "oclose"); 3120 Channel *c = channel_from_packet_id(ssh, __func__, "oclose");
3121 int r;
3119 3122
3120 if (channel_proxy_upstream(c, type, seq, ssh)) 3123 if (channel_proxy_upstream(c, type, seq, ssh))
3121 return 0; 3124 return 0;
3122 ssh_packet_check_eom(ssh); 3125 if ((r = sshpkt_get_end(ssh)) != 0) {
3126 error("%s: parse data: %s", __func__, ssh_err(r));
3127 ssh_packet_disconnect(ssh, "Invalid oclose message");
3128 }
3123 chan_rcvd_oclose(ssh, c); 3129 chan_rcvd_oclose(ssh, c);
3124 return 0; 3130 return 0;
3125} 3131}
@@ -3134,7 +3140,7 @@ channel_input_open_confirmation(int type, u_int32_t seq, struct ssh *ssh)
3134 if (channel_proxy_upstream(c, type, seq, ssh)) 3140 if (channel_proxy_upstream(c, type, seq, ssh))
3135 return 0; 3141 return 0;
3136 if (c->type != SSH_CHANNEL_OPENING) 3142 if (c->type != SSH_CHANNEL_OPENING)
3137 packet_disconnect("Received open confirmation for " 3143 ssh_packet_disconnect(ssh, "Received open confirmation for "
3138 "non-opening channel %d.", c->self); 3144 "non-opening channel %d.", c->self);
3139 /* 3145 /*
3140 * Record the remote channel number and mark that the channel 3146 * Record the remote channel number and mark that the channel
@@ -3142,11 +3148,11 @@ channel_input_open_confirmation(int type, u_int32_t seq, struct ssh *ssh)
3142 */ 3148 */
3143 if ((r = sshpkt_get_u32(ssh, &c->remote_id)) != 0 || 3149 if ((r = sshpkt_get_u32(ssh, &c->remote_id)) != 0 ||
3144 (r = sshpkt_get_u32(ssh, &remote_window)) != 0 || 3150 (r = sshpkt_get_u32(ssh, &remote_window)) != 0 ||
3145 (r = sshpkt_get_u32(ssh, &remote_maxpacket)) != 0) { 3151 (r = sshpkt_get_u32(ssh, &remote_maxpacket)) != 0 ||
3152 (r = sshpkt_get_end(ssh)) != 0) {
3146 error("%s: window/maxpacket: %s", __func__, ssh_err(r)); 3153 error("%s: window/maxpacket: %s", __func__, ssh_err(r));
3147 packet_disconnect("Invalid open confirmation message"); 3154 ssh_packet_disconnect(ssh, "Invalid open confirmation message");
3148 } 3155 }
3149 ssh_packet_check_eom(ssh);
3150 3156
3151 c->have_remote_id = 1; 3157 c->have_remote_id = 1;
3152 c->remote_window = remote_window; 3158 c->remote_window = remote_window;
@@ -3189,19 +3195,19 @@ channel_input_open_failure(int type, u_int32_t seq, struct ssh *ssh)
3189 if (channel_proxy_upstream(c, type, seq, ssh)) 3195 if (channel_proxy_upstream(c, type, seq, ssh))
3190 return 0; 3196 return 0;
3191 if (c->type != SSH_CHANNEL_OPENING) 3197 if (c->type != SSH_CHANNEL_OPENING)
3192 packet_disconnect("Received open failure for " 3198 ssh_packet_disconnect(ssh, "Received open failure for "
3193 "non-opening channel %d.", c->self); 3199 "non-opening channel %d.", c->self);
3194 if ((r = sshpkt_get_u32(ssh, &reason)) != 0) { 3200 if ((r = sshpkt_get_u32(ssh, &reason)) != 0) {
3195 error("%s: reason: %s", __func__, ssh_err(r)); 3201 error("%s: reason: %s", __func__, ssh_err(r));
3196 packet_disconnect("Invalid open failure message"); 3202 ssh_packet_disconnect(ssh, "Invalid open failure message");
3197 } 3203 }
3198 /* skip language */ 3204 /* skip language */
3199 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 || 3205 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 ||
3200 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0) { 3206 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0 ||
3207 (r = sshpkt_get_end(ssh)) != 0) {
3201 error("%s: message/lang: %s", __func__, ssh_err(r)); 3208 error("%s: message/lang: %s", __func__, ssh_err(r));
3202 packet_disconnect("Invalid open failure message"); 3209 ssh_packet_disconnect(ssh, "Invalid open failure message");
3203 } 3210 }
3204 ssh_packet_check_eom(ssh);
3205 logit("channel %d: open failed: %s%s%s", c->self, 3211 logit("channel %d: open failed: %s%s%s", c->self,
3206 reason2txt(reason), msg ? ": ": "", msg ? msg : ""); 3212 reason2txt(reason), msg ? ": ": "", msg ? msg : "");
3207 free(msg); 3213 free(msg);
@@ -3231,11 +3237,11 @@ channel_input_window_adjust(int type, u_int32_t seq, struct ssh *ssh)
3231 3237
3232 if (channel_proxy_upstream(c, type, seq, ssh)) 3238 if (channel_proxy_upstream(c, type, seq, ssh))
3233 return 0; 3239 return 0;
3234 if ((r = sshpkt_get_u32(ssh, &adjust)) != 0) { 3240 if ((r = sshpkt_get_u32(ssh, &adjust)) != 0 ||
3241 (r = sshpkt_get_end(ssh)) != 0) {
3235 error("%s: adjust: %s", __func__, ssh_err(r)); 3242 error("%s: adjust: %s", __func__, ssh_err(r));
3236 packet_disconnect("Invalid window adjust message"); 3243 ssh_packet_disconnect(ssh, "Invalid window adjust message");
3237 } 3244 }
3238 ssh_packet_check_eom(ssh);
3239 debug2("channel %d: rcvd adjust %u", c->self, adjust); 3245 debug2("channel %d: rcvd adjust %u", c->self, adjust);
3240 if ((new_rwin = c->remote_window + adjust) < c->remote_window) { 3246 if ((new_rwin = c->remote_window + adjust) < c->remote_window) {
3241 fatal("channel %d: adjust %u overflows remote window %u", 3247 fatal("channel %d: adjust %u overflows remote window %u",
@@ -3251,9 +3257,10 @@ channel_input_status_confirm(int type, u_int32_t seq, struct ssh *ssh)
3251 int id = channel_parse_id(ssh, __func__, "status confirm"); 3257 int id = channel_parse_id(ssh, __func__, "status confirm");
3252 Channel *c; 3258 Channel *c;
3253 struct channel_confirm *cc; 3259 struct channel_confirm *cc;
3260 int r;
3254 3261
3255 /* Reset keepalive timeout */ 3262 /* Reset keepalive timeout */
3256 packet_set_alive_timeouts(0); 3263 ssh_packet_set_alive_timeouts(ssh, 0);
3257 3264
3258 debug2("%s: type %d id %d", __func__, type, id); 3265 debug2("%s: type %d id %d", __func__, type, id);
3259 3266
@@ -3263,7 +3270,8 @@ channel_input_status_confirm(int type, u_int32_t seq, struct ssh *ssh)
3263 } 3270 }
3264 if (channel_proxy_upstream(c, type, seq, ssh)) 3271 if (channel_proxy_upstream(c, type, seq, ssh))
3265 return 0; 3272 return 0;
3266 ssh_packet_check_eom(ssh); 3273 if ((r = sshpkt_get_end(ssh)) != 0)
3274 ssh_packet_disconnect(ssh, "Invalid status confirm message");
3267 if ((cc = TAILQ_FIRST(&c->status_confirms)) == NULL) 3275 if ((cc = TAILQ_FIRST(&c->status_confirms)) == NULL)
3268 return 0; 3276 return 0;
3269 cc->cb(ssh, type, c, cc->ctx); 3277 cc->cb(ssh, type, c, cc->ctx);
@@ -3298,7 +3306,7 @@ channel_set_af(struct ssh *ssh, int af)
3298 * "127.0.0.1" / "::1" -> accepted even if gateway_ports isn't set 3306 * "127.0.0.1" / "::1" -> accepted even if gateway_ports isn't set
3299 */ 3307 */
3300static const char * 3308static const char *
3301channel_fwd_bind_addr(const char *listen_addr, int *wildcardp, 3309channel_fwd_bind_addr(struct ssh *ssh, const char *listen_addr, int *wildcardp,
3302 int is_client, struct ForwardOptions *fwd_opts) 3310 int is_client, struct ForwardOptions *fwd_opts)
3303{ 3311{
3304 const char *addr = NULL; 3312 const char *addr = NULL;
@@ -3321,7 +3329,8 @@ channel_fwd_bind_addr(const char *listen_addr, int *wildcardp,
3321 if (*listen_addr != '\0' && 3329 if (*listen_addr != '\0' &&
3322 strcmp(listen_addr, "0.0.0.0") != 0 && 3330 strcmp(listen_addr, "0.0.0.0") != 0 &&
3323 strcmp(listen_addr, "*") != 0) { 3331 strcmp(listen_addr, "*") != 0) {
3324 packet_send_debug("Forwarding listen address " 3332 ssh_packet_send_debug(ssh,
3333 "Forwarding listen address "
3325 "\"%s\" overridden by server " 3334 "\"%s\" overridden by server "
3326 "GatewayPorts", listen_addr); 3335 "GatewayPorts", listen_addr);
3327 } 3336 }
@@ -3375,7 +3384,7 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3375 } 3384 }
3376 3385
3377 /* Determine the bind address, cf. channel_fwd_bind_addr() comment */ 3386 /* Determine the bind address, cf. channel_fwd_bind_addr() comment */
3378 addr = channel_fwd_bind_addr(fwd->listen_host, &wildcard, 3387 addr = channel_fwd_bind_addr(ssh, fwd->listen_host, &wildcard,
3379 is_client, fwd_opts); 3388 is_client, fwd_opts);
3380 debug3("%s: type %d wildcard %d addr %s", __func__, 3389 debug3("%s: type %d wildcard %d addr %s", __func__,
3381 type, wildcard, (addr == NULL) ? "NULL" : addr); 3390 type, wildcard, (addr == NULL) ? "NULL" : addr);
@@ -3392,7 +3401,7 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3392 if ((r = getaddrinfo(addr, strport, &hints, &aitop)) != 0) { 3401 if ((r = getaddrinfo(addr, strport, &hints, &aitop)) != 0) {
3393 if (addr == NULL) { 3402 if (addr == NULL) {
3394 /* This really shouldn't happen */ 3403 /* This really shouldn't happen */
3395 packet_disconnect("getaddrinfo: fatal error: %s", 3404 ssh_packet_disconnect(ssh, "getaddrinfo: fatal error: %s",
3396 ssh_gai_strerror(r)); 3405 ssh_gai_strerror(r));
3397 } else { 3406 } else {
3398 error("%s: getaddrinfo(%.64s): %s", __func__, addr, 3407 error("%s: getaddrinfo(%.64s): %s", __func__, addr,
@@ -3641,7 +3650,7 @@ channel_cancel_lport_listener_tcpip(struct ssh *ssh,
3641{ 3650{
3642 u_int i; 3651 u_int i;
3643 int found = 0; 3652 int found = 0;
3644 const char *addr = channel_fwd_bind_addr(lhost, NULL, 1, fwd_opts); 3653 const char *addr = channel_fwd_bind_addr(ssh, lhost, NULL, 1, fwd_opts);
3645 3654
3646 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) { 3655 for (i = 0; i < ssh->chanctxt->channels_alloc; i++) {
3647 Channel *c = ssh->chanctxt->channels[i]; 3656 Channel *c = ssh->chanctxt->channels[i];
@@ -3793,7 +3802,7 @@ channel_setup_remote_fwd_listener(struct ssh *ssh, struct Forward *fwd,
3793 int *allocated_listen_port, struct ForwardOptions *fwd_opts) 3802 int *allocated_listen_port, struct ForwardOptions *fwd_opts)
3794{ 3803{
3795 if (!check_rfwd_permission(ssh, fwd)) { 3804 if (!check_rfwd_permission(ssh, fwd)) {
3796 packet_send_debug("port forwarding refused"); 3805 ssh_packet_send_debug(ssh, "port forwarding refused");
3797 return 0; 3806 return 0;
3798 } 3807 }
3799 if (fwd->listen_path != NULL) { 3808 if (fwd->listen_path != NULL) {
diff --git a/clientloop.c b/clientloop.c
index 8d312cdaa..086c0dfe8 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: clientloop.c,v 1.318 2018/09/21 12:46:22 djm Exp $ */ 1/* $OpenBSD: clientloop.c,v 1.322 2019/03/29 11:31:40 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -160,7 +160,7 @@ static int need_rekeying; /* Set to non-zero if rekeying is requested. */
160static int session_closed; /* In SSH2: login session closed. */ 160static int session_closed; /* In SSH2: login session closed. */
161static u_int x11_refuse_time; /* If >0, refuse x11 opens after this time. */ 161static u_int x11_refuse_time; /* If >0, refuse x11 opens after this time. */
162 162
163static void client_init_dispatch(void); 163static void client_init_dispatch(struct ssh *ssh);
164int session_ident = -1; 164int session_ident = -1;
165 165
166/* Track escape per proto2 channel */ 166/* Track escape per proto2 channel */
@@ -364,7 +364,7 @@ client_x11_get_proto(struct ssh *ssh, const char *display,
364 SSH_X11_PROTO, x11_timeout_real, 364 SSH_X11_PROTO, x11_timeout_real,
365 _PATH_DEVNULL); 365 _PATH_DEVNULL);
366 } 366 }
367 debug2("%s: %s", __func__, cmd); 367 debug2("%s: xauth command: %s", __func__, cmd);
368 368
369 if (timeout != 0 && x11_refuse_time == 0) { 369 if (timeout != 0 && x11_refuse_time == 0) {
370 now = monotime() + 1; 370 now = monotime() + 1;
@@ -475,21 +475,24 @@ client_global_request_reply(int type, u_int32_t seq, struct ssh *ssh)
475 free(gc); 475 free(gc);
476 } 476 }
477 477
478 packet_set_alive_timeouts(0); 478 ssh_packet_set_alive_timeouts(ssh, 0);
479 return 0; 479 return 0;
480} 480}
481 481
482static void 482static void
483server_alive_check(void) 483server_alive_check(struct ssh *ssh)
484{ 484{
485 if (packet_inc_alive_timeouts() > options.server_alive_count_max) { 485 int r;
486
487 if (ssh_packet_inc_alive_timeouts(ssh) > options.server_alive_count_max) {
486 logit("Timeout, server %s not responding.", host); 488 logit("Timeout, server %s not responding.", host);
487 cleanup_exit(255); 489 cleanup_exit(255);
488 } 490 }
489 packet_start(SSH2_MSG_GLOBAL_REQUEST); 491 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 ||
490 packet_put_cstring("keepalive@openssh.com"); 492 (r = sshpkt_put_cstring(ssh, "keepalive@openssh.com")) != 0 ||
491 packet_put_char(1); /* boolean: want reply */ 493 (r = sshpkt_put_u8(ssh, 1)) != 0 || /* boolean: want reply */
492 packet_send(); 494 (r = sshpkt_send(ssh)) != 0)
495 fatal("%s: send packet: %s", __func__, ssh_err(r));
493 /* Insert an empty placeholder to maintain ordering */ 496 /* Insert an empty placeholder to maintain ordering */
494 client_register_global_confirm(NULL, NULL); 497 client_register_global_confirm(NULL, NULL);
495} 498}
@@ -509,12 +512,12 @@ client_wait_until_can_do_something(struct ssh *ssh,
509 int r, ret; 512 int r, ret;
510 513
511 /* Add any selections by the channel mechanism. */ 514 /* Add any selections by the channel mechanism. */
512 channel_prepare_select(active_state, readsetp, writesetp, maxfdp, 515 channel_prepare_select(ssh, readsetp, writesetp, maxfdp,
513 nallocp, &minwait_secs); 516 nallocp, &minwait_secs);
514 517
515 /* channel_prepare_select could have closed the last channel */ 518 /* channel_prepare_select could have closed the last channel */
516 if (session_closed && !channel_still_open(ssh) && 519 if (session_closed && !channel_still_open(ssh) &&
517 !packet_have_data_to_write()) { 520 !ssh_packet_have_data_to_write(ssh)) {
518 /* clear mask since we did not call select() */ 521 /* clear mask since we did not call select() */
519 memset(*readsetp, 0, *nallocp); 522 memset(*readsetp, 0, *nallocp);
520 memset(*writesetp, 0, *nallocp); 523 memset(*writesetp, 0, *nallocp);
@@ -524,7 +527,7 @@ client_wait_until_can_do_something(struct ssh *ssh,
524 FD_SET(connection_in, *readsetp); 527 FD_SET(connection_in, *readsetp);
525 528
526 /* Select server connection if have data to write to the server. */ 529 /* Select server connection if have data to write to the server. */
527 if (packet_have_data_to_write()) 530 if (ssh_packet_have_data_to_write(ssh))
528 FD_SET(connection_out, *writesetp); 531 FD_SET(connection_out, *writesetp);
529 532
530 /* 533 /*
@@ -539,7 +542,8 @@ client_wait_until_can_do_something(struct ssh *ssh,
539 server_alive_time = now + options.server_alive_interval; 542 server_alive_time = now + options.server_alive_interval;
540 } 543 }
541 if (options.rekey_interval > 0 && !rekeying) 544 if (options.rekey_interval > 0 && !rekeying)
542 timeout_secs = MINIMUM(timeout_secs, packet_get_rekey_timeout()); 545 timeout_secs = MINIMUM(timeout_secs,
546 ssh_packet_get_rekey_timeout(ssh));
543 set_control_persist_exit_time(ssh); 547 set_control_persist_exit_time(ssh);
544 if (control_persist_exit_time > 0) { 548 if (control_persist_exit_time > 0) {
545 timeout_secs = MINIMUM(timeout_secs, 549 timeout_secs = MINIMUM(timeout_secs,
@@ -580,7 +584,7 @@ client_wait_until_can_do_something(struct ssh *ssh,
580 * Keepalive we check here, rekeying is checked in clientloop. 584 * Keepalive we check here, rekeying is checked in clientloop.
581 */ 585 */
582 if (server_alive_time != 0 && server_alive_time <= monotime()) 586 if (server_alive_time != 0 && server_alive_time <= monotime())
583 server_alive_check(); 587 server_alive_check(ssh);
584 } 588 }
585 589
586} 590}
@@ -612,7 +616,7 @@ client_suspend_self(struct sshbuf *bin, struct sshbuf *bout, struct sshbuf *berr
612} 616}
613 617
614static void 618static void
615client_process_net_input(fd_set *readset) 619client_process_net_input(struct ssh *ssh, fd_set *readset)
616{ 620{
617 char buf[SSH_IOBUFSZ]; 621 char buf[SSH_IOBUFSZ];
618 int r, len; 622 int r, len;
@@ -658,7 +662,7 @@ client_process_net_input(fd_set *readset)
658 quit_pending = 1; 662 quit_pending = 1;
659 return; 663 return;
660 } 664 }
661 packet_process_incoming(buf, len); 665 ssh_packet_process_incoming(ssh, buf, len);
662 } 666 }
663} 667}
664 668
@@ -1031,7 +1035,7 @@ process_escapes(struct ssh *ssh, Channel *c,
1031 channel_request_start(ssh, c->self, "break", 0); 1035 channel_request_start(ssh, c->self, "break", 0);
1032 if ((r = sshpkt_put_u32(ssh, 1000)) != 0 || 1036 if ((r = sshpkt_put_u32(ssh, 1000)) != 0 ||
1033 (r = sshpkt_send(ssh)) != 0) 1037 (r = sshpkt_send(ssh)) != 0)
1034 fatal("%s: %s", __func__, 1038 fatal("%s: send packet: %s", __func__,
1035 ssh_err(r)); 1039 ssh_err(r));
1036 continue; 1040 continue;
1037 1041
@@ -1182,9 +1186,9 @@ process_escapes(struct ssh *ssh, Channel *c,
1182 */ 1186 */
1183 1187
1184static void 1188static void
1185client_process_buffered_input_packets(void) 1189client_process_buffered_input_packets(struct ssh *ssh)
1186{ 1190{
1187 ssh_dispatch_run_fatal(active_state, DISPATCH_NONBLOCK, &quit_pending); 1191 ssh_dispatch_run_fatal(ssh, DISPATCH_NONBLOCK, &quit_pending);
1188} 1192}
1189 1193
1190/* scan buf[] for '~' before sending data to the peer */ 1194/* scan buf[] for '~' before sending data to the peer */
@@ -1281,8 +1285,8 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1281 /* Initialize variables. */ 1285 /* Initialize variables. */
1282 last_was_cr = 1; 1286 last_was_cr = 1;
1283 exit_status = -1; 1287 exit_status = -1;
1284 connection_in = packet_get_connection_in(); 1288 connection_in = ssh_packet_get_connection_in(ssh);
1285 connection_out = packet_get_connection_out(); 1289 connection_out = ssh_packet_get_connection_out(ssh);
1286 max_fd = MAXIMUM(connection_in, connection_out); 1290 max_fd = MAXIMUM(connection_in, connection_out);
1287 1291
1288 quit_pending = 0; 1292 quit_pending = 0;
@@ -1291,7 +1295,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1291 if ((stderr_buffer = sshbuf_new()) == NULL) 1295 if ((stderr_buffer = sshbuf_new()) == NULL)
1292 fatal("%s: sshbuf_new failed", __func__); 1296 fatal("%s: sshbuf_new failed", __func__);
1293 1297
1294 client_init_dispatch(); 1298 client_init_dispatch(ssh);
1295 1299
1296 /* 1300 /*
1297 * Set signal handlers, (e.g. to restore non-blocking mode) 1301 * Set signal handlers, (e.g. to restore non-blocking mode)
@@ -1327,7 +1331,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1327 while (!quit_pending) { 1331 while (!quit_pending) {
1328 1332
1329 /* Process buffered packets sent by the server. */ 1333 /* Process buffered packets sent by the server. */
1330 client_process_buffered_input_packets(); 1334 client_process_buffered_input_packets(ssh);
1331 1335
1332 if (session_closed && !channel_still_open(ssh)) 1336 if (session_closed && !channel_still_open(ssh))
1333 break; 1337 break;
@@ -1346,7 +1350,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1346 * Make packets from buffered channel data, and 1350 * Make packets from buffered channel data, and
1347 * enqueue them for sending to the server. 1351 * enqueue them for sending to the server.
1348 */ 1352 */
1349 if (packet_not_very_much_data_to_write()) 1353 if (ssh_packet_not_very_much_data_to_write(ssh))
1350 channel_output_poll(ssh); 1354 channel_output_poll(ssh);
1351 1355
1352 /* 1356 /*
@@ -1374,7 +1378,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1374 channel_after_select(ssh, readset, writeset); 1378 channel_after_select(ssh, readset, writeset);
1375 1379
1376 /* Buffer input from the connection. */ 1380 /* Buffer input from the connection. */
1377 client_process_net_input(readset); 1381 client_process_net_input(ssh, readset);
1378 1382
1379 if (quit_pending) 1383 if (quit_pending)
1380 break; 1384 break;
@@ -1384,7 +1388,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1384 * sender. 1388 * sender.
1385 */ 1389 */
1386 if (FD_ISSET(connection_out, writeset)) 1390 if (FD_ISSET(connection_out, writeset))
1387 packet_write_poll(); 1391 ssh_packet_write_poll(ssh);
1388 1392
1389 /* 1393 /*
1390 * If we are a backgrounded control master, and the 1394 * If we are a backgrounded control master, and the
@@ -1406,12 +1410,13 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1406 /* Stop watching for window change. */ 1410 /* Stop watching for window change. */
1407 signal(SIGWINCH, SIG_DFL); 1411 signal(SIGWINCH, SIG_DFL);
1408 1412
1409 packet_start(SSH2_MSG_DISCONNECT); 1413 if ((r = sshpkt_start(ssh, SSH2_MSG_DISCONNECT)) != 0 ||
1410 packet_put_int(SSH2_DISCONNECT_BY_APPLICATION); 1414 (r = sshpkt_put_u32(ssh, SSH2_DISCONNECT_BY_APPLICATION)) != 0 ||
1411 packet_put_cstring("disconnected by user"); 1415 (r = sshpkt_put_cstring(ssh, "disconnected by user")) != 0 ||
1412 packet_put_cstring(""); /* language tag */ 1416 (r = sshpkt_put_cstring(ssh, "")) != 0 || /* language tag */
1413 packet_send(); 1417 (r = sshpkt_send(ssh)) != 0 ||
1414 packet_write_wait(); 1418 (r = ssh_packet_write_wait(ssh)) != 0)
1419 fatal("%s: send disconnect: %s", __func__, ssh_err(r));
1415 1420
1416 channel_free_all(ssh); 1421 channel_free_all(ssh);
1417 1422
@@ -1468,7 +1473,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1468 1473
1469 /* Report bytes transferred, and transfer rates. */ 1474 /* Report bytes transferred, and transfer rates. */
1470 total_time = monotime_double() - start_time; 1475 total_time = monotime_double() - start_time;
1471 packet_get_bytes(&ibytes, &obytes); 1476 ssh_packet_get_bytes(ssh, &ibytes, &obytes);
1472 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds", 1477 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds",
1473 (unsigned long long)obytes, (unsigned long long)ibytes, total_time); 1478 (unsigned long long)obytes, (unsigned long long)ibytes, total_time);
1474 if (total_time > 0) 1479 if (total_time > 0)
@@ -1488,21 +1493,29 @@ client_request_forwarded_tcpip(struct ssh *ssh, const char *request_type,
1488 Channel *c = NULL; 1493 Channel *c = NULL;
1489 struct sshbuf *b = NULL; 1494 struct sshbuf *b = NULL;
1490 char *listen_address, *originator_address; 1495 char *listen_address, *originator_address;
1491 u_short listen_port, originator_port; 1496 u_int listen_port, originator_port;
1492 int r; 1497 int r;
1493 1498
1494 /* Get rest of the packet */ 1499 /* Get rest of the packet */
1495 listen_address = packet_get_string(NULL); 1500 if ((r = sshpkt_get_cstring(ssh, &listen_address, NULL)) != 0 ||
1496 listen_port = packet_get_int(); 1501 (r = sshpkt_get_u32(ssh, &listen_port)) != 0 ||
1497 originator_address = packet_get_string(NULL); 1502 (r = sshpkt_get_cstring(ssh, &originator_address, NULL)) != 0 ||
1498 originator_port = packet_get_int(); 1503 (r = sshpkt_get_u32(ssh, &originator_port)) != 0 ||
1499 packet_check_eom(); 1504 (r = sshpkt_get_end(ssh)) != 0)
1505 fatal("%s: parse packet: %s", __func__, ssh_err(r));
1500 1506
1501 debug("%s: listen %s port %d, originator %s port %d", __func__, 1507 debug("%s: listen %s port %d, originator %s port %d", __func__,
1502 listen_address, listen_port, originator_address, originator_port); 1508 listen_address, listen_port, originator_address, originator_port);
1503 1509
1504 c = channel_connect_by_listen_address(ssh, listen_address, listen_port, 1510 if (listen_port > 0xffff)
1505 "forwarded-tcpip", originator_address); 1511 error("%s: invalid listen port", __func__);
1512 else if (originator_port > 0xffff)
1513 error("%s: invalid originator port", __func__);
1514 else {
1515 c = channel_connect_by_listen_address(ssh,
1516 listen_address, listen_port, "forwarded-tcpip",
1517 originator_address);
1518 }
1506 1519
1507 if (c != NULL && c->type == SSH_CHANNEL_MUX_CLIENT) { 1520 if (c != NULL && c->type == SSH_CHANNEL_MUX_CLIENT) {
1508 if ((b = sshbuf_new()) == NULL) { 1521 if ((b = sshbuf_new()) == NULL) {
@@ -1540,15 +1553,15 @@ client_request_forwarded_streamlocal(struct ssh *ssh,
1540{ 1553{
1541 Channel *c = NULL; 1554 Channel *c = NULL;
1542 char *listen_path; 1555 char *listen_path;
1556 int r;
1543 1557
1544 /* Get the remote path. */ 1558 /* Get the remote path. */
1545 listen_path = packet_get_string(NULL); 1559 if ((r = sshpkt_get_cstring(ssh, &listen_path, NULL)) != 0 ||
1546 /* XXX: Skip reserved field for now. */ 1560 (r = sshpkt_get_string(ssh, NULL, NULL)) != 0 || /* reserved */
1547 if (packet_get_string_ptr(NULL) == NULL) 1561 (r = sshpkt_get_end(ssh)) != 0)
1548 fatal("%s: packet_get_string_ptr failed", __func__); 1562 fatal("%s: parse packet: %s", __func__, ssh_err(r));
1549 packet_check_eom();
1550 1563
1551 debug("%s: %s", __func__, listen_path); 1564 debug("%s: request: %s", __func__, listen_path);
1552 1565
1553 c = channel_connect_by_listen_path(ssh, listen_path, 1566 c = channel_connect_by_listen_path(ssh, listen_path,
1554 "forwarded-streamlocal@openssh.com", "forwarded-streamlocal"); 1567 "forwarded-streamlocal@openssh.com", "forwarded-streamlocal");
@@ -1561,8 +1574,8 @@ client_request_x11(struct ssh *ssh, const char *request_type, int rchan)
1561{ 1574{
1562 Channel *c = NULL; 1575 Channel *c = NULL;
1563 char *originator; 1576 char *originator;
1564 u_short originator_port; 1577 u_int originator_port;
1565 int sock; 1578 int r, sock;
1566 1579
1567 if (!options.forward_x11) { 1580 if (!options.forward_x11) {
1568 error("Warning: ssh server tried X11 forwarding."); 1581 error("Warning: ssh server tried X11 forwarding.");
@@ -1575,11 +1588,13 @@ client_request_x11(struct ssh *ssh, const char *request_type, int rchan)
1575 "expired"); 1588 "expired");
1576 return NULL; 1589 return NULL;
1577 } 1590 }
1578 originator = packet_get_string(NULL); 1591 if ((r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 ||
1579 originator_port = packet_get_int(); 1592 (r = sshpkt_get_u32(ssh, &originator_port)) != 0 ||
1580 packet_check_eom(); 1593 (r = sshpkt_get_end(ssh)) != 0)
1594 fatal("%s: parse packet: %s", __func__, ssh_err(r));
1581 /* XXX check permission */ 1595 /* XXX check permission */
1582 debug("client_request_x11: request from %s %d", originator, 1596 /* XXX range check originator port? */
1597 debug("client_request_x11: request from %s %u", originator,
1583 originator_port); 1598 originator_port);
1584 free(originator); 1599 free(originator);
1585 sock = x11_connect_display(ssh); 1600 sock = x11_connect_display(ssh);
@@ -1623,7 +1638,7 @@ client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1623 int local_tun, int remote_tun) 1638 int local_tun, int remote_tun)
1624{ 1639{
1625 Channel *c; 1640 Channel *c;
1626 int fd; 1641 int r, fd;
1627 char *ifname = NULL; 1642 char *ifname = NULL;
1628 1643
1629 if (tun_mode == SSH_TUNMODE_NO) 1644 if (tun_mode == SSH_TUNMODE_NO)
@@ -1648,14 +1663,15 @@ client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1648 sys_tun_outfilter, NULL, NULL); 1663 sys_tun_outfilter, NULL, NULL);
1649#endif 1664#endif
1650 1665
1651 packet_start(SSH2_MSG_CHANNEL_OPEN); 1666 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN)) != 0 ||
1652 packet_put_cstring("tun@openssh.com"); 1667 (r = sshpkt_put_cstring(ssh, "tun@openssh.com")) != 0 ||
1653 packet_put_int(c->self); 1668 (r = sshpkt_put_u32(ssh, c->self)) != 0 ||
1654 packet_put_int(c->local_window_max); 1669 (r = sshpkt_put_u32(ssh, c->local_window_max)) != 0 ||
1655 packet_put_int(c->local_maxpacket); 1670 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0 ||
1656 packet_put_int(tun_mode); 1671 (r = sshpkt_put_u32(ssh, tun_mode)) != 0 ||
1657 packet_put_int(remote_tun); 1672 (r = sshpkt_put_u32(ssh, remote_tun)) != 0 ||
1658 packet_send(); 1673 (r = sshpkt_send(ssh)) != 0)
1674 sshpkt_fatal(ssh, r, "%s: send reply", __func__);
1659 1675
1660 return ifname; 1676 return ifname;
1661} 1677}
@@ -1665,14 +1681,17 @@ static int
1665client_input_channel_open(int type, u_int32_t seq, struct ssh *ssh) 1681client_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
1666{ 1682{
1667 Channel *c = NULL; 1683 Channel *c = NULL;
1668 char *ctype; 1684 char *ctype = NULL;
1669 int rchan; 1685 int r;
1670 u_int rmaxpack, rwindow, len; 1686 u_int rchan;
1671 1687 size_t len;
1672 ctype = packet_get_string(&len); 1688 u_int rmaxpack, rwindow;
1673 rchan = packet_get_int(); 1689
1674 rwindow = packet_get_int(); 1690 if ((r = sshpkt_get_cstring(ssh, &ctype, &len)) != 0 ||
1675 rmaxpack = packet_get_int(); 1691 (r = sshpkt_get_u32(ssh, &rchan)) != 0 ||
1692 (r = sshpkt_get_u32(ssh, &rwindow)) != 0 ||
1693 (r = sshpkt_get_u32(ssh, &rmaxpack)) != 0)
1694 goto out;
1676 1695
1677 debug("client_input_channel_open: ctype %s rchan %d win %d max %d", 1696 debug("client_input_channel_open: ctype %s rchan %d win %d max %d",
1678 ctype, rchan, rwindow, rmaxpack); 1697 ctype, rchan, rwindow, rmaxpack);
@@ -1696,57 +1715,66 @@ client_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
1696 c->remote_window = rwindow; 1715 c->remote_window = rwindow;
1697 c->remote_maxpacket = rmaxpack; 1716 c->remote_maxpacket = rmaxpack;
1698 if (c->type != SSH_CHANNEL_CONNECTING) { 1717 if (c->type != SSH_CHANNEL_CONNECTING) {
1699 packet_start(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION); 1718 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION)) != 0 ||
1700 packet_put_int(c->remote_id); 1719 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
1701 packet_put_int(c->self); 1720 (r = sshpkt_put_u32(ssh, c->self)) != 0 ||
1702 packet_put_int(c->local_window); 1721 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 ||
1703 packet_put_int(c->local_maxpacket); 1722 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0 ||
1704 packet_send(); 1723 (r = sshpkt_send(ssh)) != 0)
1724 sshpkt_fatal(ssh, r, "%s: send reply", __func__);
1705 } 1725 }
1706 } else { 1726 } else {
1707 debug("failure %s", ctype); 1727 debug("failure %s", ctype);
1708 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE); 1728 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 ||
1709 packet_put_int(rchan); 1729 (r = sshpkt_put_u32(ssh, rchan)) != 0 ||
1710 packet_put_int(SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED); 1730 (r = sshpkt_put_u32(ssh, SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED)) != 0 ||
1711 packet_put_cstring("open failed"); 1731 (r = sshpkt_put_cstring(ssh, "open failed")) != 0 ||
1712 packet_put_cstring(""); 1732 (r = sshpkt_put_cstring(ssh, "")) != 0 ||
1713 packet_send(); 1733 (r = sshpkt_send(ssh)) != 0)
1734 sshpkt_fatal(ssh, r, "%s: send failure", __func__);
1714 } 1735 }
1736 r = 0;
1737 out:
1715 free(ctype); 1738 free(ctype);
1716 return 0; 1739 return r;
1717} 1740}
1718 1741
1719static int 1742static int
1720client_input_channel_req(int type, u_int32_t seq, struct ssh *ssh) 1743client_input_channel_req(int type, u_int32_t seq, struct ssh *ssh)
1721{ 1744{
1722 Channel *c = NULL; 1745 Channel *c = NULL;
1723 int exitval, id, reply, success = 0; 1746 char *rtype = NULL;
1724 char *rtype; 1747 u_char reply;
1725 1748 u_int id, exitval;
1726 id = packet_get_int(); 1749 int r, success = 0;
1727 c = channel_lookup(ssh, id); 1750
1751 if ((r = sshpkt_get_u32(ssh, &id)) != 0)
1752 return r;
1753 if (id <= INT_MAX)
1754 c = channel_lookup(ssh, id);
1728 if (channel_proxy_upstream(c, type, seq, ssh)) 1755 if (channel_proxy_upstream(c, type, seq, ssh))
1729 return 0; 1756 return 0;
1730 rtype = packet_get_string(NULL); 1757 if ((r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 ||
1731 reply = packet_get_char(); 1758 (r = sshpkt_get_u8(ssh, &reply)) != 0)
1759 goto out;
1732 1760
1733 debug("client_input_channel_req: channel %d rtype %s reply %d", 1761 debug("client_input_channel_req: channel %u rtype %s reply %d",
1734 id, rtype, reply); 1762 id, rtype, reply);
1735 1763
1736 if (id == -1) { 1764 if (c == NULL) {
1737 error("client_input_channel_req: request for channel -1");
1738 } else if (c == NULL) {
1739 error("client_input_channel_req: channel %d: " 1765 error("client_input_channel_req: channel %d: "
1740 "unknown channel", id); 1766 "unknown channel", id);
1741 } else if (strcmp(rtype, "eow@openssh.com") == 0) { 1767 } else if (strcmp(rtype, "eow@openssh.com") == 0) {
1742 packet_check_eom(); 1768 if ((r = sshpkt_get_end(ssh)) != 0)
1769 goto out;
1743 chan_rcvd_eow(ssh, c); 1770 chan_rcvd_eow(ssh, c);
1744 } else if (strcmp(rtype, "exit-status") == 0) { 1771 } else if (strcmp(rtype, "exit-status") == 0) {
1745 exitval = packet_get_int(); 1772 if ((r = sshpkt_get_u32(ssh, &exitval)) != 0)
1773 goto out;
1746 if (c->ctl_chan != -1) { 1774 if (c->ctl_chan != -1) {
1747 mux_exit_message(ssh, c, exitval); 1775 mux_exit_message(ssh, c, exitval);
1748 success = 1; 1776 success = 1;
1749 } else if (id == session_ident) { 1777 } else if ((int)id == session_ident) {
1750 /* Record exit value of local session */ 1778 /* Record exit value of local session */
1751 success = 1; 1779 success = 1;
1752 exit_status = exitval; 1780 exit_status = exitval;
@@ -1755,19 +1783,23 @@ client_input_channel_req(int type, u_int32_t seq, struct ssh *ssh)
1755 debug("%s: no sink for exit-status on channel %d", 1783 debug("%s: no sink for exit-status on channel %d",
1756 __func__, id); 1784 __func__, id);
1757 } 1785 }
1758 packet_check_eom(); 1786 if ((r = sshpkt_get_end(ssh)) != 0)
1787 goto out;
1759 } 1788 }
1760 if (reply && c != NULL && !(c->flags & CHAN_CLOSE_SENT)) { 1789 if (reply && c != NULL && !(c->flags & CHAN_CLOSE_SENT)) {
1761 if (!c->have_remote_id) 1790 if (!c->have_remote_id)
1762 fatal("%s: channel %d: no remote_id", 1791 fatal("%s: channel %d: no remote_id",
1763 __func__, c->self); 1792 __func__, c->self);
1764 packet_start(success ? 1793 if ((r = sshpkt_start(ssh, success ?
1765 SSH2_MSG_CHANNEL_SUCCESS : SSH2_MSG_CHANNEL_FAILURE); 1794 SSH2_MSG_CHANNEL_SUCCESS : SSH2_MSG_CHANNEL_FAILURE)) != 0 ||
1766 packet_put_int(c->remote_id); 1795 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
1767 packet_send(); 1796 (r = sshpkt_send(ssh)) != 0)
1797 sshpkt_fatal(ssh, r, "%s: send failure", __func__);
1768 } 1798 }
1799 r = 0;
1800 out:
1769 free(rtype); 1801 free(rtype);
1770 return 0; 1802 return r;
1771} 1803}
1772 1804
1773struct hostkeys_update_ctx { 1805struct hostkeys_update_ctx {
@@ -1984,7 +2016,10 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1984 if (ndone != ctx->nnew) 2016 if (ndone != ctx->nnew)
1985 fatal("%s: ndone != ctx->nnew (%zu / %zu)", __func__, 2017 fatal("%s: ndone != ctx->nnew (%zu / %zu)", __func__,
1986 ndone, ctx->nnew); /* Shouldn't happen */ 2018 ndone, ctx->nnew); /* Shouldn't happen */
1987 ssh_packet_check_eom(ssh); 2019 if ((r = sshpkt_get_end(ssh)) != 0) {
2020 error("%s: protocol error", __func__);
2021 goto out;
2022 }
1988 2023
1989 /* Make the edits to known_hosts */ 2024 /* Make the edits to known_hosts */
1990 update_known_hosts(ctx); 2025 update_known_hosts(ctx);
@@ -2018,9 +2053,8 @@ key_accepted_by_hostkeyalgs(const struct sshkey *key)
2018 * HostkeyAlgorithms preference before they are accepted. 2053 * HostkeyAlgorithms preference before they are accepted.
2019 */ 2054 */
2020static int 2055static int
2021client_input_hostkeys(void) 2056client_input_hostkeys(struct ssh *ssh)
2022{ 2057{
2023 struct ssh *ssh = active_state; /* XXX */
2024 const u_char *blob = NULL; 2058 const u_char *blob = NULL;
2025 size_t i, len = 0; 2059 size_t i, len = 0;
2026 struct sshbuf *buf = NULL; 2060 struct sshbuf *buf = NULL;
@@ -2171,23 +2205,27 @@ static int
2171client_input_global_request(int type, u_int32_t seq, struct ssh *ssh) 2205client_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
2172{ 2206{
2173 char *rtype; 2207 char *rtype;
2174 int want_reply; 2208 u_char want_reply;
2175 int success = 0; 2209 int r, success = 0;
2176 2210
2177 rtype = packet_get_cstring(NULL); 2211 if ((r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 ||
2178 want_reply = packet_get_char(); 2212 (r = sshpkt_get_u8(ssh, &want_reply)) != 0)
2213 goto out;
2179 debug("client_input_global_request: rtype %s want_reply %d", 2214 debug("client_input_global_request: rtype %s want_reply %d",
2180 rtype, want_reply); 2215 rtype, want_reply);
2181 if (strcmp(rtype, "hostkeys-00@openssh.com") == 0) 2216 if (strcmp(rtype, "hostkeys-00@openssh.com") == 0)
2182 success = client_input_hostkeys(); 2217 success = client_input_hostkeys(ssh);
2183 if (want_reply) { 2218 if (want_reply) {
2184 packet_start(success ? 2219 if ((r = sshpkt_start(ssh, success ? SSH2_MSG_REQUEST_SUCCESS :
2185 SSH2_MSG_REQUEST_SUCCESS : SSH2_MSG_REQUEST_FAILURE); 2220 SSH2_MSG_REQUEST_FAILURE)) != 0 ||
2186 packet_send(); 2221 (r = sshpkt_send(ssh)) != 0 ||
2187 packet_write_wait(); 2222 (r = ssh_packet_write_wait(ssh)) != 0)
2223 goto out;
2188 } 2224 }
2225 r = 0;
2226 out:
2189 free(rtype); 2227 free(rtype);
2190 return 0; 2228 return r;
2191} 2229}
2192 2230
2193void 2231void
@@ -2195,7 +2233,7 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem,
2195 const char *term, struct termios *tiop, int in_fd, struct sshbuf *cmd, 2233 const char *term, struct termios *tiop, int in_fd, struct sshbuf *cmd,
2196 char **env) 2234 char **env)
2197{ 2235{
2198 int i, j, matched, len; 2236 int i, j, matched, len, r;
2199 char *name, *val; 2237 char *name, *val;
2200 Channel *c = NULL; 2238 Channel *c = NULL;
2201 2239
@@ -2204,7 +2242,7 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem,
2204 if ((c = channel_lookup(ssh, id)) == NULL) 2242 if ((c = channel_lookup(ssh, id)) == NULL)
2205 fatal("%s: channel %d: unknown channel", __func__, id); 2243 fatal("%s: channel %d: unknown channel", __func__, id);
2206 2244
2207 packet_set_interactive(want_tty, 2245 ssh_packet_set_interactive(ssh, want_tty,
2208 options.ip_qos_interactive, options.ip_qos_bulk); 2246 options.ip_qos_interactive, options.ip_qos_bulk);
2209 2247
2210 if (want_tty) { 2248 if (want_tty) {
@@ -2216,15 +2254,18 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem,
2216 2254
2217 channel_request_start(ssh, id, "pty-req", 1); 2255 channel_request_start(ssh, id, "pty-req", 1);
2218 client_expect_confirm(ssh, id, "PTY allocation", CONFIRM_TTY); 2256 client_expect_confirm(ssh, id, "PTY allocation", CONFIRM_TTY);
2219 packet_put_cstring(term != NULL ? term : ""); 2257 if ((r = sshpkt_put_cstring(ssh, term != NULL ? term : ""))
2220 packet_put_int((u_int)ws.ws_col); 2258 != 0 ||
2221 packet_put_int((u_int)ws.ws_row); 2259 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_col)) != 0 ||
2222 packet_put_int((u_int)ws.ws_xpixel); 2260 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_row)) != 0 ||
2223 packet_put_int((u_int)ws.ws_ypixel); 2261 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_xpixel)) != 0 ||
2262 (r = sshpkt_put_u32(ssh, (u_int)ws.ws_ypixel)) != 0)
2263 fatal("%s: build packet: %s", __func__, ssh_err(r));
2224 if (tiop == NULL) 2264 if (tiop == NULL)
2225 tiop = get_saved_tio(); 2265 tiop = get_saved_tio();
2226 ssh_tty_make_modes(ssh, -1, tiop); 2266 ssh_tty_make_modes(ssh, -1, tiop);
2227 packet_send(); 2267 if ((r = sshpkt_send(ssh)) != 0)
2268 fatal("%s: send packet: %s", __func__, ssh_err(r));
2228 /* XXX wait for reply */ 2269 /* XXX wait for reply */
2229 c->client_tty = 1; 2270 c->client_tty = 1;
2230 } 2271 }
@@ -2256,9 +2297,12 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem,
2256 2297
2257 debug("Sending env %s = %s", name, val); 2298 debug("Sending env %s = %s", name, val);
2258 channel_request_start(ssh, id, "env", 0); 2299 channel_request_start(ssh, id, "env", 0);
2259 packet_put_cstring(name); 2300 if ((r = sshpkt_put_cstring(ssh, name)) != 0 ||
2260 packet_put_cstring(val); 2301 (r = sshpkt_put_cstring(ssh, val)) != 0 ||
2261 packet_send(); 2302 (r = sshpkt_send(ssh)) != 0) {
2303 fatal("%s: send packet: %s",
2304 __func__, ssh_err(r));
2305 }
2262 free(name); 2306 free(name);
2263 } 2307 }
2264 } 2308 }
@@ -2273,9 +2317,10 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem,
2273 2317
2274 debug("Setting env %s = %s", name, val); 2318 debug("Setting env %s = %s", name, val);
2275 channel_request_start(ssh, id, "env", 0); 2319 channel_request_start(ssh, id, "env", 0);
2276 packet_put_cstring(name); 2320 if ((r = sshpkt_put_cstring(ssh, name)) != 0 ||
2277 packet_put_cstring(val); 2321 (r = sshpkt_put_cstring(ssh, val)) != 0 ||
2278 packet_send(); 2322 (r = sshpkt_send(ssh)) != 0)
2323 fatal("%s: send packet: %s", __func__, ssh_err(r));
2279 free(name); 2324 free(name);
2280 } 2325 }
2281 2326
@@ -2295,39 +2340,43 @@ client_session2_setup(struct ssh *ssh, int id, int want_tty, int want_subsystem,
2295 channel_request_start(ssh, id, "exec", 1); 2340 channel_request_start(ssh, id, "exec", 1);
2296 client_expect_confirm(ssh, id, "exec", CONFIRM_CLOSE); 2341 client_expect_confirm(ssh, id, "exec", CONFIRM_CLOSE);
2297 } 2342 }
2298 packet_put_string(sshbuf_ptr(cmd), sshbuf_len(cmd)); 2343 if ((r = sshpkt_put_stringb(ssh, cmd)) != 0 ||
2299 packet_send(); 2344 (r = sshpkt_send(ssh)) != 0)
2345 fatal("%s: send command: %s", __func__, ssh_err(r));
2300 } else { 2346 } else {
2301 channel_request_start(ssh, id, "shell", 1); 2347 channel_request_start(ssh, id, "shell", 1);
2302 client_expect_confirm(ssh, id, "shell", CONFIRM_CLOSE); 2348 client_expect_confirm(ssh, id, "shell", CONFIRM_CLOSE);
2303 packet_send(); 2349 if ((r = sshpkt_send(ssh)) != 0) {
2350 fatal("%s: send shell request: %s",
2351 __func__, ssh_err(r));
2352 }
2304 } 2353 }
2305} 2354}
2306 2355
2307static void 2356static void
2308client_init_dispatch(void) 2357client_init_dispatch(struct ssh *ssh)
2309{ 2358{
2310 dispatch_init(&dispatch_protocol_error); 2359 ssh_dispatch_init(ssh, &dispatch_protocol_error);
2311 2360
2312 dispatch_set(SSH2_MSG_CHANNEL_CLOSE, &channel_input_oclose); 2361 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_CLOSE, &channel_input_oclose);
2313 dispatch_set(SSH2_MSG_CHANNEL_DATA, &channel_input_data); 2362 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_DATA, &channel_input_data);
2314 dispatch_set(SSH2_MSG_CHANNEL_EOF, &channel_input_ieof); 2363 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_EOF, &channel_input_ieof);
2315 dispatch_set(SSH2_MSG_CHANNEL_EXTENDED_DATA, &channel_input_extended_data); 2364 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA, &channel_input_extended_data);
2316 dispatch_set(SSH2_MSG_CHANNEL_OPEN, &client_input_channel_open); 2365 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN, &client_input_channel_open);
2317 dispatch_set(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, &channel_input_open_confirmation); 2366 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, &channel_input_open_confirmation);
2318 dispatch_set(SSH2_MSG_CHANNEL_OPEN_FAILURE, &channel_input_open_failure); 2367 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE, &channel_input_open_failure);
2319 dispatch_set(SSH2_MSG_CHANNEL_REQUEST, &client_input_channel_req); 2368 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_REQUEST, &client_input_channel_req);
2320 dispatch_set(SSH2_MSG_CHANNEL_WINDOW_ADJUST, &channel_input_window_adjust); 2369 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_WINDOW_ADJUST, &channel_input_window_adjust);
2321 dispatch_set(SSH2_MSG_CHANNEL_SUCCESS, &channel_input_status_confirm); 2370 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_SUCCESS, &channel_input_status_confirm);
2322 dispatch_set(SSH2_MSG_CHANNEL_FAILURE, &channel_input_status_confirm); 2371 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_FAILURE, &channel_input_status_confirm);
2323 dispatch_set(SSH2_MSG_GLOBAL_REQUEST, &client_input_global_request); 2372 ssh_dispatch_set(ssh, SSH2_MSG_GLOBAL_REQUEST, &client_input_global_request);
2324 2373
2325 /* rekeying */ 2374 /* rekeying */
2326 dispatch_set(SSH2_MSG_KEXINIT, &kex_input_kexinit); 2375 ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, &kex_input_kexinit);
2327 2376
2328 /* global request reply messages */ 2377 /* global request reply messages */
2329 dispatch_set(SSH2_MSG_REQUEST_FAILURE, &client_global_request_reply); 2378 ssh_dispatch_set(ssh, SSH2_MSG_REQUEST_FAILURE, &client_global_request_reply);
2330 dispatch_set(SSH2_MSG_REQUEST_SUCCESS, &client_global_request_reply); 2379 ssh_dispatch_set(ssh, SSH2_MSG_REQUEST_SUCCESS, &client_global_request_reply);
2331} 2380}
2332 2381
2333void 2382void
diff --git a/config.h.in b/config.h.in
index 91b65db8f..05b7206df 100644
--- a/config.h.in
+++ b/config.h.in
@@ -393,19 +393,19 @@
393/* Define if you have /dev/ptc */ 393/* Define if you have /dev/ptc */
394#undef HAVE_DEV_PTS_AND_PTC 394#undef HAVE_DEV_PTS_AND_PTC
395 395
396/* Define if libcrypto has DH_get0_key */ 396/* Define to 1 if you have the `DH_get0_key' function. */
397#undef HAVE_DH_GET0_KEY 397#undef HAVE_DH_GET0_KEY
398 398
399/* Define if libcrypto has DH_get0_pqg */ 399/* Define to 1 if you have the `DH_get0_pqg' function. */
400#undef HAVE_DH_GET0_PQG 400#undef HAVE_DH_GET0_PQG
401 401
402/* Define if libcrypto has DH_set0_key */ 402/* Define to 1 if you have the `DH_set0_key' function. */
403#undef HAVE_DH_SET0_KEY 403#undef HAVE_DH_SET0_KEY
404 404
405/* Define if libcrypto has DH_set0_pqg */ 405/* Define to 1 if you have the `DH_set0_pqg' function. */
406#undef HAVE_DH_SET0_PQG 406#undef HAVE_DH_SET0_PQG
407 407
408/* Define if libcrypto has DH_set_length */ 408/* Define to 1 if you have the `DH_set_length' function. */
409#undef HAVE_DH_SET_LENGTH 409#undef HAVE_DH_SET_LENGTH
410 410
411/* Define to 1 if you have the <dirent.h> header file. */ 411/* Define to 1 if you have the <dirent.h> header file. */
@@ -420,30 +420,33 @@
420/* Define to 1 if you have the `DSA_generate_parameters_ex' function. */ 420/* Define to 1 if you have the `DSA_generate_parameters_ex' function. */
421#undef HAVE_DSA_GENERATE_PARAMETERS_EX 421#undef HAVE_DSA_GENERATE_PARAMETERS_EX
422 422
423/* Define if libcrypto has DSA_get0_key */ 423/* Define to 1 if you have the `DSA_get0_key' function. */
424#undef HAVE_DSA_GET0_KEY 424#undef HAVE_DSA_GET0_KEY
425 425
426/* Define if libcrypto has DSA_get0_pqg */ 426/* Define to 1 if you have the `DSA_get0_pqg' function. */
427#undef HAVE_DSA_GET0_PQG 427#undef HAVE_DSA_GET0_PQG
428 428
429/* Define if libcrypto has DSA_set0_key */ 429/* Define to 1 if you have the `DSA_set0_key' function. */
430#undef HAVE_DSA_SET0_KEY 430#undef HAVE_DSA_SET0_KEY
431 431
432/* Define if libcrypto has DSA_set0_pqg */ 432/* Define to 1 if you have the `DSA_set0_pqg' function. */
433#undef HAVE_DSA_SET0_PQG 433#undef HAVE_DSA_SET0_PQG
434 434
435/* Define if libcrypto has DSA_SIG_get0 */ 435/* Define to 1 if you have the `DSA_SIG_get0' function. */
436#undef HAVE_DSA_SIG_GET0 436#undef HAVE_DSA_SIG_GET0
437 437
438/* Define if libcrypto has DSA_SIG_set0 */ 438/* Define to 1 if you have the `DSA_SIG_set0' function. */
439#undef HAVE_DSA_SIG_SET0 439#undef HAVE_DSA_SIG_SET0
440 440
441/* Define if libcrypto has ECDSA_SIG_get0 */ 441/* Define to 1 if you have the `ECDSA_SIG_get0' function. */
442#undef HAVE_ECDSA_SIG_GET0 442#undef HAVE_ECDSA_SIG_GET0
443 443
444/* Define if libcrypto has ECDSA_SIG_set0 */ 444/* Define to 1 if you have the `ECDSA_SIG_set0' function. */
445#undef HAVE_ECDSA_SIG_SET0 445#undef HAVE_ECDSA_SIG_SET0
446 446
447/* Define to 1 if you have the `EC_KEY_METHOD_new' function. */
448#undef HAVE_EC_KEY_METHOD_NEW
449
447/* Define to 1 if you have the <elf.h> header file. */ 450/* Define to 1 if you have the <elf.h> header file. */
448#undef HAVE_ELF_H 451#undef HAVE_ELF_H
449 452
@@ -471,18 +474,21 @@
471/* Define if your system has /etc/default/login */ 474/* Define if your system has /etc/default/login */
472#undef HAVE_ETC_DEFAULT_LOGIN 475#undef HAVE_ETC_DEFAULT_LOGIN
473 476
474/* Define if libcrypto has EVP_CIPHER_CTX_ctrl */ 477/* Define to 1 if you have the `EVP_CIPHER_CTX_ctrl' function. */
475#undef HAVE_EVP_CIPHER_CTX_CTRL 478#undef HAVE_EVP_CIPHER_CTX_CTRL
476 479
477/* Define if libcrypto has EVP_CIPHER_CTX_set_iv */ 480/* Define to 1 if you have the `EVP_CIPHER_CTX_get_iv' function. */
478#undef HAVE_EVP_CIPHER_CTX_GET_IV 481#undef HAVE_EVP_CIPHER_CTX_GET_IV
479 482
480/* Define if libcrypto has EVP_CIPHER_CTX_iv */ 483/* Define to 1 if you have the `EVP_CIPHER_CTX_iv' function. */
481#undef HAVE_EVP_CIPHER_CTX_IV 484#undef HAVE_EVP_CIPHER_CTX_IV
482 485
483/* Define if libcrypto has EVP_CIPHER_CTX_iv_noconst */ 486/* Define to 1 if you have the `EVP_CIPHER_CTX_iv_noconst' function. */
484#undef HAVE_EVP_CIPHER_CTX_IV_NOCONST 487#undef HAVE_EVP_CIPHER_CTX_IV_NOCONST
485 488
489/* Define to 1 if you have the `EVP_CIPHER_CTX_set_iv' function. */
490#undef HAVE_EVP_CIPHER_CTX_SET_IV
491
486/* Define to 1 if you have the `EVP_DigestFinal_ex' function. */ 492/* Define to 1 if you have the `EVP_DigestFinal_ex' function. */
487#undef HAVE_EVP_DIGESTFINAL_EX 493#undef HAVE_EVP_DIGESTFINAL_EX
488 494
@@ -495,16 +501,16 @@
495/* Define to 1 if you have the `EVP_MD_CTX_copy_ex' function. */ 501/* Define to 1 if you have the `EVP_MD_CTX_copy_ex' function. */
496#undef HAVE_EVP_MD_CTX_COPY_EX 502#undef HAVE_EVP_MD_CTX_COPY_EX
497 503
498/* Define if libcrypto has EVP_MD_CTX_free */ 504/* Define to 1 if you have the `EVP_MD_CTX_free' function. */
499#undef HAVE_EVP_MD_CTX_FREE 505#undef HAVE_EVP_MD_CTX_FREE
500 506
501/* Define to 1 if you have the `EVP_MD_CTX_init' function. */ 507/* Define to 1 if you have the `EVP_MD_CTX_init' function. */
502#undef HAVE_EVP_MD_CTX_INIT 508#undef HAVE_EVP_MD_CTX_INIT
503 509
504/* Define if libcrypto has EVP_MD_CTX_new */ 510/* Define to 1 if you have the `EVP_MD_CTX_new' function. */
505#undef HAVE_EVP_MD_CTX_NEW 511#undef HAVE_EVP_MD_CTX_NEW
506 512
507/* Define if libcrypto has EVP_PKEY_get0_RSA */ 513/* Define to 1 if you have the `EVP_PKEY_get0_RSA' function. */
508#undef HAVE_EVP_PKEY_GET0_RSA 514#undef HAVE_EVP_PKEY_GET0_RSA
509 515
510/* Define to 1 if you have the `EVP_ripemd160' function. */ 516/* Define to 1 if you have the `EVP_ripemd160' function. */
@@ -522,9 +528,15 @@
522/* Define to 1 if you have the `fchmod' function. */ 528/* Define to 1 if you have the `fchmod' function. */
523#undef HAVE_FCHMOD 529#undef HAVE_FCHMOD
524 530
531/* Define to 1 if you have the `fchmodat' function. */
532#undef HAVE_FCHMODAT
533
525/* Define to 1 if you have the `fchown' function. */ 534/* Define to 1 if you have the `fchown' function. */
526#undef HAVE_FCHOWN 535#undef HAVE_FCHOWN
527 536
537/* Define to 1 if you have the `fchownat' function. */
538#undef HAVE_FCHOWNAT
539
528/* Use F_CLOSEM fcntl for closefrom */ 540/* Use F_CLOSEM fcntl for closefrom */
529#undef HAVE_FCNTL_CLOSEM 541#undef HAVE_FCNTL_CLOSEM
530 542
@@ -935,8 +947,17 @@
935/* Define to 1 if you have the `openpty' function. */ 947/* Define to 1 if you have the `openpty' function. */
936#undef HAVE_OPENPTY 948#undef HAVE_OPENPTY
937 949
938/* Define if your ssl headers are included with #include <openssl/header.h> */ 950/* as a macro */
939#undef HAVE_OPENSSL 951#undef HAVE_OPENSSL_ADD_ALL_ALGORITHMS
952
953/* Define to 1 if you have the `OPENSSL_init_crypto' function. */
954#undef HAVE_OPENSSL_INIT_CRYPTO
955
956/* Define to 1 if you have the `OpenSSL_version' function. */
957#undef HAVE_OPENSSL_VERSION
958
959/* Define to 1 if you have the `OpenSSL_version_num' function. */
960#undef HAVE_OPENSSL_VERSION_NUM
940 961
941/* Define if you have Digital Unix Security Integration Architecture */ 962/* Define if you have Digital Unix Security Integration Architecture */
942#undef HAVE_OSF_SIA 963#undef HAVE_OSF_SIA
@@ -1029,46 +1050,46 @@
1029/* Define to 1 if you have the `RSA_generate_key_ex' function. */ 1050/* Define to 1 if you have the `RSA_generate_key_ex' function. */
1030#undef HAVE_RSA_GENERATE_KEY_EX 1051#undef HAVE_RSA_GENERATE_KEY_EX
1031 1052
1032/* Define if libcrypto has RSA_get0_crt_params */ 1053/* Define to 1 if you have the `RSA_get0_crt_params' function. */
1033#undef HAVE_RSA_GET0_CRT_PARAMS 1054#undef HAVE_RSA_GET0_CRT_PARAMS
1034 1055
1035/* Define if libcrypto has RSA_get0_factors */ 1056/* Define to 1 if you have the `RSA_get0_factors' function. */
1036#undef HAVE_RSA_GET0_FACTORS 1057#undef HAVE_RSA_GET0_FACTORS
1037 1058
1038/* Define if libcrypto has RSA_get0_key */ 1059/* Define to 1 if you have the `RSA_get0_key' function. */
1039#undef HAVE_RSA_GET0_KEY 1060#undef HAVE_RSA_GET0_KEY
1040 1061
1041/* Define to 1 if you have the `RSA_get_default_method' function. */ 1062/* Define to 1 if you have the `RSA_get_default_method' function. */
1042#undef HAVE_RSA_GET_DEFAULT_METHOD 1063#undef HAVE_RSA_GET_DEFAULT_METHOD
1043 1064
1044/* Define if libcrypto has RSA_meth_dup */ 1065/* Define to 1 if you have the `RSA_meth_dup' function. */
1045#undef HAVE_RSA_METH_DUP 1066#undef HAVE_RSA_METH_DUP
1046 1067
1047/* Define if libcrypto has RSA_meth_free */ 1068/* Define to 1 if you have the `RSA_meth_free' function. */
1048#undef HAVE_RSA_METH_FREE 1069#undef HAVE_RSA_METH_FREE
1049 1070
1050/* Define if libcrypto has RSA_meth_get_finish */ 1071/* Define to 1 if you have the `RSA_meth_get_finish' function. */
1051#undef HAVE_RSA_METH_GET_FINISH 1072#undef HAVE_RSA_METH_GET_FINISH
1052 1073
1053/* Define if libcrypto has RSA_meth_set1_name */ 1074/* Define to 1 if you have the `RSA_meth_set1_name' function. */
1054#undef HAVE_RSA_METH_SET1_NAME 1075#undef HAVE_RSA_METH_SET1_NAME
1055 1076
1056/* Define if libcrypto has RSA_meth_set_finish */ 1077/* Define to 1 if you have the `RSA_meth_set_finish' function. */
1057#undef HAVE_RSA_METH_SET_FINISH 1078#undef HAVE_RSA_METH_SET_FINISH
1058 1079
1059/* Define if libcrypto has RSA_meth_set_priv_dec */ 1080/* Define to 1 if you have the `RSA_meth_set_priv_dec' function. */
1060#undef HAVE_RSA_METH_SET_PRIV_DEC 1081#undef HAVE_RSA_METH_SET_PRIV_DEC
1061 1082
1062/* Define if libcrypto has RSA_meth_set_priv_enc */ 1083/* Define to 1 if you have the `RSA_meth_set_priv_enc' function. */
1063#undef HAVE_RSA_METH_SET_PRIV_ENC 1084#undef HAVE_RSA_METH_SET_PRIV_ENC
1064 1085
1065/* Define if libcrypto has RSA_get0_srt_params */ 1086/* Define to 1 if you have the `RSA_set0_crt_params' function. */
1066#undef HAVE_RSA_SET0_CRT_PARAMS 1087#undef HAVE_RSA_SET0_CRT_PARAMS
1067 1088
1068/* Define if libcrypto has RSA_set0_factors */ 1089/* Define to 1 if you have the `RSA_set0_factors' function. */
1069#undef HAVE_RSA_SET0_FACTORS 1090#undef HAVE_RSA_SET0_FACTORS
1070 1091
1071/* Define if libcrypto has RSA_set0_key */ 1092/* Define to 1 if you have the `RSA_set0_key' function. */
1072#undef HAVE_RSA_SET0_KEY 1093#undef HAVE_RSA_SET0_KEY
1073 1094
1074/* Define to 1 if you have the <sandbox.h> header file. */ 1095/* Define to 1 if you have the <sandbox.h> header file. */
@@ -1512,6 +1533,9 @@
1512/* Define to 1 if you have the <util.h> header file. */ 1533/* Define to 1 if you have the <util.h> header file. */
1513#undef HAVE_UTIL_H 1534#undef HAVE_UTIL_H
1514 1535
1536/* Define to 1 if you have the `utimensat' function. */
1537#undef HAVE_UTIMENSAT
1538
1515/* Define to 1 if you have the `utimes' function. */ 1539/* Define to 1 if you have the `utimes' function. */
1516#undef HAVE_UTIMES 1540#undef HAVE_UTIMES
1517 1541
diff --git a/configure b/configure
index 21a41103f..d276473ca 100755
--- a/configure
+++ b/configure
@@ -2625,197 +2625,7 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
2625ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' 2625ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
2626ac_compiler_gnu=$ac_cv_c_compiler_gnu 2626ac_compiler_gnu=$ac_cv_c_compiler_gnu
2627if test -n "$ac_tool_prefix"; then 2627if test -n "$ac_tool_prefix"; then
2628 # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. 2628 for ac_prog in cc gcc
2629set dummy ${ac_tool_prefix}gcc; ac_word=$2
2630{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2631$as_echo_n "checking for $ac_word... " >&6; }
2632if ${ac_cv_prog_CC+:} false; then :
2633 $as_echo_n "(cached) " >&6
2634else
2635 if test -n "$CC"; then
2636 ac_cv_prog_CC="$CC" # Let the user override the test.
2637else
2638as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2639for as_dir in $PATH
2640do
2641 IFS=$as_save_IFS
2642 test -z "$as_dir" && as_dir=.
2643 for ac_exec_ext in '' $ac_executable_extensions; do
2644 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2645 ac_cv_prog_CC="${ac_tool_prefix}gcc"
2646 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2647 break 2
2648 fi
2649done
2650 done
2651IFS=$as_save_IFS
2652
2653fi
2654fi
2655CC=$ac_cv_prog_CC
2656if test -n "$CC"; then
2657 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2658$as_echo "$CC" >&6; }
2659else
2660 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2661$as_echo "no" >&6; }
2662fi
2663
2664
2665fi
2666if test -z "$ac_cv_prog_CC"; then
2667 ac_ct_CC=$CC
2668 # Extract the first word of "gcc", so it can be a program name with args.
2669set dummy gcc; ac_word=$2
2670{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2671$as_echo_n "checking for $ac_word... " >&6; }
2672if ${ac_cv_prog_ac_ct_CC+:} false; then :
2673 $as_echo_n "(cached) " >&6
2674else
2675 if test -n "$ac_ct_CC"; then
2676 ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
2677else
2678as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2679for as_dir in $PATH
2680do
2681 IFS=$as_save_IFS
2682 test -z "$as_dir" && as_dir=.
2683 for ac_exec_ext in '' $ac_executable_extensions; do
2684 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2685 ac_cv_prog_ac_ct_CC="gcc"
2686 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2687 break 2
2688 fi
2689done
2690 done
2691IFS=$as_save_IFS
2692
2693fi
2694fi
2695ac_ct_CC=$ac_cv_prog_ac_ct_CC
2696if test -n "$ac_ct_CC"; then
2697 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
2698$as_echo "$ac_ct_CC" >&6; }
2699else
2700 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2701$as_echo "no" >&6; }
2702fi
2703
2704 if test "x$ac_ct_CC" = x; then
2705 CC=""
2706 else
2707 case $cross_compiling:$ac_tool_warned in
2708yes:)
2709{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
2710$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
2711ac_tool_warned=yes ;;
2712esac
2713 CC=$ac_ct_CC
2714 fi
2715else
2716 CC="$ac_cv_prog_CC"
2717fi
2718
2719if test -z "$CC"; then
2720 if test -n "$ac_tool_prefix"; then
2721 # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
2722set dummy ${ac_tool_prefix}cc; ac_word=$2
2723{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2724$as_echo_n "checking for $ac_word... " >&6; }
2725if ${ac_cv_prog_CC+:} false; then :
2726 $as_echo_n "(cached) " >&6
2727else
2728 if test -n "$CC"; then
2729 ac_cv_prog_CC="$CC" # Let the user override the test.
2730else
2731as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2732for as_dir in $PATH
2733do
2734 IFS=$as_save_IFS
2735 test -z "$as_dir" && as_dir=.
2736 for ac_exec_ext in '' $ac_executable_extensions; do
2737 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2738 ac_cv_prog_CC="${ac_tool_prefix}cc"
2739 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2740 break 2
2741 fi
2742done
2743 done
2744IFS=$as_save_IFS
2745
2746fi
2747fi
2748CC=$ac_cv_prog_CC
2749if test -n "$CC"; then
2750 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2751$as_echo "$CC" >&6; }
2752else
2753 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2754$as_echo "no" >&6; }
2755fi
2756
2757
2758 fi
2759fi
2760if test -z "$CC"; then
2761 # Extract the first word of "cc", so it can be a program name with args.
2762set dummy cc; ac_word=$2
2763{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
2764$as_echo_n "checking for $ac_word... " >&6; }
2765if ${ac_cv_prog_CC+:} false; then :
2766 $as_echo_n "(cached) " >&6
2767else
2768 if test -n "$CC"; then
2769 ac_cv_prog_CC="$CC" # Let the user override the test.
2770else
2771 ac_prog_rejected=no
2772as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
2773for as_dir in $PATH
2774do
2775 IFS=$as_save_IFS
2776 test -z "$as_dir" && as_dir=.
2777 for ac_exec_ext in '' $ac_executable_extensions; do
2778 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
2779 if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
2780 ac_prog_rejected=yes
2781 continue
2782 fi
2783 ac_cv_prog_CC="cc"
2784 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
2785 break 2
2786 fi
2787done
2788 done
2789IFS=$as_save_IFS
2790
2791if test $ac_prog_rejected = yes; then
2792 # We found a bogon in the path, so make sure we never use it.
2793 set dummy $ac_cv_prog_CC
2794 shift
2795 if test $# != 0; then
2796 # We chose a different compiler from the bogus one.
2797 # However, it has the same basename, so the bogon will be chosen
2798 # first if we set CC to just the basename; use the full file name.
2799 shift
2800 ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
2801 fi
2802fi
2803fi
2804fi
2805CC=$ac_cv_prog_CC
2806if test -n "$CC"; then
2807 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
2808$as_echo "$CC" >&6; }
2809else
2810 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
2811$as_echo "no" >&6; }
2812fi
2813
2814
2815fi
2816if test -z "$CC"; then
2817 if test -n "$ac_tool_prefix"; then
2818 for ac_prog in cl.exe
2819 do 2629 do
2820 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. 2630 # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
2821set dummy $ac_tool_prefix$ac_prog; ac_word=$2 2631set dummy $ac_tool_prefix$ac_prog; ac_word=$2
@@ -2859,7 +2669,7 @@ fi
2859fi 2669fi
2860if test -z "$CC"; then 2670if test -z "$CC"; then
2861 ac_ct_CC=$CC 2671 ac_ct_CC=$CC
2862 for ac_prog in cl.exe 2672 for ac_prog in cc gcc
2863do 2673do
2864 # Extract the first word of "$ac_prog", so it can be a program name with args. 2674 # Extract the first word of "$ac_prog", so it can be a program name with args.
2865set dummy $ac_prog; ac_word=$2 2675set dummy $ac_prog; ac_word=$2
@@ -2914,8 +2724,6 @@ esac
2914 fi 2724 fi
2915fi 2725fi
2916 2726
2917fi
2918
2919 2727
2920test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 2728test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
2921$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 2729$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
@@ -6735,10 +6543,11 @@ fi
6735if test "${with_rpath+set}" = set; then : 6543if test "${with_rpath+set}" = set; then :
6736 withval=$with_rpath; 6544 withval=$with_rpath;
6737 if test "x$withval" = "xno" ; then 6545 if test "x$withval" = "xno" ; then
6738 need_dash_r="" 6546 rpath_opt=""
6739 fi 6547 elif test "x$withval" = "xyes" ; then
6740 if test "x$withval" = "xyes" ; then 6548 rpath_opt="-R"
6741 need_dash_r=1 6549 else
6550 rpath_opt="$withval"
6742 fi 6551 fi
6743 6552
6744 6553
@@ -8059,7 +7868,7 @@ $as_echo "#define NEED_SETPGRP 1" >>confdefs.h
8059*-*-netbsd*) 7868*-*-netbsd*)
8060 check_for_libcrypt_before=1 7869 check_for_libcrypt_before=1
8061 if test "x$withval" != "xno" ; then 7870 if test "x$withval" != "xno" ; then
8062 need_dash_r=1 7871 rpath_opt="-R"
8063 fi 7872 fi
8064 CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" 7873 CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE"
8065 7874
@@ -8153,7 +7962,7 @@ $as_echo "#define SYSLOG_R_SAFE_IN_SIGHAND 1" >>confdefs.h
8153 ;; 7962 ;;
8154*-*-solaris*) 7963*-*-solaris*)
8155 if test "x$withval" != "xno" ; then 7964 if test "x$withval" != "xno" ; then
8156 need_dash_r=1 7965 rpath_opt="-R"
8157 fi 7966 fi
8158 $as_echo "#define PAM_SUN_CODEBASE 1" >>confdefs.h 7967 $as_echo "#define PAM_SUN_CODEBASE 1" >>confdefs.h
8159 7968
@@ -9083,14 +8892,14 @@ if test "${with_zlib+set}" = set; then :
9083 as_fn_error $? "*** zlib is required ***" "$LINENO" 5 8892 as_fn_error $? "*** zlib is required ***" "$LINENO" 5
9084 elif test "x$withval" != "xyes"; then 8893 elif test "x$withval" != "xyes"; then
9085 if test -d "$withval/lib"; then 8894 if test -d "$withval/lib"; then
9086 if test -n "${need_dash_r}"; then 8895 if test -n "${rpath_opt}"; then
9087 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 8896 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}"
9088 else 8897 else
9089 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 8898 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
9090 fi 8899 fi
9091 else 8900 else
9092 if test -n "${need_dash_r}"; then 8901 if test -n "${rpath_opt}"; then
9093 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 8902 LDFLAGS="-L${withval} ${rpath_opt}${withval} ${LDFLAGS}"
9094 else 8903 else
9095 LDFLAGS="-L${withval} ${LDFLAGS}" 8904 LDFLAGS="-L${withval} ${LDFLAGS}"
9096 fi 8905 fi
@@ -9161,8 +8970,8 @@ else
9161 saved_CPPFLAGS="$CPPFLAGS" 8970 saved_CPPFLAGS="$CPPFLAGS"
9162 saved_LDFLAGS="$LDFLAGS" 8971 saved_LDFLAGS="$LDFLAGS"
9163 save_LIBS="$LIBS" 8972 save_LIBS="$LIBS"
9164 if test -n "${need_dash_r}"; then 8973 if test -n "${rpath_opt}"; then
9165 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}" 8974 LDFLAGS="-L/usr/local/lib ${rpath_opt}/usr/local/lib ${saved_LDFLAGS}"
9166 else 8975 else
9167 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}" 8976 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
9168 fi 8977 fi
@@ -10607,8 +10416,8 @@ $as_echo "no" >&6; }
10607 fi 10416 fi
10608 else 10417 else
10609 CPPFLAGS="$CPPFLAGS -I${withval}/include" 10418 CPPFLAGS="$CPPFLAGS -I${withval}/include"
10610 if test -n "${need_dash_r}"; then 10419 if test -n "${rpath_opt}"; then
10611 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 10420 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}"
10612 else 10421 else
10613 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 10422 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
10614 fi 10423 fi
@@ -11030,7 +10839,9 @@ for ac_func in \
11030 errx \ 10839 errx \
11031 explicit_bzero \ 10840 explicit_bzero \
11032 fchmod \ 10841 fchmod \
10842 fchmodat \
11033 fchown \ 10843 fchown \
10844 fchownat \
11034 flock \ 10845 flock \
11035 freeaddrinfo \ 10846 freeaddrinfo \
11036 freezero \ 10847 freezero \
@@ -11123,6 +10934,7 @@ for ac_func in \
11123 truncate \ 10934 truncate \
11124 unsetenv \ 10935 unsetenv \
11125 updwtmpx \ 10936 updwtmpx \
10937 utimensat \
11126 user_from_uid \ 10938 user_from_uid \
11127 usleep \ 10939 usleep \
11128 vasprintf \ 10940 vasprintf \
@@ -12742,20 +12554,20 @@ if test "${with_ssl_dir+set}" = set; then :
12742 ./*|../*) withval="`pwd`/$withval" 12554 ./*|../*) withval="`pwd`/$withval"
12743 esac 12555 esac
12744 if test -d "$withval/lib"; then 12556 if test -d "$withval/lib"; then
12745 if test -n "${need_dash_r}"; then 12557 if test -n "${rpath_opt}"; then
12746 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 12558 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}"
12747 else 12559 else
12748 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 12560 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
12749 fi 12561 fi
12750 elif test -d "$withval/lib64"; then 12562 elif test -d "$withval/lib64"; then
12751 if test -n "${need_dash_r}"; then 12563 if test -n "${rpath_opt}"; then
12752 LDFLAGS="-L${withval}/lib64 -R${withval}/lib64 ${LDFLAGS}" 12564 LDFLAGS="-L${withval}/lib64 ${rpath_opt}${withval}/lib64 ${LDFLAGS}"
12753 else 12565 else
12754 LDFLAGS="-L${withval}/lib64 ${LDFLAGS}" 12566 LDFLAGS="-L${withval}/lib64 ${LDFLAGS}"
12755 fi 12567 fi
12756 else 12568 else
12757 if test -n "${need_dash_r}"; then 12569 if test -n "${rpath_opt}"; then
12758 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 12570 LDFLAGS="-L${withval} ${rpath_opt}${withval} ${LDFLAGS}"
12759 else 12571 else
12760 LDFLAGS="-L${withval} ${LDFLAGS}" 12572 LDFLAGS="-L${withval} ${LDFLAGS}"
12761 fi 12573 fi
@@ -12821,17 +12633,12 @@ return RAND_add ();
12821_ACEOF 12633_ACEOF
12822if ac_fn_c_try_link "$LINENO"; then : 12634if ac_fn_c_try_link "$LINENO"; then :
12823 12635
12824$as_echo "#define HAVE_OPENSSL 1" >>confdefs.h
12825
12826else 12636else
12827 12637 as_fn_error $? "*** working libcrypto not found, check config.log" "$LINENO" 5
12828 if test -n "${need_dash_r}"; then 12638fi
12829 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}" 12639rm -f core conftest.err conftest.$ac_objext \
12830 else 12640 conftest$ac_exeext conftest.$ac_ext
12831 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}" 12641 ac_fn_c_check_header_mongrel "$LINENO" "openssl/opensslv.h" "ac_cv_header_openssl_opensslv_h" "$ac_includes_default"
12832 fi
12833 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
12834 ac_fn_c_check_header_mongrel "$LINENO" "openssl/opensslv.h" "ac_cv_header_openssl_opensslv_h" "$ac_includes_default"
12835if test "x$ac_cv_header_openssl_opensslv_h" = xyes; then : 12642if test "x$ac_cv_header_openssl_opensslv_h" = xyes; then :
12836 12643
12837else 12644else
@@ -12839,40 +12646,6 @@ else
12839fi 12646fi
12840 12647
12841 12648
12842 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12843/* end confdefs.h. */
12844
12845/* Override any GCC internal prototype to avoid an error.
12846 Use char because int might match the return type of a GCC
12847 builtin and then its argument prototype would still apply. */
12848#ifdef __cplusplus
12849extern "C"
12850#endif
12851char RAND_add ();
12852int
12853main ()
12854{
12855return RAND_add ();
12856 ;
12857 return 0;
12858}
12859_ACEOF
12860if ac_fn_c_try_link "$LINENO"; then :
12861 $as_echo "#define HAVE_OPENSSL 1" >>confdefs.h
12862
12863else
12864
12865 as_fn_error $? "*** Can't find recent OpenSSL libcrypto (see config.log for details) ***" "$LINENO" 5
12866
12867
12868fi
12869rm -f core conftest.err conftest.$ac_objext \
12870 conftest$ac_exeext conftest.$ac_ext
12871
12872
12873fi
12874rm -f core conftest.err conftest.$ac_objext \
12875 conftest$ac_exeext conftest.$ac_ext
12876 12649
12877 # Determine OpenSSL header version 12650 # Determine OpenSSL header version
12878 { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL header version" >&5 12651 { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL header version" >&5
@@ -12933,6 +12706,20 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
12933fi 12706fi
12934 12707
12935 12708
12709 # Determining OpenSSL library version is version dependent.
12710 for ac_func in OpenSSL_version OpenSSL_version_num
12711do :
12712 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
12713ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
12714if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
12715 cat >>confdefs.h <<_ACEOF
12716#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
12717_ACEOF
12718
12719fi
12720done
12721
12722
12936 # Determine OpenSSL library version 12723 # Determine OpenSSL library version
12937 { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL library version" >&5 12724 { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL library version" >&5
12938$as_echo_n "checking OpenSSL library version... " >&6; } 12725$as_echo_n "checking OpenSSL library version... " >&6; }
@@ -12962,9 +12749,18 @@ main ()
12962 fd = fopen(DATA,"w"); 12749 fd = fopen(DATA,"w");
12963 if(fd == NULL) 12750 if(fd == NULL)
12964 exit(1); 12751 exit(1);
12965 12752#ifndef OPENSSL_VERSION
12966 if ((rc = fprintf(fd, "%08lx (%s)\n", (unsigned long)SSLeay(), 12753# define OPENSSL_VERSION SSLEAY_VERSION
12967 SSLeay_version(SSLEAY_VERSION))) < 0) 12754#endif
12755#ifndef HAVE_OPENSSL_VERSION
12756# define OpenSSL_version SSLeay_version
12757#endif
12758#ifndef HAVE_OPENSSL_VERSION_NUM
12759# define OpenSSL_version_num SSLeay
12760#endif
12761 if ((rc = fprintf(fd, "%08lx (%s)\n",
12762 (unsigned long)OpenSSL_version_num(),
12763 OpenSSL_version(OPENSSL_VERSION))) < 0)
12968 exit(1); 12764 exit(1);
12969 12765
12970 exit(0); 12766 exit(0);
@@ -12982,14 +12778,15 @@ if ac_fn_c_try_run "$LINENO"; then :
12982 as_fn_error $? "OpenSSL >= 1.0.1 required (have \"$ssl_library_ver\")" "$LINENO" 5 12778 as_fn_error $? "OpenSSL >= 1.0.1 required (have \"$ssl_library_ver\")" "$LINENO" 5
12983 ;; 12779 ;;
12984 100*) ;; # 1.0.x 12780 100*) ;; # 1.0.x
12985 1010000123456*) 12781 101000[0123456]*)
12986 # https://github.com/openssl/openssl/pull/4613 12782 # https://github.com/openssl/openssl/pull/4613
12987 as_fn_error $? "OpenSSL 1.1.x versions prior to 1.1.0g have a bug that breaks their use with OpenSSH (have \"$ssl_library_ver\")" "$LINENO" 5 12783 as_fn_error $? "OpenSSL 1.1.x versions prior to 1.1.0g have a bug that breaks their use with OpenSSH (have \"$ssl_library_ver\")" "$LINENO" 5
12988 ;; 12784 ;;
12989 101*) ;; # 1.1.x 12785 101*) ;; # 1.1.x
12990 200*) ;; # LibreSSL 12786 200*) ;; # LibreSSL
12787 300*) ;; # OpenSSL development branch.
12991 *) 12788 *)
12992 as_fn_error $? "OpenSSL > 1.1.x is not yet supported (have \"$ssl_library_ver\")" "$LINENO" 5 12789 as_fn_error $? "Unknown/unsupported OpenSSL version (\"$ssl_library_ver\")" "$LINENO" 5
12993 ;; 12790 ;;
12994 esac 12791 esac
12995 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssl_library_ver" >&5 12792 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ssl_library_ver" >&5
@@ -13028,7 +12825,10 @@ int
13028main () 12825main ()
13029{ 12826{
13030 12827
13031 exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); 12828#ifndef HAVE_OPENSSL_VERSION_NUM
12829# define OpenSSL_version_num SSLeay
12830#endif
12831 exit(OpenSSL_version_num() == OPENSSL_VERSION_NUMBER ? 0 : 1);
13032 12832
13033 ; 12833 ;
13034 return 0; 12834 return 0;
@@ -13069,11 +12869,11 @@ fi
13069$as_echo_n "checking if programs using OpenSSL functions will link... " >&6; } 12869$as_echo_n "checking if programs using OpenSSL functions will link... " >&6; }
13070 cat confdefs.h - <<_ACEOF >conftest.$ac_ext 12870 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13071/* end confdefs.h. */ 12871/* end confdefs.h. */
13072 #include <openssl/evp.h> 12872 #include <openssl/err.h>
13073int 12873int
13074main () 12874main ()
13075{ 12875{
13076 SSLeay_add_all_algorithms(); 12876 ERR_load_crypto_strings();
13077 ; 12877 ;
13078 return 0; 12878 return 0;
13079} 12879}
@@ -13093,11 +12893,11 @@ $as_echo "no" >&6; }
13093$as_echo_n "checking if programs using OpenSSL need -ldl... " >&6; } 12893$as_echo_n "checking if programs using OpenSSL need -ldl... " >&6; }
13094 cat confdefs.h - <<_ACEOF >conftest.$ac_ext 12894 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13095/* end confdefs.h. */ 12895/* end confdefs.h. */
13096 #include <openssl/evp.h> 12896 #include <openssl/err.h>
13097int 12897int
13098main () 12898main ()
13099{ 12899{
13100 SSLeay_add_all_algorithms(); 12900 ERR_load_crypto_strings();
13101 ; 12901 ;
13102 return 0; 12902 return 0;
13103} 12903}
@@ -13126,11 +12926,12 @@ rm -f core conftest.err conftest.$ac_objext \
13126 for ac_func in \ 12926 for ac_func in \
13127 BN_is_prime_ex \ 12927 BN_is_prime_ex \
13128 DSA_generate_parameters_ex \ 12928 DSA_generate_parameters_ex \
13129 EVP_DigestInit_ex \ 12929 EVP_CIPHER_CTX_ctrl \
13130 EVP_DigestFinal_ex \ 12930 EVP_DigestFinal_ex \
13131 EVP_MD_CTX_init \ 12931 EVP_DigestInit_ex \
13132 EVP_MD_CTX_cleanup \ 12932 EVP_MD_CTX_cleanup \
13133 EVP_MD_CTX_copy_ex \ 12933 EVP_MD_CTX_copy_ex \
12934 EVP_MD_CTX_init \
13134 HMAC_CTX_init \ 12935 HMAC_CTX_init \
13135 RSA_generate_key_ex \ 12936 RSA_generate_key_ex \
13136 RSA_get_default_method \ 12937 RSA_get_default_method \
@@ -13147,6 +12948,75 @@ fi
13147done 12948done
13148 12949
13149 12950
12951 # OpenSSL_add_all_algorithms may be a macro.
12952 ac_fn_c_check_func "$LINENO" "OpenSSL_add_all_algorithms" "ac_cv_func_OpenSSL_add_all_algorithms"
12953if test "x$ac_cv_func_OpenSSL_add_all_algorithms" = xyes; then :
12954
12955$as_echo "#define HAVE_OPENSSL_ADD_ALL_ALGORITHMS 1" >>confdefs.h
12956
12957else
12958 ac_fn_c_check_decl "$LINENO" "OpenSSL_add_all_algorithms" "ac_cv_have_decl_OpenSSL_add_all_algorithms" "#include <openssl/evp.h>
12959
12960"
12961if test "x$ac_cv_have_decl_OpenSSL_add_all_algorithms" = xyes; then :
12962
12963$as_echo "#define HAVE_OPENSSL_ADD_ALL_ALGORITHMS 1" >>confdefs.h
12964
12965fi
12966
12967
12968fi
12969
12970
12971 # LibreSSL/OpenSSL 1.1x API
12972 for ac_func in \
12973 OPENSSL_init_crypto \
12974 DH_get0_key \
12975 DH_get0_pqg \
12976 DH_set0_key \
12977 DH_set_length \
12978 DH_set0_pqg \
12979 DSA_get0_key \
12980 DSA_get0_pqg \
12981 DSA_set0_key \
12982 DSA_set0_pqg \
12983 DSA_SIG_get0 \
12984 DSA_SIG_set0 \
12985 ECDSA_SIG_get0 \
12986 ECDSA_SIG_set0 \
12987 EVP_CIPHER_CTX_iv \
12988 EVP_CIPHER_CTX_iv_noconst \
12989 EVP_CIPHER_CTX_get_iv \
12990 EVP_CIPHER_CTX_set_iv \
12991 RSA_get0_crt_params \
12992 RSA_get0_factors \
12993 RSA_get0_key \
12994 RSA_set0_crt_params \
12995 RSA_set0_factors \
12996 RSA_set0_key \
12997 RSA_meth_free \
12998 RSA_meth_dup \
12999 RSA_meth_set1_name \
13000 RSA_meth_get_finish \
13001 RSA_meth_set_priv_enc \
13002 RSA_meth_set_priv_dec \
13003 RSA_meth_set_finish \
13004 EVP_PKEY_get0_RSA \
13005 EVP_MD_CTX_new \
13006 EVP_MD_CTX_free \
13007
13008do :
13009 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
13010ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
13011if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
13012 cat >>confdefs.h <<_ACEOF
13013#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
13014_ACEOF
13015
13016fi
13017done
13018
13019
13150 if test "x$openssl_engine" = "xyes" ; then 13020 if test "x$openssl_engine" = "xyes" ; then
13151 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL ENGINE support" >&5 13021 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL ENGINE support" >&5
13152$as_echo_n "checking for OpenSSL ENGINE support... " >&6; } 13022$as_echo_n "checking for OpenSSL ENGINE support... " >&6; }
@@ -13302,1989 +13172,6 @@ fi
13302rm -f core conftest.err conftest.$ac_objext \ 13172rm -f core conftest.err conftest.$ac_objext \
13303 conftest$ac_exeext conftest.$ac_ext 13173 conftest$ac_exeext conftest.$ac_ext
13304 13174
13305 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_CIPHER_CTX_ctrl" >&5
13306$as_echo_n "checking for library containing EVP_CIPHER_CTX_ctrl... " >&6; }
13307if ${ac_cv_search_EVP_CIPHER_CTX_ctrl+:} false; then :
13308 $as_echo_n "(cached) " >&6
13309else
13310 ac_func_search_save_LIBS=$LIBS
13311cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13312/* end confdefs.h. */
13313
13314/* Override any GCC internal prototype to avoid an error.
13315 Use char because int might match the return type of a GCC
13316 builtin and then its argument prototype would still apply. */
13317#ifdef __cplusplus
13318extern "C"
13319#endif
13320char EVP_CIPHER_CTX_ctrl ();
13321int
13322main ()
13323{
13324return EVP_CIPHER_CTX_ctrl ();
13325 ;
13326 return 0;
13327}
13328_ACEOF
13329for ac_lib in '' crypto; do
13330 if test -z "$ac_lib"; then
13331 ac_res="none required"
13332 else
13333 ac_res=-l$ac_lib
13334 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13335 fi
13336 if ac_fn_c_try_link "$LINENO"; then :
13337 ac_cv_search_EVP_CIPHER_CTX_ctrl=$ac_res
13338fi
13339rm -f core conftest.err conftest.$ac_objext \
13340 conftest$ac_exeext
13341 if ${ac_cv_search_EVP_CIPHER_CTX_ctrl+:} false; then :
13342 break
13343fi
13344done
13345if ${ac_cv_search_EVP_CIPHER_CTX_ctrl+:} false; then :
13346
13347else
13348 ac_cv_search_EVP_CIPHER_CTX_ctrl=no
13349fi
13350rm conftest.$ac_ext
13351LIBS=$ac_func_search_save_LIBS
13352fi
13353{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_CIPHER_CTX_ctrl" >&5
13354$as_echo "$ac_cv_search_EVP_CIPHER_CTX_ctrl" >&6; }
13355ac_res=$ac_cv_search_EVP_CIPHER_CTX_ctrl
13356if test "$ac_res" != no; then :
13357 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13358
13359$as_echo "#define HAVE_EVP_CIPHER_CTX_CTRL 1" >>confdefs.h
13360
13361fi
13362
13363
13364 # LibreSSL/OpenSSL 1.1x API
13365 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DH_get0_key" >&5
13366$as_echo_n "checking for library containing DH_get0_key... " >&6; }
13367if ${ac_cv_search_DH_get0_key+:} false; then :
13368 $as_echo_n "(cached) " >&6
13369else
13370 ac_func_search_save_LIBS=$LIBS
13371cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13372/* end confdefs.h. */
13373
13374/* Override any GCC internal prototype to avoid an error.
13375 Use char because int might match the return type of a GCC
13376 builtin and then its argument prototype would still apply. */
13377#ifdef __cplusplus
13378extern "C"
13379#endif
13380char DH_get0_key ();
13381int
13382main ()
13383{
13384return DH_get0_key ();
13385 ;
13386 return 0;
13387}
13388_ACEOF
13389for ac_lib in '' crypto; do
13390 if test -z "$ac_lib"; then
13391 ac_res="none required"
13392 else
13393 ac_res=-l$ac_lib
13394 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13395 fi
13396 if ac_fn_c_try_link "$LINENO"; then :
13397 ac_cv_search_DH_get0_key=$ac_res
13398fi
13399rm -f core conftest.err conftest.$ac_objext \
13400 conftest$ac_exeext
13401 if ${ac_cv_search_DH_get0_key+:} false; then :
13402 break
13403fi
13404done
13405if ${ac_cv_search_DH_get0_key+:} false; then :
13406
13407else
13408 ac_cv_search_DH_get0_key=no
13409fi
13410rm conftest.$ac_ext
13411LIBS=$ac_func_search_save_LIBS
13412fi
13413{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DH_get0_key" >&5
13414$as_echo "$ac_cv_search_DH_get0_key" >&6; }
13415ac_res=$ac_cv_search_DH_get0_key
13416if test "$ac_res" != no; then :
13417 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13418
13419$as_echo "#define HAVE_DH_GET0_KEY 1" >>confdefs.h
13420
13421fi
13422
13423 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DH_get0_pqg" >&5
13424$as_echo_n "checking for library containing DH_get0_pqg... " >&6; }
13425if ${ac_cv_search_DH_get0_pqg+:} false; then :
13426 $as_echo_n "(cached) " >&6
13427else
13428 ac_func_search_save_LIBS=$LIBS
13429cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13430/* end confdefs.h. */
13431
13432/* Override any GCC internal prototype to avoid an error.
13433 Use char because int might match the return type of a GCC
13434 builtin and then its argument prototype would still apply. */
13435#ifdef __cplusplus
13436extern "C"
13437#endif
13438char DH_get0_pqg ();
13439int
13440main ()
13441{
13442return DH_get0_pqg ();
13443 ;
13444 return 0;
13445}
13446_ACEOF
13447for ac_lib in '' crypto; do
13448 if test -z "$ac_lib"; then
13449 ac_res="none required"
13450 else
13451 ac_res=-l$ac_lib
13452 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13453 fi
13454 if ac_fn_c_try_link "$LINENO"; then :
13455 ac_cv_search_DH_get0_pqg=$ac_res
13456fi
13457rm -f core conftest.err conftest.$ac_objext \
13458 conftest$ac_exeext
13459 if ${ac_cv_search_DH_get0_pqg+:} false; then :
13460 break
13461fi
13462done
13463if ${ac_cv_search_DH_get0_pqg+:} false; then :
13464
13465else
13466 ac_cv_search_DH_get0_pqg=no
13467fi
13468rm conftest.$ac_ext
13469LIBS=$ac_func_search_save_LIBS
13470fi
13471{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DH_get0_pqg" >&5
13472$as_echo "$ac_cv_search_DH_get0_pqg" >&6; }
13473ac_res=$ac_cv_search_DH_get0_pqg
13474if test "$ac_res" != no; then :
13475 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13476
13477$as_echo "#define HAVE_DH_GET0_PQG 1" >>confdefs.h
13478
13479fi
13480
13481 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DH_set0_key" >&5
13482$as_echo_n "checking for library containing DH_set0_key... " >&6; }
13483if ${ac_cv_search_DH_set0_key+:} false; then :
13484 $as_echo_n "(cached) " >&6
13485else
13486 ac_func_search_save_LIBS=$LIBS
13487cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13488/* end confdefs.h. */
13489
13490/* Override any GCC internal prototype to avoid an error.
13491 Use char because int might match the return type of a GCC
13492 builtin and then its argument prototype would still apply. */
13493#ifdef __cplusplus
13494extern "C"
13495#endif
13496char DH_set0_key ();
13497int
13498main ()
13499{
13500return DH_set0_key ();
13501 ;
13502 return 0;
13503}
13504_ACEOF
13505for ac_lib in '' crypto; do
13506 if test -z "$ac_lib"; then
13507 ac_res="none required"
13508 else
13509 ac_res=-l$ac_lib
13510 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13511 fi
13512 if ac_fn_c_try_link "$LINENO"; then :
13513 ac_cv_search_DH_set0_key=$ac_res
13514fi
13515rm -f core conftest.err conftest.$ac_objext \
13516 conftest$ac_exeext
13517 if ${ac_cv_search_DH_set0_key+:} false; then :
13518 break
13519fi
13520done
13521if ${ac_cv_search_DH_set0_key+:} false; then :
13522
13523else
13524 ac_cv_search_DH_set0_key=no
13525fi
13526rm conftest.$ac_ext
13527LIBS=$ac_func_search_save_LIBS
13528fi
13529{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DH_set0_key" >&5
13530$as_echo "$ac_cv_search_DH_set0_key" >&6; }
13531ac_res=$ac_cv_search_DH_set0_key
13532if test "$ac_res" != no; then :
13533 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13534
13535$as_echo "#define HAVE_DH_SET0_KEY 1" >>confdefs.h
13536
13537fi
13538
13539 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DH_set_length" >&5
13540$as_echo_n "checking for library containing DH_set_length... " >&6; }
13541if ${ac_cv_search_DH_set_length+:} false; then :
13542 $as_echo_n "(cached) " >&6
13543else
13544 ac_func_search_save_LIBS=$LIBS
13545cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13546/* end confdefs.h. */
13547
13548/* Override any GCC internal prototype to avoid an error.
13549 Use char because int might match the return type of a GCC
13550 builtin and then its argument prototype would still apply. */
13551#ifdef __cplusplus
13552extern "C"
13553#endif
13554char DH_set_length ();
13555int
13556main ()
13557{
13558return DH_set_length ();
13559 ;
13560 return 0;
13561}
13562_ACEOF
13563for ac_lib in '' crypto; do
13564 if test -z "$ac_lib"; then
13565 ac_res="none required"
13566 else
13567 ac_res=-l$ac_lib
13568 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13569 fi
13570 if ac_fn_c_try_link "$LINENO"; then :
13571 ac_cv_search_DH_set_length=$ac_res
13572fi
13573rm -f core conftest.err conftest.$ac_objext \
13574 conftest$ac_exeext
13575 if ${ac_cv_search_DH_set_length+:} false; then :
13576 break
13577fi
13578done
13579if ${ac_cv_search_DH_set_length+:} false; then :
13580
13581else
13582 ac_cv_search_DH_set_length=no
13583fi
13584rm conftest.$ac_ext
13585LIBS=$ac_func_search_save_LIBS
13586fi
13587{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DH_set_length" >&5
13588$as_echo "$ac_cv_search_DH_set_length" >&6; }
13589ac_res=$ac_cv_search_DH_set_length
13590if test "$ac_res" != no; then :
13591 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13592
13593$as_echo "#define HAVE_DH_SET_LENGTH 1" >>confdefs.h
13594
13595fi
13596
13597 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DH_set0_pqg" >&5
13598$as_echo_n "checking for library containing DH_set0_pqg... " >&6; }
13599if ${ac_cv_search_DH_set0_pqg+:} false; then :
13600 $as_echo_n "(cached) " >&6
13601else
13602 ac_func_search_save_LIBS=$LIBS
13603cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13604/* end confdefs.h. */
13605
13606/* Override any GCC internal prototype to avoid an error.
13607 Use char because int might match the return type of a GCC
13608 builtin and then its argument prototype would still apply. */
13609#ifdef __cplusplus
13610extern "C"
13611#endif
13612char DH_set0_pqg ();
13613int
13614main ()
13615{
13616return DH_set0_pqg ();
13617 ;
13618 return 0;
13619}
13620_ACEOF
13621for ac_lib in '' crypto; do
13622 if test -z "$ac_lib"; then
13623 ac_res="none required"
13624 else
13625 ac_res=-l$ac_lib
13626 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13627 fi
13628 if ac_fn_c_try_link "$LINENO"; then :
13629 ac_cv_search_DH_set0_pqg=$ac_res
13630fi
13631rm -f core conftest.err conftest.$ac_objext \
13632 conftest$ac_exeext
13633 if ${ac_cv_search_DH_set0_pqg+:} false; then :
13634 break
13635fi
13636done
13637if ${ac_cv_search_DH_set0_pqg+:} false; then :
13638
13639else
13640 ac_cv_search_DH_set0_pqg=no
13641fi
13642rm conftest.$ac_ext
13643LIBS=$ac_func_search_save_LIBS
13644fi
13645{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DH_set0_pqg" >&5
13646$as_echo "$ac_cv_search_DH_set0_pqg" >&6; }
13647ac_res=$ac_cv_search_DH_set0_pqg
13648if test "$ac_res" != no; then :
13649 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13650
13651$as_echo "#define HAVE_DH_SET0_PQG 1" >>confdefs.h
13652
13653fi
13654
13655
13656 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DSA_get0_key" >&5
13657$as_echo_n "checking for library containing DSA_get0_key... " >&6; }
13658if ${ac_cv_search_DSA_get0_key+:} false; then :
13659 $as_echo_n "(cached) " >&6
13660else
13661 ac_func_search_save_LIBS=$LIBS
13662cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13663/* end confdefs.h. */
13664
13665/* Override any GCC internal prototype to avoid an error.
13666 Use char because int might match the return type of a GCC
13667 builtin and then its argument prototype would still apply. */
13668#ifdef __cplusplus
13669extern "C"
13670#endif
13671char DSA_get0_key ();
13672int
13673main ()
13674{
13675return DSA_get0_key ();
13676 ;
13677 return 0;
13678}
13679_ACEOF
13680for ac_lib in '' crypto; do
13681 if test -z "$ac_lib"; then
13682 ac_res="none required"
13683 else
13684 ac_res=-l$ac_lib
13685 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13686 fi
13687 if ac_fn_c_try_link "$LINENO"; then :
13688 ac_cv_search_DSA_get0_key=$ac_res
13689fi
13690rm -f core conftest.err conftest.$ac_objext \
13691 conftest$ac_exeext
13692 if ${ac_cv_search_DSA_get0_key+:} false; then :
13693 break
13694fi
13695done
13696if ${ac_cv_search_DSA_get0_key+:} false; then :
13697
13698else
13699 ac_cv_search_DSA_get0_key=no
13700fi
13701rm conftest.$ac_ext
13702LIBS=$ac_func_search_save_LIBS
13703fi
13704{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DSA_get0_key" >&5
13705$as_echo "$ac_cv_search_DSA_get0_key" >&6; }
13706ac_res=$ac_cv_search_DSA_get0_key
13707if test "$ac_res" != no; then :
13708 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13709
13710$as_echo "#define HAVE_DSA_GET0_KEY 1" >>confdefs.h
13711
13712fi
13713
13714 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DSA_get0_pqg" >&5
13715$as_echo_n "checking for library containing DSA_get0_pqg... " >&6; }
13716if ${ac_cv_search_DSA_get0_pqg+:} false; then :
13717 $as_echo_n "(cached) " >&6
13718else
13719 ac_func_search_save_LIBS=$LIBS
13720cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13721/* end confdefs.h. */
13722
13723/* Override any GCC internal prototype to avoid an error.
13724 Use char because int might match the return type of a GCC
13725 builtin and then its argument prototype would still apply. */
13726#ifdef __cplusplus
13727extern "C"
13728#endif
13729char DSA_get0_pqg ();
13730int
13731main ()
13732{
13733return DSA_get0_pqg ();
13734 ;
13735 return 0;
13736}
13737_ACEOF
13738for ac_lib in '' crypto; do
13739 if test -z "$ac_lib"; then
13740 ac_res="none required"
13741 else
13742 ac_res=-l$ac_lib
13743 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13744 fi
13745 if ac_fn_c_try_link "$LINENO"; then :
13746 ac_cv_search_DSA_get0_pqg=$ac_res
13747fi
13748rm -f core conftest.err conftest.$ac_objext \
13749 conftest$ac_exeext
13750 if ${ac_cv_search_DSA_get0_pqg+:} false; then :
13751 break
13752fi
13753done
13754if ${ac_cv_search_DSA_get0_pqg+:} false; then :
13755
13756else
13757 ac_cv_search_DSA_get0_pqg=no
13758fi
13759rm conftest.$ac_ext
13760LIBS=$ac_func_search_save_LIBS
13761fi
13762{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DSA_get0_pqg" >&5
13763$as_echo "$ac_cv_search_DSA_get0_pqg" >&6; }
13764ac_res=$ac_cv_search_DSA_get0_pqg
13765if test "$ac_res" != no; then :
13766 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13767
13768$as_echo "#define HAVE_DSA_GET0_PQG 1" >>confdefs.h
13769
13770fi
13771
13772 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DSA_set0_key" >&5
13773$as_echo_n "checking for library containing DSA_set0_key... " >&6; }
13774if ${ac_cv_search_DSA_set0_key+:} false; then :
13775 $as_echo_n "(cached) " >&6
13776else
13777 ac_func_search_save_LIBS=$LIBS
13778cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13779/* end confdefs.h. */
13780
13781/* Override any GCC internal prototype to avoid an error.
13782 Use char because int might match the return type of a GCC
13783 builtin and then its argument prototype would still apply. */
13784#ifdef __cplusplus
13785extern "C"
13786#endif
13787char DSA_set0_key ();
13788int
13789main ()
13790{
13791return DSA_set0_key ();
13792 ;
13793 return 0;
13794}
13795_ACEOF
13796for ac_lib in '' crypto; do
13797 if test -z "$ac_lib"; then
13798 ac_res="none required"
13799 else
13800 ac_res=-l$ac_lib
13801 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13802 fi
13803 if ac_fn_c_try_link "$LINENO"; then :
13804 ac_cv_search_DSA_set0_key=$ac_res
13805fi
13806rm -f core conftest.err conftest.$ac_objext \
13807 conftest$ac_exeext
13808 if ${ac_cv_search_DSA_set0_key+:} false; then :
13809 break
13810fi
13811done
13812if ${ac_cv_search_DSA_set0_key+:} false; then :
13813
13814else
13815 ac_cv_search_DSA_set0_key=no
13816fi
13817rm conftest.$ac_ext
13818LIBS=$ac_func_search_save_LIBS
13819fi
13820{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DSA_set0_key" >&5
13821$as_echo "$ac_cv_search_DSA_set0_key" >&6; }
13822ac_res=$ac_cv_search_DSA_set0_key
13823if test "$ac_res" != no; then :
13824 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13825
13826$as_echo "#define HAVE_DSA_SET0_KEY 1" >>confdefs.h
13827
13828fi
13829
13830 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DSA_set0_pqg" >&5
13831$as_echo_n "checking for library containing DSA_set0_pqg... " >&6; }
13832if ${ac_cv_search_DSA_set0_pqg+:} false; then :
13833 $as_echo_n "(cached) " >&6
13834else
13835 ac_func_search_save_LIBS=$LIBS
13836cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13837/* end confdefs.h. */
13838
13839/* Override any GCC internal prototype to avoid an error.
13840 Use char because int might match the return type of a GCC
13841 builtin and then its argument prototype would still apply. */
13842#ifdef __cplusplus
13843extern "C"
13844#endif
13845char DSA_set0_pqg ();
13846int
13847main ()
13848{
13849return DSA_set0_pqg ();
13850 ;
13851 return 0;
13852}
13853_ACEOF
13854for ac_lib in '' crypto; do
13855 if test -z "$ac_lib"; then
13856 ac_res="none required"
13857 else
13858 ac_res=-l$ac_lib
13859 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13860 fi
13861 if ac_fn_c_try_link "$LINENO"; then :
13862 ac_cv_search_DSA_set0_pqg=$ac_res
13863fi
13864rm -f core conftest.err conftest.$ac_objext \
13865 conftest$ac_exeext
13866 if ${ac_cv_search_DSA_set0_pqg+:} false; then :
13867 break
13868fi
13869done
13870if ${ac_cv_search_DSA_set0_pqg+:} false; then :
13871
13872else
13873 ac_cv_search_DSA_set0_pqg=no
13874fi
13875rm conftest.$ac_ext
13876LIBS=$ac_func_search_save_LIBS
13877fi
13878{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DSA_set0_pqg" >&5
13879$as_echo "$ac_cv_search_DSA_set0_pqg" >&6; }
13880ac_res=$ac_cv_search_DSA_set0_pqg
13881if test "$ac_res" != no; then :
13882 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13883
13884$as_echo "#define HAVE_DSA_SET0_PQG 1" >>confdefs.h
13885
13886fi
13887
13888
13889 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DSA_SIG_get0" >&5
13890$as_echo_n "checking for library containing DSA_SIG_get0... " >&6; }
13891if ${ac_cv_search_DSA_SIG_get0+:} false; then :
13892 $as_echo_n "(cached) " >&6
13893else
13894 ac_func_search_save_LIBS=$LIBS
13895cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13896/* end confdefs.h. */
13897
13898/* Override any GCC internal prototype to avoid an error.
13899 Use char because int might match the return type of a GCC
13900 builtin and then its argument prototype would still apply. */
13901#ifdef __cplusplus
13902extern "C"
13903#endif
13904char DSA_SIG_get0 ();
13905int
13906main ()
13907{
13908return DSA_SIG_get0 ();
13909 ;
13910 return 0;
13911}
13912_ACEOF
13913for ac_lib in '' crypto; do
13914 if test -z "$ac_lib"; then
13915 ac_res="none required"
13916 else
13917 ac_res=-l$ac_lib
13918 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13919 fi
13920 if ac_fn_c_try_link "$LINENO"; then :
13921 ac_cv_search_DSA_SIG_get0=$ac_res
13922fi
13923rm -f core conftest.err conftest.$ac_objext \
13924 conftest$ac_exeext
13925 if ${ac_cv_search_DSA_SIG_get0+:} false; then :
13926 break
13927fi
13928done
13929if ${ac_cv_search_DSA_SIG_get0+:} false; then :
13930
13931else
13932 ac_cv_search_DSA_SIG_get0=no
13933fi
13934rm conftest.$ac_ext
13935LIBS=$ac_func_search_save_LIBS
13936fi
13937{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DSA_SIG_get0" >&5
13938$as_echo "$ac_cv_search_DSA_SIG_get0" >&6; }
13939ac_res=$ac_cv_search_DSA_SIG_get0
13940if test "$ac_res" != no; then :
13941 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
13942
13943$as_echo "#define HAVE_DSA_SIG_GET0 1" >>confdefs.h
13944
13945fi
13946
13947 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing DSA_SIG_set0" >&5
13948$as_echo_n "checking for library containing DSA_SIG_set0... " >&6; }
13949if ${ac_cv_search_DSA_SIG_set0+:} false; then :
13950 $as_echo_n "(cached) " >&6
13951else
13952 ac_func_search_save_LIBS=$LIBS
13953cat confdefs.h - <<_ACEOF >conftest.$ac_ext
13954/* end confdefs.h. */
13955
13956/* Override any GCC internal prototype to avoid an error.
13957 Use char because int might match the return type of a GCC
13958 builtin and then its argument prototype would still apply. */
13959#ifdef __cplusplus
13960extern "C"
13961#endif
13962char DSA_SIG_set0 ();
13963int
13964main ()
13965{
13966return DSA_SIG_set0 ();
13967 ;
13968 return 0;
13969}
13970_ACEOF
13971for ac_lib in '' crypto; do
13972 if test -z "$ac_lib"; then
13973 ac_res="none required"
13974 else
13975 ac_res=-l$ac_lib
13976 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
13977 fi
13978 if ac_fn_c_try_link "$LINENO"; then :
13979 ac_cv_search_DSA_SIG_set0=$ac_res
13980fi
13981rm -f core conftest.err conftest.$ac_objext \
13982 conftest$ac_exeext
13983 if ${ac_cv_search_DSA_SIG_set0+:} false; then :
13984 break
13985fi
13986done
13987if ${ac_cv_search_DSA_SIG_set0+:} false; then :
13988
13989else
13990 ac_cv_search_DSA_SIG_set0=no
13991fi
13992rm conftest.$ac_ext
13993LIBS=$ac_func_search_save_LIBS
13994fi
13995{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_DSA_SIG_set0" >&5
13996$as_echo "$ac_cv_search_DSA_SIG_set0" >&6; }
13997ac_res=$ac_cv_search_DSA_SIG_set0
13998if test "$ac_res" != no; then :
13999 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14000
14001$as_echo "#define HAVE_DSA_SIG_SET0 1" >>confdefs.h
14002
14003fi
14004
14005
14006 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ECDSA_SIG_get0" >&5
14007$as_echo_n "checking for library containing ECDSA_SIG_get0... " >&6; }
14008if ${ac_cv_search_ECDSA_SIG_get0+:} false; then :
14009 $as_echo_n "(cached) " >&6
14010else
14011 ac_func_search_save_LIBS=$LIBS
14012cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14013/* end confdefs.h. */
14014
14015/* Override any GCC internal prototype to avoid an error.
14016 Use char because int might match the return type of a GCC
14017 builtin and then its argument prototype would still apply. */
14018#ifdef __cplusplus
14019extern "C"
14020#endif
14021char ECDSA_SIG_get0 ();
14022int
14023main ()
14024{
14025return ECDSA_SIG_get0 ();
14026 ;
14027 return 0;
14028}
14029_ACEOF
14030for ac_lib in '' crypto; do
14031 if test -z "$ac_lib"; then
14032 ac_res="none required"
14033 else
14034 ac_res=-l$ac_lib
14035 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14036 fi
14037 if ac_fn_c_try_link "$LINENO"; then :
14038 ac_cv_search_ECDSA_SIG_get0=$ac_res
14039fi
14040rm -f core conftest.err conftest.$ac_objext \
14041 conftest$ac_exeext
14042 if ${ac_cv_search_ECDSA_SIG_get0+:} false; then :
14043 break
14044fi
14045done
14046if ${ac_cv_search_ECDSA_SIG_get0+:} false; then :
14047
14048else
14049 ac_cv_search_ECDSA_SIG_get0=no
14050fi
14051rm conftest.$ac_ext
14052LIBS=$ac_func_search_save_LIBS
14053fi
14054{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ECDSA_SIG_get0" >&5
14055$as_echo "$ac_cv_search_ECDSA_SIG_get0" >&6; }
14056ac_res=$ac_cv_search_ECDSA_SIG_get0
14057if test "$ac_res" != no; then :
14058 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14059
14060$as_echo "#define HAVE_ECDSA_SIG_GET0 1" >>confdefs.h
14061
14062fi
14063
14064 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing ECDSA_SIG_set0" >&5
14065$as_echo_n "checking for library containing ECDSA_SIG_set0... " >&6; }
14066if ${ac_cv_search_ECDSA_SIG_set0+:} false; then :
14067 $as_echo_n "(cached) " >&6
14068else
14069 ac_func_search_save_LIBS=$LIBS
14070cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14071/* end confdefs.h. */
14072
14073/* Override any GCC internal prototype to avoid an error.
14074 Use char because int might match the return type of a GCC
14075 builtin and then its argument prototype would still apply. */
14076#ifdef __cplusplus
14077extern "C"
14078#endif
14079char ECDSA_SIG_set0 ();
14080int
14081main ()
14082{
14083return ECDSA_SIG_set0 ();
14084 ;
14085 return 0;
14086}
14087_ACEOF
14088for ac_lib in '' crypto; do
14089 if test -z "$ac_lib"; then
14090 ac_res="none required"
14091 else
14092 ac_res=-l$ac_lib
14093 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14094 fi
14095 if ac_fn_c_try_link "$LINENO"; then :
14096 ac_cv_search_ECDSA_SIG_set0=$ac_res
14097fi
14098rm -f core conftest.err conftest.$ac_objext \
14099 conftest$ac_exeext
14100 if ${ac_cv_search_ECDSA_SIG_set0+:} false; then :
14101 break
14102fi
14103done
14104if ${ac_cv_search_ECDSA_SIG_set0+:} false; then :
14105
14106else
14107 ac_cv_search_ECDSA_SIG_set0=no
14108fi
14109rm conftest.$ac_ext
14110LIBS=$ac_func_search_save_LIBS
14111fi
14112{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_ECDSA_SIG_set0" >&5
14113$as_echo "$ac_cv_search_ECDSA_SIG_set0" >&6; }
14114ac_res=$ac_cv_search_ECDSA_SIG_set0
14115if test "$ac_res" != no; then :
14116 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14117
14118$as_echo "#define HAVE_ECDSA_SIG_SET0 1" >>confdefs.h
14119
14120fi
14121
14122
14123 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_CIPHER_CTX_iv" >&5
14124$as_echo_n "checking for library containing EVP_CIPHER_CTX_iv... " >&6; }
14125if ${ac_cv_search_EVP_CIPHER_CTX_iv+:} false; then :
14126 $as_echo_n "(cached) " >&6
14127else
14128 ac_func_search_save_LIBS=$LIBS
14129cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14130/* end confdefs.h. */
14131
14132/* Override any GCC internal prototype to avoid an error.
14133 Use char because int might match the return type of a GCC
14134 builtin and then its argument prototype would still apply. */
14135#ifdef __cplusplus
14136extern "C"
14137#endif
14138char EVP_CIPHER_CTX_iv ();
14139int
14140main ()
14141{
14142return EVP_CIPHER_CTX_iv ();
14143 ;
14144 return 0;
14145}
14146_ACEOF
14147for ac_lib in '' crypto; do
14148 if test -z "$ac_lib"; then
14149 ac_res="none required"
14150 else
14151 ac_res=-l$ac_lib
14152 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14153 fi
14154 if ac_fn_c_try_link "$LINENO"; then :
14155 ac_cv_search_EVP_CIPHER_CTX_iv=$ac_res
14156fi
14157rm -f core conftest.err conftest.$ac_objext \
14158 conftest$ac_exeext
14159 if ${ac_cv_search_EVP_CIPHER_CTX_iv+:} false; then :
14160 break
14161fi
14162done
14163if ${ac_cv_search_EVP_CIPHER_CTX_iv+:} false; then :
14164
14165else
14166 ac_cv_search_EVP_CIPHER_CTX_iv=no
14167fi
14168rm conftest.$ac_ext
14169LIBS=$ac_func_search_save_LIBS
14170fi
14171{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_CIPHER_CTX_iv" >&5
14172$as_echo "$ac_cv_search_EVP_CIPHER_CTX_iv" >&6; }
14173ac_res=$ac_cv_search_EVP_CIPHER_CTX_iv
14174if test "$ac_res" != no; then :
14175 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14176
14177$as_echo "#define HAVE_EVP_CIPHER_CTX_IV 1" >>confdefs.h
14178
14179fi
14180
14181 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_CIPHER_CTX_iv_noconst" >&5
14182$as_echo_n "checking for library containing EVP_CIPHER_CTX_iv_noconst... " >&6; }
14183if ${ac_cv_search_EVP_CIPHER_CTX_iv_noconst+:} false; then :
14184 $as_echo_n "(cached) " >&6
14185else
14186 ac_func_search_save_LIBS=$LIBS
14187cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14188/* end confdefs.h. */
14189
14190/* Override any GCC internal prototype to avoid an error.
14191 Use char because int might match the return type of a GCC
14192 builtin and then its argument prototype would still apply. */
14193#ifdef __cplusplus
14194extern "C"
14195#endif
14196char EVP_CIPHER_CTX_iv_noconst ();
14197int
14198main ()
14199{
14200return EVP_CIPHER_CTX_iv_noconst ();
14201 ;
14202 return 0;
14203}
14204_ACEOF
14205for ac_lib in '' crypto; do
14206 if test -z "$ac_lib"; then
14207 ac_res="none required"
14208 else
14209 ac_res=-l$ac_lib
14210 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14211 fi
14212 if ac_fn_c_try_link "$LINENO"; then :
14213 ac_cv_search_EVP_CIPHER_CTX_iv_noconst=$ac_res
14214fi
14215rm -f core conftest.err conftest.$ac_objext \
14216 conftest$ac_exeext
14217 if ${ac_cv_search_EVP_CIPHER_CTX_iv_noconst+:} false; then :
14218 break
14219fi
14220done
14221if ${ac_cv_search_EVP_CIPHER_CTX_iv_noconst+:} false; then :
14222
14223else
14224 ac_cv_search_EVP_CIPHER_CTX_iv_noconst=no
14225fi
14226rm conftest.$ac_ext
14227LIBS=$ac_func_search_save_LIBS
14228fi
14229{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_CIPHER_CTX_iv_noconst" >&5
14230$as_echo "$ac_cv_search_EVP_CIPHER_CTX_iv_noconst" >&6; }
14231ac_res=$ac_cv_search_EVP_CIPHER_CTX_iv_noconst
14232if test "$ac_res" != no; then :
14233 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14234
14235$as_echo "#define HAVE_EVP_CIPHER_CTX_IV_NOCONST 1" >>confdefs.h
14236
14237fi
14238
14239 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_CIPHER_CTX_get_iv" >&5
14240$as_echo_n "checking for library containing EVP_CIPHER_CTX_get_iv... " >&6; }
14241if ${ac_cv_search_EVP_CIPHER_CTX_get_iv+:} false; then :
14242 $as_echo_n "(cached) " >&6
14243else
14244 ac_func_search_save_LIBS=$LIBS
14245cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14246/* end confdefs.h. */
14247
14248/* Override any GCC internal prototype to avoid an error.
14249 Use char because int might match the return type of a GCC
14250 builtin and then its argument prototype would still apply. */
14251#ifdef __cplusplus
14252extern "C"
14253#endif
14254char EVP_CIPHER_CTX_get_iv ();
14255int
14256main ()
14257{
14258return EVP_CIPHER_CTX_get_iv ();
14259 ;
14260 return 0;
14261}
14262_ACEOF
14263for ac_lib in '' crypto; do
14264 if test -z "$ac_lib"; then
14265 ac_res="none required"
14266 else
14267 ac_res=-l$ac_lib
14268 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14269 fi
14270 if ac_fn_c_try_link "$LINENO"; then :
14271 ac_cv_search_EVP_CIPHER_CTX_get_iv=$ac_res
14272fi
14273rm -f core conftest.err conftest.$ac_objext \
14274 conftest$ac_exeext
14275 if ${ac_cv_search_EVP_CIPHER_CTX_get_iv+:} false; then :
14276 break
14277fi
14278done
14279if ${ac_cv_search_EVP_CIPHER_CTX_get_iv+:} false; then :
14280
14281else
14282 ac_cv_search_EVP_CIPHER_CTX_get_iv=no
14283fi
14284rm conftest.$ac_ext
14285LIBS=$ac_func_search_save_LIBS
14286fi
14287{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_CIPHER_CTX_get_iv" >&5
14288$as_echo "$ac_cv_search_EVP_CIPHER_CTX_get_iv" >&6; }
14289ac_res=$ac_cv_search_EVP_CIPHER_CTX_get_iv
14290if test "$ac_res" != no; then :
14291 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14292
14293$as_echo "#define HAVE_EVP_CIPHER_CTX_GET_IV 1" >>confdefs.h
14294
14295fi
14296
14297 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_CIPHER_CTX_set_iv" >&5
14298$as_echo_n "checking for library containing EVP_CIPHER_CTX_set_iv... " >&6; }
14299if ${ac_cv_search_EVP_CIPHER_CTX_set_iv+:} false; then :
14300 $as_echo_n "(cached) " >&6
14301else
14302 ac_func_search_save_LIBS=$LIBS
14303cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14304/* end confdefs.h. */
14305
14306/* Override any GCC internal prototype to avoid an error.
14307 Use char because int might match the return type of a GCC
14308 builtin and then its argument prototype would still apply. */
14309#ifdef __cplusplus
14310extern "C"
14311#endif
14312char EVP_CIPHER_CTX_set_iv ();
14313int
14314main ()
14315{
14316return EVP_CIPHER_CTX_set_iv ();
14317 ;
14318 return 0;
14319}
14320_ACEOF
14321for ac_lib in '' crypto; do
14322 if test -z "$ac_lib"; then
14323 ac_res="none required"
14324 else
14325 ac_res=-l$ac_lib
14326 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14327 fi
14328 if ac_fn_c_try_link "$LINENO"; then :
14329 ac_cv_search_EVP_CIPHER_CTX_set_iv=$ac_res
14330fi
14331rm -f core conftest.err conftest.$ac_objext \
14332 conftest$ac_exeext
14333 if ${ac_cv_search_EVP_CIPHER_CTX_set_iv+:} false; then :
14334 break
14335fi
14336done
14337if ${ac_cv_search_EVP_CIPHER_CTX_set_iv+:} false; then :
14338
14339else
14340 ac_cv_search_EVP_CIPHER_CTX_set_iv=no
14341fi
14342rm conftest.$ac_ext
14343LIBS=$ac_func_search_save_LIBS
14344fi
14345{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_CIPHER_CTX_set_iv" >&5
14346$as_echo "$ac_cv_search_EVP_CIPHER_CTX_set_iv" >&6; }
14347ac_res=$ac_cv_search_EVP_CIPHER_CTX_set_iv
14348if test "$ac_res" != no; then :
14349 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14350
14351$as_echo "#define HAVE_EVP_CIPHER_CTX_GET_IV 1" >>confdefs.h
14352
14353fi
14354
14355
14356 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_get0_crt_params" >&5
14357$as_echo_n "checking for library containing RSA_get0_crt_params... " >&6; }
14358if ${ac_cv_search_RSA_get0_crt_params+:} false; then :
14359 $as_echo_n "(cached) " >&6
14360else
14361 ac_func_search_save_LIBS=$LIBS
14362cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14363/* end confdefs.h. */
14364
14365/* Override any GCC internal prototype to avoid an error.
14366 Use char because int might match the return type of a GCC
14367 builtin and then its argument prototype would still apply. */
14368#ifdef __cplusplus
14369extern "C"
14370#endif
14371char RSA_get0_crt_params ();
14372int
14373main ()
14374{
14375return RSA_get0_crt_params ();
14376 ;
14377 return 0;
14378}
14379_ACEOF
14380for ac_lib in '' crypto; do
14381 if test -z "$ac_lib"; then
14382 ac_res="none required"
14383 else
14384 ac_res=-l$ac_lib
14385 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14386 fi
14387 if ac_fn_c_try_link "$LINENO"; then :
14388 ac_cv_search_RSA_get0_crt_params=$ac_res
14389fi
14390rm -f core conftest.err conftest.$ac_objext \
14391 conftest$ac_exeext
14392 if ${ac_cv_search_RSA_get0_crt_params+:} false; then :
14393 break
14394fi
14395done
14396if ${ac_cv_search_RSA_get0_crt_params+:} false; then :
14397
14398else
14399 ac_cv_search_RSA_get0_crt_params=no
14400fi
14401rm conftest.$ac_ext
14402LIBS=$ac_func_search_save_LIBS
14403fi
14404{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_get0_crt_params" >&5
14405$as_echo "$ac_cv_search_RSA_get0_crt_params" >&6; }
14406ac_res=$ac_cv_search_RSA_get0_crt_params
14407if test "$ac_res" != no; then :
14408 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14409
14410$as_echo "#define HAVE_RSA_GET0_CRT_PARAMS 1" >>confdefs.h
14411
14412fi
14413
14414 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_get0_factors" >&5
14415$as_echo_n "checking for library containing RSA_get0_factors... " >&6; }
14416if ${ac_cv_search_RSA_get0_factors+:} false; then :
14417 $as_echo_n "(cached) " >&6
14418else
14419 ac_func_search_save_LIBS=$LIBS
14420cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14421/* end confdefs.h. */
14422
14423/* Override any GCC internal prototype to avoid an error.
14424 Use char because int might match the return type of a GCC
14425 builtin and then its argument prototype would still apply. */
14426#ifdef __cplusplus
14427extern "C"
14428#endif
14429char RSA_get0_factors ();
14430int
14431main ()
14432{
14433return RSA_get0_factors ();
14434 ;
14435 return 0;
14436}
14437_ACEOF
14438for ac_lib in '' crypto; do
14439 if test -z "$ac_lib"; then
14440 ac_res="none required"
14441 else
14442 ac_res=-l$ac_lib
14443 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14444 fi
14445 if ac_fn_c_try_link "$LINENO"; then :
14446 ac_cv_search_RSA_get0_factors=$ac_res
14447fi
14448rm -f core conftest.err conftest.$ac_objext \
14449 conftest$ac_exeext
14450 if ${ac_cv_search_RSA_get0_factors+:} false; then :
14451 break
14452fi
14453done
14454if ${ac_cv_search_RSA_get0_factors+:} false; then :
14455
14456else
14457 ac_cv_search_RSA_get0_factors=no
14458fi
14459rm conftest.$ac_ext
14460LIBS=$ac_func_search_save_LIBS
14461fi
14462{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_get0_factors" >&5
14463$as_echo "$ac_cv_search_RSA_get0_factors" >&6; }
14464ac_res=$ac_cv_search_RSA_get0_factors
14465if test "$ac_res" != no; then :
14466 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14467
14468$as_echo "#define HAVE_RSA_GET0_FACTORS 1" >>confdefs.h
14469
14470fi
14471
14472 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_get0_key" >&5
14473$as_echo_n "checking for library containing RSA_get0_key... " >&6; }
14474if ${ac_cv_search_RSA_get0_key+:} false; then :
14475 $as_echo_n "(cached) " >&6
14476else
14477 ac_func_search_save_LIBS=$LIBS
14478cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14479/* end confdefs.h. */
14480
14481/* Override any GCC internal prototype to avoid an error.
14482 Use char because int might match the return type of a GCC
14483 builtin and then its argument prototype would still apply. */
14484#ifdef __cplusplus
14485extern "C"
14486#endif
14487char RSA_get0_key ();
14488int
14489main ()
14490{
14491return RSA_get0_key ();
14492 ;
14493 return 0;
14494}
14495_ACEOF
14496for ac_lib in '' crypto; do
14497 if test -z "$ac_lib"; then
14498 ac_res="none required"
14499 else
14500 ac_res=-l$ac_lib
14501 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14502 fi
14503 if ac_fn_c_try_link "$LINENO"; then :
14504 ac_cv_search_RSA_get0_key=$ac_res
14505fi
14506rm -f core conftest.err conftest.$ac_objext \
14507 conftest$ac_exeext
14508 if ${ac_cv_search_RSA_get0_key+:} false; then :
14509 break
14510fi
14511done
14512if ${ac_cv_search_RSA_get0_key+:} false; then :
14513
14514else
14515 ac_cv_search_RSA_get0_key=no
14516fi
14517rm conftest.$ac_ext
14518LIBS=$ac_func_search_save_LIBS
14519fi
14520{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_get0_key" >&5
14521$as_echo "$ac_cv_search_RSA_get0_key" >&6; }
14522ac_res=$ac_cv_search_RSA_get0_key
14523if test "$ac_res" != no; then :
14524 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14525
14526$as_echo "#define HAVE_RSA_GET0_KEY 1" >>confdefs.h
14527
14528fi
14529
14530 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_set0_crt_params" >&5
14531$as_echo_n "checking for library containing RSA_set0_crt_params... " >&6; }
14532if ${ac_cv_search_RSA_set0_crt_params+:} false; then :
14533 $as_echo_n "(cached) " >&6
14534else
14535 ac_func_search_save_LIBS=$LIBS
14536cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14537/* end confdefs.h. */
14538
14539/* Override any GCC internal prototype to avoid an error.
14540 Use char because int might match the return type of a GCC
14541 builtin and then its argument prototype would still apply. */
14542#ifdef __cplusplus
14543extern "C"
14544#endif
14545char RSA_set0_crt_params ();
14546int
14547main ()
14548{
14549return RSA_set0_crt_params ();
14550 ;
14551 return 0;
14552}
14553_ACEOF
14554for ac_lib in '' crypto; do
14555 if test -z "$ac_lib"; then
14556 ac_res="none required"
14557 else
14558 ac_res=-l$ac_lib
14559 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14560 fi
14561 if ac_fn_c_try_link "$LINENO"; then :
14562 ac_cv_search_RSA_set0_crt_params=$ac_res
14563fi
14564rm -f core conftest.err conftest.$ac_objext \
14565 conftest$ac_exeext
14566 if ${ac_cv_search_RSA_set0_crt_params+:} false; then :
14567 break
14568fi
14569done
14570if ${ac_cv_search_RSA_set0_crt_params+:} false; then :
14571
14572else
14573 ac_cv_search_RSA_set0_crt_params=no
14574fi
14575rm conftest.$ac_ext
14576LIBS=$ac_func_search_save_LIBS
14577fi
14578{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_set0_crt_params" >&5
14579$as_echo "$ac_cv_search_RSA_set0_crt_params" >&6; }
14580ac_res=$ac_cv_search_RSA_set0_crt_params
14581if test "$ac_res" != no; then :
14582 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14583
14584$as_echo "#define HAVE_RSA_SET0_CRT_PARAMS 1" >>confdefs.h
14585
14586fi
14587
14588 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_set0_factors" >&5
14589$as_echo_n "checking for library containing RSA_set0_factors... " >&6; }
14590if ${ac_cv_search_RSA_set0_factors+:} false; then :
14591 $as_echo_n "(cached) " >&6
14592else
14593 ac_func_search_save_LIBS=$LIBS
14594cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14595/* end confdefs.h. */
14596
14597/* Override any GCC internal prototype to avoid an error.
14598 Use char because int might match the return type of a GCC
14599 builtin and then its argument prototype would still apply. */
14600#ifdef __cplusplus
14601extern "C"
14602#endif
14603char RSA_set0_factors ();
14604int
14605main ()
14606{
14607return RSA_set0_factors ();
14608 ;
14609 return 0;
14610}
14611_ACEOF
14612for ac_lib in '' crypto; do
14613 if test -z "$ac_lib"; then
14614 ac_res="none required"
14615 else
14616 ac_res=-l$ac_lib
14617 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14618 fi
14619 if ac_fn_c_try_link "$LINENO"; then :
14620 ac_cv_search_RSA_set0_factors=$ac_res
14621fi
14622rm -f core conftest.err conftest.$ac_objext \
14623 conftest$ac_exeext
14624 if ${ac_cv_search_RSA_set0_factors+:} false; then :
14625 break
14626fi
14627done
14628if ${ac_cv_search_RSA_set0_factors+:} false; then :
14629
14630else
14631 ac_cv_search_RSA_set0_factors=no
14632fi
14633rm conftest.$ac_ext
14634LIBS=$ac_func_search_save_LIBS
14635fi
14636{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_set0_factors" >&5
14637$as_echo "$ac_cv_search_RSA_set0_factors" >&6; }
14638ac_res=$ac_cv_search_RSA_set0_factors
14639if test "$ac_res" != no; then :
14640 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14641
14642$as_echo "#define HAVE_RSA_SET0_FACTORS 1" >>confdefs.h
14643
14644fi
14645
14646 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_set0_key" >&5
14647$as_echo_n "checking for library containing RSA_set0_key... " >&6; }
14648if ${ac_cv_search_RSA_set0_key+:} false; then :
14649 $as_echo_n "(cached) " >&6
14650else
14651 ac_func_search_save_LIBS=$LIBS
14652cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14653/* end confdefs.h. */
14654
14655/* Override any GCC internal prototype to avoid an error.
14656 Use char because int might match the return type of a GCC
14657 builtin and then its argument prototype would still apply. */
14658#ifdef __cplusplus
14659extern "C"
14660#endif
14661char RSA_set0_key ();
14662int
14663main ()
14664{
14665return RSA_set0_key ();
14666 ;
14667 return 0;
14668}
14669_ACEOF
14670for ac_lib in '' crypto; do
14671 if test -z "$ac_lib"; then
14672 ac_res="none required"
14673 else
14674 ac_res=-l$ac_lib
14675 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14676 fi
14677 if ac_fn_c_try_link "$LINENO"; then :
14678 ac_cv_search_RSA_set0_key=$ac_res
14679fi
14680rm -f core conftest.err conftest.$ac_objext \
14681 conftest$ac_exeext
14682 if ${ac_cv_search_RSA_set0_key+:} false; then :
14683 break
14684fi
14685done
14686if ${ac_cv_search_RSA_set0_key+:} false; then :
14687
14688else
14689 ac_cv_search_RSA_set0_key=no
14690fi
14691rm conftest.$ac_ext
14692LIBS=$ac_func_search_save_LIBS
14693fi
14694{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_set0_key" >&5
14695$as_echo "$ac_cv_search_RSA_set0_key" >&6; }
14696ac_res=$ac_cv_search_RSA_set0_key
14697if test "$ac_res" != no; then :
14698 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14699
14700$as_echo "#define HAVE_RSA_SET0_KEY 1" >>confdefs.h
14701
14702fi
14703
14704
14705 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_free" >&5
14706$as_echo_n "checking for library containing RSA_meth_free... " >&6; }
14707if ${ac_cv_search_RSA_meth_free+:} false; then :
14708 $as_echo_n "(cached) " >&6
14709else
14710 ac_func_search_save_LIBS=$LIBS
14711cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14712/* end confdefs.h. */
14713
14714/* Override any GCC internal prototype to avoid an error.
14715 Use char because int might match the return type of a GCC
14716 builtin and then its argument prototype would still apply. */
14717#ifdef __cplusplus
14718extern "C"
14719#endif
14720char RSA_meth_free ();
14721int
14722main ()
14723{
14724return RSA_meth_free ();
14725 ;
14726 return 0;
14727}
14728_ACEOF
14729for ac_lib in '' crypto; do
14730 if test -z "$ac_lib"; then
14731 ac_res="none required"
14732 else
14733 ac_res=-l$ac_lib
14734 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14735 fi
14736 if ac_fn_c_try_link "$LINENO"; then :
14737 ac_cv_search_RSA_meth_free=$ac_res
14738fi
14739rm -f core conftest.err conftest.$ac_objext \
14740 conftest$ac_exeext
14741 if ${ac_cv_search_RSA_meth_free+:} false; then :
14742 break
14743fi
14744done
14745if ${ac_cv_search_RSA_meth_free+:} false; then :
14746
14747else
14748 ac_cv_search_RSA_meth_free=no
14749fi
14750rm conftest.$ac_ext
14751LIBS=$ac_func_search_save_LIBS
14752fi
14753{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_free" >&5
14754$as_echo "$ac_cv_search_RSA_meth_free" >&6; }
14755ac_res=$ac_cv_search_RSA_meth_free
14756if test "$ac_res" != no; then :
14757 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14758
14759$as_echo "#define HAVE_RSA_METH_FREE 1" >>confdefs.h
14760
14761fi
14762
14763 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_dup" >&5
14764$as_echo_n "checking for library containing RSA_meth_dup... " >&6; }
14765if ${ac_cv_search_RSA_meth_dup+:} false; then :
14766 $as_echo_n "(cached) " >&6
14767else
14768 ac_func_search_save_LIBS=$LIBS
14769cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14770/* end confdefs.h. */
14771
14772/* Override any GCC internal prototype to avoid an error.
14773 Use char because int might match the return type of a GCC
14774 builtin and then its argument prototype would still apply. */
14775#ifdef __cplusplus
14776extern "C"
14777#endif
14778char RSA_meth_dup ();
14779int
14780main ()
14781{
14782return RSA_meth_dup ();
14783 ;
14784 return 0;
14785}
14786_ACEOF
14787for ac_lib in '' crypto; do
14788 if test -z "$ac_lib"; then
14789 ac_res="none required"
14790 else
14791 ac_res=-l$ac_lib
14792 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14793 fi
14794 if ac_fn_c_try_link "$LINENO"; then :
14795 ac_cv_search_RSA_meth_dup=$ac_res
14796fi
14797rm -f core conftest.err conftest.$ac_objext \
14798 conftest$ac_exeext
14799 if ${ac_cv_search_RSA_meth_dup+:} false; then :
14800 break
14801fi
14802done
14803if ${ac_cv_search_RSA_meth_dup+:} false; then :
14804
14805else
14806 ac_cv_search_RSA_meth_dup=no
14807fi
14808rm conftest.$ac_ext
14809LIBS=$ac_func_search_save_LIBS
14810fi
14811{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_dup" >&5
14812$as_echo "$ac_cv_search_RSA_meth_dup" >&6; }
14813ac_res=$ac_cv_search_RSA_meth_dup
14814if test "$ac_res" != no; then :
14815 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14816
14817$as_echo "#define HAVE_RSA_METH_DUP 1" >>confdefs.h
14818
14819fi
14820
14821 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_set1_name" >&5
14822$as_echo_n "checking for library containing RSA_meth_set1_name... " >&6; }
14823if ${ac_cv_search_RSA_meth_set1_name+:} false; then :
14824 $as_echo_n "(cached) " >&6
14825else
14826 ac_func_search_save_LIBS=$LIBS
14827cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14828/* end confdefs.h. */
14829
14830/* Override any GCC internal prototype to avoid an error.
14831 Use char because int might match the return type of a GCC
14832 builtin and then its argument prototype would still apply. */
14833#ifdef __cplusplus
14834extern "C"
14835#endif
14836char RSA_meth_set1_name ();
14837int
14838main ()
14839{
14840return RSA_meth_set1_name ();
14841 ;
14842 return 0;
14843}
14844_ACEOF
14845for ac_lib in '' crypto; do
14846 if test -z "$ac_lib"; then
14847 ac_res="none required"
14848 else
14849 ac_res=-l$ac_lib
14850 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14851 fi
14852 if ac_fn_c_try_link "$LINENO"; then :
14853 ac_cv_search_RSA_meth_set1_name=$ac_res
14854fi
14855rm -f core conftest.err conftest.$ac_objext \
14856 conftest$ac_exeext
14857 if ${ac_cv_search_RSA_meth_set1_name+:} false; then :
14858 break
14859fi
14860done
14861if ${ac_cv_search_RSA_meth_set1_name+:} false; then :
14862
14863else
14864 ac_cv_search_RSA_meth_set1_name=no
14865fi
14866rm conftest.$ac_ext
14867LIBS=$ac_func_search_save_LIBS
14868fi
14869{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_set1_name" >&5
14870$as_echo "$ac_cv_search_RSA_meth_set1_name" >&6; }
14871ac_res=$ac_cv_search_RSA_meth_set1_name
14872if test "$ac_res" != no; then :
14873 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14874
14875$as_echo "#define HAVE_RSA_METH_SET1_NAME 1" >>confdefs.h
14876
14877fi
14878
14879 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_get_finish" >&5
14880$as_echo_n "checking for library containing RSA_meth_get_finish... " >&6; }
14881if ${ac_cv_search_RSA_meth_get_finish+:} false; then :
14882 $as_echo_n "(cached) " >&6
14883else
14884 ac_func_search_save_LIBS=$LIBS
14885cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14886/* end confdefs.h. */
14887
14888/* Override any GCC internal prototype to avoid an error.
14889 Use char because int might match the return type of a GCC
14890 builtin and then its argument prototype would still apply. */
14891#ifdef __cplusplus
14892extern "C"
14893#endif
14894char RSA_meth_get_finish ();
14895int
14896main ()
14897{
14898return RSA_meth_get_finish ();
14899 ;
14900 return 0;
14901}
14902_ACEOF
14903for ac_lib in '' crypto; do
14904 if test -z "$ac_lib"; then
14905 ac_res="none required"
14906 else
14907 ac_res=-l$ac_lib
14908 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14909 fi
14910 if ac_fn_c_try_link "$LINENO"; then :
14911 ac_cv_search_RSA_meth_get_finish=$ac_res
14912fi
14913rm -f core conftest.err conftest.$ac_objext \
14914 conftest$ac_exeext
14915 if ${ac_cv_search_RSA_meth_get_finish+:} false; then :
14916 break
14917fi
14918done
14919if ${ac_cv_search_RSA_meth_get_finish+:} false; then :
14920
14921else
14922 ac_cv_search_RSA_meth_get_finish=no
14923fi
14924rm conftest.$ac_ext
14925LIBS=$ac_func_search_save_LIBS
14926fi
14927{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_get_finish" >&5
14928$as_echo "$ac_cv_search_RSA_meth_get_finish" >&6; }
14929ac_res=$ac_cv_search_RSA_meth_get_finish
14930if test "$ac_res" != no; then :
14931 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14932
14933$as_echo "#define HAVE_RSA_METH_GET_FINISH 1" >>confdefs.h
14934
14935fi
14936
14937 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_set_priv_enc" >&5
14938$as_echo_n "checking for library containing RSA_meth_set_priv_enc... " >&6; }
14939if ${ac_cv_search_RSA_meth_set_priv_enc+:} false; then :
14940 $as_echo_n "(cached) " >&6
14941else
14942 ac_func_search_save_LIBS=$LIBS
14943cat confdefs.h - <<_ACEOF >conftest.$ac_ext
14944/* end confdefs.h. */
14945
14946/* Override any GCC internal prototype to avoid an error.
14947 Use char because int might match the return type of a GCC
14948 builtin and then its argument prototype would still apply. */
14949#ifdef __cplusplus
14950extern "C"
14951#endif
14952char RSA_meth_set_priv_enc ();
14953int
14954main ()
14955{
14956return RSA_meth_set_priv_enc ();
14957 ;
14958 return 0;
14959}
14960_ACEOF
14961for ac_lib in '' crypto; do
14962 if test -z "$ac_lib"; then
14963 ac_res="none required"
14964 else
14965 ac_res=-l$ac_lib
14966 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
14967 fi
14968 if ac_fn_c_try_link "$LINENO"; then :
14969 ac_cv_search_RSA_meth_set_priv_enc=$ac_res
14970fi
14971rm -f core conftest.err conftest.$ac_objext \
14972 conftest$ac_exeext
14973 if ${ac_cv_search_RSA_meth_set_priv_enc+:} false; then :
14974 break
14975fi
14976done
14977if ${ac_cv_search_RSA_meth_set_priv_enc+:} false; then :
14978
14979else
14980 ac_cv_search_RSA_meth_set_priv_enc=no
14981fi
14982rm conftest.$ac_ext
14983LIBS=$ac_func_search_save_LIBS
14984fi
14985{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_set_priv_enc" >&5
14986$as_echo "$ac_cv_search_RSA_meth_set_priv_enc" >&6; }
14987ac_res=$ac_cv_search_RSA_meth_set_priv_enc
14988if test "$ac_res" != no; then :
14989 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
14990
14991$as_echo "#define HAVE_RSA_METH_SET_PRIV_ENC 1" >>confdefs.h
14992
14993fi
14994
14995 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_set_priv_dec" >&5
14996$as_echo_n "checking for library containing RSA_meth_set_priv_dec... " >&6; }
14997if ${ac_cv_search_RSA_meth_set_priv_dec+:} false; then :
14998 $as_echo_n "(cached) " >&6
14999else
15000 ac_func_search_save_LIBS=$LIBS
15001cat confdefs.h - <<_ACEOF >conftest.$ac_ext
15002/* end confdefs.h. */
15003
15004/* Override any GCC internal prototype to avoid an error.
15005 Use char because int might match the return type of a GCC
15006 builtin and then its argument prototype would still apply. */
15007#ifdef __cplusplus
15008extern "C"
15009#endif
15010char RSA_meth_set_priv_dec ();
15011int
15012main ()
15013{
15014return RSA_meth_set_priv_dec ();
15015 ;
15016 return 0;
15017}
15018_ACEOF
15019for ac_lib in '' crypto; do
15020 if test -z "$ac_lib"; then
15021 ac_res="none required"
15022 else
15023 ac_res=-l$ac_lib
15024 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
15025 fi
15026 if ac_fn_c_try_link "$LINENO"; then :
15027 ac_cv_search_RSA_meth_set_priv_dec=$ac_res
15028fi
15029rm -f core conftest.err conftest.$ac_objext \
15030 conftest$ac_exeext
15031 if ${ac_cv_search_RSA_meth_set_priv_dec+:} false; then :
15032 break
15033fi
15034done
15035if ${ac_cv_search_RSA_meth_set_priv_dec+:} false; then :
15036
15037else
15038 ac_cv_search_RSA_meth_set_priv_dec=no
15039fi
15040rm conftest.$ac_ext
15041LIBS=$ac_func_search_save_LIBS
15042fi
15043{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_set_priv_dec" >&5
15044$as_echo "$ac_cv_search_RSA_meth_set_priv_dec" >&6; }
15045ac_res=$ac_cv_search_RSA_meth_set_priv_dec
15046if test "$ac_res" != no; then :
15047 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
15048
15049$as_echo "#define HAVE_RSA_METH_SET_PRIV_DEC 1" >>confdefs.h
15050
15051fi
15052
15053 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing RSA_meth_set_finish" >&5
15054$as_echo_n "checking for library containing RSA_meth_set_finish... " >&6; }
15055if ${ac_cv_search_RSA_meth_set_finish+:} false; then :
15056 $as_echo_n "(cached) " >&6
15057else
15058 ac_func_search_save_LIBS=$LIBS
15059cat confdefs.h - <<_ACEOF >conftest.$ac_ext
15060/* end confdefs.h. */
15061
15062/* Override any GCC internal prototype to avoid an error.
15063 Use char because int might match the return type of a GCC
15064 builtin and then its argument prototype would still apply. */
15065#ifdef __cplusplus
15066extern "C"
15067#endif
15068char RSA_meth_set_finish ();
15069int
15070main ()
15071{
15072return RSA_meth_set_finish ();
15073 ;
15074 return 0;
15075}
15076_ACEOF
15077for ac_lib in '' crypto; do
15078 if test -z "$ac_lib"; then
15079 ac_res="none required"
15080 else
15081 ac_res=-l$ac_lib
15082 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
15083 fi
15084 if ac_fn_c_try_link "$LINENO"; then :
15085 ac_cv_search_RSA_meth_set_finish=$ac_res
15086fi
15087rm -f core conftest.err conftest.$ac_objext \
15088 conftest$ac_exeext
15089 if ${ac_cv_search_RSA_meth_set_finish+:} false; then :
15090 break
15091fi
15092done
15093if ${ac_cv_search_RSA_meth_set_finish+:} false; then :
15094
15095else
15096 ac_cv_search_RSA_meth_set_finish=no
15097fi
15098rm conftest.$ac_ext
15099LIBS=$ac_func_search_save_LIBS
15100fi
15101{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_RSA_meth_set_finish" >&5
15102$as_echo "$ac_cv_search_RSA_meth_set_finish" >&6; }
15103ac_res=$ac_cv_search_RSA_meth_set_finish
15104if test "$ac_res" != no; then :
15105 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
15106
15107$as_echo "#define HAVE_RSA_METH_SET_FINISH 1" >>confdefs.h
15108
15109fi
15110
15111
15112 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_PKEY_get0_RSA" >&5
15113$as_echo_n "checking for library containing EVP_PKEY_get0_RSA... " >&6; }
15114if ${ac_cv_search_EVP_PKEY_get0_RSA+:} false; then :
15115 $as_echo_n "(cached) " >&6
15116else
15117 ac_func_search_save_LIBS=$LIBS
15118cat confdefs.h - <<_ACEOF >conftest.$ac_ext
15119/* end confdefs.h. */
15120
15121/* Override any GCC internal prototype to avoid an error.
15122 Use char because int might match the return type of a GCC
15123 builtin and then its argument prototype would still apply. */
15124#ifdef __cplusplus
15125extern "C"
15126#endif
15127char EVP_PKEY_get0_RSA ();
15128int
15129main ()
15130{
15131return EVP_PKEY_get0_RSA ();
15132 ;
15133 return 0;
15134}
15135_ACEOF
15136for ac_lib in '' crypto; do
15137 if test -z "$ac_lib"; then
15138 ac_res="none required"
15139 else
15140 ac_res=-l$ac_lib
15141 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
15142 fi
15143 if ac_fn_c_try_link "$LINENO"; then :
15144 ac_cv_search_EVP_PKEY_get0_RSA=$ac_res
15145fi
15146rm -f core conftest.err conftest.$ac_objext \
15147 conftest$ac_exeext
15148 if ${ac_cv_search_EVP_PKEY_get0_RSA+:} false; then :
15149 break
15150fi
15151done
15152if ${ac_cv_search_EVP_PKEY_get0_RSA+:} false; then :
15153
15154else
15155 ac_cv_search_EVP_PKEY_get0_RSA=no
15156fi
15157rm conftest.$ac_ext
15158LIBS=$ac_func_search_save_LIBS
15159fi
15160{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_PKEY_get0_RSA" >&5
15161$as_echo "$ac_cv_search_EVP_PKEY_get0_RSA" >&6; }
15162ac_res=$ac_cv_search_EVP_PKEY_get0_RSA
15163if test "$ac_res" != no; then :
15164 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
15165
15166$as_echo "#define HAVE_EVP_PKEY_GET0_RSA 1" >>confdefs.h
15167
15168fi
15169
15170
15171 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_MD_CTX_new" >&5
15172$as_echo_n "checking for library containing EVP_MD_CTX_new... " >&6; }
15173if ${ac_cv_search_EVP_MD_CTX_new+:} false; then :
15174 $as_echo_n "(cached) " >&6
15175else
15176 ac_func_search_save_LIBS=$LIBS
15177cat confdefs.h - <<_ACEOF >conftest.$ac_ext
15178/* end confdefs.h. */
15179
15180/* Override any GCC internal prototype to avoid an error.
15181 Use char because int might match the return type of a GCC
15182 builtin and then its argument prototype would still apply. */
15183#ifdef __cplusplus
15184extern "C"
15185#endif
15186char EVP_MD_CTX_new ();
15187int
15188main ()
15189{
15190return EVP_MD_CTX_new ();
15191 ;
15192 return 0;
15193}
15194_ACEOF
15195for ac_lib in '' crypto; do
15196 if test -z "$ac_lib"; then
15197 ac_res="none required"
15198 else
15199 ac_res=-l$ac_lib
15200 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
15201 fi
15202 if ac_fn_c_try_link "$LINENO"; then :
15203 ac_cv_search_EVP_MD_CTX_new=$ac_res
15204fi
15205rm -f core conftest.err conftest.$ac_objext \
15206 conftest$ac_exeext
15207 if ${ac_cv_search_EVP_MD_CTX_new+:} false; then :
15208 break
15209fi
15210done
15211if ${ac_cv_search_EVP_MD_CTX_new+:} false; then :
15212
15213else
15214 ac_cv_search_EVP_MD_CTX_new=no
15215fi
15216rm conftest.$ac_ext
15217LIBS=$ac_func_search_save_LIBS
15218fi
15219{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_MD_CTX_new" >&5
15220$as_echo "$ac_cv_search_EVP_MD_CTX_new" >&6; }
15221ac_res=$ac_cv_search_EVP_MD_CTX_new
15222if test "$ac_res" != no; then :
15223 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
15224
15225$as_echo "#define HAVE_EVP_MD_CTX_NEW 1" >>confdefs.h
15226
15227fi
15228
15229 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EVP_MD_CTX_free" >&5
15230$as_echo_n "checking for library containing EVP_MD_CTX_free... " >&6; }
15231if ${ac_cv_search_EVP_MD_CTX_free+:} false; then :
15232 $as_echo_n "(cached) " >&6
15233else
15234 ac_func_search_save_LIBS=$LIBS
15235cat confdefs.h - <<_ACEOF >conftest.$ac_ext
15236/* end confdefs.h. */
15237
15238/* Override any GCC internal prototype to avoid an error.
15239 Use char because int might match the return type of a GCC
15240 builtin and then its argument prototype would still apply. */
15241#ifdef __cplusplus
15242extern "C"
15243#endif
15244char EVP_MD_CTX_free ();
15245int
15246main ()
15247{
15248return EVP_MD_CTX_free ();
15249 ;
15250 return 0;
15251}
15252_ACEOF
15253for ac_lib in '' crypto; do
15254 if test -z "$ac_lib"; then
15255 ac_res="none required"
15256 else
15257 ac_res=-l$ac_lib
15258 LIBS="-l$ac_lib $ac_func_search_save_LIBS"
15259 fi
15260 if ac_fn_c_try_link "$LINENO"; then :
15261 ac_cv_search_EVP_MD_CTX_free=$ac_res
15262fi
15263rm -f core conftest.err conftest.$ac_objext \
15264 conftest$ac_exeext
15265 if ${ac_cv_search_EVP_MD_CTX_free+:} false; then :
15266 break
15267fi
15268done
15269if ${ac_cv_search_EVP_MD_CTX_free+:} false; then :
15270
15271else
15272 ac_cv_search_EVP_MD_CTX_free=no
15273fi
15274rm conftest.$ac_ext
15275LIBS=$ac_func_search_save_LIBS
15276fi
15277{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EVP_MD_CTX_free" >&5
15278$as_echo "$ac_cv_search_EVP_MD_CTX_free" >&6; }
15279ac_res=$ac_cv_search_EVP_MD_CTX_free
15280if test "$ac_res" != no; then :
15281 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
15282
15283$as_echo "#define HAVE_EVP_MD_CTX_FREE 1" >>confdefs.h
15284
15285fi
15286
15287
15288 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if EVP_DigestUpdate returns an int" >&5 13175 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if EVP_DigestUpdate returns an int" >&5
15289$as_echo_n "checking if EVP_DigestUpdate returns an int... " >&6; } 13176$as_echo_n "checking if EVP_DigestUpdate returns an int... " >&6; }
15290 cat confdefs.h - <<_ACEOF >conftest.$ac_ext 13177 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -15626,6 +13513,17 @@ rm -f core conftest.err conftest.$ac_objext \
15626 13513
15627$as_echo "#define OPENSSL_HAS_ECC 1" >>confdefs.h 13514$as_echo "#define OPENSSL_HAS_ECC 1" >>confdefs.h
15628 13515
13516 for ac_func in EC_KEY_METHOD_new
13517do :
13518 ac_fn_c_check_func "$LINENO" "EC_KEY_METHOD_new" "ac_cv_func_EC_KEY_METHOD_new"
13519if test "x$ac_cv_func_EC_KEY_METHOD_new" = xyes; then :
13520 cat >>confdefs.h <<_ACEOF
13521#define HAVE_EC_KEY_METHOD_NEW 1
13522_ACEOF
13523
13524fi
13525done
13526
15629 fi 13527 fi
15630 if test x$enable_nistp256 = x1; then 13528 if test x$enable_nistp256 = x1; then
15631 13529
@@ -20190,8 +18088,8 @@ fi
20190 18088
20191 18089
20192 fi 18090 fi
20193 if test ! -z "$need_dash_r" ; then 18091 if test -n "${rpath_opt}" ; then
20194 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib" 18092 LDFLAGS="$LDFLAGS ${rpath_opt}${KRB5ROOT}/lib"
20195 fi 18093 fi
20196 if test ! -z "$blibpath" ; then 18094 if test ! -z "$blibpath" ; then
20197 blibpath="$blibpath:${KRB5ROOT}/lib" 18095 blibpath="$blibpath:${KRB5ROOT}/lib"
diff --git a/configure.ac b/configure.ac
index 7379ab358..30be6c182 100644
--- a/configure.ac
+++ b/configure.ac
@@ -19,7 +19,7 @@ AC_CONFIG_SRCDIR([ssh.c])
19AC_LANG([C]) 19AC_LANG([C])
20 20
21AC_CONFIG_HEADER([config.h]) 21AC_CONFIG_HEADER([config.h])
22AC_PROG_CC 22AC_PROG_CC([cc gcc])
23AC_CANONICAL_HOST 23AC_CANONICAL_HOST
24AC_C_BIGENDIAN 24AC_C_BIGENDIAN
25 25
@@ -285,10 +285,11 @@ AC_ARG_WITH([rpath],
285 [ --without-rpath Disable auto-added -R linker paths], 285 [ --without-rpath Disable auto-added -R linker paths],
286 [ 286 [
287 if test "x$withval" = "xno" ; then 287 if test "x$withval" = "xno" ; then
288 need_dash_r="" 288 rpath_opt=""
289 fi 289 elif test "x$withval" = "xyes" ; then
290 if test "x$withval" = "xyes" ; then 290 rpath_opt="-R"
291 need_dash_r=1 291 else
292 rpath_opt="$withval"
292 fi 293 fi
293 ] 294 ]
294) 295)
@@ -911,7 +912,7 @@ mips-sony-bsd|mips-sony-newsos4)
911*-*-netbsd*) 912*-*-netbsd*)
912 check_for_libcrypt_before=1 913 check_for_libcrypt_before=1
913 if test "x$withval" != "xno" ; then 914 if test "x$withval" != "xno" ; then
914 need_dash_r=1 915 rpath_opt="-R"
915 fi 916 fi
916 CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE" 917 CPPFLAGS="$CPPFLAGS -D_OPENBSD_SOURCE"
917 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way]) 918 AC_DEFINE([SSH_TUN_FREEBSD], [1], [Open tunnel devices the FreeBSD way])
@@ -962,7 +963,7 @@ mips-sony-bsd|mips-sony-newsos4)
962 ;; 963 ;;
963*-*-solaris*) 964*-*-solaris*)
964 if test "x$withval" != "xno" ; then 965 if test "x$withval" != "xno" ; then
965 need_dash_r=1 966 rpath_opt="-R"
966 fi 967 fi
967 AC_DEFINE([PAM_SUN_CODEBASE]) 968 AC_DEFINE([PAM_SUN_CODEBASE])
968 AC_DEFINE([LOGIN_NEEDS_UTMPX]) 969 AC_DEFINE([LOGIN_NEEDS_UTMPX])
@@ -1263,14 +1264,14 @@ AC_ARG_WITH([zlib],
1263 AC_MSG_ERROR([*** zlib is required ***]) 1264 AC_MSG_ERROR([*** zlib is required ***])
1264 elif test "x$withval" != "xyes"; then 1265 elif test "x$withval" != "xyes"; then
1265 if test -d "$withval/lib"; then 1266 if test -d "$withval/lib"; then
1266 if test -n "${need_dash_r}"; then 1267 if test -n "${rpath_opt}"; then
1267 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 1268 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}"
1268 else 1269 else
1269 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 1270 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1270 fi 1271 fi
1271 else 1272 else
1272 if test -n "${need_dash_r}"; then 1273 if test -n "${rpath_opt}"; then
1273 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 1274 LDFLAGS="-L${withval} ${rpath_opt}${withval} ${LDFLAGS}"
1274 else 1275 else
1275 LDFLAGS="-L${withval} ${LDFLAGS}" 1276 LDFLAGS="-L${withval} ${LDFLAGS}"
1276 fi 1277 fi
@@ -1290,8 +1291,8 @@ AC_CHECK_LIB([z], [deflate], ,
1290 saved_LDFLAGS="$LDFLAGS" 1291 saved_LDFLAGS="$LDFLAGS"
1291 save_LIBS="$LIBS" 1292 save_LIBS="$LIBS"
1292 dnl Check default zlib install dir 1293 dnl Check default zlib install dir
1293 if test -n "${need_dash_r}"; then 1294 if test -n "${rpath_opt}"; then
1294 LDFLAGS="-L/usr/local/lib -R/usr/local/lib ${saved_LDFLAGS}" 1295 LDFLAGS="-L/usr/local/lib ${rpath_opt}/usr/local/lib ${saved_LDFLAGS}"
1295 else 1296 else
1296 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}" 1297 LDFLAGS="-L/usr/local/lib ${saved_LDFLAGS}"
1297 fi 1298 fi
@@ -1558,8 +1559,8 @@ AC_ARG_WITH([libedit],
1558 fi 1559 fi
1559 else 1560 else
1560 CPPFLAGS="$CPPFLAGS -I${withval}/include" 1561 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1561 if test -n "${need_dash_r}"; then 1562 if test -n "${rpath_opt}"; then
1562 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 1563 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}"
1563 else 1564 else
1564 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 1565 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
1565 fi 1566 fi
@@ -1719,7 +1720,9 @@ AC_CHECK_FUNCS([ \
1719 errx \ 1720 errx \
1720 explicit_bzero \ 1721 explicit_bzero \
1721 fchmod \ 1722 fchmod \
1723 fchmodat \
1722 fchown \ 1724 fchown \
1725 fchownat \
1723 flock \ 1726 flock \
1724 freeaddrinfo \ 1727 freeaddrinfo \
1725 freezero \ 1728 freezero \
@@ -1812,6 +1815,7 @@ AC_CHECK_FUNCS([ \
1812 truncate \ 1815 truncate \
1813 unsetenv \ 1816 unsetenv \
1814 updwtmpx \ 1817 updwtmpx \
1818 utimensat \
1815 user_from_uid \ 1819 user_from_uid \
1816 usleep \ 1820 usleep \
1817 vasprintf \ 1821 vasprintf \
@@ -2476,20 +2480,20 @@ AC_ARG_WITH([ssl-dir],
2476 ./*|../*) withval="`pwd`/$withval" 2480 ./*|../*) withval="`pwd`/$withval"
2477 esac 2481 esac
2478 if test -d "$withval/lib"; then 2482 if test -d "$withval/lib"; then
2479 if test -n "${need_dash_r}"; then 2483 if test -n "${rpath_opt}"; then
2480 LDFLAGS="-L${withval}/lib -R${withval}/lib ${LDFLAGS}" 2484 LDFLAGS="-L${withval}/lib ${rpath_opt}${withval}/lib ${LDFLAGS}"
2481 else 2485 else
2482 LDFLAGS="-L${withval}/lib ${LDFLAGS}" 2486 LDFLAGS="-L${withval}/lib ${LDFLAGS}"
2483 fi 2487 fi
2484 elif test -d "$withval/lib64"; then 2488 elif test -d "$withval/lib64"; then
2485 if test -n "${need_dash_r}"; then 2489 if test -n "${rpath_opt}"; then
2486 LDFLAGS="-L${withval}/lib64 -R${withval}/lib64 ${LDFLAGS}" 2490 LDFLAGS="-L${withval}/lib64 ${rpath_opt}${withval}/lib64 ${LDFLAGS}"
2487 else 2491 else
2488 LDFLAGS="-L${withval}/lib64 ${LDFLAGS}" 2492 LDFLAGS="-L${withval}/lib64 ${LDFLAGS}"
2489 fi 2493 fi
2490 else 2494 else
2491 if test -n "${need_dash_r}"; then 2495 if test -n "${rpath_opt}"; then
2492 LDFLAGS="-L${withval} -R${withval} ${LDFLAGS}" 2496 LDFLAGS="-L${withval} ${rpath_opt}${withval} ${LDFLAGS}"
2493 else 2497 else
2494 LDFLAGS="-L${withval} ${LDFLAGS}" 2498 LDFLAGS="-L${withval} ${LDFLAGS}"
2495 fi 2499 fi
@@ -2527,26 +2531,10 @@ AC_ARG_WITH([ssl-engine],
2527 2531
2528if test "x$openssl" = "xyes" ; then 2532if test "x$openssl" = "xyes" ; then
2529 LIBS="-lcrypto $LIBS" 2533 LIBS="-lcrypto $LIBS"
2530 AC_TRY_LINK_FUNC([RAND_add], [AC_DEFINE([HAVE_OPENSSL], [1], 2534 AC_TRY_LINK_FUNC([RAND_add], ,
2531 [Define if your ssl headers are included 2535 [AC_MSG_ERROR([*** working libcrypto not found, check config.log])])
2532 with #include <openssl/header.h>])], 2536 AC_CHECK_HEADER([openssl/opensslv.h], ,
2533 [ 2537 [AC_MSG_ERROR([*** OpenSSL headers missing - please install first or check config.log ***])])
2534 dnl Check default openssl install dir
2535 if test -n "${need_dash_r}"; then
2536 LDFLAGS="-L/usr/local/ssl/lib -R/usr/local/ssl/lib ${saved_LDFLAGS}"
2537 else
2538 LDFLAGS="-L/usr/local/ssl/lib ${saved_LDFLAGS}"
2539 fi
2540 CPPFLAGS="-I/usr/local/ssl/include ${saved_CPPFLAGS}"
2541 AC_CHECK_HEADER([openssl/opensslv.h], ,
2542 [AC_MSG_ERROR([*** OpenSSL headers missing - please install first or check config.log ***])])
2543 AC_TRY_LINK_FUNC([RAND_add], [AC_DEFINE([HAVE_OPENSSL])],
2544 [
2545 AC_MSG_ERROR([*** Can't find recent OpenSSL libcrypto (see config.log for details) ***])
2546 ]
2547 )
2548 ]
2549 )
2550 2538
2551 # Determine OpenSSL header version 2539 # Determine OpenSSL header version
2552 AC_MSG_CHECKING([OpenSSL header version]) 2540 AC_MSG_CHECKING([OpenSSL header version])
@@ -2585,6 +2573,9 @@ if test "x$openssl" = "xyes" ; then
2585 ] 2573 ]
2586 ) 2574 )
2587 2575
2576 # Determining OpenSSL library version is version dependent.
2577 AC_CHECK_FUNCS([OpenSSL_version OpenSSL_version_num])
2578
2588 # Determine OpenSSL library version 2579 # Determine OpenSSL library version
2589 AC_MSG_CHECKING([OpenSSL library version]) 2580 AC_MSG_CHECKING([OpenSSL library version])
2590 AC_RUN_IFELSE( 2581 AC_RUN_IFELSE(
@@ -2601,9 +2592,18 @@ if test "x$openssl" = "xyes" ; then
2601 fd = fopen(DATA,"w"); 2592 fd = fopen(DATA,"w");
2602 if(fd == NULL) 2593 if(fd == NULL)
2603 exit(1); 2594 exit(1);
2604 2595#ifndef OPENSSL_VERSION
2605 if ((rc = fprintf(fd, "%08lx (%s)\n", (unsigned long)SSLeay(), 2596# define OPENSSL_VERSION SSLEAY_VERSION
2606 SSLeay_version(SSLEAY_VERSION))) < 0) 2597#endif
2598#ifndef HAVE_OPENSSL_VERSION
2599# define OpenSSL_version SSLeay_version
2600#endif
2601#ifndef HAVE_OPENSSL_VERSION_NUM
2602# define OpenSSL_version_num SSLeay
2603#endif
2604 if ((rc = fprintf(fd, "%08lx (%s)\n",
2605 (unsigned long)OpenSSL_version_num(),
2606 OpenSSL_version(OPENSSL_VERSION))) < 0)
2607 exit(1); 2607 exit(1);
2608 2608
2609 exit(0); 2609 exit(0);
@@ -2616,14 +2616,15 @@ if test "x$openssl" = "xyes" ; then
2616 AC_MSG_ERROR([OpenSSL >= 1.0.1 required (have "$ssl_library_ver")]) 2616 AC_MSG_ERROR([OpenSSL >= 1.0.1 required (have "$ssl_library_ver")])
2617 ;; 2617 ;;
2618 100*) ;; # 1.0.x 2618 100*) ;; # 1.0.x
2619 101000[0123456]*) 2619 101000[[0123456]]*)
2620 # https://github.com/openssl/openssl/pull/4613 2620 # https://github.com/openssl/openssl/pull/4613
2621 AC_MSG_ERROR([OpenSSL 1.1.x versions prior to 1.1.0g have a bug that breaks their use with OpenSSH (have "$ssl_library_ver")]) 2621 AC_MSG_ERROR([OpenSSL 1.1.x versions prior to 1.1.0g have a bug that breaks their use with OpenSSH (have "$ssl_library_ver")])
2622 ;; 2622 ;;
2623 101*) ;; # 1.1.x 2623 101*) ;; # 1.1.x
2624 200*) ;; # LibreSSL 2624 200*) ;; # LibreSSL
2625 300*) ;; # OpenSSL development branch.
2625 *) 2626 *)
2626 AC_MSG_ERROR([OpenSSL > 1.1.x is not yet supported (have "$ssl_library_ver")]) 2627 AC_MSG_ERROR([Unknown/unsupported OpenSSL version ("$ssl_library_ver")])
2627 ;; 2628 ;;
2628 esac 2629 esac
2629 AC_MSG_RESULT([$ssl_library_ver]) 2630 AC_MSG_RESULT([$ssl_library_ver])
@@ -2645,7 +2646,10 @@ if test "x$openssl" = "xyes" ; then
2645 #include <openssl/opensslv.h> 2646 #include <openssl/opensslv.h>
2646 #include <openssl/crypto.h> 2647 #include <openssl/crypto.h>
2647 ]], [[ 2648 ]], [[
2648 exit(SSLeay() == OPENSSL_VERSION_NUMBER ? 0 : 1); 2649#ifndef HAVE_OPENSSL_VERSION_NUM
2650# define OpenSSL_version_num SSLeay
2651#endif
2652 exit(OpenSSL_version_num() == OPENSSL_VERSION_NUMBER ? 0 : 1);
2649 ]])], 2653 ]])],
2650 [ 2654 [
2651 AC_MSG_RESULT([yes]) 2655 AC_MSG_RESULT([yes])
@@ -2672,8 +2676,8 @@ if test "x$openssl" = "xyes" ; then
2672 2676
2673 AC_MSG_CHECKING([if programs using OpenSSL functions will link]) 2677 AC_MSG_CHECKING([if programs using OpenSSL functions will link])
2674 AC_LINK_IFELSE( 2678 AC_LINK_IFELSE(
2675 [AC_LANG_PROGRAM([[ #include <openssl/evp.h> ]], 2679 [AC_LANG_PROGRAM([[ #include <openssl/err.h> ]],
2676 [[ SSLeay_add_all_algorithms(); ]])], 2680 [[ ERR_load_crypto_strings(); ]])],
2677 [ 2681 [
2678 AC_MSG_RESULT([yes]) 2682 AC_MSG_RESULT([yes])
2679 ], 2683 ],
@@ -2683,8 +2687,8 @@ if test "x$openssl" = "xyes" ; then
2683 LIBS="$LIBS -ldl" 2687 LIBS="$LIBS -ldl"
2684 AC_MSG_CHECKING([if programs using OpenSSL need -ldl]) 2688 AC_MSG_CHECKING([if programs using OpenSSL need -ldl])
2685 AC_LINK_IFELSE( 2689 AC_LINK_IFELSE(
2686 [AC_LANG_PROGRAM([[ #include <openssl/evp.h> ]], 2690 [AC_LANG_PROGRAM([[ #include <openssl/err.h> ]],
2687 [[ SSLeay_add_all_algorithms(); ]])], 2691 [[ ERR_load_crypto_strings(); ]])],
2688 [ 2692 [
2689 AC_MSG_RESULT([yes]) 2693 AC_MSG_RESULT([yes])
2690 ], 2694 ],
@@ -2699,16 +2703,64 @@ if test "x$openssl" = "xyes" ; then
2699 AC_CHECK_FUNCS([ \ 2703 AC_CHECK_FUNCS([ \
2700 BN_is_prime_ex \ 2704 BN_is_prime_ex \
2701 DSA_generate_parameters_ex \ 2705 DSA_generate_parameters_ex \
2702 EVP_DigestInit_ex \ 2706 EVP_CIPHER_CTX_ctrl \
2703 EVP_DigestFinal_ex \ 2707 EVP_DigestFinal_ex \
2704 EVP_MD_CTX_init \ 2708 EVP_DigestInit_ex \
2705 EVP_MD_CTX_cleanup \ 2709 EVP_MD_CTX_cleanup \
2706 EVP_MD_CTX_copy_ex \ 2710 EVP_MD_CTX_copy_ex \
2711 EVP_MD_CTX_init \
2707 HMAC_CTX_init \ 2712 HMAC_CTX_init \
2708 RSA_generate_key_ex \ 2713 RSA_generate_key_ex \
2709 RSA_get_default_method \ 2714 RSA_get_default_method \
2710 ]) 2715 ])
2711 2716
2717 # OpenSSL_add_all_algorithms may be a macro.
2718 AC_CHECK_FUNC(OpenSSL_add_all_algorithms,
2719 AC_DEFINE(HAVE_OPENSSL_ADD_ALL_ALGORITHMS, 1, [as a function]),
2720 AC_CHECK_DECL(OpenSSL_add_all_algorithms,
2721 AC_DEFINE(HAVE_OPENSSL_ADD_ALL_ALGORITHMS, 1, [as a macro]), ,
2722 [[#include <openssl/evp.h>]]
2723 )
2724 )
2725
2726 # LibreSSL/OpenSSL 1.1x API
2727 AC_CHECK_FUNCS([ \
2728 OPENSSL_init_crypto \
2729 DH_get0_key \
2730 DH_get0_pqg \
2731 DH_set0_key \
2732 DH_set_length \
2733 DH_set0_pqg \
2734 DSA_get0_key \
2735 DSA_get0_pqg \
2736 DSA_set0_key \
2737 DSA_set0_pqg \
2738 DSA_SIG_get0 \
2739 DSA_SIG_set0 \
2740 ECDSA_SIG_get0 \
2741 ECDSA_SIG_set0 \
2742 EVP_CIPHER_CTX_iv \
2743 EVP_CIPHER_CTX_iv_noconst \
2744 EVP_CIPHER_CTX_get_iv \
2745 EVP_CIPHER_CTX_set_iv \
2746 RSA_get0_crt_params \
2747 RSA_get0_factors \
2748 RSA_get0_key \
2749 RSA_set0_crt_params \
2750 RSA_set0_factors \
2751 RSA_set0_key \
2752 RSA_meth_free \
2753 RSA_meth_dup \
2754 RSA_meth_set1_name \
2755 RSA_meth_get_finish \
2756 RSA_meth_set_priv_enc \
2757 RSA_meth_set_priv_dec \
2758 RSA_meth_set_finish \
2759 EVP_PKEY_get0_RSA \
2760 EVP_MD_CTX_new \
2761 EVP_MD_CTX_free \
2762 ])
2763
2712 if test "x$openssl_engine" = "xyes" ; then 2764 if test "x$openssl_engine" = "xyes" ; then
2713 AC_MSG_CHECKING([for OpenSSL ENGINE support]) 2765 AC_MSG_CHECKING([for OpenSSL ENGINE support])
2714 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ 2766 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
@@ -2792,119 +2844,6 @@ if test "x$openssl" = "xyes" ; then
2792 ] 2844 ]
2793 ) 2845 )
2794 2846
2795 AC_SEARCH_LIBS([EVP_CIPHER_CTX_ctrl], [crypto],
2796 [AC_DEFINE([HAVE_EVP_CIPHER_CTX_CTRL], [1],
2797 [Define if libcrypto has EVP_CIPHER_CTX_ctrl])])
2798
2799 # LibreSSL/OpenSSL 1.1x API
2800 AC_SEARCH_LIBS([DH_get0_key], [crypto],
2801 [AC_DEFINE([HAVE_DH_GET0_KEY], [1],
2802 [Define if libcrypto has DH_get0_key])])
2803 AC_SEARCH_LIBS([DH_get0_pqg], [crypto],
2804 [AC_DEFINE([HAVE_DH_GET0_PQG], [1],
2805 [Define if libcrypto has DH_get0_pqg])])
2806 AC_SEARCH_LIBS([DH_set0_key], [crypto],
2807 [AC_DEFINE([HAVE_DH_SET0_KEY], [1],
2808 [Define if libcrypto has DH_set0_key])])
2809 AC_SEARCH_LIBS([DH_set_length], [crypto],
2810 [AC_DEFINE([HAVE_DH_SET_LENGTH], [1],
2811 [Define if libcrypto has DH_set_length])])
2812 AC_SEARCH_LIBS([DH_set0_pqg], [crypto],
2813 [AC_DEFINE([HAVE_DH_SET0_PQG], [1],
2814 [Define if libcrypto has DH_set0_pqg])])
2815
2816 AC_SEARCH_LIBS([DSA_get0_key], [crypto],
2817 [AC_DEFINE([HAVE_DSA_GET0_KEY], [1],
2818 [Define if libcrypto has DSA_get0_key])])
2819 AC_SEARCH_LIBS([DSA_get0_pqg], [crypto],
2820 [AC_DEFINE([HAVE_DSA_GET0_PQG], [1],
2821 [Define if libcrypto has DSA_get0_pqg])])
2822 AC_SEARCH_LIBS([DSA_set0_key], [crypto],
2823 [AC_DEFINE([HAVE_DSA_SET0_KEY], [1],
2824 [Define if libcrypto has DSA_set0_key])])
2825 AC_SEARCH_LIBS([DSA_set0_pqg], [crypto],
2826 [AC_DEFINE([HAVE_DSA_SET0_PQG], [1],
2827 [Define if libcrypto has DSA_set0_pqg])])
2828
2829 AC_SEARCH_LIBS([DSA_SIG_get0], [crypto],
2830 [AC_DEFINE([HAVE_DSA_SIG_GET0], [1],
2831 [Define if libcrypto has DSA_SIG_get0])])
2832 AC_SEARCH_LIBS([DSA_SIG_set0], [crypto],
2833 [AC_DEFINE([HAVE_DSA_SIG_SET0], [1],
2834 [Define if libcrypto has DSA_SIG_set0])])
2835
2836 AC_SEARCH_LIBS([ECDSA_SIG_get0], [crypto],
2837 [AC_DEFINE([HAVE_ECDSA_SIG_GET0], [1],
2838 [Define if libcrypto has ECDSA_SIG_get0])])
2839 AC_SEARCH_LIBS([ECDSA_SIG_set0], [crypto],
2840 [AC_DEFINE([HAVE_ECDSA_SIG_SET0], [1],
2841 [Define if libcrypto has ECDSA_SIG_set0])])
2842
2843 AC_SEARCH_LIBS([EVP_CIPHER_CTX_iv], [crypto],
2844 [AC_DEFINE([HAVE_EVP_CIPHER_CTX_IV], [1],
2845 [Define if libcrypto has EVP_CIPHER_CTX_iv])])
2846 AC_SEARCH_LIBS([EVP_CIPHER_CTX_iv_noconst], [crypto],
2847 [AC_DEFINE([HAVE_EVP_CIPHER_CTX_IV_NOCONST], [1],
2848 [Define if libcrypto has EVP_CIPHER_CTX_iv_noconst])])
2849 AC_SEARCH_LIBS([EVP_CIPHER_CTX_get_iv], [crypto],
2850 [AC_DEFINE([HAVE_EVP_CIPHER_CTX_GET_IV], [1],
2851 [Define if libcrypto has EVP_CIPHER_CTX_get_iv])])
2852 AC_SEARCH_LIBS([EVP_CIPHER_CTX_set_iv], [crypto],
2853 [AC_DEFINE([HAVE_EVP_CIPHER_CTX_GET_IV], [1],
2854 [Define if libcrypto has EVP_CIPHER_CTX_set_iv])])
2855
2856 AC_SEARCH_LIBS([RSA_get0_crt_params], [crypto],
2857 [AC_DEFINE([HAVE_RSA_GET0_CRT_PARAMS], [1],
2858 [Define if libcrypto has RSA_get0_crt_params])])
2859 AC_SEARCH_LIBS([RSA_get0_factors], [crypto],
2860 [AC_DEFINE([HAVE_RSA_GET0_FACTORS], [1],
2861 [Define if libcrypto has RSA_get0_factors])])
2862 AC_SEARCH_LIBS([RSA_get0_key], [crypto],
2863 [AC_DEFINE([HAVE_RSA_GET0_KEY], [1],
2864 [Define if libcrypto has RSA_get0_key])])
2865 AC_SEARCH_LIBS([RSA_set0_crt_params], [crypto],
2866 [AC_DEFINE([HAVE_RSA_SET0_CRT_PARAMS], [1],
2867 [Define if libcrypto has RSA_get0_srt_params])])
2868 AC_SEARCH_LIBS([RSA_set0_factors], [crypto],
2869 [AC_DEFINE([HAVE_RSA_SET0_FACTORS], [1],
2870 [Define if libcrypto has RSA_set0_factors])])
2871 AC_SEARCH_LIBS([RSA_set0_key], [crypto],
2872 [AC_DEFINE([HAVE_RSA_SET0_KEY], [1],
2873 [Define if libcrypto has RSA_set0_key])])
2874
2875 AC_SEARCH_LIBS([RSA_meth_free], [crypto],
2876 [AC_DEFINE([HAVE_RSA_METH_FREE], [1],
2877 [Define if libcrypto has RSA_meth_free])])
2878 AC_SEARCH_LIBS([RSA_meth_dup], [crypto],
2879 [AC_DEFINE([HAVE_RSA_METH_DUP], [1],
2880 [Define if libcrypto has RSA_meth_dup])])
2881 AC_SEARCH_LIBS([RSA_meth_set1_name], [crypto],
2882 [AC_DEFINE([HAVE_RSA_METH_SET1_NAME], [1],
2883 [Define if libcrypto has RSA_meth_set1_name])])
2884 AC_SEARCH_LIBS([RSA_meth_get_finish], [crypto],
2885 [AC_DEFINE([HAVE_RSA_METH_GET_FINISH], [1],
2886 [Define if libcrypto has RSA_meth_get_finish])])
2887 AC_SEARCH_LIBS([RSA_meth_set_priv_enc], [crypto],
2888 [AC_DEFINE([HAVE_RSA_METH_SET_PRIV_ENC], [1],
2889 [Define if libcrypto has RSA_meth_set_priv_enc])])
2890 AC_SEARCH_LIBS([RSA_meth_set_priv_dec], [crypto],
2891 [AC_DEFINE([HAVE_RSA_METH_SET_PRIV_DEC], [1],
2892 [Define if libcrypto has RSA_meth_set_priv_dec])])
2893 AC_SEARCH_LIBS([RSA_meth_set_finish], [crypto],
2894 [AC_DEFINE([HAVE_RSA_METH_SET_FINISH], [1],
2895 [Define if libcrypto has RSA_meth_set_finish])])
2896
2897 AC_SEARCH_LIBS([EVP_PKEY_get0_RSA], [crypto],
2898 [AC_DEFINE([HAVE_EVP_PKEY_GET0_RSA], [1],
2899 [Define if libcrypto has EVP_PKEY_get0_RSA])])
2900
2901 AC_SEARCH_LIBS([EVP_MD_CTX_new], [crypto],
2902 [AC_DEFINE([HAVE_EVP_MD_CTX_NEW], [1],
2903 [Define if libcrypto has EVP_MD_CTX_new])])
2904 AC_SEARCH_LIBS([EVP_MD_CTX_free], [crypto],
2905 [AC_DEFINE([HAVE_EVP_MD_CTX_FREE], [1],
2906 [Define if libcrypto has EVP_MD_CTX_free])])
2907
2908 AC_MSG_CHECKING([if EVP_DigestUpdate returns an int]) 2847 AC_MSG_CHECKING([if EVP_DigestUpdate returns an int])
2909 AC_LINK_IFELSE( 2848 AC_LINK_IFELSE(
2910 [AC_LANG_PROGRAM([[ 2849 [AC_LANG_PROGRAM([[
@@ -3036,6 +2975,7 @@ if test "x$openssl" = "xyes" ; then
3036 if test x$enable_nistp256 = x1 || test x$enable_nistp384 = x1 || \ 2975 if test x$enable_nistp256 = x1 || test x$enable_nistp384 = x1 || \
3037 test x$enable_nistp521 = x1; then 2976 test x$enable_nistp521 = x1; then
3038 AC_DEFINE(OPENSSL_HAS_ECC, [1], [OpenSSL has ECC]) 2977 AC_DEFINE(OPENSSL_HAS_ECC, [1], [OpenSSL has ECC])
2978 AC_CHECK_FUNCS([EC_KEY_METHOD_new])
3039 fi 2979 fi
3040 if test x$enable_nistp256 = x1; then 2980 if test x$enable_nistp256 = x1; then
3041 AC_DEFINE([OPENSSL_HAS_NISTP256], [1], 2981 AC_DEFINE([OPENSSL_HAS_NISTP256], [1],
@@ -3516,10 +3456,10 @@ fi
3516AC_CHECK_TYPES([long long, unsigned long long, long double]) 3456AC_CHECK_TYPES([long long, unsigned long long, long double])
3517 3457
3518# Check datatype sizes 3458# Check datatype sizes
3519AC_CHECK_SIZEOF([short int], [2]) 3459AC_CHECK_SIZEOF([short int])
3520AC_CHECK_SIZEOF([int], [4]) 3460AC_CHECK_SIZEOF([int])
3521AC_CHECK_SIZEOF([long int], [4]) 3461AC_CHECK_SIZEOF([long int])
3522AC_CHECK_SIZEOF([long long int], [8]) 3462AC_CHECK_SIZEOF([long long int])
3523 3463
3524# Sanity check long long for some platforms (AIX) 3464# Sanity check long long for some platforms (AIX)
3525if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then 3465if test "x$ac_cv_sizeof_long_long_int" = "x4" ; then
@@ -4468,8 +4408,8 @@ AC_ARG_WITH([kerberos5],
4468 [ CPPFLAGS="$oldCPP" ]) 4408 [ CPPFLAGS="$oldCPP" ])
4469 4409
4470 fi 4410 fi
4471 if test ! -z "$need_dash_r" ; then 4411 if test -n "${rpath_opt}" ; then
4472 LDFLAGS="$LDFLAGS -R${KRB5ROOT}/lib" 4412 LDFLAGS="$LDFLAGS ${rpath_opt}${KRB5ROOT}/lib"
4473 fi 4413 fi
4474 if test ! -z "$blibpath" ; then 4414 if test ! -z "$blibpath" ; then
4475 blibpath="$blibpath:${KRB5ROOT}/lib" 4415 blibpath="$blibpath:${KRB5ROOT}/lib"
diff --git a/contrib/cygwin/ssh-host-config b/contrib/cygwin/ssh-host-config
index 261020af3..a8572e2ac 100644
--- a/contrib/cygwin/ssh-host-config
+++ b/contrib/cygwin/ssh-host-config
@@ -61,7 +61,7 @@ LOCALSTATEDIR=/var
61 61
62sshd_config_configured=no 62sshd_config_configured=no
63port_number=22 63port_number=22
64service_name=sshd 64service_name=cygsshd
65strictmodes=yes 65strictmodes=yes
66cygwin_value="" 66cygwin_value=""
67user_account= 67user_account=
@@ -307,7 +307,7 @@ check_service_files_ownership() {
307 307
308 if [ -z "${run_service_as}" ] 308 if [ -z "${run_service_as}" ]
309 then 309 then
310 accnt_name=$(/usr/bin/cygrunsrv -VQ sshd | 310 accnt_name=$(/usr/bin/cygrunsrv -VQ "${service_name}" |
311 /usr/bin/sed -ne 's/^Account *: *//gp') 311 /usr/bin/sed -ne 's/^Account *: *//gp')
312 if [ "${accnt_name}" = "LocalSystem" ] 312 if [ "${accnt_name}" = "LocalSystem" ]
313 then 313 then
@@ -329,9 +329,9 @@ check_service_files_ownership() {
329 fi 329 fi
330 if [ -z "${run_service_as}" ] 330 if [ -z "${run_service_as}" ]
331 then 331 then
332 csih_warning "Couldn't determine name of user running sshd service from account database!" 332 csih_warning "Couldn't determine name of user running ${service_name} service from account database!"
333 csih_warning "As a result, this script cannot make sure that the files used" 333 csih_warning "As a result, this script cannot make sure that the files used"
334 csih_warning "by the sshd service belong to the user running the service." 334 csih_warning "by the ${service_name} service belong to the user running the service."
335 return 1 335 return 1
336 fi 336 fi
337 fi 337 fi
@@ -367,8 +367,8 @@ check_service_files_ownership() {
367 if [ $ret -ne 0 ] 367 if [ $ret -ne 0 ]
368 then 368 then
369 csih_warning "Couldn't change owner of important files to ${run_service_as}!" 369 csih_warning "Couldn't change owner of important files to ${run_service_as}!"
370 csih_warning "This may cause the sshd service to fail! Please make sure that" 370 csih_warning "This may cause the ${service_name} service to fail! Please make sure that"
371 csih_warning "you have suufficient permissions to change the ownership of files" 371 csih_warning "you have sufficient permissions to change the ownership of files"
372 csih_warning "and try to run the ssh-host-config script again." 372 csih_warning "and try to run the ssh-host-config script again."
373 fi 373 fi
374 return $ret 374 return $ret
@@ -394,14 +394,24 @@ install_service() {
394 then 394 then
395 csih_get_cygenv "${cygwin_value}" 395 csih_get_cygenv "${cygwin_value}"
396 396
397 if ( csih_is_nt2003 || [ "$csih_FORCE_PRIVILEGED_USER" = "yes" ] ) 397 if ( [ "$csih_FORCE_PRIVILEGED_USER" != "yes" ] )
398 then 398 then
399 csih_inform "On Windows Server 2003, Windows Vista, and above, the" 399 # Enforce using privileged user on 64 bit Vista or W7 under WOW64
400 csih_inform "SYSTEM account cannot setuid to other users -- a capability" 400 is_wow64=$(/usr/bin/uname | /usr/bin/grep -q 'WOW' && echo 1 || echo 0)
401 csih_inform "sshd requires. You need to have or to create a privileged"
402 csih_inform "account. This script will help you do so."
403 echo
404 401
402 if ( csih_is_nt2003 && ! csih_is_windows8 && [ "${is_wow64}" = "1" ] )
403 then
404 csih_inform "Running 32 bit Cygwin on 64 bit Windows Vista or Windows 7"
405 csih_inform "the SYSTEM account is not sufficient to setuid to a local"
406 csih_inform "user account. You need to have or to create a privileged"
407 csih_inform "account. This script will help you do so."
408 echo
409 csih_FORCE_PRIVILEGED_USER=yes
410 fi
411 fi
412
413 if ( [ "$csih_FORCE_PRIVILEGED_USER" = "yes" ] )
414 then
405 [ "${opt_force}" = "yes" ] && opt_f=-f 415 [ "${opt_force}" = "yes" ] && opt_f=-f
406 [ -n "${user_account}" ] && opt_u="-u ""${user_account}""" 416 [ -n "${user_account}" ] && opt_u="-u ""${user_account}"""
407 csih_select_privileged_username ${opt_f} ${opt_u} sshd 417 csih_select_privileged_username ${opt_f} ${opt_u} sshd
@@ -412,11 +422,12 @@ install_service() {
412 csih_request "Do you want to proceed anyway?" || exit 1 422 csih_request "Do you want to proceed anyway?" || exit 1
413 let ++ret 423 let ++ret
414 fi 424 fi
425 # Never returns empty if NT or above
426 run_service_as=$(csih_service_should_run_as)
427 else
428 run_service_as="SYSTEM"
415 fi 429 fi
416 430
417 # Never returns empty if NT or above
418 run_service_as=$(csih_service_should_run_as)
419
420 if [ "${run_service_as}" = "${csih_PRIVILEGED_USERNAME}" ] 431 if [ "${run_service_as}" = "${csih_PRIVILEGED_USERNAME}" ]
421 then 432 then
422 password="${csih_PRIVILEGED_PASSWORD}" 433 password="${csih_PRIVILEGED_PASSWORD}"
@@ -446,7 +457,7 @@ install_service() {
446 echo 457 echo
447 csih_inform "The sshd service has been installed under the LocalSystem" 458 csih_inform "The sshd service has been installed under the LocalSystem"
448 csih_inform "account (also known as SYSTEM). To start the service now, call" 459 csih_inform "account (also known as SYSTEM). To start the service now, call"
449 csih_inform "\`net start sshd' or \`cygrunsrv -S sshd'. Otherwise, it" 460 csih_inform "\`net start ${service_name}' or \`cygrunsrv -S ${service_name}'. Otherwise, it"
450 csih_inform "will start automatically after the next reboot." 461 csih_inform "will start automatically after the next reboot."
451 fi 462 fi
452 else 463 else
@@ -669,14 +680,24 @@ then
669fi 680fi
670 681
671# handle sshd_config 682# handle sshd_config
683# make sure not to change the existing file
684mod_before=""
685if [ -e "${SYSCONFDIR}/sshd_config" ]
686then
687 mod_before=$(stat "${SYSCONFDIR}/sshd_config" | grep '^Modify:')
688fi
672csih_install_config "${SYSCONFDIR}/sshd_config" "${SYSCONFDIR}/defaults" || let ++warning_cnt 689csih_install_config "${SYSCONFDIR}/sshd_config" "${SYSCONFDIR}/defaults" || let ++warning_cnt
690mod_now=$(stat "${SYSCONFDIR}/sshd_config" | grep '^Modify:')
673if ! /usr/bin/cmp "${SYSCONFDIR}/sshd_config" "${SYSCONFDIR}/defaults/${SYSCONFDIR}/sshd_config" >/dev/null 2>&1 691if ! /usr/bin/cmp "${SYSCONFDIR}/sshd_config" "${SYSCONFDIR}/defaults/${SYSCONFDIR}/sshd_config" >/dev/null 2>&1
674then 692then
675 sshd_config_configured=yes 693 sshd_config_configured=yes
676fi 694fi
677sshd_strictmodes || let warning_cnt+=$? 695if [ "${mod_before}" != "${mod_now}" ]
678sshd_privsep || let warning_cnt+=$? 696then
679sshd_config_tweak || let warning_cnt+=$? 697 sshd_strictmodes || let warning_cnt+=$?
698 sshd_config_tweak || let warning_cnt+=$?
699fi
700#sshd_privsep || let warning_cnt+=$?
680update_services_file || let warning_cnt+=$? 701update_services_file || let warning_cnt+=$?
681update_inetd_conf || let warning_cnt+=$? 702update_inetd_conf || let warning_cnt+=$?
682install_service || let warning_cnt+=$? 703install_service || let warning_cnt+=$?
diff --git a/contrib/redhat/openssh.spec b/contrib/redhat/openssh.spec
index d7823483d..f3c175523 100644
--- a/contrib/redhat/openssh.spec
+++ b/contrib/redhat/openssh.spec
@@ -1,4 +1,4 @@
1%define ver 7.9p1 1%define ver 8.0p1
2%define rel 1%{?dist} 2%define rel 1%{?dist}
3 3
4# OpenSSH privilege separation requires a user & group ID 4# OpenSSH privilege separation requires a user & group ID
diff --git a/contrib/suse/openssh.spec b/contrib/suse/openssh.spec
index b43d8985a..478871815 100644
--- a/contrib/suse/openssh.spec
+++ b/contrib/suse/openssh.spec
@@ -13,7 +13,7 @@
13 13
14Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation 14Summary: OpenSSH, a free Secure Shell (SSH) protocol implementation
15Name: openssh 15Name: openssh
16Version: 7.9p1 16Version: 8.0p1
17URL: https://www.openssh.com/ 17URL: https://www.openssh.com/
18Release: 1 18Release: 1
19Source0: openssh-%{version}.tar.gz 19Source0: openssh-%{version}.tar.gz
diff --git a/crypto_api.h b/crypto_api.h
index 7f45bbd69..eb05251ff 100644
--- a/crypto_api.h
+++ b/crypto_api.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_api.h,v 1.4 2017/12/14 21:07:39 naddy Exp $ */ 1/* $OpenBSD: crypto_api.h,v 1.5 2019/01/21 10:20:12 djm Exp $ */
2 2
3/* 3/*
4 * Assembled from generated headers and source files by Markus Friedl. 4 * Assembled from generated headers and source files by Markus Friedl.
@@ -15,10 +15,15 @@
15#endif 15#endif
16#include <stdlib.h> 16#include <stdlib.h>
17 17
18typedef int8_t crypto_int8;
19typedef uint8_t crypto_uint8;
20typedef int16_t crypto_int16;
21typedef uint16_t crypto_uint16;
18typedef int32_t crypto_int32; 22typedef int32_t crypto_int32;
19typedef uint32_t crypto_uint32; 23typedef uint32_t crypto_uint32;
20 24
21#define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len)) 25#define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len))
26#define small_random32() arc4random()
22 27
23#define crypto_hash_sha512_BYTES 64U 28#define crypto_hash_sha512_BYTES 64U
24 29
@@ -37,4 +42,15 @@ int crypto_sign_ed25519_open(unsigned char *, unsigned long long *,
37 const unsigned char *, unsigned long long, const unsigned char *); 42 const unsigned char *, unsigned long long, const unsigned char *);
38int crypto_sign_ed25519_keypair(unsigned char *, unsigned char *); 43int crypto_sign_ed25519_keypair(unsigned char *, unsigned char *);
39 44
45#define crypto_kem_sntrup4591761_PUBLICKEYBYTES 1218
46#define crypto_kem_sntrup4591761_SECRETKEYBYTES 1600
47#define crypto_kem_sntrup4591761_CIPHERTEXTBYTES 1047
48#define crypto_kem_sntrup4591761_BYTES 32
49
50int crypto_kem_sntrup4591761_enc(unsigned char *cstr, unsigned char *k,
51 const unsigned char *pk);
52int crypto_kem_sntrup4591761_dec(unsigned char *k,
53 const unsigned char *cstr, const unsigned char *sk);
54int crypto_kem_sntrup4591761_keypair(unsigned char *pk, unsigned char *sk);
55
40#endif /* crypto_api_h */ 56#endif /* crypto_api_h */
diff --git a/dh.c b/dh.c
index 657b32da3..a98d39ed5 100644
--- a/dh.c
+++ b/dh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh.c,v 1.68 2018/09/17 15:40:14 millert Exp $ */ 1/* $OpenBSD: dh.c,v 1.69 2018/11/09 02:56:22 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * 4 *
@@ -406,7 +406,7 @@ dh_new_group16(void)
406DH * 406DH *
407dh_new_group18(void) 407dh_new_group18(void)
408{ 408{
409 static char *gen = "2", *group16 = 409 static char *gen = "2", *group18 =
410 "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1" 410 "FFFFFFFF" "FFFFFFFF" "C90FDAA2" "2168C234" "C4C6628B" "80DC1CD1"
411 "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD" 411 "29024E08" "8A67CC74" "020BBEA6" "3B139B22" "514A0879" "8E3404DD"
412 "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245" 412 "EF9519B3" "CD3A431B" "302B0A6D" "F25F1437" "4FE1356D" "6D51C245"
@@ -451,7 +451,7 @@ dh_new_group18(void)
451 "9558E447" "5677E9AA" "9E3050E2" "765694DF" "C81F56E8" "80B96E71" 451 "9558E447" "5677E9AA" "9E3050E2" "765694DF" "C81F56E8" "80B96E71"
452 "60C980DD" "98EDD3DF" "FFFFFFFF" "FFFFFFFF"; 452 "60C980DD" "98EDD3DF" "FFFFFFFF" "FFFFFFFF";
453 453
454 return (dh_new_group_asc(gen, group16)); 454 return (dh_new_group_asc(gen, group18));
455} 455}
456 456
457/* Select fallback group used by DH-GEX if moduli file cannot be read. */ 457/* Select fallback group used by DH-GEX if moduli file cannot be read. */
diff --git a/dh.h b/dh.h
index 344b29e35..adb643a75 100644
--- a/dh.h
+++ b/dh.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh.h,v 1.15 2016/05/02 10:26:04 djm Exp $ */ 1/* $OpenBSD: dh.h,v 1.17 2019/01/20 01:12:40 dtucker Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Niels Provos. All rights reserved. 4 * Copyright (c) 2000 Niels Provos. All rights reserved.
@@ -48,7 +48,7 @@ u_int dh_estimate(int);
48 48
49/* 49/*
50 * Max value from RFC4419. 50 * Max value from RFC4419.
51 * Miniumum increased in light of DH precomputation attacks. 51 * Min value from RFC8270.
52 */ 52 */
53#define DH_GRP_MIN 2048 53#define DH_GRP_MIN 2048
54#define DH_GRP_MAX 8192 54#define DH_GRP_MAX 8192
diff --git a/dispatch.c b/dispatch.c
index 0b3ea614e..6e4c501e0 100644
--- a/dispatch.c
+++ b/dispatch.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dispatch.c,v 1.31 2017/05/31 07:00:13 markus Exp $ */ 1/* $OpenBSD: dispatch.c,v 1.32 2019/01/19 21:33:13 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -47,7 +47,7 @@ dispatch_protocol_error(int type, u_int32_t seq, struct ssh *ssh)
47 (r = sshpkt_put_u32(ssh, seq)) != 0 || 47 (r = sshpkt_put_u32(ssh, seq)) != 0 ||
48 (r = sshpkt_send(ssh)) != 0 || 48 (r = sshpkt_send(ssh)) != 0 ||
49 (r = ssh_packet_write_wait(ssh)) != 0) 49 (r = ssh_packet_write_wait(ssh)) != 0)
50 sshpkt_fatal(ssh, __func__, r); 50 sshpkt_fatal(ssh, r, "%s", __func__);
51 return 0; 51 return 0;
52} 52}
53 53
@@ -131,5 +131,5 @@ ssh_dispatch_run_fatal(struct ssh *ssh, int mode, volatile sig_atomic_t *done)
131 int r; 131 int r;
132 132
133 if ((r = ssh_dispatch_run(ssh, mode, done)) != 0) 133 if ((r = ssh_dispatch_run(ssh, mode, done)) != 0)
134 sshpkt_fatal(ssh, __func__, r); 134 sshpkt_fatal(ssh, r, "%s", __func__);
135} 135}
diff --git a/dispatch.h b/dispatch.h
index 17a6f3db6..a22d7749f 100644
--- a/dispatch.h
+++ b/dispatch.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: dispatch.h,v 1.14 2017/05/31 07:00:13 markus Exp $ */ 1/* $OpenBSD: dispatch.h,v 1.15 2019/01/19 21:45:31 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -46,11 +46,4 @@ void ssh_dispatch_range(struct ssh *, u_int, u_int, dispatch_fn *);
46int ssh_dispatch_run(struct ssh *, int, volatile sig_atomic_t *); 46int ssh_dispatch_run(struct ssh *, int, volatile sig_atomic_t *);
47void ssh_dispatch_run_fatal(struct ssh *, int, volatile sig_atomic_t *); 47void ssh_dispatch_run_fatal(struct ssh *, int, volatile sig_atomic_t *);
48 48
49#define dispatch_init(dflt) \
50 ssh_dispatch_init(active_state, (dflt))
51#define dispatch_range(from, to, fn) \
52 ssh_dispatch_range(active_state, (from), (to), (fn))
53#define dispatch_set(type, fn) \
54 ssh_dispatch_set(active_state, (type), (fn))
55
56#endif 49#endif
diff --git a/entropy.c b/entropy.c
index c178c00cf..31a7f1c3e 100644
--- a/entropy.c
+++ b/entropy.c
@@ -24,6 +24,8 @@
24 24
25#include "includes.h" 25#include "includes.h"
26 26
27#define RANDOM_SEED_SIZE 48
28
27#ifdef WITH_OPENSSL 29#ifdef WITH_OPENSSL
28 30
29#include <sys/types.h> 31#include <sys/types.h>
@@ -64,8 +66,6 @@
64 */ 66 */
65#ifndef OPENSSL_PRNG_ONLY 67#ifndef OPENSSL_PRNG_ONLY
66 68
67#define RANDOM_SEED_SIZE 48
68
69/* 69/*
70 * Collect 'len' bytes of entropy into 'buf' from PRNGD/EGD daemon 70 * Collect 'len' bytes of entropy into 'buf' from PRNGD/EGD daemon
71 * listening either on 'tcp_port', or via Unix domain socket at * 71 * listening either on 'tcp_port', or via Unix domain socket at *
@@ -216,35 +216,46 @@ rexec_recv_rng_seed(struct sshbuf *m)
216void 216void
217seed_rng(void) 217seed_rng(void)
218{ 218{
219#ifndef OPENSSL_PRNG_ONLY
220 unsigned char buf[RANDOM_SEED_SIZE]; 219 unsigned char buf[RANDOM_SEED_SIZE];
221#endif 220
222 if (!ssh_compatible_openssl(OPENSSL_VERSION_NUMBER, SSLeay())) 221 /* Initialise libcrypto */
222 ssh_libcrypto_init();
223
224 if (!ssh_compatible_openssl(OPENSSL_VERSION_NUMBER,
225 OpenSSL_version_num()))
223 fatal("OpenSSL version mismatch. Built against %lx, you " 226 fatal("OpenSSL version mismatch. Built against %lx, you "
224 "have %lx", (u_long)OPENSSL_VERSION_NUMBER, SSLeay()); 227 "have %lx", (u_long)OPENSSL_VERSION_NUMBER,
228 OpenSSL_version_num());
225 229
226#ifndef OPENSSL_PRNG_ONLY 230#ifndef OPENSSL_PRNG_ONLY
227 if (RAND_status() == 1) { 231 if (RAND_status() == 1)
228 debug3("RNG is ready, skipping seeding"); 232 debug3("RNG is ready, skipping seeding");
229 return; 233 else {
234 if (seed_from_prngd(buf, sizeof(buf)) == -1)
235 fatal("Could not obtain seed from PRNGd");
236 RAND_add(buf, sizeof(buf), sizeof(buf));
230 } 237 }
231
232 if (seed_from_prngd(buf, sizeof(buf)) == -1)
233 fatal("Could not obtain seed from PRNGd");
234 RAND_add(buf, sizeof(buf), sizeof(buf));
235 memset(buf, '\0', sizeof(buf));
236
237#endif /* OPENSSL_PRNG_ONLY */ 238#endif /* OPENSSL_PRNG_ONLY */
239
238 if (RAND_status() != 1) 240 if (RAND_status() != 1)
239 fatal("PRNG is not seeded"); 241 fatal("PRNG is not seeded");
242
243 /* Ensure arc4random() is primed */
244 arc4random_buf(buf, sizeof(buf));
245 explicit_bzero(buf, sizeof(buf));
240} 246}
241 247
242#else /* WITH_OPENSSL */ 248#else /* WITH_OPENSSL */
243 249
244/* Handled in arc4random() */ 250/* Acutal initialisation is handled in arc4random() */
245void 251void
246seed_rng(void) 252seed_rng(void)
247{ 253{
254 unsigned char buf[RANDOM_SEED_SIZE];
255
256 /* Ensure arc4random() is primed */
257 arc4random_buf(buf, sizeof(buf));
258 explicit_bzero(buf, sizeof(buf));
248} 259}
249 260
250#endif /* WITH_OPENSSL */ 261#endif /* WITH_OPENSSL */
diff --git a/groupaccess.c b/groupaccess.c
index 9e4d25521..80d301915 100644
--- a/groupaccess.c
+++ b/groupaccess.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: groupaccess.c,v 1.16 2015/05/04 06:10:48 djm Exp $ */ 1/* $OpenBSD: groupaccess.c,v 1.17 2019/03/06 22:14:23 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Kevin Steves. All rights reserved. 3 * Copyright (c) 2001 Kevin Steves. All rights reserved.
4 * 4 *
@@ -103,7 +103,8 @@ ga_match_pattern_list(const char *group_pattern)
103 int i, found = 0; 103 int i, found = 0;
104 104
105 for (i = 0; i < ngroups; i++) { 105 for (i = 0; i < ngroups; i++) {
106 switch (match_pattern_list(groups_byname[i], group_pattern, 0)) { 106 switch (match_usergroup_pattern_list(groups_byname[i],
107 group_pattern)) {
107 case -1: 108 case -1:
108 return 0; /* Negated match wins */ 109 return 0; /* Negated match wins */
109 case 0: 110 case 0:
diff --git a/kex.c b/kex.c
index 25f9f66f6..34808b5c3 100644
--- a/kex.c
+++ b/kex.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kex.c,v 1.141 2018/07/09 13:37:10 sf Exp $ */ 1/* $OpenBSD: kex.c,v 1.150 2019/01/21 12:08:13 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -25,19 +25,25 @@
25 25
26#include "includes.h" 26#include "includes.h"
27 27
28 28#include <sys/types.h>
29#include <errno.h>
29#include <signal.h> 30#include <signal.h>
30#include <stdarg.h> 31#include <stdarg.h>
31#include <stdio.h> 32#include <stdio.h>
32#include <stdlib.h> 33#include <stdlib.h>
33#include <string.h> 34#include <string.h>
35#include <unistd.h>
36#include <poll.h>
34 37
35#ifdef WITH_OPENSSL 38#ifdef WITH_OPENSSL
36#include <openssl/crypto.h> 39#include <openssl/crypto.h>
37#include <openssl/dh.h> 40#include <openssl/dh.h>
38#endif 41#endif
39 42
43#include "ssh.h"
40#include "ssh2.h" 44#include "ssh2.h"
45#include "atomicio.h"
46#include "version.h"
41#include "packet.h" 47#include "packet.h"
42#include "compat.h" 48#include "compat.h"
43#include "cipher.h" 49#include "cipher.h"
@@ -102,6 +108,8 @@ static const struct kexalg kexalgs[] = {
102#if defined(HAVE_EVP_SHA256) || !defined(WITH_OPENSSL) 108#if defined(HAVE_EVP_SHA256) || !defined(WITH_OPENSSL)
103 { KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, 109 { KEX_CURVE25519_SHA256, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 },
104 { KEX_CURVE25519_SHA256_OLD, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 }, 110 { KEX_CURVE25519_SHA256_OLD, KEX_C25519_SHA256, 0, SSH_DIGEST_SHA256 },
111 { KEX_SNTRUP4591761X25519_SHA512, KEX_KEM_SNTRUP4591761X25519_SHA512, 0,
112 SSH_DIGEST_SHA512 },
105#endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */ 113#endif /* HAVE_EVP_SHA256 || !WITH_OPENSSL */
106 { NULL, -1, -1, -1}, 114 { NULL, -1, -1, -1},
107}; 115};
@@ -487,6 +495,7 @@ kex_input_newkeys(int type, u_int32_t seq, struct ssh *ssh)
487 if ((r = ssh_set_newkeys(ssh, MODE_IN)) != 0) 495 if ((r = ssh_set_newkeys(ssh, MODE_IN)) != 0)
488 return r; 496 return r;
489 kex->done = 1; 497 kex->done = 1;
498 kex->flags &= ~KEX_INITIAL;
490 sshbuf_reset(kex->peer); 499 sshbuf_reset(kex->peer);
491 /* sshbuf_reset(kex->my); */ 500 /* sshbuf_reset(kex->my); */
492 kex->flags &= ~KEX_INIT_SENT; 501 kex->flags &= ~KEX_INIT_SENT;
@@ -577,31 +586,20 @@ kex_input_kexinit(int type, u_int32_t seq, struct ssh *ssh)
577 return SSH_ERR_INTERNAL_ERROR; 586 return SSH_ERR_INTERNAL_ERROR;
578} 587}
579 588
580int 589struct kex *
581kex_new(struct ssh *ssh, char *proposal[PROPOSAL_MAX], struct kex **kexp) 590kex_new(void)
582{ 591{
583 struct kex *kex; 592 struct kex *kex;
584 int r;
585 593
586 *kexp = NULL; 594 if ((kex = calloc(1, sizeof(*kex))) == NULL ||
587 if ((kex = calloc(1, sizeof(*kex))) == NULL) 595 (kex->peer = sshbuf_new()) == NULL ||
588 return SSH_ERR_ALLOC_FAIL; 596 (kex->my = sshbuf_new()) == NULL ||
589 if ((kex->peer = sshbuf_new()) == NULL || 597 (kex->client_version = sshbuf_new()) == NULL ||
590 (kex->my = sshbuf_new()) == NULL) { 598 (kex->server_version = sshbuf_new()) == NULL) {
591 r = SSH_ERR_ALLOC_FAIL;
592 goto out;
593 }
594 if ((r = kex_prop2buf(kex->my, proposal)) != 0)
595 goto out;
596 kex->done = 0;
597 kex_reset_dispatch(ssh);
598 ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, &kex_input_kexinit);
599 r = 0;
600 *kexp = kex;
601 out:
602 if (r != 0)
603 kex_free(kex); 599 kex_free(kex);
604 return r; 600 return NULL;
601 }
602 return kex;
605} 603}
606 604
607void 605void
@@ -640,6 +638,9 @@ kex_free(struct kex *kex)
640{ 638{
641 u_int mode; 639 u_int mode;
642 640
641 if (kex == NULL)
642 return;
643
643#ifdef WITH_OPENSSL 644#ifdef WITH_OPENSSL
644 DH_free(kex->dh); 645 DH_free(kex->dh);
645#ifdef OPENSSL_HAS_ECC 646#ifdef OPENSSL_HAS_ECC
@@ -652,9 +653,10 @@ kex_free(struct kex *kex)
652 } 653 }
653 sshbuf_free(kex->peer); 654 sshbuf_free(kex->peer);
654 sshbuf_free(kex->my); 655 sshbuf_free(kex->my);
656 sshbuf_free(kex->client_version);
657 sshbuf_free(kex->server_version);
658 sshbuf_free(kex->client_pub);
655 free(kex->session_id); 659 free(kex->session_id);
656 free(kex->client_version_string);
657 free(kex->server_version_string);
658 free(kex->failed_choice); 660 free(kex->failed_choice);
659 free(kex->hostkey_alg); 661 free(kex->hostkey_alg);
660 free(kex->name); 662 free(kex->name);
@@ -662,11 +664,24 @@ kex_free(struct kex *kex)
662} 664}
663 665
664int 666int
667kex_ready(struct ssh *ssh, char *proposal[PROPOSAL_MAX])
668{
669 int r;
670
671 if ((r = kex_prop2buf(ssh->kex->my, proposal)) != 0)
672 return r;
673 ssh->kex->flags = KEX_INITIAL;
674 kex_reset_dispatch(ssh);
675 ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, &kex_input_kexinit);
676 return 0;
677}
678
679int
665kex_setup(struct ssh *ssh, char *proposal[PROPOSAL_MAX]) 680kex_setup(struct ssh *ssh, char *proposal[PROPOSAL_MAX])
666{ 681{
667 int r; 682 int r;
668 683
669 if ((r = kex_new(ssh, proposal, &ssh->kex)) != 0) 684 if ((r = kex_ready(ssh, proposal)) != 0)
670 return r; 685 return r;
671 if ((r = kex_send_kexinit(ssh)) != 0) { /* we start */ 686 if ((r = kex_send_kexinit(ssh)) != 0) { /* we start */
672 kex_free(ssh->kex); 687 kex_free(ssh->kex);
@@ -839,7 +854,7 @@ kex_choose_conf(struct ssh *ssh)
839 } 854 }
840 855
841 /* Check whether client supports ext_info_c */ 856 /* Check whether client supports ext_info_c */
842 if (kex->server) { 857 if (kex->server && (kex->flags & KEX_INITIAL)) {
843 char *ext; 858 char *ext;
844 859
845 ext = match_list("ext-info-c", peer[PROPOSAL_KEX_ALGS], NULL); 860 ext = match_list("ext-info-c", peer[PROPOSAL_KEX_ALGS], NULL);
@@ -997,6 +1012,14 @@ kex_derive_keys(struct ssh *ssh, u_char *hash, u_int hashlen,
997 u_int i, j, mode, ctos; 1012 u_int i, j, mode, ctos;
998 int r; 1013 int r;
999 1014
1015 /* save initial hash as session id */
1016 if (kex->session_id == NULL) {
1017 kex->session_id_len = hashlen;
1018 kex->session_id = malloc(kex->session_id_len);
1019 if (kex->session_id == NULL)
1020 return SSH_ERR_ALLOC_FAIL;
1021 memcpy(kex->session_id, hash, kex->session_id_len);
1022 }
1000 for (i = 0; i < NKEYS; i++) { 1023 for (i = 0; i < NKEYS; i++) {
1001 if ((r = derive_key(ssh, 'A'+i, kex->we_need, hash, hashlen, 1024 if ((r = derive_key(ssh, 'A'+i, kex->we_need, hash, hashlen,
1002 shared_secret, &keys[i])) != 0) { 1025 shared_secret, &keys[i])) != 0) {
@@ -1015,29 +1038,276 @@ kex_derive_keys(struct ssh *ssh, u_char *hash, u_int hashlen,
1015 return 0; 1038 return 0;
1016} 1039}
1017 1040
1018#ifdef WITH_OPENSSL
1019int 1041int
1020kex_derive_keys_bn(struct ssh *ssh, u_char *hash, u_int hashlen, 1042kex_load_hostkey(struct ssh *ssh, struct sshkey **prvp, struct sshkey **pubp)
1021 const BIGNUM *secret)
1022{ 1043{
1023 struct sshbuf *shared_secret; 1044 struct kex *kex = ssh->kex;
1024 int r;
1025 1045
1026 if ((shared_secret = sshbuf_new()) == NULL) 1046 *pubp = NULL;
1027 return SSH_ERR_ALLOC_FAIL; 1047 *prvp = NULL;
1028 if ((r = sshbuf_put_bignum2(shared_secret, secret)) == 0) 1048 if (kex->load_host_public_key == NULL ||
1029 r = kex_derive_keys(ssh, hash, hashlen, shared_secret); 1049 kex->load_host_private_key == NULL)
1030 sshbuf_free(shared_secret); 1050 return SSH_ERR_INVALID_ARGUMENT;
1031 return r; 1051 *pubp = kex->load_host_public_key(kex->hostkey_type,
1052 kex->hostkey_nid, ssh);
1053 *prvp = kex->load_host_private_key(kex->hostkey_type,
1054 kex->hostkey_nid, ssh);
1055 if (*pubp == NULL)
1056 return SSH_ERR_NO_HOSTKEY_LOADED;
1057 return 0;
1032} 1058}
1033#endif
1034 1059
1060int
1061kex_verify_host_key(struct ssh *ssh, struct sshkey *server_host_key)
1062{
1063 struct kex *kex = ssh->kex;
1064
1065 if (kex->verify_host_key == NULL)
1066 return SSH_ERR_INVALID_ARGUMENT;
1067 if (server_host_key->type != kex->hostkey_type ||
1068 (kex->hostkey_type == KEY_ECDSA &&
1069 server_host_key->ecdsa_nid != kex->hostkey_nid))
1070 return SSH_ERR_KEY_TYPE_MISMATCH;
1071 if (kex->verify_host_key(server_host_key, ssh) == -1)
1072 return SSH_ERR_SIGNATURE_INVALID;
1073 return 0;
1074}
1035 1075
1036#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) || defined(DEBUG_KEXECDH) 1076#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) || defined(DEBUG_KEXECDH)
1037void 1077void
1038dump_digest(char *msg, u_char *digest, int len) 1078dump_digest(const char *msg, const u_char *digest, int len)
1039{ 1079{
1040 fprintf(stderr, "%s\n", msg); 1080 fprintf(stderr, "%s\n", msg);
1041 sshbuf_dump_data(digest, len, stderr); 1081 sshbuf_dump_data(digest, len, stderr);
1042} 1082}
1043#endif 1083#endif
1084
1085/*
1086 * Send a plaintext error message to the peer, suffixed by \r\n.
1087 * Only used during banner exchange, and there only for the server.
1088 */
1089static void
1090send_error(struct ssh *ssh, char *msg)
1091{
1092 char *crnl = "\r\n";
1093
1094 if (!ssh->kex->server)
1095 return;
1096
1097 if (atomicio(vwrite, ssh_packet_get_connection_out(ssh),
1098 msg, strlen(msg)) != strlen(msg) ||
1099 atomicio(vwrite, ssh_packet_get_connection_out(ssh),
1100 crnl, strlen(crnl)) != strlen(crnl))
1101 error("%s: write: %.100s", __func__, strerror(errno));
1102}
1103
1104/*
1105 * Sends our identification string and waits for the peer's. Will block for
1106 * up to timeout_ms (or indefinitely if timeout_ms <= 0).
1107 * Returns on 0 success or a ssherr.h code on failure.
1108 */
1109int
1110kex_exchange_identification(struct ssh *ssh, int timeout_ms,
1111 const char *version_addendum)
1112{
1113 int remote_major, remote_minor, mismatch;
1114 size_t len, i, n;
1115 int r, expect_nl;
1116 u_char c;
1117 struct sshbuf *our_version = ssh->kex->server ?
1118 ssh->kex->server_version : ssh->kex->client_version;
1119 struct sshbuf *peer_version = ssh->kex->server ?
1120 ssh->kex->client_version : ssh->kex->server_version;
1121 char *our_version_string = NULL, *peer_version_string = NULL;
1122 char *cp, *remote_version = NULL;
1123
1124 /* Prepare and send our banner */
1125 sshbuf_reset(our_version);
1126 if (version_addendum != NULL && *version_addendum == '\0')
1127 version_addendum = NULL;
1128 if ((r = sshbuf_putf(our_version, "SSH-%d.%d-%.100s%s%s\r\n",
1129 PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION,
1130 version_addendum == NULL ? "" : " ",
1131 version_addendum == NULL ? "" : version_addendum)) != 0) {
1132 error("%s: sshbuf_putf: %s", __func__, ssh_err(r));
1133 goto out;
1134 }
1135
1136 if (atomicio(vwrite, ssh_packet_get_connection_out(ssh),
1137 sshbuf_mutable_ptr(our_version),
1138 sshbuf_len(our_version)) != sshbuf_len(our_version)) {
1139 error("%s: write: %.100s", __func__, strerror(errno));
1140 r = SSH_ERR_SYSTEM_ERROR;
1141 goto out;
1142 }
1143 if ((r = sshbuf_consume_end(our_version, 2)) != 0) { /* trim \r\n */
1144 error("%s: sshbuf_consume_end: %s", __func__, ssh_err(r));
1145 goto out;
1146 }
1147 our_version_string = sshbuf_dup_string(our_version);
1148 if (our_version_string == NULL) {
1149 error("%s: sshbuf_dup_string failed", __func__);
1150 r = SSH_ERR_ALLOC_FAIL;
1151 goto out;
1152 }
1153 debug("Local version string %.100s", our_version_string);
1154
1155 /* Read other side's version identification. */
1156 for (n = 0; ; n++) {
1157 if (n >= SSH_MAX_PRE_BANNER_LINES) {
1158 send_error(ssh, "No SSH identification string "
1159 "received.");
1160 error("%s: No SSH version received in first %u lines "
1161 "from server", __func__, SSH_MAX_PRE_BANNER_LINES);
1162 r = SSH_ERR_INVALID_FORMAT;
1163 goto out;
1164 }
1165 sshbuf_reset(peer_version);
1166 expect_nl = 0;
1167 for (i = 0; ; i++) {
1168 if (timeout_ms > 0) {
1169 r = waitrfd(ssh_packet_get_connection_in(ssh),
1170 &timeout_ms);
1171 if (r == -1 && errno == ETIMEDOUT) {
1172 send_error(ssh, "Timed out waiting "
1173 "for SSH identification string.");
1174 error("Connection timed out during "
1175 "banner exchange");
1176 r = SSH_ERR_CONN_TIMEOUT;
1177 goto out;
1178 } else if (r == -1) {
1179 error("%s: %s",
1180 __func__, strerror(errno));
1181 r = SSH_ERR_SYSTEM_ERROR;
1182 goto out;
1183 }
1184 }
1185
1186 len = atomicio(read, ssh_packet_get_connection_in(ssh),
1187 &c, 1);
1188 if (len != 1 && errno == EPIPE) {
1189 error("%s: Connection closed by remote host",
1190 __func__);
1191 r = SSH_ERR_CONN_CLOSED;
1192 goto out;
1193 } else if (len != 1) {
1194 error("%s: read: %.100s",
1195 __func__, strerror(errno));
1196 r = SSH_ERR_SYSTEM_ERROR;
1197 goto out;
1198 }
1199 if (c == '\r') {
1200 expect_nl = 1;
1201 continue;
1202 }
1203 if (c == '\n')
1204 break;
1205 if (c == '\0' || expect_nl) {
1206 error("%s: banner line contains invalid "
1207 "characters", __func__);
1208 goto invalid;
1209 }
1210 if ((r = sshbuf_put_u8(peer_version, c)) != 0) {
1211 error("%s: sshbuf_put: %s",
1212 __func__, ssh_err(r));
1213 goto out;
1214 }
1215 if (sshbuf_len(peer_version) > SSH_MAX_BANNER_LEN) {
1216 error("%s: banner line too long", __func__);
1217 goto invalid;
1218 }
1219 }
1220 /* Is this an actual protocol banner? */
1221 if (sshbuf_len(peer_version) > 4 &&
1222 memcmp(sshbuf_ptr(peer_version), "SSH-", 4) == 0)
1223 break;
1224 /* If not, then just log the line and continue */
1225 if ((cp = sshbuf_dup_string(peer_version)) == NULL) {
1226 error("%s: sshbuf_dup_string failed", __func__);
1227 r = SSH_ERR_ALLOC_FAIL;
1228 goto out;
1229 }
1230 /* Do not accept lines before the SSH ident from a client */
1231 if (ssh->kex->server) {
1232 error("%s: client sent invalid protocol identifier "
1233 "\"%.256s\"", __func__, cp);
1234 free(cp);
1235 goto invalid;
1236 }
1237 debug("%s: banner line %zu: %s", __func__, n, cp);
1238 free(cp);
1239 }
1240 peer_version_string = sshbuf_dup_string(peer_version);
1241 if (peer_version_string == NULL)
1242 error("%s: sshbuf_dup_string failed", __func__);
1243 /* XXX must be same size for sscanf */
1244 if ((remote_version = calloc(1, sshbuf_len(peer_version))) == NULL) {
1245 error("%s: calloc failed", __func__);
1246 r = SSH_ERR_ALLOC_FAIL;
1247 goto out;
1248 }
1249
1250 /*
1251 * Check that the versions match. In future this might accept
1252 * several versions and set appropriate flags to handle them.
1253 */
1254 if (sscanf(peer_version_string, "SSH-%d.%d-%[^\n]\n",
1255 &remote_major, &remote_minor, remote_version) != 3) {
1256 error("Bad remote protocol version identification: '%.100s'",
1257 peer_version_string);
1258 invalid:
1259 send_error(ssh, "Invalid SSH identification string.");
1260 r = SSH_ERR_INVALID_FORMAT;
1261 goto out;
1262 }
1263 debug("Remote protocol version %d.%d, remote software version %.100s",
1264 remote_major, remote_minor, remote_version);
1265 ssh->compat = compat_datafellows(remote_version);
1266
1267 mismatch = 0;
1268 switch (remote_major) {
1269 case 2:
1270 break;
1271 case 1:
1272 if (remote_minor != 99)
1273 mismatch = 1;
1274 break;
1275 default:
1276 mismatch = 1;
1277 break;
1278 }
1279 if (mismatch) {
1280 error("Protocol major versions differ: %d vs. %d",
1281 PROTOCOL_MAJOR_2, remote_major);
1282 send_error(ssh, "Protocol major versions differ.");
1283 r = SSH_ERR_NO_PROTOCOL_VERSION;
1284 goto out;
1285 }
1286
1287 if (ssh->kex->server && (ssh->compat & SSH_BUG_PROBE) != 0) {
1288 logit("probed from %s port %d with %s. Don't panic.",
1289 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
1290 peer_version_string);
1291 r = SSH_ERR_CONN_CLOSED; /* XXX */
1292 goto out;
1293 }
1294 if (ssh->kex->server && (ssh->compat & SSH_BUG_SCANNER) != 0) {
1295 logit("scanned from %s port %d with %s. Don't panic.",
1296 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
1297 peer_version_string);
1298 r = SSH_ERR_CONN_CLOSED; /* XXX */
1299 goto out;
1300 }
1301 if ((ssh->compat & SSH_BUG_RSASIGMD5) != 0) {
1302 logit("Remote version \"%.100s\" uses unsafe RSA signature "
1303 "scheme; disabling use of RSA keys", remote_version);
1304 }
1305 /* success */
1306 r = 0;
1307 out:
1308 free(our_version_string);
1309 free(peer_version_string);
1310 free(remote_version);
1311 return r;
1312}
1313
diff --git a/kex.h b/kex.h
index 593de1208..6d446d1cc 100644
--- a/kex.h
+++ b/kex.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: kex.h,v 1.91 2018/07/11 18:53:29 markus Exp $ */ 1/* $OpenBSD: kex.h,v 1.107 2019/01/23 00:30:41 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
@@ -27,6 +27,7 @@
27#define KEX_H 27#define KEX_H
28 28
29#include "mac.h" 29#include "mac.h"
30#include "crypto_api.h"
30 31
31#ifdef WITH_LEAKMALLOC 32#ifdef WITH_LEAKMALLOC
32#include "leakmalloc.h" 33#include "leakmalloc.h"
@@ -62,6 +63,7 @@
62#define KEX_ECDH_SHA2_NISTP521 "ecdh-sha2-nistp521" 63#define KEX_ECDH_SHA2_NISTP521 "ecdh-sha2-nistp521"
63#define KEX_CURVE25519_SHA256 "curve25519-sha256" 64#define KEX_CURVE25519_SHA256 "curve25519-sha256"
64#define KEX_CURVE25519_SHA256_OLD "curve25519-sha256@libssh.org" 65#define KEX_CURVE25519_SHA256_OLD "curve25519-sha256@libssh.org"
66#define KEX_SNTRUP4591761X25519_SHA512 "sntrup4591761x25519-sha512@tinyssh.org"
65 67
66#define COMP_NONE 0 68#define COMP_NONE 0
67/* pre-auth compression (COMP_ZLIB) is only supported in the client */ 69/* pre-auth compression (COMP_ZLIB) is only supported in the client */
@@ -100,10 +102,12 @@ enum kex_exchange {
100 KEX_DH_GEX_SHA256, 102 KEX_DH_GEX_SHA256,
101 KEX_ECDH_SHA2, 103 KEX_ECDH_SHA2,
102 KEX_C25519_SHA256, 104 KEX_C25519_SHA256,
105 KEX_KEM_SNTRUP4591761X25519_SHA512,
103 KEX_MAX 106 KEX_MAX
104}; 107};
105 108
106#define KEX_INIT_SENT 0x0001 109#define KEX_INIT_SENT 0x0001
110#define KEX_INITIAL 0x0002
107 111
108struct sshenc { 112struct sshenc {
109 char *name; 113 char *name;
@@ -144,27 +148,29 @@ struct kex {
144 int ext_info_c; 148 int ext_info_c;
145 struct sshbuf *my; 149 struct sshbuf *my;
146 struct sshbuf *peer; 150 struct sshbuf *peer;
151 struct sshbuf *client_version;
152 struct sshbuf *server_version;
147 sig_atomic_t done; 153 sig_atomic_t done;
148 u_int flags; 154 u_int flags;
149 int hash_alg; 155 int hash_alg;
150 int ec_nid; 156 int ec_nid;
151 char *client_version_string;
152 char *server_version_string;
153 char *failed_choice; 157 char *failed_choice;
154 int (*verify_host_key)(struct sshkey *, struct ssh *); 158 int (*verify_host_key)(struct sshkey *, struct ssh *);
155 struct sshkey *(*load_host_public_key)(int, int, struct ssh *); 159 struct sshkey *(*load_host_public_key)(int, int, struct ssh *);
156 struct sshkey *(*load_host_private_key)(int, int, struct ssh *); 160 struct sshkey *(*load_host_private_key)(int, int, struct ssh *);
157 int (*host_key_index)(struct sshkey *, int, struct ssh *); 161 int (*host_key_index)(struct sshkey *, int, struct ssh *);
158 int (*sign)(struct sshkey *, struct sshkey *, u_char **, size_t *, 162 int (*sign)(struct ssh *, struct sshkey *, struct sshkey *,
159 const u_char *, size_t, const char *, u_int); 163 u_char **, size_t *, const u_char *, size_t, const char *);
160 int (*kex[KEX_MAX])(struct ssh *); 164 int (*kex[KEX_MAX])(struct ssh *);
161 /* kex specific state */ 165 /* kex specific state */
162 DH *dh; /* DH */ 166 DH *dh; /* DH */
163 u_int min, max, nbits; /* GEX */ 167 u_int min, max, nbits; /* GEX */
164 EC_KEY *ec_client_key; /* ECDH */ 168 EC_KEY *ec_client_key; /* ECDH */
165 const EC_GROUP *ec_group; /* ECDH */ 169 const EC_GROUP *ec_group; /* ECDH */
166 u_char c25519_client_key[CURVE25519_SIZE]; /* 25519 */ 170 u_char c25519_client_key[CURVE25519_SIZE]; /* 25519 + KEM */
167 u_char c25519_client_pubkey[CURVE25519_SIZE]; /* 25519 */ 171 u_char c25519_client_pubkey[CURVE25519_SIZE]; /* 25519 */
172 u_char sntrup4591761_client_key[crypto_kem_sntrup4591761_SECRETKEYBYTES]; /* KEM */
173 struct sshbuf *client_pub;
168}; 174};
169 175
170int kex_names_valid(const char *); 176int kex_names_valid(const char *);
@@ -172,7 +178,10 @@ char *kex_alg_list(char);
172char *kex_names_cat(const char *, const char *); 178char *kex_names_cat(const char *, const char *);
173int kex_assemble_names(char **, const char *, const char *); 179int kex_assemble_names(char **, const char *, const char *);
174 180
175int kex_new(struct ssh *, char *[PROPOSAL_MAX], struct kex **); 181int kex_exchange_identification(struct ssh *, int, const char *);
182
183struct kex *kex_new(void);
184int kex_ready(struct ssh *, char *[PROPOSAL_MAX]);
176int kex_setup(struct ssh *, char *[PROPOSAL_MAX]); 185int kex_setup(struct ssh *, char *[PROPOSAL_MAX]);
177void kex_free_newkeys(struct newkeys *); 186void kex_free_newkeys(struct newkeys *);
178void kex_free(struct kex *); 187void kex_free(struct kex *);
@@ -180,44 +189,52 @@ void kex_free(struct kex *);
180int kex_buf2prop(struct sshbuf *, int *, char ***); 189int kex_buf2prop(struct sshbuf *, int *, char ***);
181int kex_prop2buf(struct sshbuf *, char *proposal[PROPOSAL_MAX]); 190int kex_prop2buf(struct sshbuf *, char *proposal[PROPOSAL_MAX]);
182void kex_prop_free(char **); 191void kex_prop_free(char **);
192int kex_load_hostkey(struct ssh *, struct sshkey **, struct sshkey **);
193int kex_verify_host_key(struct ssh *, struct sshkey *);
183 194
184int kex_send_kexinit(struct ssh *); 195int kex_send_kexinit(struct ssh *);
185int kex_input_kexinit(int, u_int32_t, struct ssh *); 196int kex_input_kexinit(int, u_int32_t, struct ssh *);
186int kex_input_ext_info(int, u_int32_t, struct ssh *); 197int kex_input_ext_info(int, u_int32_t, struct ssh *);
187int kex_derive_keys(struct ssh *, u_char *, u_int, const struct sshbuf *); 198int kex_derive_keys(struct ssh *, u_char *, u_int, const struct sshbuf *);
188int kex_derive_keys_bn(struct ssh *, u_char *, u_int, const BIGNUM *);
189int kex_send_newkeys(struct ssh *); 199int kex_send_newkeys(struct ssh *);
190int kex_start_rekex(struct ssh *); 200int kex_start_rekex(struct ssh *);
191 201
192int kexdh_client(struct ssh *);
193int kexdh_server(struct ssh *);
194int kexgex_client(struct ssh *); 202int kexgex_client(struct ssh *);
195int kexgex_server(struct ssh *); 203int kexgex_server(struct ssh *);
196int kexecdh_client(struct ssh *); 204int kex_gen_client(struct ssh *);
197int kexecdh_server(struct ssh *); 205int kex_gen_server(struct ssh *);
198int kexc25519_client(struct ssh *); 206
199int kexc25519_server(struct ssh *); 207int kex_dh_keypair(struct kex *);
208int kex_dh_enc(struct kex *, const struct sshbuf *, struct sshbuf **,
209 struct sshbuf **);
210int kex_dh_dec(struct kex *, const struct sshbuf *, struct sshbuf **);
211
212int kex_ecdh_keypair(struct kex *);
213int kex_ecdh_enc(struct kex *, const struct sshbuf *, struct sshbuf **,
214 struct sshbuf **);
215int kex_ecdh_dec(struct kex *, const struct sshbuf *, struct sshbuf **);
216
217int kex_c25519_keypair(struct kex *);
218int kex_c25519_enc(struct kex *, const struct sshbuf *, struct sshbuf **,
219 struct sshbuf **);
220int kex_c25519_dec(struct kex *, const struct sshbuf *, struct sshbuf **);
221
222int kex_kem_sntrup4591761x25519_keypair(struct kex *);
223int kex_kem_sntrup4591761x25519_enc(struct kex *, const struct sshbuf *,
224 struct sshbuf **, struct sshbuf **);
225int kex_kem_sntrup4591761x25519_dec(struct kex *, const struct sshbuf *,
226 struct sshbuf **);
200 227
201int kex_dh_hash(int, const char *, const char *, 228int kex_dh_keygen(struct kex *);
202 const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, 229int kex_dh_compute_key(struct kex *, BIGNUM *, struct sshbuf *);
203 const BIGNUM *, const BIGNUM *, const BIGNUM *, u_char *, size_t *);
204 230
205int kexgex_hash(int, const char *, const char *, 231int kexgex_hash(int, const struct sshbuf *, const struct sshbuf *,
206 const u_char *, size_t, const u_char *, size_t, const u_char *, size_t, 232 const struct sshbuf *, const struct sshbuf *, const struct sshbuf *,
207 int, int, int, 233 int, int, int,
208 const BIGNUM *, const BIGNUM *, const BIGNUM *, 234 const BIGNUM *, const BIGNUM *, const BIGNUM *,
209 const BIGNUM *, const BIGNUM *, 235 const BIGNUM *, const u_char *, size_t,
210 u_char *, size_t *); 236 u_char *, size_t *);
211 237
212int kex_ecdh_hash(int, const EC_GROUP *, const char *, const char *,
213 const u_char *, size_t, const u_char *, size_t, const u_char *, size_t,
214 const EC_POINT *, const EC_POINT *, const BIGNUM *, u_char *, size_t *);
215
216int kex_c25519_hash(int, const char *, const char *,
217 const u_char *, size_t, const u_char *, size_t,
218 const u_char *, size_t, const u_char *, const u_char *,
219 const u_char *, size_t, u_char *, size_t *);
220
221void kexc25519_keygen(u_char key[CURVE25519_SIZE], u_char pub[CURVE25519_SIZE]) 238void kexc25519_keygen(u_char key[CURVE25519_SIZE], u_char pub[CURVE25519_SIZE])
222 __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE))) 239 __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE)))
223 __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE))); 240 __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE)));
@@ -225,9 +242,13 @@ int kexc25519_shared_key(const u_char key[CURVE25519_SIZE],
225 const u_char pub[CURVE25519_SIZE], struct sshbuf *out) 242 const u_char pub[CURVE25519_SIZE], struct sshbuf *out)
226 __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE))) 243 __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE)))
227 __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE))); 244 __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE)));
245int kexc25519_shared_key_ext(const u_char key[CURVE25519_SIZE],
246 const u_char pub[CURVE25519_SIZE], struct sshbuf *out, int)
247 __attribute__((__bounded__(__minbytes__, 1, CURVE25519_SIZE)))
248 __attribute__((__bounded__(__minbytes__, 2, CURVE25519_SIZE)));
228 249
229#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) || defined(DEBUG_KEXECDH) 250#if defined(DEBUG_KEX) || defined(DEBUG_KEXDH) || defined(DEBUG_KEXECDH)
230void dump_digest(char *, u_char *, int); 251void dump_digest(const char *, const u_char *, int);
231#endif 252#endif
232 253
233#if !defined(WITH_OPENSSL) || !defined(OPENSSL_HAS_ECC) 254#if !defined(WITH_OPENSSL) || !defined(OPENSSL_HAS_ECC)
diff --git a/kexc25519.c b/kexc25519.c
index 0897b8c51..f13d766d7 100644
--- a/kexc25519.c
+++ b/kexc25519.c
@@ -1,6 +1,6 @@
1/* $OpenBSD: kexc25519.c,v 1.10 2016/05/02 08:49:03 djm Exp $ */ 1/* $OpenBSD: kexc25519.c,v 1.17 2019/01/21 10:40:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001, 2013 Markus Friedl. All rights reserved. 3 * Copyright (c) 2019 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
5 * Copyright (c) 2013 Aris Adamantiadis. All rights reserved. 5 * Copyright (c) 2013 Aris Adamantiadis. All rights reserved.
6 * 6 *
@@ -29,20 +29,16 @@
29 29
30#include <sys/types.h> 30#include <sys/types.h>
31 31
32#include <signal.h> 32#include <stdio.h>
33#include <string.h> 33#include <string.h>
34#include <signal.h>
34 35
35#include <openssl/bn.h>
36#include <openssl/evp.h>
37
38#include "sshbuf.h"
39#include "ssh2.h"
40#include "sshkey.h" 36#include "sshkey.h"
41#include "cipher.h"
42#include "kex.h" 37#include "kex.h"
43#include "log.h" 38#include "sshbuf.h"
44#include "digest.h" 39#include "digest.h"
45#include "ssherr.h" 40#include "ssherr.h"
41#include "ssh2.h"
46 42
47extern int crypto_scalarmult_curve25519(u_char a[CURVE25519_SIZE], 43extern int crypto_scalarmult_curve25519(u_char a[CURVE25519_SIZE],
48 const u_char b[CURVE25519_SIZE], const u_char c[CURVE25519_SIZE]) 44 const u_char b[CURVE25519_SIZE], const u_char c[CURVE25519_SIZE])
@@ -60,74 +56,144 @@ kexc25519_keygen(u_char key[CURVE25519_SIZE], u_char pub[CURVE25519_SIZE])
60} 56}
61 57
62int 58int
63kexc25519_shared_key(const u_char key[CURVE25519_SIZE], 59kexc25519_shared_key_ext(const u_char key[CURVE25519_SIZE],
64 const u_char pub[CURVE25519_SIZE], struct sshbuf *out) 60 const u_char pub[CURVE25519_SIZE], struct sshbuf *out, int raw)
65{ 61{
66 u_char shared_key[CURVE25519_SIZE]; 62 u_char shared_key[CURVE25519_SIZE];
63 u_char zero[CURVE25519_SIZE];
67 int r; 64 int r;
68 65
69 /* Check for all-zero public key */ 66 crypto_scalarmult_curve25519(shared_key, key, pub);
70 explicit_bzero(shared_key, CURVE25519_SIZE); 67
71 if (timingsafe_bcmp(pub, shared_key, CURVE25519_SIZE) == 0) 68 /* Check for all-zero shared secret */
69 explicit_bzero(zero, CURVE25519_SIZE);
70 if (timingsafe_bcmp(zero, shared_key, CURVE25519_SIZE) == 0)
72 return SSH_ERR_KEY_INVALID_EC_VALUE; 71 return SSH_ERR_KEY_INVALID_EC_VALUE;
73 72
74 crypto_scalarmult_curve25519(shared_key, key, pub);
75#ifdef DEBUG_KEXECDH 73#ifdef DEBUG_KEXECDH
76 dump_digest("shared secret", shared_key, CURVE25519_SIZE); 74 dump_digest("shared secret", shared_key, CURVE25519_SIZE);
77#endif 75#endif
78 sshbuf_reset(out); 76 if (raw)
79 r = sshbuf_put_bignum2_bytes(out, shared_key, CURVE25519_SIZE); 77 r = sshbuf_put(out, shared_key, CURVE25519_SIZE);
78 else
79 r = sshbuf_put_bignum2_bytes(out, shared_key, CURVE25519_SIZE);
80 explicit_bzero(shared_key, CURVE25519_SIZE); 80 explicit_bzero(shared_key, CURVE25519_SIZE);
81 return r; 81 return r;
82} 82}
83 83
84int 84int
85kex_c25519_hash( 85kexc25519_shared_key(const u_char key[CURVE25519_SIZE],
86 int hash_alg, 86 const u_char pub[CURVE25519_SIZE], struct sshbuf *out)
87 const char *client_version_string, 87{
88 const char *server_version_string, 88 return kexc25519_shared_key_ext(key, pub, out, 0);
89 const u_char *ckexinit, size_t ckexinitlen, 89}
90 const u_char *skexinit, size_t skexinitlen, 90
91 const u_char *serverhostkeyblob, size_t sbloblen, 91int
92 const u_char client_dh_pub[CURVE25519_SIZE], 92kex_c25519_keypair(struct kex *kex)
93 const u_char server_dh_pub[CURVE25519_SIZE],
94 const u_char *shared_secret, size_t secretlen,
95 u_char *hash, size_t *hashlen)
96{ 93{
97 struct sshbuf *b; 94 struct sshbuf *buf = NULL;
95 u_char *cp = NULL;
98 int r; 96 int r;
99 97
100 if (*hashlen < ssh_digest_bytes(hash_alg)) 98 if ((buf = sshbuf_new()) == NULL)
101 return SSH_ERR_INVALID_ARGUMENT;
102 if ((b = sshbuf_new()) == NULL)
103 return SSH_ERR_ALLOC_FAIL; 99 return SSH_ERR_ALLOC_FAIL;
104 if ((r = sshbuf_put_cstring(b, client_version_string)) < 0 || 100 if ((r = sshbuf_reserve(buf, CURVE25519_SIZE, &cp)) != 0)
105 (r = sshbuf_put_cstring(b, server_version_string)) < 0 || 101 goto out;
106 /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */ 102 kexc25519_keygen(kex->c25519_client_key, cp);
107 (r = sshbuf_put_u32(b, ckexinitlen+1)) < 0 || 103#ifdef DEBUG_KEXECDH
108 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) < 0 || 104 dump_digest("client public key c25519:", cp, CURVE25519_SIZE);
109 (r = sshbuf_put(b, ckexinit, ckexinitlen)) < 0 || 105#endif
110 (r = sshbuf_put_u32(b, skexinitlen+1)) < 0 || 106 kex->client_pub = buf;
111 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) < 0 || 107 buf = NULL;
112 (r = sshbuf_put(b, skexinit, skexinitlen)) < 0 || 108 out:
113 (r = sshbuf_put_string(b, serverhostkeyblob, sbloblen)) < 0 || 109 sshbuf_free(buf);
114 (r = sshbuf_put_string(b, client_dh_pub, CURVE25519_SIZE)) < 0 || 110 return r;
115 (r = sshbuf_put_string(b, server_dh_pub, CURVE25519_SIZE)) < 0 || 111}
116 (r = sshbuf_put(b, shared_secret, secretlen)) < 0) { 112
117 sshbuf_free(b); 113int
118 return r; 114kex_c25519_enc(struct kex *kex, const struct sshbuf *client_blob,
115 struct sshbuf **server_blobp, struct sshbuf **shared_secretp)
116{
117 struct sshbuf *server_blob = NULL;
118 struct sshbuf *buf = NULL;
119 const u_char *client_pub;
120 u_char *server_pub;
121 u_char server_key[CURVE25519_SIZE];
122 int r;
123
124 *server_blobp = NULL;
125 *shared_secretp = NULL;
126
127 if (sshbuf_len(client_blob) != CURVE25519_SIZE) {
128 r = SSH_ERR_SIGNATURE_INVALID;
129 goto out;
119 } 130 }
120#ifdef DEBUG_KEX 131 client_pub = sshbuf_ptr(client_blob);
121 sshbuf_dump(b, stderr); 132#ifdef DEBUG_KEXECDH
133 dump_digest("client public key 25519:", client_pub, CURVE25519_SIZE);
122#endif 134#endif
123 if (ssh_digest_buffer(hash_alg, b, hash, *hashlen) != 0) { 135 /* allocate space for encrypted KEM key and ECDH pub key */
124 sshbuf_free(b); 136 if ((server_blob = sshbuf_new()) == NULL) {
125 return SSH_ERR_LIBCRYPTO_ERROR; 137 r = SSH_ERR_ALLOC_FAIL;
138 goto out;
126 } 139 }
127 sshbuf_free(b); 140 if ((r = sshbuf_reserve(server_blob, CURVE25519_SIZE, &server_pub)) != 0)
128 *hashlen = ssh_digest_bytes(hash_alg); 141 goto out;
129#ifdef DEBUG_KEX 142 kexc25519_keygen(server_key, server_pub);
130 dump_digest("hash", hash, *hashlen); 143 /* allocate shared secret */
144 if ((buf = sshbuf_new()) == NULL) {
145 r = SSH_ERR_ALLOC_FAIL;
146 goto out;
147 }
148 if ((r = kexc25519_shared_key_ext(server_key, client_pub, buf, 0)) < 0)
149 goto out;
150#ifdef DEBUG_KEXECDH
151 dump_digest("server public key 25519:", server_pub, CURVE25519_SIZE);
152 dump_digest("encoded shared secret:", sshbuf_ptr(buf), sshbuf_len(buf));
131#endif 153#endif
132 return 0; 154 *server_blobp = server_blob;
155 *shared_secretp = buf;
156 server_blob = NULL;
157 buf = NULL;
158 out:
159 explicit_bzero(server_key, sizeof(server_key));
160 sshbuf_free(server_blob);
161 sshbuf_free(buf);
162 return r;
163}
164
165int
166kex_c25519_dec(struct kex *kex, const struct sshbuf *server_blob,
167 struct sshbuf **shared_secretp)
168{
169 struct sshbuf *buf = NULL;
170 const u_char *server_pub;
171 int r;
172
173 *shared_secretp = NULL;
174
175 if (sshbuf_len(server_blob) != CURVE25519_SIZE) {
176 r = SSH_ERR_SIGNATURE_INVALID;
177 goto out;
178 }
179 server_pub = sshbuf_ptr(server_blob);
180#ifdef DEBUG_KEXECDH
181 dump_digest("server public key c25519:", server_pub, CURVE25519_SIZE);
182#endif
183 /* shared secret */
184 if ((buf = sshbuf_new()) == NULL) {
185 r = SSH_ERR_ALLOC_FAIL;
186 goto out;
187 }
188 if ((r = kexc25519_shared_key_ext(kex->c25519_client_key, server_pub,
189 buf, 0)) < 0)
190 goto out;
191#ifdef DEBUG_KEXECDH
192 dump_digest("encoded shared secret:", sshbuf_ptr(buf), sshbuf_len(buf));
193#endif
194 *shared_secretp = buf;
195 buf = NULL;
196 out:
197 sshbuf_free(buf);
198 return r;
133} 199}
diff --git a/kexc25519c.c b/kexc25519c.c
deleted file mode 100644
index a8d92149c..000000000
--- a/kexc25519c.c
+++ /dev/null
@@ -1,169 +0,0 @@
1/* $OpenBSD: kexc25519c.c,v 1.9 2017/12/18 02:25:15 djm Exp $ */
2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved.
5 * Copyright (c) 2013 Aris Adamantiadis. All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27
28#include "includes.h"
29
30#include <sys/types.h>
31
32#include <stdio.h>
33#include <string.h>
34#include <signal.h>
35
36#include "sshkey.h"
37#include "cipher.h"
38#include "kex.h"
39#include "log.h"
40#include "packet.h"
41#include "ssh2.h"
42#include "sshbuf.h"
43#include "digest.h"
44#include "ssherr.h"
45
46static int
47input_kex_c25519_reply(int type, u_int32_t seq, struct ssh *ssh);
48
49int
50kexc25519_client(struct ssh *ssh)
51{
52 struct kex *kex = ssh->kex;
53 int r;
54
55 kexc25519_keygen(kex->c25519_client_key, kex->c25519_client_pubkey);
56#ifdef DEBUG_KEXECDH
57 dump_digest("client private key:", kex->c25519_client_key,
58 sizeof(kex->c25519_client_key));
59#endif
60 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_ECDH_INIT)) != 0 ||
61 (r = sshpkt_put_string(ssh, kex->c25519_client_pubkey,
62 sizeof(kex->c25519_client_pubkey))) != 0 ||
63 (r = sshpkt_send(ssh)) != 0)
64 return r;
65
66 debug("expecting SSH2_MSG_KEX_ECDH_REPLY");
67 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_c25519_reply);
68 return 0;
69}
70
71static int
72input_kex_c25519_reply(int type, u_int32_t seq, struct ssh *ssh)
73{
74 struct kex *kex = ssh->kex;
75 struct sshkey *server_host_key = NULL;
76 struct sshbuf *shared_secret = NULL;
77 u_char *server_pubkey = NULL;
78 u_char *server_host_key_blob = NULL, *signature = NULL;
79 u_char hash[SSH_DIGEST_MAX_LENGTH];
80 size_t slen, pklen, sbloblen, hashlen;
81 int r;
82
83 if (kex->verify_host_key == NULL) {
84 r = SSH_ERR_INVALID_ARGUMENT;
85 goto out;
86 }
87
88 /* hostkey */
89 if ((r = sshpkt_get_string(ssh, &server_host_key_blob,
90 &sbloblen)) != 0 ||
91 (r = sshkey_from_blob(server_host_key_blob, sbloblen,
92 &server_host_key)) != 0)
93 goto out;
94 if (server_host_key->type != kex->hostkey_type ||
95 (kex->hostkey_type == KEY_ECDSA &&
96 server_host_key->ecdsa_nid != kex->hostkey_nid)) {
97 r = SSH_ERR_KEY_TYPE_MISMATCH;
98 goto out;
99 }
100 if (kex->verify_host_key(server_host_key, ssh) == -1) {
101 r = SSH_ERR_SIGNATURE_INVALID;
102 goto out;
103 }
104
105 /* Q_S, server public key */
106 /* signed H */
107 if ((r = sshpkt_get_string(ssh, &server_pubkey, &pklen)) != 0 ||
108 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 ||
109 (r = sshpkt_get_end(ssh)) != 0)
110 goto out;
111 if (pklen != CURVE25519_SIZE) {
112 r = SSH_ERR_SIGNATURE_INVALID;
113 goto out;
114 }
115
116#ifdef DEBUG_KEXECDH
117 dump_digest("server public key:", server_pubkey, CURVE25519_SIZE);
118#endif
119
120 if ((shared_secret = sshbuf_new()) == NULL) {
121 r = SSH_ERR_ALLOC_FAIL;
122 goto out;
123 }
124 if ((r = kexc25519_shared_key(kex->c25519_client_key, server_pubkey,
125 shared_secret)) < 0)
126 goto out;
127
128 /* calc and verify H */
129 hashlen = sizeof(hash);
130 if ((r = kex_c25519_hash(
131 kex->hash_alg,
132 kex->client_version_string,
133 kex->server_version_string,
134 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
135 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
136 server_host_key_blob, sbloblen,
137 kex->c25519_client_pubkey,
138 server_pubkey,
139 sshbuf_ptr(shared_secret), sshbuf_len(shared_secret),
140 hash, &hashlen)) < 0)
141 goto out;
142
143 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
144 kex->hostkey_alg, ssh->compat)) != 0)
145 goto out;
146
147 /* save session id */
148 if (kex->session_id == NULL) {
149 kex->session_id_len = hashlen;
150 kex->session_id = malloc(kex->session_id_len);
151 if (kex->session_id == NULL) {
152 r = SSH_ERR_ALLOC_FAIL;
153 goto out;
154 }
155 memcpy(kex->session_id, hash, kex->session_id_len);
156 }
157
158 if ((r = kex_derive_keys(ssh, hash, hashlen, shared_secret)) == 0)
159 r = kex_send_newkeys(ssh);
160out:
161 explicit_bzero(hash, sizeof(hash));
162 explicit_bzero(kex->c25519_client_key, sizeof(kex->c25519_client_key));
163 free(server_host_key_blob);
164 free(server_pubkey);
165 free(signature);
166 sshkey_free(server_host_key);
167 sshbuf_free(shared_secret);
168 return r;
169}
diff --git a/kexc25519s.c b/kexc25519s.c
deleted file mode 100644
index 0800a7a4b..000000000
--- a/kexc25519s.c
+++ /dev/null
@@ -1,158 +0,0 @@
1/* $OpenBSD: kexc25519s.c,v 1.11 2017/05/31 04:19:28 djm Exp $ */
2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved.
5 * Copyright (c) 2013 Aris Adamantiadis. All rights reserved.
6 *
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "includes.h"
28
29#include <sys/types.h>
30#include <stdio.h>
31#include <string.h>
32#include <signal.h>
33
34#include "sshkey.h"
35#include "cipher.h"
36#include "digest.h"
37#include "kex.h"
38#include "log.h"
39#include "packet.h"
40#include "ssh2.h"
41#include "sshbuf.h"
42#include "ssherr.h"
43
44static int input_kex_c25519_init(int, u_int32_t, struct ssh *);
45
46int
47kexc25519_server(struct ssh *ssh)
48{
49 debug("expecting SSH2_MSG_KEX_ECDH_INIT");
50 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_INIT, &input_kex_c25519_init);
51 return 0;
52}
53
54static int
55input_kex_c25519_init(int type, u_int32_t seq, struct ssh *ssh)
56{
57 struct kex *kex = ssh->kex;
58 struct sshkey *server_host_private, *server_host_public;
59 struct sshbuf *shared_secret = NULL;
60 u_char *server_host_key_blob = NULL, *signature = NULL;
61 u_char server_key[CURVE25519_SIZE];
62 u_char *client_pubkey = NULL;
63 u_char server_pubkey[CURVE25519_SIZE];
64 u_char hash[SSH_DIGEST_MAX_LENGTH];
65 size_t slen, pklen, sbloblen, hashlen;
66 int r;
67
68 /* generate private key */
69 kexc25519_keygen(server_key, server_pubkey);
70#ifdef DEBUG_KEXECDH
71 dump_digest("server private key:", server_key, sizeof(server_key));
72#endif
73 if (kex->load_host_public_key == NULL ||
74 kex->load_host_private_key == NULL) {
75 r = SSH_ERR_INVALID_ARGUMENT;
76 goto out;
77 }
78 server_host_public = kex->load_host_public_key(kex->hostkey_type,
79 kex->hostkey_nid, ssh);
80 server_host_private = kex->load_host_private_key(kex->hostkey_type,
81 kex->hostkey_nid, ssh);
82 if (server_host_public == NULL) {
83 r = SSH_ERR_NO_HOSTKEY_LOADED;
84 goto out;
85 }
86
87 if ((r = sshpkt_get_string(ssh, &client_pubkey, &pklen)) != 0 ||
88 (r = sshpkt_get_end(ssh)) != 0)
89 goto out;
90 if (pklen != CURVE25519_SIZE) {
91 r = SSH_ERR_SIGNATURE_INVALID;
92 goto out;
93 }
94#ifdef DEBUG_KEXECDH
95 dump_digest("client public key:", client_pubkey, CURVE25519_SIZE);
96#endif
97
98 if ((shared_secret = sshbuf_new()) == NULL) {
99 r = SSH_ERR_ALLOC_FAIL;
100 goto out;
101 }
102 if ((r = kexc25519_shared_key(server_key, client_pubkey,
103 shared_secret)) < 0)
104 goto out;
105
106 /* calc H */
107 if ((r = sshkey_to_blob(server_host_public, &server_host_key_blob,
108 &sbloblen)) != 0)
109 goto out;
110 hashlen = sizeof(hash);
111 if ((r = kex_c25519_hash(
112 kex->hash_alg,
113 kex->client_version_string,
114 kex->server_version_string,
115 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
116 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
117 server_host_key_blob, sbloblen,
118 client_pubkey,
119 server_pubkey,
120 sshbuf_ptr(shared_secret), sshbuf_len(shared_secret),
121 hash, &hashlen)) < 0)
122 goto out;
123
124 /* save session id := H */
125 if (kex->session_id == NULL) {
126 kex->session_id_len = hashlen;
127 kex->session_id = malloc(kex->session_id_len);
128 if (kex->session_id == NULL) {
129 r = SSH_ERR_ALLOC_FAIL;
130 goto out;
131 }
132 memcpy(kex->session_id, hash, kex->session_id_len);
133 }
134
135 /* sign H */
136 if ((r = kex->sign(server_host_private, server_host_public, &signature,
137 &slen, hash, hashlen, kex->hostkey_alg, ssh->compat)) < 0)
138 goto out;
139
140 /* send server hostkey, ECDH pubkey 'Q_S' and signed H */
141 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_ECDH_REPLY)) != 0 ||
142 (r = sshpkt_put_string(ssh, server_host_key_blob, sbloblen)) != 0 ||
143 (r = sshpkt_put_string(ssh, server_pubkey, sizeof(server_pubkey))) != 0 ||
144 (r = sshpkt_put_string(ssh, signature, slen)) != 0 ||
145 (r = sshpkt_send(ssh)) != 0)
146 goto out;
147
148 if ((r = kex_derive_keys(ssh, hash, hashlen, shared_secret)) == 0)
149 r = kex_send_newkeys(ssh);
150out:
151 explicit_bzero(hash, sizeof(hash));
152 explicit_bzero(server_key, sizeof(server_key));
153 free(server_host_key_blob);
154 free(signature);
155 free(client_pubkey);
156 sshbuf_free(shared_secret);
157 return r;
158}
diff --git a/kexdh.c b/kexdh.c
index e6925b186..67133e339 100644
--- a/kexdh.c
+++ b/kexdh.c
@@ -1,6 +1,6 @@
1/* $OpenBSD: kexdh.c,v 1.26 2016/05/02 10:26:04 djm Exp $ */ 1/* $OpenBSD: kexdh.c,v 1.32 2019/01/21 10:40:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2019 Markus Friedl. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
@@ -30,67 +30,172 @@
30#include <sys/types.h> 30#include <sys/types.h>
31 31
32#include <signal.h> 32#include <signal.h>
33 33#include <stdio.h>
34#include <openssl/evp.h> 34#include <string.h>
35 35
36#include "openbsd-compat/openssl-compat.h" 36#include "openbsd-compat/openssl-compat.h"
37#include <openssl/dh.h>
37 38
38#include "ssh2.h"
39#include "sshkey.h" 39#include "sshkey.h"
40#include "cipher.h"
41#include "kex.h" 40#include "kex.h"
42#include "ssherr.h"
43#include "sshbuf.h" 41#include "sshbuf.h"
44#include "digest.h" 42#include "digest.h"
43#include "ssherr.h"
44#include "dh.h"
45 45
46int 46int
47kex_dh_hash( 47kex_dh_keygen(struct kex *kex)
48 int hash_alg,
49 const char *client_version_string,
50 const char *server_version_string,
51 const u_char *ckexinit, size_t ckexinitlen,
52 const u_char *skexinit, size_t skexinitlen,
53 const u_char *serverhostkeyblob, size_t sbloblen,
54 const BIGNUM *client_dh_pub,
55 const BIGNUM *server_dh_pub,
56 const BIGNUM *shared_secret,
57 u_char *hash, size_t *hashlen)
58{ 48{
59 struct sshbuf *b; 49 switch (kex->kex_type) {
60 int r; 50 case KEX_DH_GRP1_SHA1:
61 51 kex->dh = dh_new_group1();
62 if (*hashlen < ssh_digest_bytes(hash_alg)) 52 break;
53 case KEX_DH_GRP14_SHA1:
54 case KEX_DH_GRP14_SHA256:
55 kex->dh = dh_new_group14();
56 break;
57 case KEX_DH_GRP16_SHA512:
58 kex->dh = dh_new_group16();
59 break;
60 case KEX_DH_GRP18_SHA512:
61 kex->dh = dh_new_group18();
62 break;
63 default:
63 return SSH_ERR_INVALID_ARGUMENT; 64 return SSH_ERR_INVALID_ARGUMENT;
64 if ((b = sshbuf_new()) == NULL)
65 return SSH_ERR_ALLOC_FAIL;
66 if ((r = sshbuf_put_cstring(b, client_version_string)) != 0 ||
67 (r = sshbuf_put_cstring(b, server_version_string)) != 0 ||
68 /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */
69 (r = sshbuf_put_u32(b, ckexinitlen+1)) != 0 ||
70 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 ||
71 (r = sshbuf_put(b, ckexinit, ckexinitlen)) != 0 ||
72 (r = sshbuf_put_u32(b, skexinitlen+1)) != 0 ||
73 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 ||
74 (r = sshbuf_put(b, skexinit, skexinitlen)) != 0 ||
75 (r = sshbuf_put_string(b, serverhostkeyblob, sbloblen)) != 0 ||
76 (r = sshbuf_put_bignum2(b, client_dh_pub)) != 0 ||
77 (r = sshbuf_put_bignum2(b, server_dh_pub)) != 0 ||
78 (r = sshbuf_put_bignum2(b, shared_secret)) != 0) {
79 sshbuf_free(b);
80 return r;
81 } 65 }
82#ifdef DEBUG_KEX 66 if (kex->dh == NULL)
83 sshbuf_dump(b, stderr); 67 return SSH_ERR_ALLOC_FAIL;
68 return (dh_gen_key(kex->dh, kex->we_need * 8));
69}
70
71int
72kex_dh_compute_key(struct kex *kex, BIGNUM *dh_pub, struct sshbuf *out)
73{
74 BIGNUM *shared_secret = NULL;
75 u_char *kbuf = NULL;
76 size_t klen = 0;
77 int kout, r;
78
79#ifdef DEBUG_KEXDH
80 fprintf(stderr, "dh_pub= ");
81 BN_print_fp(stderr, dh_pub);
82 fprintf(stderr, "\n");
83 debug("bits %d", BN_num_bits(dh_pub));
84 DHparams_print_fp(stderr, kex->dh);
85 fprintf(stderr, "\n");
84#endif 86#endif
85 if (ssh_digest_buffer(hash_alg, b, hash, *hashlen) != 0) { 87
86 sshbuf_free(b); 88 if (!dh_pub_is_valid(kex->dh, dh_pub)) {
87 return SSH_ERR_LIBCRYPTO_ERROR; 89 r = SSH_ERR_MESSAGE_INCOMPLETE;
90 goto out;
91 }
92 klen = DH_size(kex->dh);
93 if ((kbuf = malloc(klen)) == NULL ||
94 (shared_secret = BN_new()) == NULL) {
95 r = SSH_ERR_ALLOC_FAIL;
96 goto out;
97 }
98 if ((kout = DH_compute_key(kbuf, dh_pub, kex->dh)) < 0 ||
99 BN_bin2bn(kbuf, kout, shared_secret) == NULL) {
100 r = SSH_ERR_LIBCRYPTO_ERROR;
101 goto out;
88 } 102 }
89 sshbuf_free(b); 103#ifdef DEBUG_KEXDH
90 *hashlen = ssh_digest_bytes(hash_alg); 104 dump_digest("shared secret", kbuf, kout);
91#ifdef DEBUG_KEX
92 dump_digest("hash", hash, *hashlen);
93#endif 105#endif
94 return 0; 106 r = sshbuf_put_bignum2(out, shared_secret);
107 out:
108 freezero(kbuf, klen);
109 BN_clear_free(shared_secret);
110 return r;
111}
112
113int
114kex_dh_keypair(struct kex *kex)
115{
116 const BIGNUM *pub_key;
117 struct sshbuf *buf = NULL;
118 int r;
119
120 if ((r = kex_dh_keygen(kex)) != 0)
121 return r;
122 DH_get0_key(kex->dh, &pub_key, NULL);
123 if ((buf = sshbuf_new()) == NULL)
124 return SSH_ERR_ALLOC_FAIL;
125 if ((r = sshbuf_put_bignum2(buf, pub_key)) != 0 ||
126 (r = sshbuf_get_u32(buf, NULL)) != 0)
127 goto out;
128#ifdef DEBUG_KEXDH
129 DHparams_print_fp(stderr, kex->dh);
130 fprintf(stderr, "pub= ");
131 BN_print_fp(stderr, pub_key);
132 fprintf(stderr, "\n");
133#endif
134 kex->client_pub = buf;
135 buf = NULL;
136 out:
137 sshbuf_free(buf);
138 return r;
139}
140
141int
142kex_dh_enc(struct kex *kex, const struct sshbuf *client_blob,
143 struct sshbuf **server_blobp, struct sshbuf **shared_secretp)
144{
145 const BIGNUM *pub_key;
146 struct sshbuf *server_blob = NULL;
147 int r;
148
149 *server_blobp = NULL;
150 *shared_secretp = NULL;
151
152 if ((r = kex_dh_keygen(kex)) != 0)
153 goto out;
154 DH_get0_key(kex->dh, &pub_key, NULL);
155 if ((server_blob = sshbuf_new()) == NULL) {
156 r = SSH_ERR_ALLOC_FAIL;
157 goto out;
158 }
159 if ((r = sshbuf_put_bignum2(server_blob, pub_key)) != 0 ||
160 (r = sshbuf_get_u32(server_blob, NULL)) != 0)
161 goto out;
162 if ((r = kex_dh_dec(kex, client_blob, shared_secretp)) != 0)
163 goto out;
164 *server_blobp = server_blob;
165 server_blob = NULL;
166 out:
167 DH_free(kex->dh);
168 kex->dh = NULL;
169 sshbuf_free(server_blob);
170 return r;
171}
172
173int
174kex_dh_dec(struct kex *kex, const struct sshbuf *dh_blob,
175 struct sshbuf **shared_secretp)
176{
177 struct sshbuf *buf = NULL;
178 BIGNUM *dh_pub = NULL;
179 int r;
180
181 *shared_secretp = NULL;
182
183 if ((buf = sshbuf_new()) == NULL) {
184 r = SSH_ERR_ALLOC_FAIL;
185 goto out;
186 }
187 if ((r = sshbuf_put_stringb(buf, dh_blob)) != 0 ||
188 (r = sshbuf_get_bignum2(buf, &dh_pub)) != 0)
189 goto out;
190 sshbuf_reset(buf);
191 if ((r = kex_dh_compute_key(kex, dh_pub, buf)) != 0)
192 goto out;
193 *shared_secretp = buf;
194 buf = NULL;
195 out:
196 DH_free(kex->dh);
197 kex->dh = NULL;
198 sshbuf_free(buf);
199 return r;
95} 200}
96#endif /* WITH_OPENSSL */ 201#endif /* WITH_OPENSSL */
diff --git a/kexdhc.c b/kexdhc.c
deleted file mode 100644
index 8b56377ad..000000000
--- a/kexdhc.c
+++ /dev/null
@@ -1,224 +0,0 @@
1/* $OpenBSD: kexdhc.c,v 1.22 2018/02/07 02:06:51 jsing Exp $ */
2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "includes.h"
27
28#ifdef WITH_OPENSSL
29
30#include <sys/types.h>
31
32#include <openssl/dh.h>
33
34#include <stdarg.h>
35#include <stdio.h>
36#include <string.h>
37#include <signal.h>
38
39#include "openbsd-compat/openssl-compat.h"
40
41#include "sshkey.h"
42#include "cipher.h"
43#include "digest.h"
44#include "kex.h"
45#include "log.h"
46#include "packet.h"
47#include "dh.h"
48#include "ssh2.h"
49#include "dispatch.h"
50#include "compat.h"
51#include "ssherr.h"
52#include "sshbuf.h"
53
54static int input_kex_dh(int, u_int32_t, struct ssh *);
55
56int
57kexdh_client(struct ssh *ssh)
58{
59 struct kex *kex = ssh->kex;
60 int r;
61 const BIGNUM *pub_key;
62
63 /* generate and send 'e', client DH public key */
64 switch (kex->kex_type) {
65 case KEX_DH_GRP1_SHA1:
66 kex->dh = dh_new_group1();
67 break;
68 case KEX_DH_GRP14_SHA1:
69 case KEX_DH_GRP14_SHA256:
70 kex->dh = dh_new_group14();
71 break;
72 case KEX_DH_GRP16_SHA512:
73 kex->dh = dh_new_group16();
74 break;
75 case KEX_DH_GRP18_SHA512:
76 kex->dh = dh_new_group18();
77 break;
78 default:
79 r = SSH_ERR_INVALID_ARGUMENT;
80 goto out;
81 }
82 if (kex->dh == NULL) {
83 r = SSH_ERR_ALLOC_FAIL;
84 goto out;
85 }
86 debug("sending SSH2_MSG_KEXDH_INIT");
87 if ((r = dh_gen_key(kex->dh, kex->we_need * 8)) != 0)
88 goto out;
89 DH_get0_key(kex->dh, &pub_key, NULL);
90 if ((r = sshpkt_start(ssh, SSH2_MSG_KEXDH_INIT)) != 0 ||
91 (r = sshpkt_put_bignum2(ssh, pub_key)) != 0 ||
92 (r = sshpkt_send(ssh)) != 0)
93 goto out;
94#ifdef DEBUG_KEXDH
95 DHparams_print_fp(stderr, kex->dh);
96 fprintf(stderr, "pub= ");
97 BN_print_fp(stderr, pub_key);
98 fprintf(stderr, "\n");
99#endif
100 debug("expecting SSH2_MSG_KEXDH_REPLY");
101 ssh_dispatch_set(ssh, SSH2_MSG_KEXDH_REPLY, &input_kex_dh);
102 r = 0;
103 out:
104 return r;
105}
106
107static int
108input_kex_dh(int type, u_int32_t seq, struct ssh *ssh)
109{
110 struct kex *kex = ssh->kex;
111 BIGNUM *dh_server_pub = NULL, *shared_secret = NULL;
112 const BIGNUM *pub_key;
113 struct sshkey *server_host_key = NULL;
114 u_char *kbuf = NULL, *server_host_key_blob = NULL, *signature = NULL;
115 u_char hash[SSH_DIGEST_MAX_LENGTH];
116 size_t klen = 0, slen, sbloblen, hashlen;
117 int kout, r;
118
119 if (kex->verify_host_key == NULL) {
120 r = SSH_ERR_INVALID_ARGUMENT;
121 goto out;
122 }
123 /* key, cert */
124 if ((r = sshpkt_get_string(ssh, &server_host_key_blob,
125 &sbloblen)) != 0 ||
126 (r = sshkey_from_blob(server_host_key_blob, sbloblen,
127 &server_host_key)) != 0)
128 goto out;
129 if (server_host_key->type != kex->hostkey_type ||
130 (kex->hostkey_type == KEY_ECDSA &&
131 server_host_key->ecdsa_nid != kex->hostkey_nid)) {
132 r = SSH_ERR_KEY_TYPE_MISMATCH;
133 goto out;
134 }
135 if (kex->verify_host_key(server_host_key, ssh) == -1) {
136 r = SSH_ERR_SIGNATURE_INVALID;
137 goto out;
138 }
139 /* DH parameter f, server public DH key */
140 if ((dh_server_pub = BN_new()) == NULL) {
141 r = SSH_ERR_ALLOC_FAIL;
142 goto out;
143 }
144 /* signed H */
145 if ((r = sshpkt_get_bignum2(ssh, dh_server_pub)) != 0 ||
146 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 ||
147 (r = sshpkt_get_end(ssh)) != 0)
148 goto out;
149#ifdef DEBUG_KEXDH
150 fprintf(stderr, "dh_server_pub= ");
151 BN_print_fp(stderr, dh_server_pub);
152 fprintf(stderr, "\n");
153 debug("bits %d", BN_num_bits(dh_server_pub));
154#endif
155 if (!dh_pub_is_valid(kex->dh, dh_server_pub)) {
156 sshpkt_disconnect(ssh, "bad server public DH value");
157 r = SSH_ERR_MESSAGE_INCOMPLETE;
158 goto out;
159 }
160
161 klen = DH_size(kex->dh);
162 if ((kbuf = malloc(klen)) == NULL ||
163 (shared_secret = BN_new()) == NULL) {
164 r = SSH_ERR_ALLOC_FAIL;
165 goto out;
166 }
167 if ((kout = DH_compute_key(kbuf, dh_server_pub, kex->dh)) < 0 ||
168 BN_bin2bn(kbuf, kout, shared_secret) == NULL) {
169 r = SSH_ERR_LIBCRYPTO_ERROR;
170 goto out;
171 }
172#ifdef DEBUG_KEXDH
173 dump_digest("shared secret", kbuf, kout);
174#endif
175
176 /* calc and verify H */
177 DH_get0_key(kex->dh, &pub_key, NULL);
178 hashlen = sizeof(hash);
179 if ((r = kex_dh_hash(
180 kex->hash_alg,
181 kex->client_version_string,
182 kex->server_version_string,
183 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
184 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
185 server_host_key_blob, sbloblen,
186 pub_key,
187 dh_server_pub,
188 shared_secret,
189 hash, &hashlen)) != 0)
190 goto out;
191
192 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
193 kex->hostkey_alg, ssh->compat)) != 0)
194 goto out;
195
196 /* save session id */
197 if (kex->session_id == NULL) {
198 kex->session_id_len = hashlen;
199 kex->session_id = malloc(kex->session_id_len);
200 if (kex->session_id == NULL) {
201 r = SSH_ERR_ALLOC_FAIL;
202 goto out;
203 }
204 memcpy(kex->session_id, hash, kex->session_id_len);
205 }
206
207 if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0)
208 r = kex_send_newkeys(ssh);
209 out:
210 explicit_bzero(hash, sizeof(hash));
211 DH_free(kex->dh);
212 kex->dh = NULL;
213 BN_clear_free(dh_server_pub);
214 if (kbuf) {
215 explicit_bzero(kbuf, klen);
216 free(kbuf);
217 }
218 BN_clear_free(shared_secret);
219 sshkey_free(server_host_key);
220 free(server_host_key_blob);
221 free(signature);
222 return r;
223}
224#endif /* WITH_OPENSSL */
diff --git a/kexdhs.c b/kexdhs.c
deleted file mode 100644
index 337aab5be..000000000
--- a/kexdhs.c
+++ /dev/null
@@ -1,222 +0,0 @@
1/* $OpenBSD: kexdhs.c,v 1.27 2018/04/10 00:10:49 djm Exp $ */
2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "includes.h"
27
28#ifdef WITH_OPENSSL
29
30#include <sys/types.h>
31
32#include <stdarg.h>
33#include <string.h>
34#include <signal.h>
35
36#include <openssl/dh.h>
37
38#include "openbsd-compat/openssl-compat.h"
39
40#include "sshkey.h"
41#include "cipher.h"
42#include "digest.h"
43#include "kex.h"
44#include "log.h"
45#include "packet.h"
46#include "dh.h"
47#include "ssh2.h"
48
49#include "dispatch.h"
50#include "compat.h"
51#include "ssherr.h"
52#include "sshbuf.h"
53
54static int input_kex_dh_init(int, u_int32_t, struct ssh *);
55
56int
57kexdh_server(struct ssh *ssh)
58{
59 struct kex *kex = ssh->kex;
60 int r;
61
62 /* generate server DH public key */
63 switch (kex->kex_type) {
64 case KEX_DH_GRP1_SHA1:
65 kex->dh = dh_new_group1();
66 break;
67 case KEX_DH_GRP14_SHA1:
68 case KEX_DH_GRP14_SHA256:
69 kex->dh = dh_new_group14();
70 break;
71 case KEX_DH_GRP16_SHA512:
72 kex->dh = dh_new_group16();
73 break;
74 case KEX_DH_GRP18_SHA512:
75 kex->dh = dh_new_group18();
76 break;
77 default:
78 r = SSH_ERR_INVALID_ARGUMENT;
79 goto out;
80 }
81 if (kex->dh == NULL) {
82 r = SSH_ERR_ALLOC_FAIL;
83 goto out;
84 }
85 if ((r = dh_gen_key(kex->dh, kex->we_need * 8)) != 0)
86 goto out;
87
88 debug("expecting SSH2_MSG_KEXDH_INIT");
89 ssh_dispatch_set(ssh, SSH2_MSG_KEXDH_INIT, &input_kex_dh_init);
90 r = 0;
91 out:
92 return r;
93}
94
95int
96input_kex_dh_init(int type, u_int32_t seq, struct ssh *ssh)
97{
98 struct kex *kex = ssh->kex;
99 BIGNUM *shared_secret = NULL, *dh_client_pub = NULL;
100 const BIGNUM *pub_key;
101 struct sshkey *server_host_public, *server_host_private;
102 u_char *kbuf = NULL, *signature = NULL, *server_host_key_blob = NULL;
103 u_char hash[SSH_DIGEST_MAX_LENGTH];
104 size_t sbloblen, slen;
105 size_t klen = 0, hashlen;
106 int kout, r;
107
108 if (kex->load_host_public_key == NULL ||
109 kex->load_host_private_key == NULL) {
110 r = SSH_ERR_INVALID_ARGUMENT;
111 goto out;
112 }
113 server_host_public = kex->load_host_public_key(kex->hostkey_type,
114 kex->hostkey_nid, ssh);
115 server_host_private = kex->load_host_private_key(kex->hostkey_type,
116 kex->hostkey_nid, ssh);
117 if (server_host_public == NULL) {
118 r = SSH_ERR_NO_HOSTKEY_LOADED;
119 goto out;
120 }
121
122 /* key, cert */
123 if ((dh_client_pub = BN_new()) == NULL) {
124 r = SSH_ERR_ALLOC_FAIL;
125 goto out;
126 }
127 DH_get0_key(kex->dh, &pub_key, NULL);
128 if ((r = sshpkt_get_bignum2(ssh, dh_client_pub)) != 0 ||
129 (r = sshpkt_get_end(ssh)) != 0)
130 goto out;
131
132#ifdef DEBUG_KEXDH
133 fprintf(stderr, "dh_client_pub= ");
134 BN_print_fp(stderr, dh_client_pub);
135 fprintf(stderr, "\n");
136 debug("bits %d", BN_num_bits(dh_client_pub));
137 DHparams_print_fp(stderr, kex->dh);
138 fprintf(stderr, "pub= ");
139 BN_print_fp(stderr, pub_key);
140 fprintf(stderr, "\n");
141#endif
142 if (!dh_pub_is_valid(kex->dh, dh_client_pub)) {
143 sshpkt_disconnect(ssh, "bad client public DH value");
144 r = SSH_ERR_MESSAGE_INCOMPLETE;
145 goto out;
146 }
147
148 klen = DH_size(kex->dh);
149 if ((kbuf = malloc(klen)) == NULL ||
150 (shared_secret = BN_new()) == NULL) {
151 r = SSH_ERR_ALLOC_FAIL;
152 goto out;
153 }
154 if ((kout = DH_compute_key(kbuf, dh_client_pub, kex->dh)) < 0 ||
155 BN_bin2bn(kbuf, kout, shared_secret) == NULL) {
156 r = SSH_ERR_LIBCRYPTO_ERROR;
157 goto out;
158 }
159#ifdef DEBUG_KEXDH
160 dump_digest("shared secret", kbuf, kout);
161#endif
162 if ((r = sshkey_to_blob(server_host_public, &server_host_key_blob,
163 &sbloblen)) != 0)
164 goto out;
165 /* calc H */
166 hashlen = sizeof(hash);
167 if ((r = kex_dh_hash(
168 kex->hash_alg,
169 kex->client_version_string,
170 kex->server_version_string,
171 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
172 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
173 server_host_key_blob, sbloblen,
174 dh_client_pub,
175 pub_key,
176 shared_secret,
177 hash, &hashlen)) != 0)
178 goto out;
179
180 /* save session id := H */
181 if (kex->session_id == NULL) {
182 kex->session_id_len = hashlen;
183 kex->session_id = malloc(kex->session_id_len);
184 if (kex->session_id == NULL) {
185 r = SSH_ERR_ALLOC_FAIL;
186 goto out;
187 }
188 memcpy(kex->session_id, hash, kex->session_id_len);
189 }
190
191 /* sign H */
192 if ((r = kex->sign(server_host_private, server_host_public, &signature,
193 &slen, hash, hashlen, kex->hostkey_alg, ssh->compat)) < 0)
194 goto out;
195
196 /* destroy_sensitive_data(); */
197
198 /* send server hostkey, DH pubkey 'f' and signed H */
199 if ((r = sshpkt_start(ssh, SSH2_MSG_KEXDH_REPLY)) != 0 ||
200 (r = sshpkt_put_string(ssh, server_host_key_blob, sbloblen)) != 0 ||
201 (r = sshpkt_put_bignum2(ssh, pub_key)) != 0 || /* f */
202 (r = sshpkt_put_string(ssh, signature, slen)) != 0 ||
203 (r = sshpkt_send(ssh)) != 0)
204 goto out;
205
206 if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0)
207 r = kex_send_newkeys(ssh);
208 out:
209 explicit_bzero(hash, sizeof(hash));
210 DH_free(kex->dh);
211 kex->dh = NULL;
212 BN_clear_free(dh_client_pub);
213 if (kbuf) {
214 explicit_bzero(kbuf, klen);
215 free(kbuf);
216 }
217 BN_clear_free(shared_secret);
218 free(server_host_key_blob);
219 free(signature);
220 return r;
221}
222#endif /* WITH_OPENSSL */
diff --git a/kexecdh.c b/kexecdh.c
index 2a4fec6b1..0aeab2e9b 100644
--- a/kexecdh.c
+++ b/kexecdh.c
@@ -1,7 +1,7 @@
1/* $OpenBSD: kexecdh.c,v 1.6 2015/01/19 20:16:15 markus Exp $ */ 1/* $OpenBSD: kexecdh.c,v 1.10 2019/01/21 10:40:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 3 * Copyright (c) 2010 Damien Miller. All rights reserved.
4 * Copyright (c) 2019 Markus Friedl. All rights reserved.
5 * 5 *
6 * Redistribution and use in source and binary forms, with or without 6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions 7 * modification, are permitted provided that the following conditions
@@ -30,71 +30,182 @@
30 30
31#include <sys/types.h> 31#include <sys/types.h>
32 32
33#include <signal.h> 33#include <stdio.h>
34#include <string.h> 34#include <string.h>
35#include <signal.h>
35 36
36#include <openssl/bn.h>
37#include <openssl/evp.h>
38#include <openssl/ec.h>
39#include <openssl/ecdh.h> 37#include <openssl/ecdh.h>
40 38
41#include "ssh2.h"
42#include "sshkey.h" 39#include "sshkey.h"
43#include "cipher.h"
44#include "kex.h" 40#include "kex.h"
45#include "sshbuf.h" 41#include "sshbuf.h"
46#include "digest.h" 42#include "digest.h"
47#include "ssherr.h" 43#include "ssherr.h"
48 44
45static int
46kex_ecdh_dec_key_group(struct kex *, const struct sshbuf *, EC_KEY *key,
47 const EC_GROUP *, struct sshbuf **);
48
49int 49int
50kex_ecdh_hash( 50kex_ecdh_keypair(struct kex *kex)
51 int hash_alg,
52 const EC_GROUP *ec_group,
53 const char *client_version_string,
54 const char *server_version_string,
55 const u_char *ckexinit, size_t ckexinitlen,
56 const u_char *skexinit, size_t skexinitlen,
57 const u_char *serverhostkeyblob, size_t sbloblen,
58 const EC_POINT *client_dh_pub,
59 const EC_POINT *server_dh_pub,
60 const BIGNUM *shared_secret,
61 u_char *hash, size_t *hashlen)
62{ 51{
63 struct sshbuf *b; 52 EC_KEY *client_key = NULL;
53 const EC_GROUP *group;
54 const EC_POINT *public_key;
55 struct sshbuf *buf = NULL;
64 int r; 56 int r;
65 57
66 if (*hashlen < ssh_digest_bytes(hash_alg)) 58 if ((client_key = EC_KEY_new_by_curve_name(kex->ec_nid)) == NULL) {
67 return SSH_ERR_INVALID_ARGUMENT; 59 r = SSH_ERR_ALLOC_FAIL;
68 if ((b = sshbuf_new()) == NULL) 60 goto out;
69 return SSH_ERR_ALLOC_FAIL; 61 }
70 if ((r = sshbuf_put_cstring(b, client_version_string)) != 0 || 62 if (EC_KEY_generate_key(client_key) != 1) {
71 (r = sshbuf_put_cstring(b, server_version_string)) != 0 || 63 r = SSH_ERR_LIBCRYPTO_ERROR;
72 /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */ 64 goto out;
73 (r = sshbuf_put_u32(b, ckexinitlen+1)) != 0 || 65 }
74 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 || 66 group = EC_KEY_get0_group(client_key);
75 (r = sshbuf_put(b, ckexinit, ckexinitlen)) != 0 || 67 public_key = EC_KEY_get0_public_key(client_key);
76 (r = sshbuf_put_u32(b, skexinitlen+1)) != 0 || 68
77 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 || 69 if ((buf = sshbuf_new()) == NULL) {
78 (r = sshbuf_put(b, skexinit, skexinitlen)) != 0 || 70 r = SSH_ERR_ALLOC_FAIL;
79 (r = sshbuf_put_string(b, serverhostkeyblob, sbloblen)) != 0 || 71 goto out;
80 (r = sshbuf_put_ec(b, client_dh_pub, ec_group)) != 0 ||
81 (r = sshbuf_put_ec(b, server_dh_pub, ec_group)) != 0 ||
82 (r = sshbuf_put_bignum2(b, shared_secret)) != 0) {
83 sshbuf_free(b);
84 return r;
85 } 72 }
86#ifdef DEBUG_KEX 73 if ((r = sshbuf_put_ec(buf, public_key, group)) != 0 ||
87 sshbuf_dump(b, stderr); 74 (r = sshbuf_get_u32(buf, NULL)) != 0)
75 goto out;
76#ifdef DEBUG_KEXECDH
77 fputs("client private key:\n", stderr);
78 sshkey_dump_ec_key(client_key);
88#endif 79#endif
89 if (ssh_digest_buffer(hash_alg, b, hash, *hashlen) != 0) { 80 kex->ec_client_key = client_key;
90 sshbuf_free(b); 81 kex->ec_group = group;
91 return SSH_ERR_LIBCRYPTO_ERROR; 82 client_key = NULL; /* owned by the kex */
83 kex->client_pub = buf;
84 buf = NULL;
85 out:
86 EC_KEY_free(client_key);
87 sshbuf_free(buf);
88 return r;
89}
90
91int
92kex_ecdh_enc(struct kex *kex, const struct sshbuf *client_blob,
93 struct sshbuf **server_blobp, struct sshbuf **shared_secretp)
94{
95 const EC_GROUP *group;
96 const EC_POINT *pub_key;
97 EC_KEY *server_key = NULL;
98 struct sshbuf *server_blob = NULL;
99 int r;
100
101 *server_blobp = NULL;
102 *shared_secretp = NULL;
103
104 if ((server_key = EC_KEY_new_by_curve_name(kex->ec_nid)) == NULL) {
105 r = SSH_ERR_ALLOC_FAIL;
106 goto out;
92 } 107 }
93 sshbuf_free(b); 108 if (EC_KEY_generate_key(server_key) != 1) {
94 *hashlen = ssh_digest_bytes(hash_alg); 109 r = SSH_ERR_LIBCRYPTO_ERROR;
95#ifdef DEBUG_KEX 110 goto out;
96 dump_digest("hash", hash, *hashlen); 111 }
112 group = EC_KEY_get0_group(server_key);
113
114#ifdef DEBUG_KEXECDH
115 fputs("server private key:\n", stderr);
116 sshkey_dump_ec_key(server_key);
97#endif 117#endif
98 return 0; 118 pub_key = EC_KEY_get0_public_key(server_key);
119 if ((server_blob = sshbuf_new()) == NULL) {
120 r = SSH_ERR_ALLOC_FAIL;
121 goto out;
122 }
123 if ((r = sshbuf_put_ec(server_blob, pub_key, group)) != 0 ||
124 (r = sshbuf_get_u32(server_blob, NULL)) != 0)
125 goto out;
126 if ((r = kex_ecdh_dec_key_group(kex, client_blob, server_key, group,
127 shared_secretp)) != 0)
128 goto out;
129 *server_blobp = server_blob;
130 server_blob = NULL;
131 out:
132 EC_KEY_free(server_key);
133 sshbuf_free(server_blob);
134 return r;
135}
136
137static int
138kex_ecdh_dec_key_group(struct kex *kex, const struct sshbuf *ec_blob,
139 EC_KEY *key, const EC_GROUP *group, struct sshbuf **shared_secretp)
140{
141 struct sshbuf *buf = NULL;
142 BIGNUM *shared_secret = NULL;
143 EC_POINT *dh_pub = NULL;
144 u_char *kbuf = NULL;
145 size_t klen = 0;
146 int r;
147
148 *shared_secretp = NULL;
149
150 if ((buf = sshbuf_new()) == NULL) {
151 r = SSH_ERR_ALLOC_FAIL;
152 goto out;
153 }
154 if ((r = sshbuf_put_stringb(buf, ec_blob)) != 0)
155 goto out;
156 if ((dh_pub = EC_POINT_new(group)) == NULL) {
157 r = SSH_ERR_ALLOC_FAIL;
158 goto out;
159 }
160 if ((r = sshbuf_get_ec(buf, dh_pub, group)) != 0) {
161 goto out;
162 }
163 sshbuf_reset(buf);
164
165#ifdef DEBUG_KEXECDH
166 fputs("public key:\n", stderr);
167 sshkey_dump_ec_point(group, dh_pub);
168#endif
169 if (sshkey_ec_validate_public(group, dh_pub) != 0) {
170 r = SSH_ERR_MESSAGE_INCOMPLETE;
171 goto out;
172 }
173 klen = (EC_GROUP_get_degree(group) + 7) / 8;
174 if ((kbuf = malloc(klen)) == NULL ||
175 (shared_secret = BN_new()) == NULL) {
176 r = SSH_ERR_ALLOC_FAIL;
177 goto out;
178 }
179 if (ECDH_compute_key(kbuf, klen, dh_pub, key, NULL) != (int)klen ||
180 BN_bin2bn(kbuf, klen, shared_secret) == NULL) {
181 r = SSH_ERR_LIBCRYPTO_ERROR;
182 goto out;
183 }
184#ifdef DEBUG_KEXECDH
185 dump_digest("shared secret", kbuf, klen);
186#endif
187 if ((r = sshbuf_put_bignum2(buf, shared_secret)) != 0)
188 goto out;
189 *shared_secretp = buf;
190 buf = NULL;
191 out:
192 EC_POINT_clear_free(dh_pub);
193 BN_clear_free(shared_secret);
194 freezero(kbuf, klen);
195 sshbuf_free(buf);
196 return r;
197}
198
199int
200kex_ecdh_dec(struct kex *kex, const struct sshbuf *server_blob,
201 struct sshbuf **shared_secretp)
202{
203 int r;
204
205 r = kex_ecdh_dec_key_group(kex, server_blob, kex->ec_client_key,
206 kex->ec_group, shared_secretp);
207 EC_KEY_free(kex->ec_client_key);
208 kex->ec_client_key = NULL;
209 return r;
99} 210}
100#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */ 211#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */
diff --git a/kexecdhc.c b/kexecdhc.c
deleted file mode 100644
index ac146a362..000000000
--- a/kexecdhc.c
+++ /dev/null
@@ -1,222 +0,0 @@
1/* $OpenBSD: kexecdhc.c,v 1.13 2018/02/07 02:06:51 jsing Exp $ */
2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "includes.h"
28
29#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
30
31#include <sys/types.h>
32
33#include <stdio.h>
34#include <string.h>
35#include <signal.h>
36
37#include <openssl/ecdh.h>
38
39#include "sshkey.h"
40#include "cipher.h"
41#include "digest.h"
42#include "kex.h"
43#include "log.h"
44#include "packet.h"
45#include "dh.h"
46#include "ssh2.h"
47#include "dispatch.h"
48#include "compat.h"
49#include "ssherr.h"
50#include "sshbuf.h"
51
52static int input_kex_ecdh_reply(int, u_int32_t, struct ssh *);
53
54int
55kexecdh_client(struct ssh *ssh)
56{
57 struct kex *kex = ssh->kex;
58 EC_KEY *client_key = NULL;
59 const EC_GROUP *group;
60 const EC_POINT *public_key;
61 int r;
62
63 if ((client_key = EC_KEY_new_by_curve_name(kex->ec_nid)) == NULL) {
64 r = SSH_ERR_ALLOC_FAIL;
65 goto out;
66 }
67 if (EC_KEY_generate_key(client_key) != 1) {
68 r = SSH_ERR_LIBCRYPTO_ERROR;
69 goto out;
70 }
71 group = EC_KEY_get0_group(client_key);
72 public_key = EC_KEY_get0_public_key(client_key);
73
74 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_ECDH_INIT)) != 0 ||
75 (r = sshpkt_put_ec(ssh, public_key, group)) != 0 ||
76 (r = sshpkt_send(ssh)) != 0)
77 goto out;
78 debug("sending SSH2_MSG_KEX_ECDH_INIT");
79
80#ifdef DEBUG_KEXECDH
81 fputs("client private key:\n", stderr);
82 sshkey_dump_ec_key(client_key);
83#endif
84 kex->ec_client_key = client_key;
85 kex->ec_group = group;
86 client_key = NULL; /* owned by the kex */
87
88 debug("expecting SSH2_MSG_KEX_ECDH_REPLY");
89 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_ecdh_reply);
90 r = 0;
91 out:
92 EC_KEY_free(client_key);
93 return r;
94}
95
96static int
97input_kex_ecdh_reply(int type, u_int32_t seq, struct ssh *ssh)
98{
99 struct kex *kex = ssh->kex;
100 const EC_GROUP *group;
101 EC_POINT *server_public = NULL;
102 EC_KEY *client_key;
103 BIGNUM *shared_secret = NULL;
104 struct sshkey *server_host_key = NULL;
105 u_char *server_host_key_blob = NULL, *signature = NULL;
106 u_char *kbuf = NULL;
107 u_char hash[SSH_DIGEST_MAX_LENGTH];
108 size_t slen, sbloblen;
109 size_t klen = 0, hashlen;
110 int r;
111
112 if (kex->verify_host_key == NULL) {
113 r = SSH_ERR_INVALID_ARGUMENT;
114 goto out;
115 }
116 group = kex->ec_group;
117 client_key = kex->ec_client_key;
118
119 /* hostkey */
120 if ((r = sshpkt_get_string(ssh, &server_host_key_blob,
121 &sbloblen)) != 0 ||
122 (r = sshkey_from_blob(server_host_key_blob, sbloblen,
123 &server_host_key)) != 0)
124 goto out;
125 if (server_host_key->type != kex->hostkey_type ||
126 (kex->hostkey_type == KEY_ECDSA &&
127 server_host_key->ecdsa_nid != kex->hostkey_nid)) {
128 r = SSH_ERR_KEY_TYPE_MISMATCH;
129 goto out;
130 }
131 if (kex->verify_host_key(server_host_key, ssh) == -1) {
132 r = SSH_ERR_SIGNATURE_INVALID;
133 goto out;
134 }
135
136 /* Q_S, server public key */
137 /* signed H */
138 if ((server_public = EC_POINT_new(group)) == NULL) {
139 r = SSH_ERR_ALLOC_FAIL;
140 goto out;
141 }
142 if ((r = sshpkt_get_ec(ssh, server_public, group)) != 0 ||
143 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 ||
144 (r = sshpkt_get_end(ssh)) != 0)
145 goto out;
146
147#ifdef DEBUG_KEXECDH
148 fputs("server public key:\n", stderr);
149 sshkey_dump_ec_point(group, server_public);
150#endif
151 if (sshkey_ec_validate_public(group, server_public) != 0) {
152 sshpkt_disconnect(ssh, "invalid server public key");
153 r = SSH_ERR_MESSAGE_INCOMPLETE;
154 goto out;
155 }
156
157 klen = (EC_GROUP_get_degree(group) + 7) / 8;
158 if ((kbuf = malloc(klen)) == NULL ||
159 (shared_secret = BN_new()) == NULL) {
160 r = SSH_ERR_ALLOC_FAIL;
161 goto out;
162 }
163 if (ECDH_compute_key(kbuf, klen, server_public,
164 client_key, NULL) != (int)klen ||
165 BN_bin2bn(kbuf, klen, shared_secret) == NULL) {
166 r = SSH_ERR_LIBCRYPTO_ERROR;
167 goto out;
168 }
169
170#ifdef DEBUG_KEXECDH
171 dump_digest("shared secret", kbuf, klen);
172#endif
173 /* calc and verify H */
174 hashlen = sizeof(hash);
175 if ((r = kex_ecdh_hash(
176 kex->hash_alg,
177 group,
178 kex->client_version_string,
179 kex->server_version_string,
180 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
181 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
182 server_host_key_blob, sbloblen,
183 EC_KEY_get0_public_key(client_key),
184 server_public,
185 shared_secret,
186 hash, &hashlen)) != 0)
187 goto out;
188
189 if ((r = sshkey_verify(server_host_key, signature, slen, hash,
190 hashlen, kex->hostkey_alg, ssh->compat)) != 0)
191 goto out;
192
193 /* save session id */
194 if (kex->session_id == NULL) {
195 kex->session_id_len = hashlen;
196 kex->session_id = malloc(kex->session_id_len);
197 if (kex->session_id == NULL) {
198 r = SSH_ERR_ALLOC_FAIL;
199 goto out;
200 }
201 memcpy(kex->session_id, hash, kex->session_id_len);
202 }
203
204 if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0)
205 r = kex_send_newkeys(ssh);
206 out:
207 explicit_bzero(hash, sizeof(hash));
208 EC_KEY_free(kex->ec_client_key);
209 kex->ec_client_key = NULL;
210 EC_POINT_clear_free(server_public);
211 if (kbuf) {
212 explicit_bzero(kbuf, klen);
213 free(kbuf);
214 }
215 BN_clear_free(shared_secret);
216 sshkey_free(server_host_key);
217 free(server_host_key_blob);
218 free(signature);
219 return r;
220}
221#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */
222
diff --git a/kexecdhs.c b/kexecdhs.c
deleted file mode 100644
index af4f30309..000000000
--- a/kexecdhs.c
+++ /dev/null
@@ -1,203 +0,0 @@
1/* $OpenBSD: kexecdhs.c,v 1.17 2018/02/07 02:06:51 jsing Exp $ */
2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 *
15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include "includes.h"
28
29#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
30
31#include <sys/types.h>
32#include <string.h>
33#include <signal.h>
34
35#include <openssl/ecdh.h>
36
37#include "sshkey.h"
38#include "cipher.h"
39#include "digest.h"
40#include "kex.h"
41#include "log.h"
42#include "packet.h"
43#include "ssh2.h"
44
45#include "dispatch.h"
46#include "compat.h"
47#include "ssherr.h"
48#include "sshbuf.h"
49
50static int input_kex_ecdh_init(int, u_int32_t, struct ssh *);
51
52int
53kexecdh_server(struct ssh *ssh)
54{
55 debug("expecting SSH2_MSG_KEX_ECDH_INIT");
56 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_INIT, &input_kex_ecdh_init);
57 return 0;
58}
59
60static int
61input_kex_ecdh_init(int type, u_int32_t seq, struct ssh *ssh)
62{
63 struct kex *kex = ssh->kex;
64 EC_POINT *client_public;
65 EC_KEY *server_key = NULL;
66 const EC_GROUP *group;
67 const EC_POINT *public_key;
68 BIGNUM *shared_secret = NULL;
69 struct sshkey *server_host_private, *server_host_public;
70 u_char *server_host_key_blob = NULL, *signature = NULL;
71 u_char *kbuf = NULL;
72 u_char hash[SSH_DIGEST_MAX_LENGTH];
73 size_t slen, sbloblen;
74 size_t klen = 0, hashlen;
75 int r;
76
77 if ((server_key = EC_KEY_new_by_curve_name(kex->ec_nid)) == NULL) {
78 r = SSH_ERR_ALLOC_FAIL;
79 goto out;
80 }
81 if (EC_KEY_generate_key(server_key) != 1) {
82 r = SSH_ERR_LIBCRYPTO_ERROR;
83 goto out;
84 }
85 group = EC_KEY_get0_group(server_key);
86
87#ifdef DEBUG_KEXECDH
88 fputs("server private key:\n", stderr);
89 sshkey_dump_ec_key(server_key);
90#endif
91
92 if (kex->load_host_public_key == NULL ||
93 kex->load_host_private_key == NULL) {
94 r = SSH_ERR_INVALID_ARGUMENT;
95 goto out;
96 }
97 server_host_public = kex->load_host_public_key(kex->hostkey_type,
98 kex->hostkey_nid, ssh);
99 server_host_private = kex->load_host_private_key(kex->hostkey_type,
100 kex->hostkey_nid, ssh);
101 if (server_host_public == NULL) {
102 r = SSH_ERR_NO_HOSTKEY_LOADED;
103 goto out;
104 }
105 if ((client_public = EC_POINT_new(group)) == NULL) {
106 r = SSH_ERR_ALLOC_FAIL;
107 goto out;
108 }
109 if ((r = sshpkt_get_ec(ssh, client_public, group)) != 0 ||
110 (r = sshpkt_get_end(ssh)) != 0)
111 goto out;
112
113#ifdef DEBUG_KEXECDH
114 fputs("client public key:\n", stderr);
115 sshkey_dump_ec_point(group, client_public);
116#endif
117 if (sshkey_ec_validate_public(group, client_public) != 0) {
118 sshpkt_disconnect(ssh, "invalid client public key");
119 r = SSH_ERR_MESSAGE_INCOMPLETE;
120 goto out;
121 }
122
123 /* Calculate shared_secret */
124 klen = (EC_GROUP_get_degree(group) + 7) / 8;
125 if ((kbuf = malloc(klen)) == NULL ||
126 (shared_secret = BN_new()) == NULL) {
127 r = SSH_ERR_ALLOC_FAIL;
128 goto out;
129 }
130 if (ECDH_compute_key(kbuf, klen, client_public,
131 server_key, NULL) != (int)klen ||
132 BN_bin2bn(kbuf, klen, shared_secret) == NULL) {
133 r = SSH_ERR_LIBCRYPTO_ERROR;
134 goto out;
135 }
136
137#ifdef DEBUG_KEXECDH
138 dump_digest("shared secret", kbuf, klen);
139#endif
140 /* calc H */
141 if ((r = sshkey_to_blob(server_host_public, &server_host_key_blob,
142 &sbloblen)) != 0)
143 goto out;
144 hashlen = sizeof(hash);
145 if ((r = kex_ecdh_hash(
146 kex->hash_alg,
147 group,
148 kex->client_version_string,
149 kex->server_version_string,
150 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer),
151 sshbuf_ptr(kex->my), sshbuf_len(kex->my),
152 server_host_key_blob, sbloblen,
153 client_public,
154 EC_KEY_get0_public_key(server_key),
155 shared_secret,
156 hash, &hashlen)) != 0)
157 goto out;
158
159 /* save session id := H */
160 if (kex->session_id == NULL) {
161 kex->session_id_len = hashlen;
162 kex->session_id = malloc(kex->session_id_len);
163 if (kex->session_id == NULL) {
164 r = SSH_ERR_ALLOC_FAIL;
165 goto out;
166 }
167 memcpy(kex->session_id, hash, kex->session_id_len);
168 }
169
170 /* sign H */
171 if ((r = kex->sign(server_host_private, server_host_public, &signature,
172 &slen, hash, hashlen, kex->hostkey_alg, ssh->compat)) < 0)
173 goto out;
174
175 /* destroy_sensitive_data(); */
176
177 public_key = EC_KEY_get0_public_key(server_key);
178 /* send server hostkey, ECDH pubkey 'Q_S' and signed H */
179 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_ECDH_REPLY)) != 0 ||
180 (r = sshpkt_put_string(ssh, server_host_key_blob, sbloblen)) != 0 ||
181 (r = sshpkt_put_ec(ssh, public_key, group)) != 0 ||
182 (r = sshpkt_put_string(ssh, signature, slen)) != 0 ||
183 (r = sshpkt_send(ssh)) != 0)
184 goto out;
185
186 if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0)
187 r = kex_send_newkeys(ssh);
188 out:
189 explicit_bzero(hash, sizeof(hash));
190 EC_KEY_free(kex->ec_client_key);
191 kex->ec_client_key = NULL;
192 EC_KEY_free(server_key);
193 if (kbuf) {
194 explicit_bzero(kbuf, klen);
195 free(kbuf);
196 }
197 BN_clear_free(shared_secret);
198 free(server_host_key_blob);
199 free(signature);
200 return r;
201}
202#endif /* defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) */
203
diff --git a/kexgen.c b/kexgen.c
new file mode 100644
index 000000000..2abbb9ef6
--- /dev/null
+++ b/kexgen.c
@@ -0,0 +1,339 @@
1/* $OpenBSD: kexgen.c,v 1.2 2019/01/23 00:30:41 djm Exp $ */
2/*
3 * Copyright (c) 2019 Markus Friedl. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "includes.h"
27
28#include <sys/types.h>
29
30#include <stdio.h>
31#include <string.h>
32#include <signal.h>
33
34#include "sshkey.h"
35#include "kex.h"
36#include "log.h"
37#include "packet.h"
38#include "ssh2.h"
39#include "sshbuf.h"
40#include "digest.h"
41#include "ssherr.h"
42
43static int input_kex_gen_init(int, u_int32_t, struct ssh *);
44static int input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh);
45
46static int
47kex_gen_hash(
48 int hash_alg,
49 const struct sshbuf *client_version,
50 const struct sshbuf *server_version,
51 const struct sshbuf *client_kexinit,
52 const struct sshbuf *server_kexinit,
53 const struct sshbuf *server_host_key_blob,
54 const struct sshbuf *client_pub,
55 const struct sshbuf *server_pub,
56 const struct sshbuf *shared_secret,
57 u_char *hash, size_t *hashlen)
58{
59 struct sshbuf *b;
60 int r;
61
62 if (*hashlen < ssh_digest_bytes(hash_alg))
63 return SSH_ERR_INVALID_ARGUMENT;
64 if ((b = sshbuf_new()) == NULL)
65 return SSH_ERR_ALLOC_FAIL;
66 if ((r = sshbuf_put_stringb(b, client_version)) != 0 ||
67 (r = sshbuf_put_stringb(b, server_version)) != 0 ||
68 /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */
69 (r = sshbuf_put_u32(b, sshbuf_len(client_kexinit) + 1)) != 0 ||
70 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 ||
71 (r = sshbuf_putb(b, client_kexinit)) != 0 ||
72 (r = sshbuf_put_u32(b, sshbuf_len(server_kexinit) + 1)) != 0 ||
73 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 ||
74 (r = sshbuf_putb(b, server_kexinit)) != 0 ||
75 (r = sshbuf_put_stringb(b, server_host_key_blob)) != 0 ||
76 (r = sshbuf_put_stringb(b, client_pub)) != 0 ||
77 (r = sshbuf_put_stringb(b, server_pub)) != 0 ||
78 (r = sshbuf_putb(b, shared_secret)) != 0) {
79 sshbuf_free(b);
80 return r;
81 }
82#ifdef DEBUG_KEX
83 sshbuf_dump(b, stderr);
84#endif
85 if (ssh_digest_buffer(hash_alg, b, hash, *hashlen) != 0) {
86 sshbuf_free(b);
87 return SSH_ERR_LIBCRYPTO_ERROR;
88 }
89 sshbuf_free(b);
90 *hashlen = ssh_digest_bytes(hash_alg);
91#ifdef DEBUG_KEX
92 dump_digest("hash", hash, *hashlen);
93#endif
94 return 0;
95}
96
97int
98kex_gen_client(struct ssh *ssh)
99{
100 struct kex *kex = ssh->kex;
101 int r;
102
103 switch (kex->kex_type) {
104#ifdef WITH_OPENSSL
105 case KEX_DH_GRP1_SHA1:
106 case KEX_DH_GRP14_SHA1:
107 case KEX_DH_GRP14_SHA256:
108 case KEX_DH_GRP16_SHA512:
109 case KEX_DH_GRP18_SHA512:
110 r = kex_dh_keypair(kex);
111 break;
112 case KEX_ECDH_SHA2:
113 r = kex_ecdh_keypair(kex);
114 break;
115#endif
116 case KEX_C25519_SHA256:
117 r = kex_c25519_keypair(kex);
118 break;
119 case KEX_KEM_SNTRUP4591761X25519_SHA512:
120 r = kex_kem_sntrup4591761x25519_keypair(kex);
121 break;
122 default:
123 r = SSH_ERR_INVALID_ARGUMENT;
124 break;
125 }
126 if (r != 0)
127 return r;
128 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_ECDH_INIT)) != 0 ||
129 (r = sshpkt_put_stringb(ssh, kex->client_pub)) != 0 ||
130 (r = sshpkt_send(ssh)) != 0)
131 return r;
132 debug("expecting SSH2_MSG_KEX_ECDH_REPLY");
133 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_gen_reply);
134 return 0;
135}
136
137static int
138input_kex_gen_reply(int type, u_int32_t seq, struct ssh *ssh)
139{
140 struct kex *kex = ssh->kex;
141 struct sshkey *server_host_key = NULL;
142 struct sshbuf *shared_secret = NULL;
143 struct sshbuf *server_blob = NULL;
144 struct sshbuf *tmp = NULL, *server_host_key_blob = NULL;
145 u_char *signature = NULL;
146 u_char hash[SSH_DIGEST_MAX_LENGTH];
147 size_t slen, hashlen;
148 int r;
149
150 /* hostkey */
151 if ((r = sshpkt_getb_froms(ssh, &server_host_key_blob)) != 0)
152 goto out;
153 /* sshkey_fromb() consumes its buffer, so make a copy */
154 if ((tmp = sshbuf_fromb(server_host_key_blob)) == NULL) {
155 r = SSH_ERR_ALLOC_FAIL;
156 goto out;
157 }
158 if ((r = sshkey_fromb(tmp, &server_host_key)) != 0)
159 goto out;
160 if ((r = kex_verify_host_key(ssh, server_host_key)) != 0)
161 goto out;
162
163 /* Q_S, server public key */
164 /* signed H */
165 if ((r = sshpkt_getb_froms(ssh, &server_blob)) != 0 ||
166 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 ||
167 (r = sshpkt_get_end(ssh)) != 0)
168 goto out;
169
170 /* compute shared secret */
171 switch (kex->kex_type) {
172#ifdef WITH_OPENSSL
173 case KEX_DH_GRP1_SHA1:
174 case KEX_DH_GRP14_SHA1:
175 case KEX_DH_GRP14_SHA256:
176 case KEX_DH_GRP16_SHA512:
177 case KEX_DH_GRP18_SHA512:
178 r = kex_dh_dec(kex, server_blob, &shared_secret);
179 break;
180 case KEX_ECDH_SHA2:
181 r = kex_ecdh_dec(kex, server_blob, &shared_secret);
182 break;
183#endif
184 case KEX_C25519_SHA256:
185 r = kex_c25519_dec(kex, server_blob, &shared_secret);
186 break;
187 case KEX_KEM_SNTRUP4591761X25519_SHA512:
188 r = kex_kem_sntrup4591761x25519_dec(kex, server_blob,
189 &shared_secret);
190 break;
191 default:
192 r = SSH_ERR_INVALID_ARGUMENT;
193 break;
194 }
195 if (r !=0 )
196 goto out;
197
198 /* calc and verify H */
199 hashlen = sizeof(hash);
200 if ((r = kex_gen_hash(
201 kex->hash_alg,
202 kex->client_version,
203 kex->server_version,
204 kex->my,
205 kex->peer,
206 server_host_key_blob,
207 kex->client_pub,
208 server_blob,
209 shared_secret,
210 hash, &hashlen)) != 0)
211 goto out;
212
213 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
214 kex->hostkey_alg, ssh->compat)) != 0)
215 goto out;
216
217 if ((r = kex_derive_keys(ssh, hash, hashlen, shared_secret)) == 0)
218 r = kex_send_newkeys(ssh);
219out:
220 explicit_bzero(hash, sizeof(hash));
221 explicit_bzero(kex->c25519_client_key, sizeof(kex->c25519_client_key));
222 explicit_bzero(kex->sntrup4591761_client_key,
223 sizeof(kex->sntrup4591761_client_key));
224 sshbuf_free(server_host_key_blob);
225 free(signature);
226 sshbuf_free(tmp);
227 sshkey_free(server_host_key);
228 sshbuf_free(server_blob);
229 sshbuf_free(shared_secret);
230 sshbuf_free(kex->client_pub);
231 kex->client_pub = NULL;
232 return r;
233}
234
235int
236kex_gen_server(struct ssh *ssh)
237{
238 debug("expecting SSH2_MSG_KEX_ECDH_INIT");
239 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_INIT, &input_kex_gen_init);
240 return 0;
241}
242
243static int
244input_kex_gen_init(int type, u_int32_t seq, struct ssh *ssh)
245{
246 struct kex *kex = ssh->kex;
247 struct sshkey *server_host_private, *server_host_public;
248 struct sshbuf *shared_secret = NULL;
249 struct sshbuf *server_pubkey = NULL;
250 struct sshbuf *client_pubkey = NULL;
251 struct sshbuf *server_host_key_blob = NULL;
252 u_char *signature = NULL, hash[SSH_DIGEST_MAX_LENGTH];
253 size_t slen, hashlen;
254 int r;
255
256 if ((r = kex_load_hostkey(ssh, &server_host_private,
257 &server_host_public)) != 0)
258 goto out;
259
260 if ((r = sshpkt_getb_froms(ssh, &client_pubkey)) != 0 ||
261 (r = sshpkt_get_end(ssh)) != 0)
262 goto out;
263
264 /* compute shared secret */
265 switch (kex->kex_type) {
266#ifdef WITH_OPENSSL
267 case KEX_DH_GRP1_SHA1:
268 case KEX_DH_GRP14_SHA1:
269 case KEX_DH_GRP14_SHA256:
270 case KEX_DH_GRP16_SHA512:
271 case KEX_DH_GRP18_SHA512:
272 r = kex_dh_enc(kex, client_pubkey, &server_pubkey,
273 &shared_secret);
274 break;
275 case KEX_ECDH_SHA2:
276 r = kex_ecdh_enc(kex, client_pubkey, &server_pubkey,
277 &shared_secret);
278 break;
279#endif
280 case KEX_C25519_SHA256:
281 r = kex_c25519_enc(kex, client_pubkey, &server_pubkey,
282 &shared_secret);
283 break;
284 case KEX_KEM_SNTRUP4591761X25519_SHA512:
285 r = kex_kem_sntrup4591761x25519_enc(kex, client_pubkey,
286 &server_pubkey, &shared_secret);
287 break;
288 default:
289 r = SSH_ERR_INVALID_ARGUMENT;
290 break;
291 }
292 if (r !=0 )
293 goto out;
294
295 /* calc H */
296 if ((server_host_key_blob = sshbuf_new()) == NULL) {
297 r = SSH_ERR_ALLOC_FAIL;
298 goto out;
299 }
300 if ((r = sshkey_putb(server_host_public, server_host_key_blob)) != 0)
301 goto out;
302 hashlen = sizeof(hash);
303 if ((r = kex_gen_hash(
304 kex->hash_alg,
305 kex->client_version,
306 kex->server_version,
307 kex->peer,
308 kex->my,
309 server_host_key_blob,
310 client_pubkey,
311 server_pubkey,
312 shared_secret,
313 hash, &hashlen)) != 0)
314 goto out;
315
316 /* sign H */
317 if ((r = kex->sign(ssh, server_host_private, server_host_public,
318 &signature, &slen, hash, hashlen, kex->hostkey_alg)) != 0)
319 goto out;
320
321 /* send server hostkey, ECDH pubkey 'Q_S' and signed H */
322 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_ECDH_REPLY)) != 0 ||
323 (r = sshpkt_put_stringb(ssh, server_host_key_blob)) != 0 ||
324 (r = sshpkt_put_stringb(ssh, server_pubkey)) != 0 ||
325 (r = sshpkt_put_string(ssh, signature, slen)) != 0 ||
326 (r = sshpkt_send(ssh)) != 0)
327 goto out;
328
329 if ((r = kex_derive_keys(ssh, hash, hashlen, shared_secret)) == 0)
330 r = kex_send_newkeys(ssh);
331out:
332 explicit_bzero(hash, sizeof(hash));
333 sshbuf_free(server_host_key_blob);
334 free(signature);
335 sshbuf_free(shared_secret);
336 sshbuf_free(client_pubkey);
337 sshbuf_free(server_pubkey);
338 return r;
339}
diff --git a/kexgex.c b/kexgex.c
index 3ca4bd370..8040a1320 100644
--- a/kexgex.c
+++ b/kexgex.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgex.c,v 1.29 2015/01/19 20:16:15 markus Exp $ */ 1/* $OpenBSD: kexgex.c,v 1.32 2019/01/23 00:30:41 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * Copyright (c) 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -46,17 +46,17 @@
46int 46int
47kexgex_hash( 47kexgex_hash(
48 int hash_alg, 48 int hash_alg,
49 const char *client_version_string, 49 const struct sshbuf *client_version,
50 const char *server_version_string, 50 const struct sshbuf *server_version,
51 const u_char *ckexinit, size_t ckexinitlen, 51 const struct sshbuf *client_kexinit,
52 const u_char *skexinit, size_t skexinitlen, 52 const struct sshbuf *server_kexinit,
53 const u_char *serverhostkeyblob, size_t sbloblen, 53 const struct sshbuf *server_host_key_blob,
54 int min, int wantbits, int max, 54 int min, int wantbits, int max,
55 const BIGNUM *prime, 55 const BIGNUM *prime,
56 const BIGNUM *gen, 56 const BIGNUM *gen,
57 const BIGNUM *client_dh_pub, 57 const BIGNUM *client_dh_pub,
58 const BIGNUM *server_dh_pub, 58 const BIGNUM *server_dh_pub,
59 const BIGNUM *shared_secret, 59 const u_char *shared_secret, size_t secretlen,
60 u_char *hash, size_t *hashlen) 60 u_char *hash, size_t *hashlen)
61{ 61{
62 struct sshbuf *b; 62 struct sshbuf *b;
@@ -66,16 +66,16 @@ kexgex_hash(
66 return SSH_ERR_INVALID_ARGUMENT; 66 return SSH_ERR_INVALID_ARGUMENT;
67 if ((b = sshbuf_new()) == NULL) 67 if ((b = sshbuf_new()) == NULL)
68 return SSH_ERR_ALLOC_FAIL; 68 return SSH_ERR_ALLOC_FAIL;
69 if ((r = sshbuf_put_cstring(b, client_version_string)) != 0 || 69 if ((r = sshbuf_put_stringb(b, client_version)) < 0 ||
70 (r = sshbuf_put_cstring(b, server_version_string)) != 0 || 70 (r = sshbuf_put_stringb(b, server_version)) < 0 ||
71 /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */ 71 /* kexinit messages: fake header: len+SSH2_MSG_KEXINIT */
72 (r = sshbuf_put_u32(b, ckexinitlen+1)) != 0 || 72 (r = sshbuf_put_u32(b, sshbuf_len(client_kexinit) + 1)) != 0 ||
73 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 || 73 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 ||
74 (r = sshbuf_put(b, ckexinit, ckexinitlen)) != 0 || 74 (r = sshbuf_putb(b, client_kexinit)) != 0 ||
75 (r = sshbuf_put_u32(b, skexinitlen+1)) != 0 || 75 (r = sshbuf_put_u32(b, sshbuf_len(server_kexinit) + 1)) != 0 ||
76 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 || 76 (r = sshbuf_put_u8(b, SSH2_MSG_KEXINIT)) != 0 ||
77 (r = sshbuf_put(b, skexinit, skexinitlen)) != 0 || 77 (r = sshbuf_putb(b, server_kexinit)) != 0 ||
78 (r = sshbuf_put_string(b, serverhostkeyblob, sbloblen)) != 0 || 78 (r = sshbuf_put_stringb(b, server_host_key_blob)) != 0 ||
79 (min != -1 && (r = sshbuf_put_u32(b, min)) != 0) || 79 (min != -1 && (r = sshbuf_put_u32(b, min)) != 0) ||
80 (r = sshbuf_put_u32(b, wantbits)) != 0 || 80 (r = sshbuf_put_u32(b, wantbits)) != 0 ||
81 (max != -1 && (r = sshbuf_put_u32(b, max)) != 0) || 81 (max != -1 && (r = sshbuf_put_u32(b, max)) != 0) ||
@@ -83,7 +83,7 @@ kexgex_hash(
83 (r = sshbuf_put_bignum2(b, gen)) != 0 || 83 (r = sshbuf_put_bignum2(b, gen)) != 0 ||
84 (r = sshbuf_put_bignum2(b, client_dh_pub)) != 0 || 84 (r = sshbuf_put_bignum2(b, client_dh_pub)) != 0 ||
85 (r = sshbuf_put_bignum2(b, server_dh_pub)) != 0 || 85 (r = sshbuf_put_bignum2(b, server_dh_pub)) != 0 ||
86 (r = sshbuf_put_bignum2(b, shared_secret)) != 0) { 86 (r = sshbuf_put(b, shared_secret, secretlen)) != 0) {
87 sshbuf_free(b); 87 sshbuf_free(b);
88 return r; 88 return r;
89 } 89 }
diff --git a/kexgexc.c b/kexgexc.c
index 0d07f73c7..1c65b8a18 100644
--- a/kexgexc.c
+++ b/kexgexc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexc.c,v 1.27 2018/02/07 02:06:51 jsing Exp $ */ 1/* $OpenBSD: kexgexc.c,v 1.34 2019/01/23 00:30:41 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * Copyright (c) 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -100,13 +100,8 @@ input_kex_dh_gex_group(int type, u_int32_t seq, struct ssh *ssh)
100 100
101 debug("got SSH2_MSG_KEX_DH_GEX_GROUP"); 101 debug("got SSH2_MSG_KEX_DH_GEX_GROUP");
102 102
103 if ((p = BN_new()) == NULL || 103 if ((r = sshpkt_get_bignum2(ssh, &p)) != 0 ||
104 (g = BN_new()) == NULL) { 104 (r = sshpkt_get_bignum2(ssh, &g)) != 0 ||
105 r = SSH_ERR_ALLOC_FAIL;
106 goto out;
107 }
108 if ((r = sshpkt_get_bignum2(ssh, p)) != 0 ||
109 (r = sshpkt_get_bignum2(ssh, g)) != 0 ||
110 (r = sshpkt_get_end(ssh)) != 0) 105 (r = sshpkt_get_end(ssh)) != 0)
111 goto out; 106 goto out;
112 if ((bits = BN_num_bits(p)) < 0 || 107 if ((bits = BN_num_bits(p)) < 0 ||
@@ -148,71 +143,39 @@ static int
148input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh) 143input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
149{ 144{
150 struct kex *kex = ssh->kex; 145 struct kex *kex = ssh->kex;
151 BIGNUM *dh_server_pub = NULL, *shared_secret = NULL; 146 BIGNUM *dh_server_pub = NULL;
152 const BIGNUM *pub_key, *dh_p, *dh_g; 147 const BIGNUM *pub_key, *dh_p, *dh_g;
148 struct sshbuf *shared_secret = NULL;
149 struct sshbuf *tmp = NULL, *server_host_key_blob = NULL;
153 struct sshkey *server_host_key = NULL; 150 struct sshkey *server_host_key = NULL;
154 u_char *kbuf = NULL, *signature = NULL, *server_host_key_blob = NULL; 151 u_char *signature = NULL;
155 u_char hash[SSH_DIGEST_MAX_LENGTH]; 152 u_char hash[SSH_DIGEST_MAX_LENGTH];
156 size_t klen = 0, slen, sbloblen, hashlen; 153 size_t slen, hashlen;
157 int kout, r; 154 int r;
158 155
159 debug("got SSH2_MSG_KEX_DH_GEX_REPLY"); 156 debug("got SSH2_MSG_KEX_DH_GEX_REPLY");
160 if (kex->verify_host_key == NULL) {
161 r = SSH_ERR_INVALID_ARGUMENT;
162 goto out;
163 }
164 /* key, cert */ 157 /* key, cert */
165 if ((r = sshpkt_get_string(ssh, &server_host_key_blob, 158 if ((r = sshpkt_getb_froms(ssh, &server_host_key_blob)) != 0)
166 &sbloblen)) != 0 ||
167 (r = sshkey_from_blob(server_host_key_blob, sbloblen,
168 &server_host_key)) != 0)
169 goto out; 159 goto out;
170 if (server_host_key->type != kex->hostkey_type || 160 /* sshkey_fromb() consumes its buffer, so make a copy */
171 (kex->hostkey_type == KEY_ECDSA && 161 if ((tmp = sshbuf_fromb(server_host_key_blob)) == NULL) {
172 server_host_key->ecdsa_nid != kex->hostkey_nid)) {
173 r = SSH_ERR_KEY_TYPE_MISMATCH;
174 goto out;
175 }
176 if (kex->verify_host_key(server_host_key, ssh) == -1) {
177 r = SSH_ERR_SIGNATURE_INVALID;
178 goto out;
179 }
180 /* DH parameter f, server public DH key */
181 if ((dh_server_pub = BN_new()) == NULL) {
182 r = SSH_ERR_ALLOC_FAIL; 162 r = SSH_ERR_ALLOC_FAIL;
183 goto out; 163 goto out;
184 } 164 }
185 /* signed H */ 165 if ((r = sshkey_fromb(tmp, &server_host_key)) != 0 ||
186 if ((r = sshpkt_get_bignum2(ssh, dh_server_pub)) != 0 || 166 (r = kex_verify_host_key(ssh, server_host_key)) != 0)
167 goto out;
168 /* DH parameter f, server public DH key, signed H */
169 if ((r = sshpkt_get_bignum2(ssh, &dh_server_pub)) != 0 ||
187 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 || 170 (r = sshpkt_get_string(ssh, &signature, &slen)) != 0 ||
188 (r = sshpkt_get_end(ssh)) != 0) 171 (r = sshpkt_get_end(ssh)) != 0)
189 goto out; 172 goto out;
190#ifdef DEBUG_KEXDH 173 if ((shared_secret = sshbuf_new()) == NULL) {
191 fprintf(stderr, "dh_server_pub= ");
192 BN_print_fp(stderr, dh_server_pub);
193 fprintf(stderr, "\n");
194 debug("bits %d", BN_num_bits(dh_server_pub));
195#endif
196 if (!dh_pub_is_valid(kex->dh, dh_server_pub)) {
197 sshpkt_disconnect(ssh, "bad server public DH value");
198 r = SSH_ERR_MESSAGE_INCOMPLETE;
199 goto out;
200 }
201
202 klen = DH_size(kex->dh);
203 if ((kbuf = malloc(klen)) == NULL ||
204 (shared_secret = BN_new()) == NULL) {
205 r = SSH_ERR_ALLOC_FAIL; 174 r = SSH_ERR_ALLOC_FAIL;
206 goto out; 175 goto out;
207 } 176 }
208 if ((kout = DH_compute_key(kbuf, dh_server_pub, kex->dh)) < 0 || 177 if ((r = kex_dh_compute_key(kex, dh_server_pub, shared_secret)) != 0)
209 BN_bin2bn(kbuf, kout, shared_secret) == NULL) {
210 r = SSH_ERR_LIBCRYPTO_ERROR;
211 goto out; 178 goto out;
212 }
213#ifdef DEBUG_KEXDH
214 dump_digest("shared secret", kbuf, kout);
215#endif
216 if (ssh->compat & SSH_OLD_DHGEX) 179 if (ssh->compat & SSH_OLD_DHGEX)
217 kex->min = kex->max = -1; 180 kex->min = kex->max = -1;
218 181
@@ -222,16 +185,16 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
222 hashlen = sizeof(hash); 185 hashlen = sizeof(hash);
223 if ((r = kexgex_hash( 186 if ((r = kexgex_hash(
224 kex->hash_alg, 187 kex->hash_alg,
225 kex->client_version_string, 188 kex->client_version,
226 kex->server_version_string, 189 kex->server_version,
227 sshbuf_ptr(kex->my), sshbuf_len(kex->my), 190 kex->my,
228 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer), 191 kex->peer,
229 server_host_key_blob, sbloblen, 192 server_host_key_blob,
230 kex->min, kex->nbits, kex->max, 193 kex->min, kex->nbits, kex->max,
231 dh_p, dh_g, 194 dh_p, dh_g,
232 pub_key, 195 pub_key,
233 dh_server_pub, 196 dh_server_pub,
234 shared_secret, 197 sshbuf_ptr(shared_secret), sshbuf_len(shared_secret),
235 hash, &hashlen)) != 0) 198 hash, &hashlen)) != 0)
236 goto out; 199 goto out;
237 200
@@ -239,31 +202,17 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
239 hashlen, kex->hostkey_alg, ssh->compat)) != 0) 202 hashlen, kex->hostkey_alg, ssh->compat)) != 0)
240 goto out; 203 goto out;
241 204
242 /* save session id */ 205 if ((r = kex_derive_keys(ssh, hash, hashlen, shared_secret)) == 0)
243 if (kex->session_id == NULL) {
244 kex->session_id_len = hashlen;
245 kex->session_id = malloc(kex->session_id_len);
246 if (kex->session_id == NULL) {
247 r = SSH_ERR_ALLOC_FAIL;
248 goto out;
249 }
250 memcpy(kex->session_id, hash, kex->session_id_len);
251 }
252
253 if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0)
254 r = kex_send_newkeys(ssh); 206 r = kex_send_newkeys(ssh);
255 out: 207 out:
256 explicit_bzero(hash, sizeof(hash)); 208 explicit_bzero(hash, sizeof(hash));
257 DH_free(kex->dh); 209 DH_free(kex->dh);
258 kex->dh = NULL; 210 kex->dh = NULL;
259 BN_clear_free(dh_server_pub); 211 BN_clear_free(dh_server_pub);
260 if (kbuf) { 212 sshbuf_free(shared_secret);
261 explicit_bzero(kbuf, klen);
262 free(kbuf);
263 }
264 BN_clear_free(shared_secret);
265 sshkey_free(server_host_key); 213 sshkey_free(server_host_key);
266 free(server_host_key_blob); 214 sshbuf_free(tmp);
215 sshbuf_free(server_host_key_blob);
267 free(signature); 216 free(signature);
268 return r; 217 return r;
269} 218}
diff --git a/kexgexs.c b/kexgexs.c
index dc9c0bc60..8ee3aaccb 100644
--- a/kexgexs.c
+++ b/kexgexs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexs.c,v 1.35 2018/10/04 00:04:41 djm Exp $ */ 1/* $OpenBSD: kexgexs.c,v 1.42 2019/01/23 00:30:41 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * Copyright (c) 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2001 Markus Friedl. All rights reserved.
@@ -126,130 +126,78 @@ static int
126input_kex_dh_gex_init(int type, u_int32_t seq, struct ssh *ssh) 126input_kex_dh_gex_init(int type, u_int32_t seq, struct ssh *ssh)
127{ 127{
128 struct kex *kex = ssh->kex; 128 struct kex *kex = ssh->kex;
129 BIGNUM *shared_secret = NULL, *dh_client_pub = NULL; 129 BIGNUM *dh_client_pub = NULL;
130 const BIGNUM *pub_key, *dh_p, *dh_g; 130 const BIGNUM *pub_key, *dh_p, *dh_g;
131 struct sshbuf *shared_secret = NULL;
132 struct sshbuf *server_host_key_blob = NULL;
131 struct sshkey *server_host_public, *server_host_private; 133 struct sshkey *server_host_public, *server_host_private;
132 u_char *kbuf = NULL, *signature = NULL, *server_host_key_blob = NULL; 134 u_char *signature = NULL;
133 u_char hash[SSH_DIGEST_MAX_LENGTH]; 135 u_char hash[SSH_DIGEST_MAX_LENGTH];
134 size_t sbloblen, slen; 136 size_t slen, hashlen;
135 size_t klen = 0, hashlen; 137 int r;
136 int kout, r;
137 138
138 if (kex->load_host_public_key == NULL || 139 if ((r = kex_load_hostkey(ssh, &server_host_private,
139 kex->load_host_private_key == NULL) { 140 &server_host_public)) != 0)
140 r = SSH_ERR_INVALID_ARGUMENT;
141 goto out;
142 }
143 server_host_public = kex->load_host_public_key(kex->hostkey_type,
144 kex->hostkey_nid, ssh);
145 server_host_private = kex->load_host_private_key(kex->hostkey_type,
146 kex->hostkey_nid, ssh);
147 if (server_host_public == NULL) {
148 r = SSH_ERR_NO_HOSTKEY_LOADED;
149 goto out; 141 goto out;
150 }
151 142
152 /* key, cert */ 143 /* key, cert */
153 if ((dh_client_pub = BN_new()) == NULL) { 144 if ((r = sshpkt_get_bignum2(ssh, &dh_client_pub)) != 0 ||
154 r = SSH_ERR_ALLOC_FAIL;
155 goto out;
156 }
157 if ((r = sshpkt_get_bignum2(ssh, dh_client_pub)) != 0 ||
158 (r = sshpkt_get_end(ssh)) != 0) 145 (r = sshpkt_get_end(ssh)) != 0)
159 goto out; 146 goto out;
160 147 if ((shared_secret = sshbuf_new()) == NULL) {
161 DH_get0_key(kex->dh, &pub_key, NULL);
162 DH_get0_pqg(kex->dh, &dh_p, NULL, &dh_g);
163
164#ifdef DEBUG_KEXDH
165 fprintf(stderr, "dh_client_pub= ");
166 BN_print_fp(stderr, dh_client_pub);
167 fprintf(stderr, "\n");
168 debug("bits %d", BN_num_bits(dh_client_pub));
169 DHparams_print_fp(stderr, kex->dh);
170 fprintf(stderr, "pub= ");
171 BN_print_fp(stderr, pub_key);
172 fprintf(stderr, "\n");
173#endif
174 if (!dh_pub_is_valid(kex->dh, dh_client_pub)) {
175 sshpkt_disconnect(ssh, "bad client public DH value");
176 r = SSH_ERR_MESSAGE_INCOMPLETE;
177 goto out;
178 }
179
180 klen = DH_size(kex->dh);
181 if ((kbuf = malloc(klen)) == NULL ||
182 (shared_secret = BN_new()) == NULL) {
183 r = SSH_ERR_ALLOC_FAIL; 148 r = SSH_ERR_ALLOC_FAIL;
184 goto out; 149 goto out;
185 } 150 }
186 if ((kout = DH_compute_key(kbuf, dh_client_pub, kex->dh)) < 0 || 151 if ((r = kex_dh_compute_key(kex, dh_client_pub, shared_secret)) != 0)
187 BN_bin2bn(kbuf, kout, shared_secret) == NULL) { 152 goto out;
188 r = SSH_ERR_LIBCRYPTO_ERROR; 153 if ((server_host_key_blob = sshbuf_new()) == NULL) {
154 r = SSH_ERR_ALLOC_FAIL;
189 goto out; 155 goto out;
190 } 156 }
191#ifdef DEBUG_KEXDH 157 if ((r = sshkey_putb(server_host_public, server_host_key_blob)) != 0)
192 dump_digest("shared secret", kbuf, kout);
193#endif
194 if ((r = sshkey_to_blob(server_host_public, &server_host_key_blob,
195 &sbloblen)) != 0)
196 goto out; 158 goto out;
159
197 /* calc H */ 160 /* calc H */
161 DH_get0_key(kex->dh, &pub_key, NULL);
162 DH_get0_pqg(kex->dh, &dh_p, NULL, &dh_g);
198 hashlen = sizeof(hash); 163 hashlen = sizeof(hash);
199 if ((r = kexgex_hash( 164 if ((r = kexgex_hash(
200 kex->hash_alg, 165 kex->hash_alg,
201 kex->client_version_string, 166 kex->client_version,
202 kex->server_version_string, 167 kex->server_version,
203 sshbuf_ptr(kex->peer), sshbuf_len(kex->peer), 168 kex->peer,
204 sshbuf_ptr(kex->my), sshbuf_len(kex->my), 169 kex->my,
205 server_host_key_blob, sbloblen, 170 server_host_key_blob,
206 kex->min, kex->nbits, kex->max, 171 kex->min, kex->nbits, kex->max,
207 dh_p, dh_g, 172 dh_p, dh_g,
208 dh_client_pub, 173 dh_client_pub,
209 pub_key, 174 pub_key,
210 shared_secret, 175 sshbuf_ptr(shared_secret), sshbuf_len(shared_secret),
211 hash, &hashlen)) != 0) 176 hash, &hashlen)) != 0)
212 goto out; 177 goto out;
213 178
214 /* save session id := H */
215 if (kex->session_id == NULL) {
216 kex->session_id_len = hashlen;
217 kex->session_id = malloc(kex->session_id_len);
218 if (kex->session_id == NULL) {
219 r = SSH_ERR_ALLOC_FAIL;
220 goto out;
221 }
222 memcpy(kex->session_id, hash, kex->session_id_len);
223 }
224
225 /* sign H */ 179 /* sign H */
226 if ((r = kex->sign(server_host_private, server_host_public, &signature, 180 if ((r = kex->sign(ssh, server_host_private, server_host_public,
227 &slen, hash, hashlen, kex->hostkey_alg, ssh->compat)) < 0) 181 &signature, &slen, hash, hashlen, kex->hostkey_alg)) < 0)
228 goto out; 182 goto out;
229 183
230 /* destroy_sensitive_data(); */
231
232 /* send server hostkey, DH pubkey 'f' and signed H */ 184 /* send server hostkey, DH pubkey 'f' and signed H */
233 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_DH_GEX_REPLY)) != 0 || 185 if ((r = sshpkt_start(ssh, SSH2_MSG_KEX_DH_GEX_REPLY)) != 0 ||
234 (r = sshpkt_put_string(ssh, server_host_key_blob, sbloblen)) != 0 || 186 (r = sshpkt_put_stringb(ssh, server_host_key_blob)) != 0 ||
235 (r = sshpkt_put_bignum2(ssh, pub_key)) != 0 || /* f */ 187 (r = sshpkt_put_bignum2(ssh, pub_key)) != 0 || /* f */
236 (r = sshpkt_put_string(ssh, signature, slen)) != 0 || 188 (r = sshpkt_put_string(ssh, signature, slen)) != 0 ||
237 (r = sshpkt_send(ssh)) != 0) 189 (r = sshpkt_send(ssh)) != 0)
238 goto out; 190 goto out;
239 191
240 if ((r = kex_derive_keys_bn(ssh, hash, hashlen, shared_secret)) == 0) 192 if ((r = kex_derive_keys(ssh, hash, hashlen, shared_secret)) == 0)
241 r = kex_send_newkeys(ssh); 193 r = kex_send_newkeys(ssh);
242 out: 194 out:
243 explicit_bzero(hash, sizeof(hash)); 195 explicit_bzero(hash, sizeof(hash));
244 DH_free(kex->dh); 196 DH_free(kex->dh);
245 kex->dh = NULL; 197 kex->dh = NULL;
246 BN_clear_free(dh_client_pub); 198 BN_clear_free(dh_client_pub);
247 if (kbuf) { 199 sshbuf_free(shared_secret);
248 explicit_bzero(kbuf, klen); 200 sshbuf_free(server_host_key_blob);
249 free(kbuf);
250 }
251 BN_clear_free(shared_secret);
252 free(server_host_key_blob);
253 free(signature); 201 free(signature);
254 return r; 202 return r;
255} 203}
diff --git a/kexsntrup4591761x25519.c b/kexsntrup4591761x25519.c
new file mode 100644
index 000000000..3b9b664f8
--- /dev/null
+++ b/kexsntrup4591761x25519.c
@@ -0,0 +1,219 @@
1/* $OpenBSD: kexsntrup4591761x25519.c,v 1.3 2019/01/21 10:40:11 djm Exp $ */
2/*
3 * Copyright (c) 2019 Markus Friedl. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
18 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
19 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "includes.h"
27
28#include <sys/types.h>
29
30#include <stdio.h>
31#include <string.h>
32#include <signal.h>
33
34#include "sshkey.h"
35#include "kex.h"
36#include "sshbuf.h"
37#include "digest.h"
38#include "ssherr.h"
39
40int
41kex_kem_sntrup4591761x25519_keypair(struct kex *kex)
42{
43 struct sshbuf *buf = NULL;
44 u_char *cp = NULL;
45 size_t need;
46 int r;
47
48 if ((buf = sshbuf_new()) == NULL)
49 return SSH_ERR_ALLOC_FAIL;
50 need = crypto_kem_sntrup4591761_PUBLICKEYBYTES + CURVE25519_SIZE;
51 if ((r = sshbuf_reserve(buf, need, &cp)) != 0)
52 goto out;
53 crypto_kem_sntrup4591761_keypair(cp, kex->sntrup4591761_client_key);
54#ifdef DEBUG_KEXECDH
55 dump_digest("client public key sntrup4591761:", cp,
56 crypto_kem_sntrup4591761_PUBLICKEYBYTES);
57#endif
58 cp += crypto_kem_sntrup4591761_PUBLICKEYBYTES;
59 kexc25519_keygen(kex->c25519_client_key, cp);
60#ifdef DEBUG_KEXECDH
61 dump_digest("client public key c25519:", cp, CURVE25519_SIZE);
62#endif
63 kex->client_pub = buf;
64 buf = NULL;
65 out:
66 sshbuf_free(buf);
67 return r;
68}
69
70int
71kex_kem_sntrup4591761x25519_enc(struct kex *kex,
72 const struct sshbuf *client_blob, struct sshbuf **server_blobp,
73 struct sshbuf **shared_secretp)
74{
75 struct sshbuf *server_blob = NULL;
76 struct sshbuf *buf = NULL;
77 const u_char *client_pub;
78 u_char *kem_key, *ciphertext, *server_pub;
79 u_char server_key[CURVE25519_SIZE];
80 u_char hash[SSH_DIGEST_MAX_LENGTH];
81 size_t need;
82 int r;
83
84 *server_blobp = NULL;
85 *shared_secretp = NULL;
86
87 /* client_blob contains both KEM and ECDH client pubkeys */
88 need = crypto_kem_sntrup4591761_PUBLICKEYBYTES + CURVE25519_SIZE;
89 if (sshbuf_len(client_blob) != need) {
90 r = SSH_ERR_SIGNATURE_INVALID;
91 goto out;
92 }
93 client_pub = sshbuf_ptr(client_blob);
94#ifdef DEBUG_KEXECDH
95 dump_digest("client public key sntrup4591761:", client_pub,
96 crypto_kem_sntrup4591761_PUBLICKEYBYTES);
97 dump_digest("client public key 25519:",
98 client_pub + crypto_kem_sntrup4591761_PUBLICKEYBYTES,
99 CURVE25519_SIZE);
100#endif
101 /* allocate buffer for concatenation of KEM key and ECDH shared key */
102 /* the buffer will be hashed and the result is the shared secret */
103 if ((buf = sshbuf_new()) == NULL) {
104 r = SSH_ERR_ALLOC_FAIL;
105 goto out;
106 }
107 if ((r = sshbuf_reserve(buf, crypto_kem_sntrup4591761_BYTES,
108 &kem_key)) != 0)
109 goto out;
110 /* allocate space for encrypted KEM key and ECDH pub key */
111 if ((server_blob = sshbuf_new()) == NULL) {
112 r = SSH_ERR_ALLOC_FAIL;
113 goto out;
114 }
115 need = crypto_kem_sntrup4591761_CIPHERTEXTBYTES + CURVE25519_SIZE;
116 if ((r = sshbuf_reserve(server_blob, need, &ciphertext)) != 0)
117 goto out;
118 /* generate and encrypt KEM key with client key */
119 crypto_kem_sntrup4591761_enc(ciphertext, kem_key, client_pub);
120 /* generate ECDH key pair, store server pubkey after ciphertext */
121 server_pub = ciphertext + crypto_kem_sntrup4591761_CIPHERTEXTBYTES;
122 kexc25519_keygen(server_key, server_pub);
123 /* append ECDH shared key */
124 client_pub += crypto_kem_sntrup4591761_PUBLICKEYBYTES;
125 if ((r = kexc25519_shared_key_ext(server_key, client_pub, buf, 1)) < 0)
126 goto out;
127 if ((r = ssh_digest_buffer(kex->hash_alg, buf, hash, sizeof(hash))) != 0)
128 goto out;
129#ifdef DEBUG_KEXECDH
130 dump_digest("server public key 25519:", server_pub, CURVE25519_SIZE);
131 dump_digest("server cipher text:", ciphertext,
132 crypto_kem_sntrup4591761_CIPHERTEXTBYTES);
133 dump_digest("server kem key:", kem_key, sizeof(kem_key));
134 dump_digest("concatenation of KEM key and ECDH shared key:",
135 sshbuf_ptr(buf), sshbuf_len(buf));
136#endif
137 /* string-encoded hash is resulting shared secret */
138 sshbuf_reset(buf);
139 if ((r = sshbuf_put_string(buf, hash,
140 ssh_digest_bytes(kex->hash_alg))) != 0)
141 goto out;
142#ifdef DEBUG_KEXECDH
143 dump_digest("encoded shared secret:", sshbuf_ptr(buf), sshbuf_len(buf));
144#endif
145 *server_blobp = server_blob;
146 *shared_secretp = buf;
147 server_blob = NULL;
148 buf = NULL;
149 out:
150 explicit_bzero(hash, sizeof(hash));
151 explicit_bzero(server_key, sizeof(server_key));
152 sshbuf_free(server_blob);
153 sshbuf_free(buf);
154 return r;
155}
156
157int
158kex_kem_sntrup4591761x25519_dec(struct kex *kex,
159 const struct sshbuf *server_blob, struct sshbuf **shared_secretp)
160{
161 struct sshbuf *buf = NULL;
162 u_char *kem_key = NULL;
163 const u_char *ciphertext, *server_pub;
164 u_char hash[SSH_DIGEST_MAX_LENGTH];
165 size_t need;
166 int r, decoded;
167
168 *shared_secretp = NULL;
169
170 need = crypto_kem_sntrup4591761_CIPHERTEXTBYTES + CURVE25519_SIZE;
171 if (sshbuf_len(server_blob) != need) {
172 r = SSH_ERR_SIGNATURE_INVALID;
173 goto out;
174 }
175 ciphertext = sshbuf_ptr(server_blob);
176 server_pub = ciphertext + crypto_kem_sntrup4591761_CIPHERTEXTBYTES;
177#ifdef DEBUG_KEXECDH
178 dump_digest("server cipher text:", ciphertext,
179 crypto_kem_sntrup4591761_CIPHERTEXTBYTES);
180 dump_digest("server public key c25519:", server_pub, CURVE25519_SIZE);
181#endif
182 /* hash concatenation of KEM key and ECDH shared key */
183 if ((buf = sshbuf_new()) == NULL) {
184 r = SSH_ERR_ALLOC_FAIL;
185 goto out;
186 }
187 if ((r = sshbuf_reserve(buf, crypto_kem_sntrup4591761_BYTES,
188 &kem_key)) != 0)
189 goto out;
190 decoded = crypto_kem_sntrup4591761_dec(kem_key, ciphertext,
191 kex->sntrup4591761_client_key);
192 if ((r = kexc25519_shared_key_ext(kex->c25519_client_key, server_pub,
193 buf, 1)) < 0)
194 goto out;
195 if ((r = ssh_digest_buffer(kex->hash_alg, buf, hash, sizeof(hash))) != 0)
196 goto out;
197#ifdef DEBUG_KEXECDH
198 dump_digest("client kem key:", kem_key, sizeof(kem_key));
199 dump_digest("concatenation of KEM key and ECDH shared key:",
200 sshbuf_ptr(buf), sshbuf_len(buf));
201#endif
202 sshbuf_reset(buf);
203 if ((r = sshbuf_put_string(buf, hash,
204 ssh_digest_bytes(kex->hash_alg))) != 0)
205 goto out;
206#ifdef DEBUG_KEXECDH
207 dump_digest("encoded shared secret:", sshbuf_ptr(buf), sshbuf_len(buf));
208#endif
209 if (decoded != 0) {
210 r = SSH_ERR_SIGNATURE_INVALID;
211 goto out;
212 }
213 *shared_secretp = buf;
214 buf = NULL;
215 out:
216 explicit_bzero(hash, sizeof(hash));
217 sshbuf_free(buf);
218 return r;
219}
diff --git a/loginrec.c b/loginrec.c
index 9a427dec4..5f2a47797 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -467,7 +467,7 @@ login_write(struct logininfo *li)
467#ifdef CUSTOM_SYS_AUTH_RECORD_LOGIN 467#ifdef CUSTOM_SYS_AUTH_RECORD_LOGIN
468 if (li->type == LTYPE_LOGIN && 468 if (li->type == LTYPE_LOGIN &&
469 !sys_auth_record_login(li->username,li->hostname,li->line, 469 !sys_auth_record_login(li->username,li->hostname,li->line,
470 &loginmsg)) 470 loginmsg))
471 logit("Writing login record failed for %s", li->username); 471 logit("Writing login record failed for %s", li->username);
472#endif 472#endif
473#ifdef SSH_AUDIT_EVENTS 473#ifdef SSH_AUDIT_EVENTS
@@ -1653,7 +1653,7 @@ utmpx_get_entry(struct logininfo *li)
1653 */ 1653 */
1654 1654
1655void 1655void
1656record_failed_login(const char *username, const char *hostname, 1656record_failed_login(struct ssh *ssh, const char *username, const char *hostname,
1657 const char *ttyn) 1657 const char *ttyn)
1658{ 1658{
1659 int fd; 1659 int fd;
@@ -1696,8 +1696,8 @@ record_failed_login(const char *username, const char *hostname,
1696 /* strncpy because we don't necessarily want nul termination */ 1696 /* strncpy because we don't necessarily want nul termination */
1697 strncpy(ut.ut_host, hostname, sizeof(ut.ut_host)); 1697 strncpy(ut.ut_host, hostname, sizeof(ut.ut_host));
1698 1698
1699 if (packet_connection_is_on_socket() && 1699 if (ssh_packet_connection_is_on_socket(ssh) &&
1700 getpeername(packet_get_connection_in(), 1700 getpeername(ssh_packet_get_connection_in(ssh),
1701 (struct sockaddr *)&from, &fromlen) == 0) { 1701 (struct sockaddr *)&from, &fromlen) == 0) {
1702 ipv64_normalise_mapped(&from, &fromlen); 1702 ipv64_normalise_mapped(&from, &fromlen);
1703 if (from.ss_family == AF_INET) { 1703 if (from.ss_family == AF_INET) {
diff --git a/loginrec.h b/loginrec.h
index 28923e781..62cc0e78c 100644
--- a/loginrec.h
+++ b/loginrec.h
@@ -31,6 +31,8 @@
31 31
32#include "includes.h" 32#include "includes.h"
33 33
34struct ssh;
35
34/** 36/**
35 ** you should use the login_* calls to work around platform dependencies 37 ** you should use the login_* calls to work around platform dependencies
36 **/ 38 **/
@@ -126,6 +128,7 @@ char *line_fullname(char *dst, const char *src, u_int dstsize);
126char *line_stripname(char *dst, const char *src, int dstsize); 128char *line_stripname(char *dst, const char *src, int dstsize);
127char *line_abbrevname(char *dst, const char *src, int dstsize); 129char *line_abbrevname(char *dst, const char *src, int dstsize);
128 130
129void record_failed_login(const char *, const char *, const char *); 131void record_failed_login(struct ssh *, const char *, const char *,
132 const char *);
130 133
131#endif /* _HAVE_LOGINREC_H_ */ 134#endif /* _HAVE_LOGINREC_H_ */
diff --git a/match.c b/match.c
index bb3e95f67..fcf69596d 100644
--- a/match.c
+++ b/match.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: match.c,v 1.38 2018/07/04 13:49:31 djm Exp $ */ 1/* $OpenBSD: match.c,v 1.39 2019/03/06 22:14:23 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -170,6 +170,19 @@ match_pattern_list(const char *string, const char *pattern, int dolower)
170 return got_positive; 170 return got_positive;
171} 171}
172 172
173/* Match a list representing users or groups. */
174int
175match_usergroup_pattern_list(const char *string, const char *pattern)
176{
177#ifdef HAVE_CYGWIN
178 /* Windows usernames may be Unicode and are not case sensitive */
179 return cygwin_ug_match_pattern_list(string, pattern);
180#else
181 /* Case insensitive match */
182 return match_pattern_list(string, pattern, 0);
183#endif
184}
185
173/* 186/*
174 * Tries to match the host name (which must be in all lowercase) against the 187 * Tries to match the host name (which must be in all lowercase) against the
175 * comma-separated sequence of subpatterns (each possibly preceded by ! to 188 * comma-separated sequence of subpatterns (each possibly preceded by ! to
diff --git a/match.h b/match.h
index 852b1a5cb..3a8a6ecdc 100644
--- a/match.h
+++ b/match.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: match.h,v 1.18 2018/07/04 13:49:31 djm Exp $ */ 1/* $OpenBSD: match.h,v 1.19 2019/03/06 22:14:23 dtucker Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -16,6 +16,7 @@
16 16
17int match_pattern(const char *, const char *); 17int match_pattern(const char *, const char *);
18int match_pattern_list(const char *, const char *, int); 18int match_pattern_list(const char *, const char *, int);
19int match_usergroup_pattern_list(const char *, const char *);
19int match_hostname(const char *, const char *); 20int match_hostname(const char *, const char *);
20int match_host_and_ip(const char *, const char *, const char *); 21int match_host_and_ip(const char *, const char *, const char *);
21int match_user(const char *, const char *, const char *, const char *); 22int match_user(const char *, const char *, const char *, const char *);
diff --git a/misc.c b/misc.c
index bdc06fdb3..009e02bc5 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.133 2018/10/05 14:26:09 naddy Exp $ */ 1/* $OpenBSD: misc.c,v 1.137 2019/01/23 21:50:56 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -38,6 +38,7 @@
38#ifdef HAVE_LIBGEN_H 38#ifdef HAVE_LIBGEN_H
39# include <libgen.h> 39# include <libgen.h>
40#endif 40#endif
41#include <poll.h>
41#include <signal.h> 42#include <signal.h>
42#include <stdarg.h> 43#include <stdarg.h>
43#include <stdio.h> 44#include <stdio.h>
@@ -234,6 +235,80 @@ set_rdomain(int fd, const char *name)
234#endif 235#endif
235} 236}
236 237
238/*
239 * Wait up to *timeoutp milliseconds for fd to be readable. Updates
240 * *timeoutp with time remaining.
241 * Returns 0 if fd ready or -1 on timeout or error (see errno).
242 */
243int
244waitrfd(int fd, int *timeoutp)
245{
246 struct pollfd pfd;
247 struct timeval t_start;
248 int oerrno, r;
249
250 monotime_tv(&t_start);
251 pfd.fd = fd;
252 pfd.events = POLLIN;
253 for (; *timeoutp >= 0;) {
254 r = poll(&pfd, 1, *timeoutp);
255 oerrno = errno;
256 ms_subtract_diff(&t_start, timeoutp);
257 errno = oerrno;
258 if (r > 0)
259 return 0;
260 else if (r == -1 && errno != EAGAIN)
261 return -1;
262 else if (r == 0)
263 break;
264 }
265 /* timeout */
266 errno = ETIMEDOUT;
267 return -1;
268}
269
270/*
271 * Attempt a non-blocking connect(2) to the specified address, waiting up to
272 * *timeoutp milliseconds for the connection to complete. If the timeout is
273 * <=0, then wait indefinitely.
274 *
275 * Returns 0 on success or -1 on failure.
276 */
277int
278timeout_connect(int sockfd, const struct sockaddr *serv_addr,
279 socklen_t addrlen, int *timeoutp)
280{
281 int optval = 0;
282 socklen_t optlen = sizeof(optval);
283
284 /* No timeout: just do a blocking connect() */
285 if (timeoutp == NULL || *timeoutp <= 0)
286 return connect(sockfd, serv_addr, addrlen);
287
288 set_nonblock(sockfd);
289 if (connect(sockfd, serv_addr, addrlen) == 0) {
290 /* Succeeded already? */
291 unset_nonblock(sockfd);
292 return 0;
293 } else if (errno != EINPROGRESS)
294 return -1;
295
296 if (waitrfd(sockfd, timeoutp) == -1)
297 return -1;
298
299 /* Completed or failed */
300 if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &optval, &optlen) == -1) {
301 debug("getsockopt: %s", strerror(errno));
302 return -1;
303 }
304 if (optval != 0) {
305 errno = optval;
306 return -1;
307 }
308 unset_nonblock(sockfd);
309 return 0;
310}
311
237/* Characters considered whitespace in strsep calls. */ 312/* Characters considered whitespace in strsep calls. */
238#define WHITESPACE " \t\r\n" 313#define WHITESPACE " \t\r\n"
239#define QUOTE "\"" 314#define QUOTE "\""
@@ -489,7 +564,7 @@ put_host_port(const char *host, u_short port)
489 * The delimiter char, if present, is stored in delim. 564 * The delimiter char, if present, is stored in delim.
490 * If this is the last field, *cp is set to NULL. 565 * If this is the last field, *cp is set to NULL.
491 */ 566 */
492static char * 567char *
493hpdelim2(char **cp, char *delim) 568hpdelim2(char **cp, char *delim)
494{ 569{
495 char *s, *old; 570 char *s, *old;
@@ -1335,11 +1410,11 @@ bandwidth_limit_init(struct bwlimit *bw, u_int64_t kbps, size_t buflen)
1335{ 1410{
1336 bw->buflen = buflen; 1411 bw->buflen = buflen;
1337 bw->rate = kbps; 1412 bw->rate = kbps;
1338 bw->thresh = bw->rate; 1413 bw->thresh = buflen;
1339 bw->lamt = 0; 1414 bw->lamt = 0;
1340 timerclear(&bw->bwstart); 1415 timerclear(&bw->bwstart);
1341 timerclear(&bw->bwend); 1416 timerclear(&bw->bwend);
1342} 1417}
1343 1418
1344/* Callback from read/write loop to insert bandwidth-limiting delays */ 1419/* Callback from read/write loop to insert bandwidth-limiting delays */
1345void 1420void
@@ -1348,12 +1423,11 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1348 u_int64_t waitlen; 1423 u_int64_t waitlen;
1349 struct timespec ts, rm; 1424 struct timespec ts, rm;
1350 1425
1426 bw->lamt += read_len;
1351 if (!timerisset(&bw->bwstart)) { 1427 if (!timerisset(&bw->bwstart)) {
1352 monotime_tv(&bw->bwstart); 1428 monotime_tv(&bw->bwstart);
1353 return; 1429 return;
1354 } 1430 }
1355
1356 bw->lamt += read_len;
1357 if (bw->lamt < bw->thresh) 1431 if (bw->lamt < bw->thresh)
1358 return; 1432 return;
1359 1433
@@ -2037,3 +2111,10 @@ format_absolute_time(uint64_t t, char *buf, size_t len)
2037 localtime_r(&tt, &tm); 2111 localtime_r(&tt, &tm);
2038 strftime(buf, len, "%Y-%m-%dT%H:%M:%S", &tm); 2112 strftime(buf, len, "%Y-%m-%dT%H:%M:%S", &tm);
2039} 2113}
2114
2115/* check if path is absolute */
2116int
2117path_absolute(const char *path)
2118{
2119 return (*path == '/') ? 1 : 0;
2120}
diff --git a/misc.h b/misc.h
index 31b207a8d..5b4325aba 100644
--- a/misc.h
+++ b/misc.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.h,v 1.75 2018/10/03 06:38:35 djm Exp $ */ 1/* $OpenBSD: misc.h,v 1.79 2019/01/23 21:50:56 dtucker Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -17,6 +17,7 @@
17 17
18#include <sys/time.h> 18#include <sys/time.h>
19#include <sys/types.h> 19#include <sys/types.h>
20#include <sys/socket.h>
20 21
21/* Data structure for representing a forwarding request. */ 22/* Data structure for representing a forwarding request. */
22struct Forward { 23struct Forward {
@@ -51,9 +52,12 @@ void set_nodelay(int);
51int set_reuseaddr(int); 52int set_reuseaddr(int);
52char *get_rdomain(int); 53char *get_rdomain(int);
53int set_rdomain(int, const char *); 54int set_rdomain(int, const char *);
55int waitrfd(int, int *);
56int timeout_connect(int, const struct sockaddr *, socklen_t, int *);
54int a2port(const char *); 57int a2port(const char *);
55int a2tun(const char *, int *); 58int a2tun(const char *, int *);
56char *put_host_port(const char *, u_short); 59char *put_host_port(const char *, u_short);
60char *hpdelim2(char **, char *);
57char *hpdelim(char **); 61char *hpdelim(char **);
58char *cleanhostname(char *); 62char *cleanhostname(char *);
59char *colon(char *); 63char *colon(char *);
@@ -78,6 +82,7 @@ int valid_env_name(const char *);
78const char *atoi_err(const char *, int *); 82const char *atoi_err(const char *, int *);
79int parse_absolute_time(const char *, uint64_t *); 83int parse_absolute_time(const char *, uint64_t *);
80void format_absolute_time(uint64_t, char *, size_t); 84void format_absolute_time(uint64_t, char *, size_t);
85int path_absolute(const char *);
81 86
82void sock_set_v6only(int); 87void sock_set_v6only(int);
83 88
@@ -134,7 +139,9 @@ void put_u32_le(void *, u_int32_t)
134 139
135struct bwlimit { 140struct bwlimit {
136 size_t buflen; 141 size_t buflen;
137 u_int64_t rate, thresh, lamt; 142 u_int64_t rate; /* desired rate in kbit/s */
143 u_int64_t thresh; /* threshold after which we'll check timers */
144 u_int64_t lamt; /* amount written in last timer interval */
138 struct timeval bwstart, bwend; 145 struct timeval bwstart, bwend;
139}; 146};
140 147
diff --git a/moduli b/moduli
index 372c382a2..4c6947361 100644
--- a/moduli
+++ b/moduli
@@ -1,428 +1,452 @@
1# $OpenBSD: moduli,v 1.22 2018/09/20 08:07:03 dtucker Exp $ 1# $OpenBSD: moduli,v 1.23 2018/10/31 11:20:04 dtucker Exp $
2# Time Type Tests Tries Size Generator Modulus 2# Time Type Tests Tries Size Generator Modulus
320180403031539 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A591E4B57 320180920083436 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE0BE8103
420180403031604 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5923D0DB 420180920083444 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE0C7C3CF
520180403031626 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A592B11B7 520180920083448 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE0C8204B
620180403031845 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A59715A73 620180920083506 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE0E7A6DB
720180403032143 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A59CDE963 720180920083516 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE0F5096B
820180403032347 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5A11B463 820180920083532 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE11027BF
920180403032438 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5A2BBC5F 920180920083549 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE12EA013
1020180403032617 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5A6308C3 1020180920083601 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE13F42E7
1120180403032923 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5ADA5523 1120180920083617 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE15AA2C3
1220180403033405 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5B9A6B37 1220180920083643 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE18AB6BB
1320180403033427 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5B9F8E27 1320180920083714 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE1C69837
1420180403033655 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5C00897F 1420180920083747 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE207143B
1520180403033742 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5C172DBB 1520180920083825 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE24E3977
1620180403033837 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5C33AEAB 1620180920083852 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE2843EE7
1720180403033952 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5C5F6067 1720180920083857 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE285908B
1820180403034409 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5CEE2AD7 1820180920083917 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE2A7511B
1920180403034453 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5CFFE4F3 1920180920083924 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE2B08EBF
2020180403034601 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5D1A691B 2020180920083936 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE2C326CF
2120180403035311 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5E04B193 2120180920083953 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE2E0BCBB
2220180403035645 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5E75D66F 2220180920084017 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE30D862B
2320180403035724 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5E864847 2320180920084034 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE32AADEF
2420180403035828 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5EA44DCF 2420180920084040 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE32F8FDB
2520180403035953 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5ECCB51B 2520180920084114 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE372E443
2620180403040048 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5EE55A9F 2620180920084154 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE3C3748F
2720180403040339 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5F4D5E6F 2720180920084236 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE4158847
2820180403040523 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5F8939A3 2820180920084247 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE4262F2F
2920180403040638 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5FB85E8B 2920180920084310 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE452029F
3020180403040715 2 6 100 2047 2 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A5FCC3033 3020180920084323 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE467FAEB
3120180403041128 2 6 100 2047 5 F78A3F3A47AFE34101F186DF022B970FB51586E65B1D1875E41D02EDDD4BDF6D6D8BA1CC296EA6A8BD7036297A0C01C636A55493E3ADEC2F1DAB9D8D7E0CCD39D7FFC9D4011C3F57A944AA1EEB1AC1784E28ACF7B6FB3AC49185F4E638B567DA6B4903CB8C6D815ED1253D512670FAF71E6BF1ED6669863B552B3BB2173A7F16262454142B7B928F91E60EED00BDFA465F2C46665BD30C1426F9B8D9611D086D6BAB672CB472E8F8E6990F623C2E7458991D982E199BB168C93F96F71974181F898D6C56C02D9DABA852E7E51CA0DC723255B49CAA122D2A6CC64F1389128A0E3298B0E155EC8A4D9BF1D1671B808DDD835015381C1F16C35A84D20A60755C57 3120180920084353 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE4A3A77B
3220180403041637 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336541B76F 3220180920084435 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE4F4FEC3
3320180403041935 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3365BF1D13 3320180920084446 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE50404F3
3420180403042035 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3365E41E47 3420180920084451 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE50889BB
3520180403042109 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3365F700BB 3520180920084547 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE57A3D23
3620180403042214 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336624FF2B 3620180920084627 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE5CC4913
3720180403042419 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336687845B 3720180920084636 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE5D944FB
3820180403042507 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3366A8266B 3820180920084649 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE5EF41F7
3920180403042626 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3366E23603 3920180920084732 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE646894F
4020180403042722 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3367059073 4020180920084755 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE670C3B7
4120180403042819 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3367289EC3 4120180920084818 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE69AD617
4220180403042928 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3367519D23 4220180920084821 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE69AE223
4320180403042946 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336758BFC3 4320180920084833 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE6ADE1B3
4420180403043032 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336774A8EB 4420180920084844 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE6BD0ACF
4520180403043218 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3367BAAE3F 4520180920085036 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7ACC18B
4620180403043245 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3367C6B5CB 4620180920085043 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7B37CAB
4720180403043522 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3368340BB3 4720180920085052 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7BF34CF
4820180403043954 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B33690CEBC3 4820180920085121 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7F719A3
4920180403044107 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B33693DA563 4920180920085126 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7F7A70F
5020180403044245 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B33697A63FB 5020180920085132 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7FD3383
5120180403044527 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B3369F3CAFF 5120180920085137 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE7FF6C03
5220180403044559 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336A09E6EB 5220180920085143 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE806800F
5320180403044611 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336A0C4F53 5320180920085147 2 6 100 2047 2 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE807F56B
5420180403044719 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336A4348BF 5420180920085153 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE80BD7DF
5520180403044820 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336A6E3193 5520180920085205 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE81F7F6F
5620180403044844 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336A7A9C7F 5620180920085257 2 6 100 2047 5 F13B549CC6FE8517551E48FAEBA8D93EAC29403838E22ED862927B8AC9A9ABBA96AB7E306F0A01B75C0E960AB9DEA0F8519BAA2F13E541E194604848CBC9DEC51165E7A45897104B4A9C54C7337270A8B1B7F53B9DC203744ED2C634889C879E713BEA519452AE800B390FFBABF40B992AF659947D3ED78AA04DDF51C84D7B0824978643683F2153C99F682E30A25683CE180948F62E2CC1EFA1513CB16E74117334356E4E365132BB37BA41B4B79F148F26842A61F12D42B149F3FAB0041CB7DF7F53742544FA4E956D314B140F49786E23A5446C1F5CD55CB59D845774C6D6EF1CE5B7426F351FE906C69D23720BCFC5E250DE2786ACEBEC823E1DE88D9BB7
5720180403045235 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336B2E2173 5720180920085403 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD79F990A17
5820180403045518 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336BAD847B 5820180920085428 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD79FC4B55B
5920180403045629 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336BE29A4B 5920180920085452 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD79FF25EFF
6020180403045953 2 6 100 2047 2 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336C865153 6020180920085519 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A0250433
6120180403050042 2 6 100 2047 5 EA0303D03FF69BCABDC25DDEA6AC9CFEE8C36EF48C7F2882B65D568B0D14A7DACCF4A6E8E905727C0B982FA4D7C4E59DDAF4704D0EC767D79B13A32467C8D39F615B5268E4338DD70C6072C702CDF6F39153C472E668ABF0B85B8D08454027AA52E3227C5BA017B2558F7A611F09C7BE5E28A472FAB51C71FF7E8C758CD5205C562F3674D941EF2DEC7F3B3F49C4CE3A9DD7B4275BD537BF04A4A8E98FAA42AD0A2280CFC0D4692339EEC803B69FDC33057837FBD233DB6B78920F7049B5F9CA9CFDD98351B9E7947265439F48429306D6CAB08774F2B7427A61DA757375D26C08B99BCAFB8085E41DBA0E49D142EEC164CC3153AB3119FB76033B336CA6948F 6120180920085620 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A0A900D3
6220180403055314 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57012EEDBB 6220180920085639 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A0C7B767
6320180403055637 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57015FFFAB 6320180920085651 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A0DB38C3
6420180403060753 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57021C5763 6420180920085658 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A0E45E73
6520180403061035 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570243FBBB 6520180920085744 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A13B7883
6620180403061925 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5702CE55A3 6620180920085800 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A155F0FF
6720180403062241 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5702FA4263 6720180920085834 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A19802C3
6820180403062828 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5703495AD7 6820180920085838 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A198FC0B
6920180403063232 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570383322F 6920180920085854 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A1B38723
7020180403063441 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57039D0EE7 7020180920085908 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A1CBBC3F
7120180403065803 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5704F5DFCB 7120180920090009 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A24638B7
7220180403070250 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570535A157 7220180920090031 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A26FE49F
7320180403071043 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5705AD5B2B 7320180920090036 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A272126F
7420180403072237 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57066B3AFF 7420180920090057 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A2962B0B
7520180403072347 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5706763D5B 7520180920090107 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A2A69E27
7620180403072612 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570696B733 7620180920090148 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A2F49F9B
7720180403073322 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5707062E2B 7720180920090155 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A2FC98C7
7820180403073825 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5707547607 7820180920090222 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A32E8983
7920180403073948 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570762843F 7920180920090227 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A332034B
8020180403074104 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57076EC3DB 8020180920090238 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A341BC13
8120180403074403 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570799DD63 8120180920090357 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A3E82A8B
8220180403074828 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5707D93973 8220180920090414 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A405F593
8320180403075240 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570814F21B 8320180920090443 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A44029BB
8420180403075918 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570878D0DB 8420180920090533 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A4A62F13
8520180403080045 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5708890F47 8520180920090600 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A4D96A23
8620180403080212 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570898D8B3 8620180920090616 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A4F1B05B
8720180403080523 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5708C1E14B 8720180920090637 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A5184683
8820180403080854 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5708EEE0AF 8820180920090705 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A549FBCF
8920180403081003 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5708F7F537 8920180920090716 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A5593157
9020180403081710 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570961D7DB 9020180920090727 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A5681F87
9120180403082007 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570988E91B 9120180920090741 2 6 100 2047 2 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A57EC4B3
9220180403082804 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570A02958B 9220180920090828 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A5DD04FF
9320180403084609 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570B1FC24F 9320180920090834 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A5E3B3D7
9420180403084705 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570B262033 9420180920090935 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A660A94F
9520180403084905 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570B3DD5AB 9520180920091000 2 6 100 2047 5 FAEA3B642004FC1DB17244B7DE6AE7EFEA5B3AB4D54A13674A0E4B460E9D0716E6313530F9BA5D9C959562FD4A1D23FC92D99F1060A3C1B374050C77152C461AEC19CBE7AD6818C48CC9568FF8F4E45367C1053D6DEBCF76BD4DE8E3BA808FA43A3649722202C83417ED96F423DCEA18BB3F99E4598C797D05E0D3E6D2E27A5EC0B10304BB7643AEA01DD989AE84AA4B08AC3AA5613C222C41F5CD46EAF191343F1D07664F2D6E7BC876BFC46CFEFBE50991EBC15664112F6DC8D58D6665B9BB9F974D7210AB8E04F963128E43D92B6D645A963121058BA29C668AC5DA81DF3CC17908D240E8771EB52E4396AB6DA2157F3EE55D0C0E20A52C560FD7A68FC267
9620180403085348 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570B82B95B 9620180920094201 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11528E4B7
9720180403090858 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570C6C2E5F 9720180920094613 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B115D90A53
9820180403091014 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570C766563 9820180920094828 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B116301C17
9920180403092356 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570D49B077 9920180920094842 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11631DCAF
10020180403092842 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570D8D7FEB 10020180920095300 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B116E4CA3B
10120180403093424 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570DE274D7 10120180920095312 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B116E4E133
10220180403093850 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570E28C2BB 10220180920095413 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B117068663
10320180403094634 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570EA36EDF 10320180920095436 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B1170E270F
10420180403094738 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570EACDABB 10420180920100204 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B1184656D3
10520180403095906 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B570F67B813 10520180920100341 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11883D577
10620180403101909 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5710AFC157 10620180920100505 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B118B728DB
10720180403102057 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5710C6E1FB 10720180920100550 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B118D00F87
10820180403102257 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5710DF2FD7 10820180920100609 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B118D567E7
10920180403102711 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57111EFB2F 10920180920100942 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B1196905F7
11020180403104106 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5711F3B14F 11020180920101027 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11980B233
11120180403104411 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B5712188817 11120180920101047 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B119877CCB
11220180403104503 2 6 100 3071 5 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57121EA02F 11220180920101204 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B119B78FAF
11320180403104712 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57123CDA13 11320180920101600 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11A5CA257
11420180403104901 2 6 100 3071 2 FF8DCF143A9E3CC447F8D3D03206E386572BFAC54F4BDE233C8B1223CC9CBA99689328E35F8F83F0922A9F0AB33E7C7892E940377CE0064700ECDCC8532F0FEF888913E1894054707878511DD84455BEACCA35E8418D6CAD03111BC1842581D40E280A13055030CB35339E2A0E422DB9EC47916AD6302BE248AD5EBCCE7CF087CB2285A6B8D227DC7130ADB14163BE4D1AA779DBCD36710AA080F219B535B1887392DE9EF44116C933F5CA2234A7A82A8A48F1691A39434D70E3C3995AEE7CEAFF86DAA2326CF367B7E3C7939E4B78A00EE58E52F7BB36C8A89525CA4D44173E30AA6B40FD0B60C29F6CBC763241AC5DA16E2A9FB9B78F360EED32704B686AD6D40DAE8127C9351A2B21C140292E77592A7159000FB2AA9561DA10B2AC3167CC8E41C10CDF86E9041A3A114F42EF4AA5134C716893E81C3A7488ED5131073FC76B20358549BF1B0858B571550663DA9CF73B7B28BF9CA1FAF8EC96966D493C174B03DBCF9B5470DD9A79FB3E14A0B73B6E6C09D531886ACF60E51B57125332B3 11420180920102200 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11B5728B7
11520180403105756 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE03762997 11520180920102235 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11B698D4F
11620180403111214 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0468815B 11620180920102336 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11B8BE2EF
11720180403111819 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE04C53C43 11720180920102711 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11C1D39BB
11820180403111907 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE04CAC50F 11820180920102826 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11C4B4083
11920180403112635 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0540031F 11920180920103322 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11D1356A7
12020180403113403 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE05B956F7 12020180920103630 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11D93FB63
12120180403113943 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0619B7F3 12120180920103932 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11E0CAEBB
12220180403114045 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE06220B07 12220180920104303 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11E9CB9E3
12320180403114120 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0622E517 12320180920104717 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11F4E4B63
12420180403115211 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE06D363E7 12420180920104816 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11F72025B
12520180403115424 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE06F22507 12520180920105139 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B11FFAA343
12620180403115558 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE070516F3 12620180920105211 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B120087713
12720180403115753 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE071E3297 12720180920105407 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B12052E023
12820180403115927 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0731011F 12820180920105834 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B1210F24F7
12920180403121723 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE085D2303 12920180920110033 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B1215A8893
13020180403122312 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE08B88A7F 13020180920110055 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B12161A467
13120180403123158 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE09563C53 13120180920111239 2 6 100 3071 2 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B1234E3F83
13220180403123328 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0969A18F 13220180920111553 2 6 100 3071 5 DE6700153B27F195B230266F3E9064D8646E4E27111A6C5A013DE98A5CD7F11B31B1DC4C71DD72CBEC38DA508B1AD04CB69A372B8D01396C5AE7F5F99C3C3CBE1B2B3287C6AB5794E3AFD6C4E5C8E23B76E21A479765DD7D0D8D41A75DA966486E2C94030AA81314CFC104172048A82D95F402FA9B12E2CF3469AF6202F527BB5FADD82F7F5A67CF47EAA9F70FA02A55D45688EC65A26E8A8BCBD47BEA5C70721995434D0736F3396E9D1681BB08A336B0A9E3340AA24D1E9AC4B33103438C130B4BB87A22D3D85B8BC66B66679790AF7429D0B8F8CEE9BFA7F34239E0F109DABE5370196CB46C134B184178ED494D4703A681A18FFE9A4D6FF5EE71E141EBE11C6E3A6FEE7586F9D5B400EFDF06289783269BD86F1F38CABB0FBEAE666C0FE9EDAF7D1017DCCFBC4AEE1F1BE6FDA3EBD47C7E2BA2D54CC61B740E94B171E0FC2A0F93BF1B93FA4C1D6050106D20A69C11B16AC43EA17C6EE954444B05DCCAD5DAB6794A98FEE7256EA9B1F817E80D86C9242CFA02EED926E200C7B123D4E7B7
13320180403123534 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE09876D27 13320180920113107 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5BD211E4B
13420180403124247 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE09F3F4CF 13420180920113301 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5BD69A2F3
13520180403124446 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0A10443F 13520180920113601 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5BDE3D567
13620180403125400 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0AA6560F 13620180920113838 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5BE4DA06B
13720180403131328 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0BF05873 13720180920114445 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5BF499357
13820180403131708 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0C28FCF3 13820180920114933 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C00F4FE3
13920180403132618 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0CC05D43 13920180920115406 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C0C7C2CF
14020180403140905 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE0FBCA05B 14020180920115734 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C159195F
14120180403141813 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE1054C7EF 14120180920120001 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C1B99ABF
14220180403143434 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE1176152B 14220180920120514 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C29330EB
14320180403143933 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE11C90E93 14320180920120628 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C2C100E7
14420180403144751 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE125A12D3 14420180920120657 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C2CD60CF
14520180403145406 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE12C4F6CF 14520180920120944 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C33CEF4F
14620180403145448 2 6 100 3071 5 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE12CA246F 14620180920121341 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C3E0892F
14720180403145549 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE12D582AB 14720180920121628 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C44E0077
14820180403150132 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE13386F43 14820180920121700 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C45D1D9F
14920180403150512 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE1373A2CB 14920180920121822 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C493C143
15020180403150605 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE137CA7DB 15020180920122041 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C4EF9D0B
15120180403151404 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE140AEF53 15120180920122429 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C5898C03
15220180403152834 2 6 100 3071 2 D9FA0132FCCAAE8116BD22861CD21A859841BA7D566829E10ACC15A7EFEEB381774F839F7228AE3C627F5765944DCDB6866618E187903EBDB558C9186BD84D2521630A379E161FDCEC19BA02A8E4B5A3C4A66D02CA0FEB7BEB75BA3BE87F26BB99122217A4FFEB1F730B430AA0A70BA4A91EFB248DF689E95957E93B9E5D2AC13FBD3896759F77C6CBB6664BA6FEB31C4FD7BF081D4F2D800AB8D979D89A5EFB34675A904F4B332ADD7340116E7D5D4F72F7E3940A30036ACA889C27D8E2E11C0668A2E8A43DFF411FA03F0AFB420262947A60528805A7E0F4B2CC6AC0EF62CBCB807BC131A8D51E7784A13C77DB461A9FDF01C0E97EA8B7C5A13BB4A86784C2FFA34FC1EF094ACB858A919951AA55508E468CBB889EA63B606D45455AAB75883A75A813E9EC6A3A49CADB05A62C2F5CA32013A4FC73E8B5DE1C14A39539A4716B157C08C74CD99EA23AE018A89C838B6C0EAEECDFCF78A447594033ED3D63F4623BFC05C0F6701A36420D60D9C99339F9486395CBE534D66CE66AAE14BB5263 15220180920122505 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C59B843B
15320180403164629 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445F2ACFC43 15320180920122536 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C5A94107
15420180403173943 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445F45D568B 15420180920122806 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C60D5BBB
15520180403183028 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445F603359B 15520180920123304 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C6DD0793
15620180403183423 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445F61BDC27 15620180920123753 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C7A1DB4B
15720180403194550 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445F877D863 15720180920124152 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C842B8B7
15820180403202122 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445F9A0304B 15820180920124601 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C8EEDABB
15920180403210313 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445FAFCEC73 15920180920124906 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5C96EA9B7
16020180403213851 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445FC2F80FF 16020180920125743 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CAE0E013
16120180403215353 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445FCA8B737 16120180920125855 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CB0BFEAB
16220180403222440 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445FDAD53EF 16220180920125915 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CB10BF07
16320180403224035 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445FE2EF2E3 16320180920130235 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CB9812B3
16420180403224214 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D445FE343553 16420180920130731 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CC62B69B
16520180403234157 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446002B2C0F 16520180920130910 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CC9EFAAB
16620180404012449 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446038F5C77 16620180920131150 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CD0A69F7
16720180404012740 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446039F760B 16720180920131303 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CD357E3F
16820180404013701 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D44603E742CF 16820180920131355 2 6 100 3071 5 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CD51C05F
16920180404024209 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4460610756B 16920180920131419 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CD5A0C83
17020180404034850 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446083DCDA7 17020180920131529 2 6 100 3071 2 D55876EAB302ADAA592F62BBE1E67B18C153FA6D93B6CF3C0D0E8989C13F29E1F6638AE58634C6A3C067754CA1241A8EDA45CB1306347BC6BA69D2CE5F515238C78CAFEB65D4FF05D52048EB048BE9B4C127C81EC60B978A372A5054B89BA7D8963DA343DB7F5B673B275E34D03A25C098FEE46063F963E47CAEB67A4915F413570C89224688F4598D25EEEE97DE581256261C0053CCBA12966E31849F31BF32BC506029A41F94356714EF0046FF68D5B75EC86ACB79708CD817C7752EA5E0D5E730245B06B91953434E2325B706C70492446CFC070C11F8E347AFDDB065B680A075BF287DEBFA9D59EE918B85D5D0157CD539A5E46888F39DB448D1D6BFAD57A3970C537387B556D801960276284F363287FE0230CA1950725B1B09A54DEDDF924BE8059E38A729A400582713F149E7E1005C8B0FB302ECA12D8949BA2B4FC645BE96B3F20384384626F1BA1F4E8E045442DDD6A124DECC49B8CDBD6D4217978F69FF8DE7B7F4B15908881391F81F43DF6FBD616398BE9225FE3AC5CD82F3D3
17120180404035100 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446084796E3 17120180920134626 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A1925064B
17220180404035224 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446084ACD8B 17220180920135427 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A19BA1E2B
17320180404040621 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D44608BABFE3 17320180920141147 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A1B0331C7
17420180404043706 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D44609B60613 17420180920145454 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A1E40577F
17520180404044213 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D44609DB5067 17520180920150140 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A1EBA2BA3
17620180404050247 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4460A8585C3 17620180920161629 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A24551BC7
17720180404053546 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4460B94238B 17720180920163144 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A256E6A8B
17820180404054127 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4460BBC6C0B 17820180920164626 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A26848667
17920180404060250 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4460C67CBB7 17920180920164921 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A26B3187F
18020180404061330 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4460CA93683 18020180920165252 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A26EC656B
18120180404084828 2 6 100 4095 2 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D446115943A3 18120180920165723 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A273A8833
18220180404085435 2 6 100 4095 5 D6A36D53FE335EAC6C6F21F2963EEF44BF055FBE1D529CAC77341CADF25097607135D53FBDF5ED5B3BB2CE243834E344600627AB46C3F3952C0E59AAD95A13E0B299073FA6C02260432090C66B7DFA4C06633B8D31E7376024958AEF0B57A6A1519DC39CCFD65E33B19DA7C52C0C6DA0E5990A5DCDE9CB16C36408E6CC825FA464EC6CF3848202E6197281C8176600BEAABAB5E2C0598A97C9A5AC7606A0583DFFBD20FA424D1B62E0E5FAF7DA56C1CEB3C309C999C5B574322B8E511BA14342DAA24EA688E16B05CFC6B89696FF17BF21EC5AF75FB3A6258E6EA4CEE93B06299FC2D32441238B8EBF78124347A0E56522079641D5CB6F8858A91F9C7B1047E7CFCF6A80A0884BE39E9FB8CACE70865A022E538E80C899A43E5842C753E8332A8972249E4EAEB2C327FCD2777488CD9A1F03A242889D3F33A5C5047721605727486E3B97F3BEC6D8BF7C7B4512FB6AC8B854BD92B0ECC9F65408254BDDD8428F0F68EEF4FC61F033C56FF65C566B81994C1B92308771151DEBE7C814C608F99B784251C1CC4E5F110F5D9B9104BC8D60544FC4955204EF21F429E3D618C10F5F3A178BD71CEFD02ADF8AA5A3B79EB2038BC31467EE98AD1EA501B492EEF950B5B3E95AD0D792B585E3F6164E6B5EC52701DE13B6C7D832D339618E4C7372F8D02E48E743FB7477FDF8ED746987F72F4FFD46F1CEEA5340ABFC82D4461181EE57 18220180920170336 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A27A959BF
18320180404093010 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B396361597 18320180920170729 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A27EBBC83
18420180404100034 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3973953BB 18420180920171833 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A28B88307
18520180404112136 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B399EA8DDF 18520180920173958 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2A47E5BF
18620180404112714 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B39A1427A3 18620180920174751 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2AD76CDB
18720180404115040 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B39AD94553 18720180920175337 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2B3F16FF
18820180404130727 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B39D6ABE8B 18820180920180736 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2C416607
18920180404132841 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B39E19247F 18920180920181108 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2C7C62CF
19020180404140647 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B39F5CFEAB 19020180920182003 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2D1C8377
19120180404144308 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A087B8A7 19120180920183639 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2E532EF7
19220180404154403 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A271BD2F 19220180920185506 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A2FAEF903
19320180404155315 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A2B7E4DF 19320180920190842 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A30A680FB
19420180404164237 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A451FC23 19420180920193433 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A328D6FAB
19520180404165126 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A494B437 19520180920193735 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A32BD423F
19620180404172833 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A5C78E83 19620180920194925 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A339269AB
19720180404175448 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A6A037D3 19720180920200058 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A34692BDB
19820180404183147 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A7D443E3 19820180920200225 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A347B8EFF
19920180404183316 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A7D883F3 19920180920200812 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A34DFF2BB
20020180404190024 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3A8B7BF5F 20020180920202050 2 6 100 4095 5 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A35C67F5F
20120180404194132 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AA11DC3B 20120180920204239 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A3758AE93
20220180404195020 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AA5664E3 20220180920204648 2 6 100 4095 2 FC69089A469473B9CF3F3CCD21123CCF3563811632E7FB6CDF9CDF7726AFA4691881289B3952D2347D7BA520E95016066B02888C7EA1E633B998E00EFE78E454EAF64D6462437E9DDB4A239DE998EC0756E7ED17B7A3499CCF2E3F33A54FD223BB6C485AECA2475E2C002C303F6A55530F2F83A98059699C59A43238468FC85CD137A1FC9B9674ED5D746B44848339A9CA772E802BCE56FED99E8B110C8CA365DFB9BFDD47CB2A33CA92469B3BCC6758B73A7A5685F3FB74B6D785ACFA15E462CA9E70453CD1E9D48D146F0951E4E10773A4FBC9C8E2948D2A091525F964FDE6B60BC3C7A175FF88D20A3758B2D6C35F253AF00B95697F32446EAAA00C7B8A3C4B9DC47EDF44BC4C35052CF7304ADE74A0A9C70575FA935961B07B908D9E58454662B0ED6D8148B79FC45B1F5EDD602B13C7285A75B901183C87CF0F6C060E40D48D9910BDB86C2A253C9894CCE7034DEB7707EF5256DE8E98570375845ADABAAF81893FF6D9E61E45FE9906E61CD2FB86F4A1ABC0D51527B56D3329192EBDFA78149C4652EA23463D6FEFC6F79F22154631CEB04692FB67B815FF791576AB9BA71B0A51009D4B2ECF0ED280745831B4B6B49D951479E5E6831F19CE717025AE212A3057D21832E86C847970CF0CEA82D19BC3D211A23EE2CB6B60ED499F1910A4AEC72FEE2BCA10E8BA9AC47ED2D953E1429B056CCEAD0ED2715D2A379DD5F3
20320180404195123 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AA56EAF3 20320180920212404 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C3B843C3
20420180404202233 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AB5A9C37 20420180920212755 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C3FC854F
20520180404202802 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AB8229D3 20520180920213937 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C4D5B923
20620180404203244 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3ABA0DD8B 20620180920214830 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C578D833
20720180404203913 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3ABCF8F47 20720180920215602 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C60301F7
20820180404210704 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3ACB6CB0B 20820180920222334 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C80CD293
20920180404213123 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AD7FE977 20920180920223427 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C8D7E023
21020180404223506 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3AF9772FB 21020180920224739 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C9CDF40F
21120180404225041 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B016049F 21120180920224953 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002C9EF64FB
21220180404225753 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B04C3C37 21220180920225400 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CA3777C7
21320180404230652 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B092364B 21320180920225652 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CA6853C3
21420180404231941 2 6 100 4095 5 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B0F7D807 21420180920230359 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CAE81C2F
21520180404232637 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B127CC5B 21520180920233313 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CD0FC883
21620180404233306 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B154E443 21620180920233505 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CD297D7B
21720180405003707 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B373FAF3 21720180920234143 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CDA00627
21820180405012137 2 6 100 4095 2 C287DA1692C8760D889CABEA6A7055FADB13C9F064C87322D569B9C574001DEBA1685DA8DFFB9A11253F685A3045E2CEBA057C35DD417F717110949007702B25A37AEE60C3A1A9AA6A1667C15BBFFFF173DF27813A74959756822AB34A2BB97B2F408CC6A994ADC83F05CB8028784B859A25032D691F1DDFB1A87F47EDC289FE4452BE4E4D7B07745C1D5A901E7EF0521465DFFC1EECAB7E4F15172A90257AFFCA11B455ADD24067B20C20EDF9B5B59BDFDAE03BF0AB39A13E60515CA8ADE3273BBCA8290D3B581F92B61F1A893ABFF16255A9226638159640F7869B5C30C8FFF3C3378B14E1A5529C8DE120A9E2099388E1217BDDFCC1708F37E74BDE5D0A2DCFDC4DD27BA697C3F8238182DA7C5D02431E086067358CC9A9B4EFF7C8D7FC9F0C8C0528887A194A6D0613AEE1EEDDC7A315AC1A178E9377E488F49367573BA8EDF80FD6EDE2D256F0614AF81B8FB1B243EA7F04CA6BE0E0BE9F43525D3B6718DAA5E2FD3D20BE3F37ED402DAFD7F19C39E51A40868D3F79D45CD422A9F7454DB3FEFF205BE4C10234914FD8882B344DBFB5C2BE5B576EA94EB62C3AFCD012EE7F82F0744BE067736E9A78EF38E6F06474E025776F138AF84E4093AB36683A60D0DB5CB9F75CA7C4303059E0DDCE3A641A3278F5015FD42EAA79B72E5F0D2EFDAADE3B76B23DD4C2A39F359B3CA00F7584B729800B3E01DC3D4CD4B3B4E4FE3B 21820180920235433 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CE8651DF
21920180405071813 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436983FC590B 21920180920235640 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CEA46B8F
22020180405072141 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436983FCDA2F 22020180921000133 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002CEFBF913
22120180405132535 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043698806F173 22120180921001904 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D039AC1B
22220180405133926 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436988262AB7 22220180921002105 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D0557A5B
22320180405165648 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043698A47BC0B 22320180921003739 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D184F8BB
22420180405195101 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043698C28BB2F 22420180921004140 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D1C803A3
22520180405213026 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043698D395FBB 22520180921004415 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D1F094A7
22620180405220015 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043698D843327 22620180921004716 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D21F8203
22720180405231702 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043698E544067 22720180921005129 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D268646B
22820180406025336 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436990AEC063 22820180921010446 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D3556B5B
22920180406035121 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043699149227B 22920180921013214 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D556768F
23020180406063935 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436992C6FC43 23020180921014417 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D62CB7EF
23120180406115213 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436995ACE13F 23120180921021218 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D835583B
23220180406155248 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436997C8EA27 23220180921023434 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002D9D786F3
23320180406170431 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D595320436998593AD3 23320180921024155 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DA550ABB
23420180406184640 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043699940ADB7 23420180921031006 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DC5EBE23
23520180407000748 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043699C562CCB 23520180921031034 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DC5EC45F
23620180407041558 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D59532043699EECE453 23620180921032220 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DD2F3B53
23720180407070330 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A0B1D577 23720180921032554 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DD68BE4B
23820180407100408 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A29D405B 23820180921032729 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DD7D755B
23920180407103952 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A2F83A33 23920180921034633 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DED7E937
24020180407123940 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A43ACBEB 24020180921035421 2 6 100 4095 5 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DF60EDC7
24120180407154812 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A62F48B7 24120180921035905 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002DFAC40E3
24220180407170835 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A704C5AF 24220180921041542 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002E0D7FD93
24320180407175007 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A76C88B7 24320180921042022 2 6 100 4095 2 CB00EACDC1EDB3E4111DB89DA6722A2D66156FC2F5B602DCE0510B47F36F6E94615D96D222BD22037AD407B782A888F534CE84C04E6B78FDF3F24C869960888D33F8396A58F34238B7E2F2BF3CE48263BE78474C422A073FCCF02C47218509E5A989208456CC7ECCB7004957802A413AA0AB3E51C29FB53A99886977A86B4C47A56C2F312D3BA2B2CC4D5CE637B13A77369D5D5CF478E9D38389969F5CF041863F1D5714F11BC66C0FEF500A6B3FEB18BDF575E9E0F066E0A42DEC284B5A23D1C31C628F672D94363CBCCEA7C81636D51D81337E7556B726B35185139FA7568978E684E511DB467D92F0B56B43ADF802E7ADC15107723068B06E024DD25340B228AE9674BC3FC58D6BD55FE67F01B197847B6F4FE8F2DF6BC8C72292067C6BEA73C1D8176926BDBB7A620C36CEC57230A89C9799416E68ECEB323425728DE2830C64979DDEC6355F2BB391FBDC705A5C1537EB03D2372650409D7084D6FF1B3913F9796109B40CAD99DC8B4EED4379A67E96FD1192BC87A5C60A410BB6996D1E0DA0D7E43CE2632B14714E6A25569B9F42D51F22C067F12E6E030DF1205FC91429E93214891F026089748772A64DD21C2F13EC3BEBC313187FB8936613D8E4A93F8569FFC6C6509D43F3939D4CFA5BF958D6E1E9E148DDD3E332728957413FA6084CDDC1263419C9C712F5DC3177F39F0EE5CB8B5F90EE60EEC4A002E12169CB
24420180407184438 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A7F65E03 24420180921053713 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AC509A2DF
24520180407195743 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369A8B41617 24520180921055252 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AC560A423
24620180408071229 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369AFC7905B 24620180921065744 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AC6F28D1F
24720180408075553 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369B03562E7 24720180921071557 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AC75F93C3
24820180408124736 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369B3416E27 24820180921113009 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4ACDA5C3BF
24920180408125929 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369B35942B3 24920180921133701 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD0A30BD7
25020180409023705 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369BBCCDCBB 25020180921151331 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD2DFFEAB
25120180409072217 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369BEB6303F 25120180921154930 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD3B43EF3
25220180409124237 2 6 100 6143 2 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369C1F95DB3 25220180921162910 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD4A147DB
25320180409150941 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369C3A97BA7 25320180921183414 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD79B0197
25420180409162805 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369C56C92A7 25420180921184903 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD7F055F3
25520180409185627 2 6 100 6143 5 E0CFB3582CE2D136E662908DCAA4CD666F574807FFFFF04BFB357D087BD132C8B569A579EC7FEDA39DA9FDBC7A8B289953FC1793F1B5D0F13A317C5F25554892D8A4F4EE9E85B9737D1412316C8169810745D8AC420ED45AA5419137F86E811AA101CD8746EDC5AF653499CA5585851205807E7EC4A3241FDD4C302AAC131FE24B2AC3700D3D21A82EB999FD0005E810811CEB2B1279D95E028269503DBF65FB23CBFC595B12BC67EC4A77D00324909088B6FDF511ABA41732957D32CC436FB0BE95E04F46DF57EC93E4FBD8FF12E18288384CBFABB1BD58F4A047CBF1AB831B43C550515DA98CA33697ECEE8AFAC110E7DD284D531324AC21013C86CFBC9DC286B6669534D8E2D40319E9BA9DC5ACE1825354E1869614CBCB708586A9455D20FC3B724C6FBF941EAAB3FFA61647906B890D9C8F2831A59B7A9A4EB6305DAEDE94A0525C8150EA3B27FC405430B82885E8EAA64A46E2E24DA089A0008C09C5B8117F5E5F397DCAC43906067AE2C6A1B7C1D1B2D233EFF6CBC472F328053EB666EC826604ADA4E27CA01FF98B7A5ADCF8FD3A6E2F6AEC4F36CE8D1D847E611CFDDA7B53AE4F0BA6481A2265D134B5B78F8416164B262CF58FA8806090613D09FA2E8CC417AF2A3208F5BB210CA87927C4FB980C9B97A743CC1B3A7BB9E22DD78EDFB52669C4DB24F796C5D99038E140CE81A9DFECE675F200DC0DEC203FB94380EAA8D13F30530A410BCBD393137FBF89AB80D872D6A4A46B303F01E79FA05DEF4F0F2A2ABD0788459E4C678F3952072570971EA5A686E5964D1C3A61E2311F57E7AB8519809243EB88A87A21B6589A16862EE1B9B4DD452950DDBB5D5482099FC667B5F9A43E3F803D9D0030D0D6E0F86DBFD2B0C2A67B9BFB1F318C6DF0745F75F9F59C7CC62F4763FBBFE3517BF28D9B68372674CBB759E150F6F06FB3053343D54DB7959B79C3764FE57AC25EF6728F1A6A2C6D98E56841DC461BBF12BD23E8C058D500435777431ADC23CA373B0F4A43B5E18787925E79113199A368F30692429BF3041D9BC82BFF88147C3DE432169578E304C72D5953204369C8DC8A0F 25520180921190227 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AD837F15B
25620180409201511 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E047122A7 25620180922004824 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AE097172B
25720180409212042 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E06189297 25720180922040435 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AE5403DDB
25820180410021123 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E0D35B28F 25820180922052522 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AE71BA84B
25920180410022638 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E0D8CA623 25920180922073622 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AEA2D28E3
26020180410024637 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E0E02E03F 26020180922084529 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AEBD11737
26120180410063306 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E1393582B 26120180922095510 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AED6CB613
26220180410063848 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E13B0682B 26220180922100442 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AEDA11D23
26320180410071153 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E147AB73B 26320180922102739 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AEE243617
26420180410082253 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E16363257 26420180922111522 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AEF3698BF
26520180410101335 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E18F03B13 26520180922122645 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF0DFB873
26620180410105609 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E19F1DE37 26620180922135149 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF2D2C0A3
26720180410152104 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E205A4ACB 26720180922135535 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF2DFCAFB
26820180410153733 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E20B2606F 26820180922143740 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF3D211A3
26920180410175655 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E240655BF 26920180922150118 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF45675DB
27020180410204830 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E281EDA87 27020180922161720 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF614E323
27120180410231426 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E2B95718B 27120180922174324 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF80E023F
27220180410233438 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E2C0621C7 27220180922183959 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AF956439F
27320180410234833 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E2C5297E3 27320180922202104 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AFBAC649B
27420180411035657 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E32375BE3 27420180922210150 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AFC958F53
27520180411053901 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3499E12F 27520180922213354 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AFD502EE3
27620180411073150 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3738967B 27620180922232002 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4AFFC84A6B
27720180411073910 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E375B7807 27720180923014322 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4B031123EB
27820180411075734 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E37C0C66B 27820180923030251 2 6 100 6143 2 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4B04EC8B2B
27920180411081855 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E383A5BCB 27920180923042422 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4B06C56A47
28020180411093848 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3A0D60EB 28020180923075109 2 6 100 6143 5 CAD8A4810C1ADC23A2317EA8BB2F93AD4198F948452AD65159BD3D71800456C339AFD34BC6D512D8FCD337463E3CDFBB4E81A9BE01A6FBA103051D50118610088400DEE2C8E51376B07593D50760832754D352737620CB3BD45CF6A0356209541D14FA9A356DB075DAC362617DF28B202B8FF5FE65A7A6106715796ECC5433DF29FDE1BA29D1D70BB0248EFEEE7DCB10B78EDE9F37078D39AEE37395927F97C2E8C8D80747496C5F4C7ED0A14193BDABE56665BE74475CBD49049F7BE47366B32A1E828B3155A7D48F1D06052DDAA3C0C24550772A69F0E3635794B1FC8BFF6274582092BE2CB3323269D3433FF6CC0294074B0BD8E5DF1A42A4A2A687FE9C4772994FA5EA75F099539D9A7761C687F3F2896D0517E73ABC64C8A330E740DB99537F30E9566497DE782C8F5A5A9E64111478A69BA4535C72B323CCCAFFD7E2C181009424D4CA391B0CED89411455E8CB00147E098716861AAB1B18EC5F295F22C8F687C9DBA534BDDF5F98D94E07F0DFFBB9D272AD71A7B1F657794E36EABA60A6D097F0AB4C405909F5D3D15B177496BCE74217892D701745D176AC5A6049C75F2C17C18FB00F09DFCF1934E69E64DC4C758C3353411503479EE07D7660B67DFDE76DD3FA26B2894DC3C6F5A87059657428324E613F7FE6AD25B09D73133AE16C0A5CA8E285BEF024DE79A27A3C363A70B80AAA1638EDEE29FCBD929D6AE23A5A064769F474D116DD11EACCA5B629EFAB4A95053BD9EBD5B21A3AC3CCD503EDF8CC659FBEAE8FC4EEB2B59CEB41438752AD130476F2DE793FB993BDE8057F1F31437F053B847653D379E2ED78491A0AF3F8ADFC4FF023DB11CC9087AFFC810FE16491CEE4E7CB8622C47E0F44479C0C6D915F4A68723B38FBE83DFDCEE4D5745CD316444BD98C951DAA9706795FE922754B80DB3AE924FBEC44AEF4C3D31EB9299175322FEF02A52E854377030F9BF09AB7CC1BF5327C8746BCAD1AA0A876B740FBCA2C914D45BA75292A2329078DF05ECDC8EA0C149D29E481AA1CA80DB2A13ADA476DE3D82D24136A5B92B7FCCC486A785706FF8ED0CD41F5DF4B0B7BA467
28120180411094657 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3A351317 28120180923091429 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1949920F8B
28220180411110541 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3C08A7A7 28220180923122354 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB194E3CB3E3
28320180411120731 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3D6EB9BB 28320180923132927 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB194FD1CDE7
28420180411130125 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E3EAD50F3 28420180923135953 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB195089F093
28520180411151653 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E41CC6D9F 28520180923141725 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1950F052F7
28620180411152943 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E4210423B 28620180923153745 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1952DF5333
28720180411184911 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E46A13843 28720180923161625 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1953CC5B37
28820180411191726 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E473E26CF 28820180923174651 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1955FDACA3
28920180411205712 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E498A1853 28920180923174907 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB195602AE57
29020180411212652 2 6 100 6143 5 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E4A2D607F 29020180923185706 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1957A5593B
29120180411215657 2 6 100 6143 2 E01FFD7EC91328929E4FD6183C9C9EDF4EF8CFC608D943A1011CEE0B49D7322663D64028F7205A4F008A0C8F393F91FF42D1C7ACB6B4041D0DC79BB0DA6D394532A0E33BC96FEA6EC2E67987F13D2F218B9E8A46D20125D822B6AA1C9615087E5C667CCA74414305E3382E20792B058F61D9DBFD93EF80A2E30E17FDB883F79989B540A6E467D9CEF07C849B659890706CAC7FF6F95669DAD0D9170D485C298AA940C6B7B3092E265FB512C70F36E3D6515B7B799E20FFE9DA35F932C3F2C238F5D8BCB92193216563D6163EB9FAAFEDD0E8A1A3F8CE292E8A1BEF630C5E75D845444B414017844E9560C8309CD54BF9EEAB2CAAE888226AB8031F1569A728256BB6FCC14DF314314F9F2DF75E781E8A4A5411ACCB4D9E3103131F52E0D14386A6E107AA7A522E42F1A41C8A8E46CE69E824492B87BC8B34A457EC25A7508B3E1A33BCC9E99EA754163AEC31161A83A80780DF46D36E757CF90C0F002DF73AB406F7DF81FDA75AD7F3F052EEA91955FA737616D8D4BB87A60FF471400D50688146BC3C10FF60A35D8BB9EF6BEF26497361118125FBEE607726AA408674A45931C87666146BE520503A5241D49B964406A864749C50F9B2718B8E0F62614DB27F35F53D57F70CB4ECE081BD377CDBA5C4AD75BEA63CB8E2653E52D11C0CAC67916B0C24232FC9D90091C7CDD317D4F60D8271D81E70B79031BE25CD5D6CC1E7A04FAF98C25B143B9D7B08D94160B1737AB49F55A01AF3A9BB7C8C261E8F2F84A1995C752276F5F03E54EE22A973F63C73083377DD6851634AA5568AA1173E5BE96606D946AAC82951E326750E18C2AD12C311EF784AD9014BEE322032B45244BD6EEDA224CCDA93983C8FB326F8C8B02F5574B0BC0CD7BFD1C524CD66ACD8A7AC1619E57136F2FEB5F49E9791D4E0F0C9AB8B9E7A98E49E5603D4E02771EFC9993ED15974CD0EEA50510C410FD884CB5D83D0FCD0AF7218D49523F95C4C396CBC0359DABD75EC138910788E1766649130AD089F565ED926B4F26FEBAF9CA4F768E6CA6E6BB7E43769B7D46E2F0D6A63254B41715567635FC1D38DCD7E4AD99963 29120180923201932 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1959A6D687
29220180412095549 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D1E908A07 29220180924141921 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1973A572FF
29320180412222127 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D28C808CB 29320180924142936 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1973D9C983
29420180413014812 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D2B32FFD3 29420180924143229 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1973E18163
29520180413033600 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D2C8AD64F 29520180924144304 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB19741666EB
29620180413142737 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D34F03213 29620180924164032 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1976CE68FB
29720180413150907 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D35714FEF 29720180924164811 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1976F40FA7
29820180413164654 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D36BB8D1B 29820180924172248 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1977BCD9FB
29920180413202724 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D39A4E13B 29920180924193420 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB197ACC31C7
30020180413203949 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D39C6A4FB 30020180924195813 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB197B54F0A3
30120180413211909 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D3A44F883 30120180924213953 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB197DA923D7
30220180414010718 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D3D3D3257 30220180924220006 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB197E18BC83
30320180414125221 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D467C1523 30320180924221925 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB197E83B0E7
30420180414181319 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D4AA2837B 30420180924230442 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB197F8509D7
30520180414202910 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D4C60657F 30520180925002733 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB198168A38B
30620180414210359 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D4CCB3D87 30620180925022629 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB19842450D7
30720180415054313 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D53659F57 30720180925032318 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB19856CA53F
30820180415133017 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D596ABEFF 30820180925033018 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB19858EBEEB
30920180415160204 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D5B5415B7 30920180925033504 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB1985A24167
31020180415222232 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D6018A3AB 31020180925040411 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB19864B479F
31120180415224834 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D6064EF13 31120180925075729 2 6 100 6143 2 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB198B9EEEC3
31220180416005338 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D61F17307 31220180925083607 2 6 100 6143 5 F35161AADD9632E3575CDA92B32D0F28F2E75A457C95BE770E9A8E8122E71DDB31C63B86B67348319F52466B6F3FED41463FAADCA6CE2901FF62D867C09A3565BFC511A060AABAD5040F94C3066EFBFED3CA9BA71864EBBE9F616FCE8F9B0C9C463E2172BA6B1EEF222E310FEC9B70FDF42104292FE772CB350DB09040ED588DA44E0607286D1D66F155FFC5607EBEB4041F705839FEDB0C03FDA40F013BAE3D02EA1256B6DB4DB0F9ED423CD6DCFFD36AA0841BB1FDAF66A453A19EB967F0ECF045FB069302CCB0C6EB52834D1A8DBDE302530510349FC21AE0EE7D5F912D6FBFDEF8A19B8B4CEF2EEE0D05F67DB8F03E564FCD7CD2A344DD1A45A7079037A7629747BE1F183775275C93F52505BA701B27FB18035A0B8D707BF1A3B3BE453FD1A21B0B7FBA7CF90B3BB9665AA33EFB1FC04F858A33E8908397B976C03F972D6C50296DF33359E0BE9209C7D333A019937EC6A26BBB0EDD75DA06CF63A6333B1786B55DC0812AB74FD5D87EE581750E238EFCC75A1EF651502D3988C29C6C37504D90F8878D2FBE7F9131F273638A1BFFF96839557C5D1BA687DF78AFAF75E7FA7214B44C04BE0F3D160071146681C7CBE9B1DB1766C1D972E836DF71D0D4CD4E396D15EE25EF1A58FAC876E2ACCC2DE8EFA8B194694524C1F73D66B8D4D0B95C9896D18FE4061A68FB322BBC155D24E7EA516F740866BB32BB55E8FECAA7BC7F9D3D347024584F8BF4A40232D6AF32E3BB753718567698ABCA6440D68AF0B4317F343FA866ECCC64E895D780300BFA2FCAAAAFA4630C37EB8546025DFDD1E3FAB56F70CC95AA0CB7E3E8F11253D80B4C072ED04FE7068C4818B52831F77C11934F97AD153C44499AF0E6C99DE5741E41EB4C3DDEA3A7C7404AF7F154EAB7422598797E4E5106BFCF7390DE9AF5E9978A7000566FF8EE5737730108235AACBD38D8C337C71978FDC765243322C08F74B0F71B91E3C50BE3DAB7E58F0F8F187839AABB2991C1AB686975AEF90EECCBEAD74AE9C78F0A4DF2376A35A4E5894E8677A08788FEA19DEAE13C88D696C65A7426E620AA1492115E2BF0FB198C77AA37
31320180416021119 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D62E1D04F 31320180925142730 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416C2EDFD4B
31420180416083930 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D67B78127 31420180926003216 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416CB3AFEA3
31520180416182014 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D6EDFEF6B 31520180926041318 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416CE37F7FB
31620180416190916 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D6F71FA97 31620180926074350 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416D109F343
31720180416195012 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D6FE60F77 31720180926090735 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416D2224817
31820180417005002 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D737F03EF 31820180926125425 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416D526B7D3
31920180417031611 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D75497E7B 31920180926162303 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416D7F88093
32020180417042601 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D761E7D7F 32020180926165118 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416D85194CB
32120180417230051 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D83ABCCEF 32120180926224609 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416DD089B0F
32220180417231044 2 6 100 7679 5 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D83C22B2F 32220180926225812 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416DD2A3B6B
32320180418011858 2 6 100 7679 2 FBED7F3DD7CF86B0A6EEDC1930C6958C3C00695DAF4347560C5AC1AA4B22F4DC76F190D63E230EB0CB4344A370A471F17FFCA8DA3B5B0A903F9D1258370125F6C172F3EC5F56D7B8EBD07B2072C45D6141DA3CDC01C3D95DE279C5FAA1E042651028141085EB68AFAC473600F75F4A373DC234D5405DCE7AB5B5854960ABC550FCEFEE8FD578810201DE6B4A5EF616F0CBF5707466D7ECBFD488EB68AD4B2EAC889BA2B7FEFE19CD8AA2C78F61D5DA08B4BC2738E1997F951A525EEF9F668148996D1ABFD1620F9276D741A46BECC0B7868A54745E0B16589A4AA7B938AF92FCA0FC9BBC193504D7EBFEFFEC996746DC6CAD3C192D724FB51E6228915789FF18314B3EB690359ADED802F35F48EC0D9C85AA1A20A2E5CF6EB795F2CCD03284547688B1B80A07EFC31668D30836C59C958BBBF6C1EE3940CC43A9334289C872302BB70368FDAC1653AF132F3E398E9310159C839E72555FD889E4E3B05E714E44E116804BF3748F62EF46E6A05DEC58A55185E43E2310EC945004AD61945BD2AD923B7B3C69A01C0393C15B6000BF542A55274ACA20B8A6EB96FAF83E27023FE0EA9EE564959A91BE17110176FB10D1A094947A23EFDE15DD093EF477EF798BCA8F5E14F85411242BC9C9492081444490C072BE8511B3C961AAAC80477897B54BDABE78C533F2E149FA64B51936E31F126625566CAFBB57E9F36CE0DF72A45E61AB27B6D25DEA3BA35910E16BB00AD300CEE2535CE75F9411DD43943250B03EBBA60C5C788974F2F695967103045F3A90A587AEFD0613F9C8E10A273DD827A314C75C7DBCE4326191DBCB92020CDB75129BCA032B6FD59D368C3E2404B2832398E40F43ACE284A91DED8812AA23E5B5A1D36AE204C53F1C6EF0E89AD31D1552E70538451847D7332D8FCACB62A1E56C1E5643E4F7AF63C67E082AC95DCB190795FA53522FA046F1919C81A088D7A8A452124E562BE2A702139670E94524D3110B9DFF35AE73F43280600B8304FA2E776089AF2ED929695967998E29A343FF62C4CAD7618222C01735734342FD33284BE9BDA4976DA1BC3B384E6F813FCBDFA3DC57B841515836CB2B37116EB6D417BBE6AEA7604AA915530AD803DF1C13656753C1A5867F4A3AE94BA7347580EE5A6CEBD2F3EB9B7F83E7B74F38995168F08A15A4CDF5702EA9DC907FC45910586D59537582DB1D5F155BF0050866CE3087560F1F44D1F275FD2B422038F9D8643C3BEBA49938D514848AC4F68F4CF44329C7E806B911B0CB7FF0020F3277A3E2B4FF17090D012B641E24D67A962E2FE361504DB014155F074F30F52078CB31DFC51B32746A42EDBF013F9920CFB17D8545B2B3 32320180927013355 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416DF3A214F
32420180418054538 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA00823770B 32420180927022646 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416DFE1C77F
32520180418071157 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA00950BDC3 32520180927025105 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416E02B64E3
32620180418085254 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA00AAFBDDB 32620180927073721 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416E3F7C30F
32720180418174929 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA01225DA53 32720180927091345 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416E533987B
32820180418210652 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA014D6E5DF 32820180927094940 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416E5A3AA83
32920180418211238 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA014E1D75B 32920180927172504 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416EB936ECF
33020180418224228 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA016133603 33020180927221028 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416EF491CEF
33120180418233547 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA016C53D1F 33120180928031538 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416F33826BF
33220180419053435 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA01B7B0413 33220180928061816 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416F58E9E8B
33320180419055744 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA01BC212DB 33320180928065908 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416F6069543
33420180419135850 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA022362F53 33420180928120844 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416F9FC5BCB
33520180419162659 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA02429C813 33520180928170131 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B416FDB2EF23
33620180419214419 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA0286020EF 33620180928221854 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B41701B64E6B
33720180420033054 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA02CE157FF 33720180929042224 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B417064EC2FF
33820180420033355 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA02CE22F0F 33820180929093251 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4170A2F02DB
33920180420131137 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA03463D903 33920180929124700 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4170C92055B
34020180420174655 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA037E8E853 34020180929125705 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4170CA966AF
34120180420224816 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA03BC5BAEB 34120180929140557 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4170D7B99EB
34220180421002804 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA03CFF8483 34220180929225234 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4171409B02B
34320180421033707 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA03F5CEF07 34320180930030835 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B417172F0403
34420180421044121 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA04029ED83 34420180930110353 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4171D11BFBF
34520180421054539 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA040F07753 34520180930124634 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4171E461903
34620180421080206 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA042A70927 34620180930150219 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4171FE2013B
34720180421084346 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA04323E033 34720181001021616 2 6 100 7679 2 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4172812EAEB
34820180421135101 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA04708373F 34820181001072125 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B4172BC07FE7
34920180421220150 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA04D33A023 34920181001133408 2 6 100 7679 5 C988D06CCD826A9351D5CAE32A47B28ECC90FA4870D861CCC058CFA49419B0044A395E3F289A48C821B2EFE08D293B917B1DB2E2369564F5D066084F71A090706F84E101625CACAAECFFF3B2FE2A8C04FF9A14D43E9B316576F1571B0FDD51A119222601AE2BBFC3007FBC12D10A2D725AD9D8503A47B4B1977FAF4B0C8E244C372662A335C82380718ABAA9B522A03866EBFC6DD7DEE135A54FDCE58EAAF1996D2485E178888F361B01C2A5F5E21E65BAFFE3024C02210AF189975CADE7BFEAD4A90401D7E37D9B855FA8C8F0D2FBFF9357F8C05E3A2A14173E8F7555FD78B88ECEDC94E238639FA1F59C896F61501B2094199D7679805FB69026D4F13CDEB60CAA339BEB091D7D0C125C72028FDFEC35C5D6EE231B1A46C0619BF822F415121A975322001C4EDC29C5CAA430D1471D1013B67B90F5A7FAFB322B53A9C4D418763CB8A9DD068BF3B7702BA939B4FB0DA5253A999B5A8DFA664D2A9F94169F34E46D45D348E3A7E3424CF6019CFDFE1623940B3FC47A1064E601549C02020571FA10F63AEB0676213CD71D1A8A4140662D00471FE9BA88C269F8D217A978AE910A85CADCA772BD7023DC8D0C2ED524C7FEEFEDF408E4221F474A3783545E155118133FA9D65382F7261CF001701E46721021A1315780A53F4238C1AEEA41D38E1B3310D2EC9AE97C2677467157A0B74DA93A3CDF3E6CF898FA0F5CDF3F55CA572385698FD0F55E0E5C63B4BCB9F4A6EDB74C02C0150B057B1A903F7DD8EFC011EE822F2ECBB780914BCC43A11F7BF4A63BE31F06226881ADE9EA780A58C1A6D7183EE947611A03051A0EA817D6D26FC0C418607EEF57AE00494CDDA1CB518C3F910FD46C65F96E3553CEFFD72D13AC13904EFF4E66203B8D512BF7136251120F0BD28C1E781000BBF832A072DB3BBA7B2CFB5AB1F6DAA17FD6EA6C484BB764E5F01194A5445B1FD435977F916261FA1B5AAD6B7E83782C04EBF3CBD11DC7D929FFD8A16597E2D6A384F343D08E13CEA8232818D7F989BB4B0D7D7531AF0F4C6683356A109EAFD135D2E3319FFA6218053EC737FBD91D5886790D4FB1DB70F3D704148EFF2FAA0241F47F2902EA8286BD7647B615197B0E2A70F3638BDF46973518EA692DA5EE26E533F815FA5E5835C2080FAC1776A7CCFE2F49B1400A55F24C9FC465A766772EFB35756AABF0A42B58966E883AFE5E4000D863756225CDDA2F5AC06093173A1AFB5AD9A7B721A30820170A4AE35B3A2F09DE1B53B7D7A407E0F77F1CD4201337315E6677D30CA3E40F84A7AD707BE0FF99CE9334FAE40692F38135DBBC8CE8E7604C0F9C8AE1989C9FE2AC29C2800DC8876032B41730368927
35020180421233337 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA04E52D9FF 35020181002022928 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4608E66C77
35120180422094542 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA055FBBC03 35120181002041648 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C460A539D5F
35220180422151643 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA05A0B8E53 35220181002080547 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C460D765A73
35320180422163933 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA05B02DF5B 35320181002132925 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4611D8F2D7
35420180423004105 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA060EDD493 35420181002195913 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C46170D027F
35520180423045850 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA06410777F 35520181003044410 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C461E0FB427
35620180423175352 2 6 100 7679 2 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA06D85A5C3 35620181003045243 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C461E245A3F
35720180424034739 2 6 100 7679 5 ECCC9B93ED119552D36A774B288F541A81536A13B8D687B23174D680CE3F21B8FA088685F5B965215AFA69736E741A3AFC2AC82CE16162A1E4F0012F28998A638AA98D0789D6C58D92F207EAAA33E467C801891B8D37651B66E0942CF6AB7FD8E0D09A6D597D582BA48563F1450C3300218874730D26EE8B6505059C95C1C764D5FD736BF0A64FAD10F0C7D52A8A57C3FBD653887AAA890DA7AFEDA55DAF702EFF06CC722D147DAA2C8B78F0707F51D2B326BEF8972F5A289829E998B94D98E0ED663143797B569F3A6B56897B5726A38B042806FDFDAA367A4F63C4BA31114300B6290828321C30B25DF97F273041E30A404836E84BB32E0620DC558047FC011A1205126F84D9F8EA5E607FC297E5C9FA00D803026D8126C08EF68B49F6A6C55DCB06EED0B666880CD49FCBFF598055D5E40303669CBC55D85F583DA5EF4F320D6E6A50ECBBFAF8C1F7209655EEAA58BFC18EB9FA20B29EC63FBC810C3A2EDCF8E27FD98975C87D59D9C909895AA10CEA5F7594ADD3ED1EBDFE01BE0559423475592A0E2936E4671504337221F897AE3016BC4670C6B765F5FF1185933B26B1183BCB1E5591970F40A1402EB19EF2644E941F67ABB31935259308B4A5271541F41653EB5E77CCA82214C9C6F4E42E8A3C46CC9BE15BC868BC45B28027E515A16554B9D4F6AB57CFFE42CFE0B42BF83E53F27B39AD95E000C329F716E51D15D6CD211E87AAA83A0F1175F5E1E8963A57DA656FBC19FB42661F14328B05CA7F1A83F49044A5086E6AF56225B8783450E43CB1B6F19061441AF58053BBFAACBC3A80FF5F19A8BD873F487A8FFE3DECD35E77EB2C26387EF66A3EED98C773211914115AFD0776FDAC90CB65479DFE59C0D199F195BBE9E4B2F70A9B1A41429002C2998FAB0F2D6956731819D9F5175B92FECE43178BC69ABEC6E2C18EA88289C5B14C58227640D02F614A9A881633816B9DCAC79E4721EF6E42691902AD1CF565600BAA8019310CAA0AC1087A86846C2E9B96B82C3F0CE52EE73760111061EF090DCBF47882710302A65FBDCF380F84703FE3D4FF7ADD0CB7ED65C889DD6EEC24D01F92771DF3F3D8DFB4BDE234D4A35AB20B22BF5D749398C9B6AE5C7B62DC11ACD887A49586238F5B6D37B47EA6953C3E339A9B40EF3EB01DD70F69253BA9A262777C75DF175195D172BD8233FC7B6F207154EF6E2F47533E359D24EB312A292C756C34A2D55A16452829DAD7A9731E2026E56486F6A3C07380DCA1AFFF270464DA8FF34621FBA715C5853EB1D4EA1C4E23B43CD1CDE1F252B728875F187626A813B4166CC34A62A5D6867E0B605641CEE8025F0AD73DBE4443286CA074B2314F 35720181003065635 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C461FC358AF
35820180424155916 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFACFC9C07 35820181003081458 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4620C4118B
35920180424222331 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFB180A887 35920181003091804 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4621936EAF
36020180425154127 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFBD59073B 36020181003093652 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4621C96C57
36120180426001519 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFC3391D93 36120181003213125 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C462B2BBD5B
36220180426011753 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFC3E66CFF 36220181004064641 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4632523CCF
36320180426121313 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFCB4C31C7 36320181004083341 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4633A72497
36420180426192735 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFD02C1487 36420181004113212 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4635EC630B
36520180427041246 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFD60EF383 36520181004123633 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4636B93337
36620180427102113 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFD9FE975B 36620181004144119 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C463844D7C3
36720180427110709 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFDA77CFC7 36720181005025309 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4641A155C7
36820180427115833 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFDB032A8F 36820181005044622 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C46430AFEB3
36920180427231209 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFE24BAFE7 36920181005053156 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C464390BAB3
37020180428032748 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFE509AE73 37020181005074342 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C464535BB4B
37120180428050334 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFE60622B3 37120181005094350 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4646B220EF
37220180428204832 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF035C75F 37220181005154803 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C464B3844E3
37320180428220506 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF0FF9743 37320181005164416 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C464BE2332F
37420180428221212 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF108842F 37420181005203233 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C464EAB7A73
37520180429040829 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF4BDEDDF 37520181006030808 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C46538BEADB
37620180429045604 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF5372357 37620181006045927 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4654E5E903
37720180429052346 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF57C9113 37720181006134442 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C465B551BBB
37820180429053535 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6CFF591B0F3 37820181006162315 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C465D3CDE9F
37920180429234833 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D000DBC47B 37920181006171548 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C465DD9203F
38020180430061137 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D004DD4873 38020181006173731 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C465E163313
38120180430071004 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D0056DDF9F 38120181006214027 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C466102759F
38220180430074559 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D005C5181B 38220181007065411 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C4667A72DC3
38320180430091811 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D006B26D17 38320181007123656 2 6 100 7679 5 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C466BB5F597
38420180430191732 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D00CD17013 38420181007145027 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C466D436643
38520180501005739 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D01047BA13 38520181007184043 2 6 100 7679 2 FB0D9422C2C18ABC70FF186A01FA8ED40D4950F804266E0B9661F1E2A6EC548235ADF6A86C277AC391995CF5C43940D264D81121AE69F224E949221EDC039AFE2DA6752F6C04E10159FE65D54CBE5EF34174D36E069C4FB18C8E6DBB80B2C6E0F0AD82E0B7281B9D675AE9E85F509B12746130BF725235E2AC495D268C383378FA130AFF2584962A8A3EDEC0B02504DF264F77980B8342713A28BD3219D83F6D70CC1393E10D5A4734BC029FECD3383FF41CB73AC61C29B54B50E439807BFA5663814B6DA5E81B9491217BE616F6B5F93728669FEF51C06D049586FA6584DFBECD526C5CAE6BBD17F104FA69D353A01CD7E39D5BEA60EB0491DCAE78F3A42BFBCC1F366C55FB23B649197B2D2493180963388FBC4A2AC804ECD042A97A07943D46F18EB6D6C24FC050E3DBD8EE2C84FA03E34814EA53197F1121232E239AA0DA133BD81D439AB595FC6F895AB27D0C6C8A5C3F468C9EF81A42BCB7676C2FF4D381063700AEE81FB7369463187413077048310A98D2DC034CCAB7001A28E288B4E6A8DB609974EC9FFC75F6DA91203429ACCEBA35B4CC03006BB069BD2A062A8CAF59E200A8E27B0CD48F896AE6236F0208AE3924EDF58F87557D05413C00CCAD3B95E6F659EC73FDC6933D6D1E21BE753670F6725F21721FDDC304E6178A3164A85F6757A508AFBD9AA4F1C7B181866F5AA306A25032E59C042ACA8EAEDE17B5136ACEC3B56D2E73284922162E614BE0B87654B7B12132D15E6F11F23B0FF2D0A898680B9A66BB908106A60FFC9A0FB43FF3ADCECDB128764764E1D429A0A194ABCD5AB41CE6B75CD025AC8A5FF2153A20E937354A27E361FB396D87924DCF91FE72203BCEA88303DF0A848EA5ADA9282C2C3C2B92542F721C58809178F36E2DA00D17C613FA5173BFC0F27F9502A1AE535BA9D373ABF83413A8F086FE904B0B45F449CCA9F0615028E1A4878463EA8EB424CA76949EA34A6A36C8DDE6EC4A4AE653A2F1F1009773BB92B8D20530A3313F388FA1AD70C3ECB716E5CA80A06C35CBA247D15D41795F8E083B27B4E227B616408863AFAE48F4C4AE68F1DA9A4B427F666DAD85035D1A499B25A09CC19548A5B9276FB082AA8B00879CCE17105CE7368033F4A18D68826780EB79162AD1B7C70879041BA08FB4A45B3071951DD05EFC9FD04AFCB99D57AEFD4EC51549EF9A166312E744CC7EEAEE9543C02D1B2D233A4B59B187D6E1DB64C843358E8B3C73765DDDC9D79D2D270FF493F56BB4F2F0DC4002605999644FF2A573CBA98492AC8577F5C1A822FD0FB709EAD85C786292DCB4FC8FAD924EEE898502BCD84ED4023C7D74A691A7A3A812685C467005CF4B
38620180501022059 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D01117B47B 38620181007223658 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211133D9A97
38720180501025617 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D0116B88A7 38720181008074149 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21119A92B8B
38820180501031400 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D01190866F 38820181008163451 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2111FD14FAB
38920180501201356 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D01BDDAB3B 38920181008224318 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211241066AB
39020180501204003 2 6 100 8191 5 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D01C18942F 39020181009003245 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211254A0343
39120180502033416 2 6 100 8191 2 FAEE1044985A5E9005F621D69401F45F006C4AC70C849E5C17F3D28A22FE2C86DEF3780E73C15BC778C65638702E1DF6193E19C79BC8A9CEC1D64759E6E8E1B3754AAD1F82819BDB1F1E224F7D7BFF62061D89F6AE8D8EAF444A543333A4E71A4EBEE16AA9FEAE434FD965B90E6B57A198C12619CC31EF4F2BA3ACEA4C0D31EDD7BD715FE76FCD9282221F27F6CFD678ABC0458E4EDFBB72FB23333A3137C1C9AEB0AE4E5D98148527A5670311C0181861C1305901FF9704C64F88B75AD76574ABE3B5CEAAC2F675F5A56B807B2D9FFEDC975C7CFC6C697A18ED7F3D76C164FE108255F43971A3CCEE8FDC5E95F38B6ED8F8B150E17A7780E2D5CFD9A4D35BC4E2B3C3F4F286DC9DD0A8A53A22E643AD29753AAAB58E4C268A4145B1958050895F7FF5EB300FD0435824024F6DA4C38039A621D8E553493D964479DB2C1647C5123A9ED27955117CB966D41BAB3FA2F6AE1CE0E9787E3C815B1E3A3E3002B0BC54A89D66A3B532E8152BB0FD681D134374B4F2197F0B451E4C68C589E1F213D42CB62FC749D0883D9A68B39B93A1582F957AC989E5664266BB53BB8A07C84F662D5E3B4D4B277840A98B37F8A2CDF892085AF77A0AD370B2A4649F2381B7136AEB189421C6C801DC4F20273922A57C76DB4DB487DFC33DA2AC490C77E8ABA4AC719E6F0428A37ADBBE04F776199ACE29C1BC3B8A1F8E0D049628FDA016735559589D660FB23421D29745528E160F60B5D1923E685D0E04BE9DAC15C90BCAC4F4A7FD5CE52950734F2A849CAAB083DD18324EE82D1679146E60C290A97E2C94FBFEEDD88DE9EBEB346DF9E11AE14F4540A84F98B210E5366A03A82128986543C48FC3867431B2531AF99B379CE7E8D3105C574B0D4974295E98EFA2C01AC31C80CB1654BCEFA8467A55BC7B55ADB92DC1BE438006E5392ED521B5817558DE5E38172D023E3236EEAE34037E92EA61D6DA463212E012E603709D65EBE8062644A17B1A00FF5DE6E42FD4B3812DACC8C85754616A5539AB60FEF0F9170413E94D3052CBA3A7B9FCF46F318D30DD88DD988C9C16F5BB8823538A8DBC4830B00E7CE5346277E4DAD464128025955E7E5FD184C40EEC184B6143FC4720DA45C7DE3ED4849D6ABC89B1C01D6761660EA595B65E7F70457A32A4D63CCC6FC9736ABDDB9AE9FC8FB90388DAB7BD2189B38488B17DA76B96DAB6871475F59FC36BD53076293EBF9970A1081BA84E44A3A109F6B7231E64C1C54BF9AABD2320185DC054672B2F8F52172CD262F14CCA3237542F421A2413DF5E371DD4F1297E01D81E392A6C4F3BBABAA3091B2F10DB1C4A2C12B0DDDC279F7AD45992225ACA55ADA7CB6370B07B0CD5B935B8DF18BFFA2567EBF77658772D043318B6BA159DBD3AA48C7A509A1F887A05118CBE1470599C2683D9C00DAA5480A05FFDDF7612E6D02024C2DB 39120181009070543 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21129CA56FB
39220180502214537 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED639CFC883 39220181009111433 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2112C8E0D93
39320180503020255 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED63CD06DCB 39320181009152706 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2112F6601C7
39420180503022319 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED63D0368DF 39420181009164722 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2113048398B
39520180503125648 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6446836FF 39520181009203858 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21132D1168F
39620180503155809 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED64679B30F 39620181010040332 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21137C65BFB
39720180503191156 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED648AEA87F 39720181011070638 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21149914247
39820180504050354 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED64F75441F 39820181011150252 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2114EAE7D3B
39920180504071143 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED650DC49F3 39920181011153554 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2114EFEE58B
40020180504084722 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED651F00D33 40020181011234311 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211542C97AF
40120180504103430 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED65316D0B7 40120181012043844 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21157397D47
40220180504105453 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED65348CDBB 40220181012060434 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2115803DB63
40320180504234946 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED65BF5CBBF 40320181012142459 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2115CF3077F
40420180505042813 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED65F0A04E7 40420181012162028 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2115E1C6FCB
40520180505043446 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED65F133337 40520181012182332 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2115F5E2D97
40620180505082348 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6618FACC3 40620181012182843 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2115F623A23
40720180505142452 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED665916E9B 40720181012201834 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211608810CB
40820180505191845 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED668B9BE0B 40820181012223139 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21161EAF243
40920180506011717 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED66CA10377 40920181013114842 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2116A336C63
41020180506064643 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED67028E243 41020181013221122 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21170A23417
41120180506091931 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED671CB9597 41120181013221710 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21170A81107
41220180506094237 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED67201565B 41220181014032132 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21173C1D793
41320180506200807 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED678BDEA8B 41320181014035731 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2117416EF17
41420180507012051 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED67C15F093 41420181014044029 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211747D7B4B
41520180507102714 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED681E510A7 41520181014092738 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2117764D6CF
41620180507105523 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6822806B3 41620181014125735 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21179863787
41720180507204038 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6885CE023 41720181014151837 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2117AE70AF7
41820180508025258 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED68C4A13A7 41820181014175821 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2117C7CCCA7
41920180508064503 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED68EAB2CC7 41920181014225732 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2117F8262DB
42020180508094511 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED69078137B 42020181014233346 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C2117FD8EA63
42120180509200633 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6A5AB6E77 42120181015001106 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211803251C3
42220180509233450 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6A7C34C7F 42220181015101051 2 6 100 8191 2 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C21185F9BDF3
42320180510003712 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6A85E2007 42320181016055751 2 6 100 8191 5 D72A51FC8A019CA61D28C85021CE881FBDCA1D9E2773A50343C390408ABF52C024F0268B5D4F74AA0722F8FA78F966B7AE411C57015CC9E0DB7E56B27A1D078D951747F90F8F663552B12F9BE26809481BD6D62C8EE018E2944DCF0EC7D31FFE3F7DD2F11F3C8311F1C2E2038613E541F53BA05FD92A540D11BB3267E80CCC5DEC74FD67AE473FAD56EFE2CF04457BB7B3121F93AC8F00A5DBE46E460B9B97823F937CF18722D4EE6373EF369D26A7602491493497C1EFDA3F7509772853CF84CD64A06A54FE32817B39B98CE3CE4477616CF232B04D0B2098D5A4E575939C63B26B72BE87B2BEF58F2F6DB4B2A0E00634E02637DF471D6519C22BA9494F225CA01A1A96886C6F02CE0D11EDE3370180E6E6F5CA54B44A8B66BF16ECD52193B7483700AA4051AF775F80818F3331AD80BB25A0FC8775B7821C32EAFDBEF75B3BFCB2F1A4BBDF5340B20AC9E185B0770CE6AAB120CFC4C8C88CA381946F48C0478DC07E5CF3CFB805A1BA8DB905A6D2ABFCFD765990CA4699D9F9B6922FECA4FF861362B4525FF0934E679109AB8F00909945FE897E927380F72416231AAE1A717D47BD129D5549F60C2EA377744B8807AA2432D1925D02C4C205715231DFAD86AC6B5253DE58E3E3F65484A0014CC1EFFBABC6EE912A925C08C8BB68E5FD7A13AED0116863EFA7E69A33D28A1FA853B7E0B84A5F78EFC44CDC39C4148C4B1B3D17E7371E51F96CFAAEBE15D67E82B590B9BB0567BC161AFF012F7571E514BCA7157A8C1521BD7147E83EE57721A77895722390D9C1B7C3BEEEF316E313F5A2DFBA0A5E3509F5F2CEB90C07E1177D3C8AA6CD56F5C5C614656D155350AAFD556890247AE6EDEE2236583A6DA347679C69A9B518FA9BD882F5B9850762C987F727CFEE68421A2D4F363EC45EDABAD574CC4C5AB7654F1C7E0CD84E708CD7C3ED66F369EC1E0E193346FE4747709F6A6DC969E3D2394758E807F4370E2C5A64B5190C5E9D3983CF5778076667B3E41AA28A868B9EA72C45A9234A2C92F0627512AC815CDC1418C676E66B474C071C65DF4EB7AA109ED189B30F49C9A7310CDD5504A0155E5A37FB41548B78049F3FF57EF682D04EFF6B43E5390B07019C555CB55D477552EC778C5BBF00830D1D2B233CB9B5C5A1817F96F395A527458625740A6B2FEFDF160F003D72086FAD44EA24CC669E710A965052D997E63144FD5F32271D0CF75D24DCCF5F4A8E7FD0381E03F0E9DB6F63BA5A59790788D48161E0C292436F79120C9057EBC7B1CA430E5D060836CEE57945DF5557EE2036588A902A1BD163F4DA436602B4BEF61A20D52B15877BFF9973366F242A6D2564BF32E2251C0E07DB2C98A31E82B63F6513FD4CC37D040653E3A68C6B2DB43B569FB070120ADEE89042BF0AC0E9103164E5F8BC57847A1F109ABF35E6E5DE0258C211914B6C57
42420180510011010 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6A8ABBDA3 42420181016115955 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA20E92F77
42520180510075358 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6AC65344B 42520181017081453 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA2E7C1F6B
42620180510102028 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6ADD74BF3 42620181017142420 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA32237C3F
42720180510111207 2 6 100 8191 2 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6AE56234B 42720181017185818 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA353F763B
42820180510122304 2 6 100 8191 5 E3FCBDCFD41A409C58BE083B6485A2D67E20931B1F469774BAE0F1AB2898B800032581B1C4FC71FE136087937A885AFB6FC9E582DD97B8DE3AD2AF861419D5F06278316DFA78BAE7EF099889F0E99575C7812E7240B67623E7877737013A7D5DB3638040083400E8F27600BAC0650D24220CA1B3C05FB7DD70469A201DBFF1308ECA1C7152A6016BB89BFB6C625715EE91A92EA1848F0B2491AA92187468D9E8442679D7F5F6B64BC9D5A3D4E9B58C59EEEB65F8D6B70A71099E1B420BC0FD750CB2F333C23C97966BE727A6B6D9AEC8C0EB2436E01770F03840BFEC9228BB6DD46CE27D5739E18429F464FFF6812B0F66A8B0024BE03294900B8D0BC3CA6785F8C418EFE7068B2CD190A54BB9F90E05885A5C85DC069495C2009F79DBFD7774D7D65B9831FDC295CE146F4EB91DC56ABBD0B64BEAF3C340E0BF123A115D12289D44B650FF8461734308F4701CF2C199676DB3B4804FCDBD6B08C5D4875073AD5C575CA0B64597472A5C23EB4277B52B1128F3B1AE363E36A2C2D6EF5FCE00EE1573A40AD5ACDCDADE3E2672979CF68E87530520B2CA2C1110CBE4B631F3ABE83CFFDB7D5ACDD6DCA5916E30B1771FE29C4F60163B62349B66C0EDDCE8502F7C49DD4089EA5AE31FFB220A88C8D232367B52FAB7644F02E7EC10378697213CF0D90DA83A9941C217C559F88DEC6587AD953C95F11C575F0EFA9CC0650955C733910F2F90C78AE367F67B0F496A100E0B018731404D2BAEC7420F8C2B1FB6612AF69ECF369F236DD0BFB0ACBAED4141B2A14591C6475FC5C3D4E9B6229ECF7E288C015D59A35DE67F633DC586609AB3AB85A02B99DDF1B6FA7D54D4B2DDB767CAAB797C9FB29594B80B5BAACF777666D0B35CE6EFD8E46270C4D715B74FEA64FE34FBF4332BB4E8477CA438645C24444417EA5769B507925FB4B8FC59E429F1EC593C397F71087A080B39A192B5147D04D9F30DC237764C810E519B74EE90F047D0829104B6BA1A01F1CC18C85BE79F52084FAD6D7BF3EDA36D63981D8B75676740DB1AA6E06AD0C1F6A3B665D2D9D0E363FCE37B581C682A5F554D820849CEE7066A7DB011EA7D916B4A45212CBBC7A56ADAD33D203B8A1EDA03064A34351916C243E65D45425974C1468A626B773B48962108203F02814F15640149BCC2325C40F2457F0618CAAFDE26162326F2F81E8C727FAFED1B43E3AC8752E9F4EDFF5B58BD316882B555E63278FEB00B61144703C060B6188F3528E176E9B2D5996579048B723EB678CD56FA979004270E9F88F235404C522ED076E9F287097F2F7600A2D4566D2F6EFB600A9854B61CDB4363040D4F30D96BB011EF4BB0E0F21192F72B106B4F38A79FA384978C3C2A9AB94534BE01C83927BC95A9C5E55E618D7C5D77A9FA39664EEF11B2D50F59396DAD7CDC23F17948585BD88342EED6AF06789F 42820181017191239 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA355F350B
42920181018142458 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA4281917F
43020181018172424 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA44764C13
43120181019021923 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA4A5411D3
43220181019034359 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA4B386FC3
43320181019143855 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA5262DD0F
43420181019175117 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA547B23C3
43520181019180938 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA54A6C53B
43620181019200034 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA55D16287
43720181020003801 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA58CB384B
43820181020112657 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA5F85360B
43920181020201319 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA652B1403
44020181020203144 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA6552017F
44120181021021352 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA68F8AE73
44220181021071146 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA6C1C6B53
44320181021104137 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA6E492B5B
44420181021162701 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA71E3AEBB
44520181021164042 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA71FF6D23
44620181022114359 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA7D41FB5F
44720181023003127 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA852BE5A7
44820181023054524 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA88559E07
44920181023122409 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA8C5B7A9F
45020181023161120 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA8EA11AB7
45120181023174619 2 6 100 8191 2 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA8F91F893
45220181023175924 2 6 100 8191 5 EA2361A4ABC2DDA42ADD74B38CE837D05B00192233F16571DAB16B15049BA7606BA9A6DC1588738A9949D68815E7F9DB7FEB2C81C1284F976E38376817186BB7725E05B3DA281A887F71DADA27911625597D376826592E156211FF30844F8A1C47DF9320AE8E9C9171181EE3F7D5EB1B56F79D7DCC39FC5C20A23EF716809E2035466B7E7A43DF588D73637DC89192E5EC392C917AD498C66E229EDBEFAEBD449773973E04F812B55466A3F2E321FA8A3AD1B6AF8A95178F4EF001004EAA4D83EC362F1B966137C811AE2B52B5815ED28F7CEB16DE55E7C64E5D34BE122EED25B5E9DAC04AE9EBB4C0EEBA6D447B435262EDF18CD616E396C80DCAF8547DED8A9817BB70FEDEA734E5A7005F8C7C2CB53366827824E2666DE1F1AC109A41576BC37B3BD1536D79CAB6F6BD7A2D9863EF0F6FEA547A990EF5DF931632F203682D34462025E053CEE1D25EEB0508CBE0A50F7D687A5AE6038F3BE219992B7796E1181D06AA9072D5419E50046F40D5985CB8EBE8C5232EE75AB3C03F113C5EC4669C072D5C514EFA0778062DDD9FF90BB75DDBA4AE2E2100559A35273D202E93B17FFABBC976DB516DA4FC9433322FE6517E5B39021A4564AFB6E1A15B1EB5981B952A8161C688C461CD1CC8E67882CAAFD6FDFA2BA7EBFC40D16D39F4DA16879D230375833741E1B3C49D1630E10C5E6CD1C11AEB2C356C3A0A4EAD805B9330199AC8BC1BB1ECF2E3F84839B5A444FB06959505AF97019C695D6A14990A1E2C678A6EC187C90F6989DA0E977767F2110D8C9289C6E85CC87C7141B11B284A4DCE2ACA6414F5AEB560E11E44699973E4BC4B28526C2D1C68B81A51ACC9E490B6F28129100FC3888C85ABB9E0B3808F00753F76C908E8E71B08EDD87C9359F716324183EE3D89389839F0E741246400D1BEC8F5592F4D66ED0205A90F6A153D3D0751662BB95FA3CBF1543D35E2B9E02497FA24173FC8387B36EE320007E4DC8D3400DC69D361FE071D1C015F87F4FD8E942E5D92D7197279F02513839ABC5D11098DF80A4D3817B7AFC4F7A93BA8469D89DB503284B6D2B7E90F2B52ED2E6F65F0E90A3D13564725FF563772C5356E2C50AFED4301BBE029DEFB252B1598847FAB4136B69110942DE842A9186D391E8CB2AD210B1D9B9473676222F6EA1F445E24290B6F1845243B33250224C0F316E18C52180220C2549D093D9F3974980F95DA8F1A49E36D142A3957A1F7DE6E492578544D17C856BEEC0F40FAFBFB8140945D6B13AB23BE8D1ABDC3E4A92E051CD180C5F2FE288C96F831DD5F34CA679E618D160B21F1697870F8F3B3A7318D0A558C4EADF16D0A76079D148F7404AC163852513ECE66374A9F5A8BC4C87F36CB2AE52ADBC034DEAE51FD60DC071284F8CAC9346E6D60F97D6CFE41C605B2C4D8D0C8BA41DB0DB3A2BD01B037D8CA8FAACDB7
diff --git a/moduli.0 b/moduli.0
index 59767da38..a8109d7d7 100644
--- a/moduli.0
+++ b/moduli.0
@@ -71,4 +71,4 @@ STANDARDS
71 the Secure Shell (SSH) Transport Layer Protocol, RFC 4419, March 2006, 71 the Secure Shell (SSH) Transport Layer Protocol, RFC 4419, March 2006,
72 2006. 72 2006.
73 73
74OpenBSD 6.4 September 26, 2012 OpenBSD 6.4 74OpenBSD 6.5 September 26, 2012 OpenBSD 6.5
diff --git a/moduli.c b/moduli.c
index 233cba8e8..7120415fd 100644
--- a/moduli.c
+++ b/moduli.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: moduli.c,v 1.32 2017/12/08 03:45:52 deraadt Exp $ */ 1/* $OpenBSD: moduli.c,v 1.34 2019/01/23 09:49:00 dtucker Exp $ */
2/* 2/*
3 * Copyright 1994 Phil Karn <karn@qualcomm.com> 3 * Copyright 1994 Phil Karn <karn@qualcomm.com>
4 * Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com> 4 * Copyright 1996-1998, 2003 William Allen Simpson <wsimpson@greendragon.com>
@@ -582,7 +582,7 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted,
582 u_int32_t generator_known, in_tests, in_tries, in_type, in_size; 582 u_int32_t generator_known, in_tests, in_tries, in_type, in_size;
583 unsigned long last_processed = 0, end_lineno; 583 unsigned long last_processed = 0, end_lineno;
584 time_t time_start, time_stop; 584 time_t time_start, time_stop;
585 int res; 585 int res, is_prime;
586 586
587 if (trials < TRIAL_MINIMUM) { 587 if (trials < TRIAL_MINIMUM) {
588 error("Minimum primality trials is %d", TRIAL_MINIMUM); 588 error("Minimum primality trials is %d", TRIAL_MINIMUM);
@@ -716,8 +716,6 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted,
716 if (generator_known == 0) { 716 if (generator_known == 0) {
717 if (BN_mod_word(p, 24) == 11) 717 if (BN_mod_word(p, 24) == 11)
718 generator_known = 2; 718 generator_known = 2;
719 else if (BN_mod_word(p, 12) == 5)
720 generator_known = 3;
721 else { 719 else {
722 u_int32_t r = BN_mod_word(p, 10); 720 u_int32_t r = BN_mod_word(p, 10);
723 721
@@ -753,7 +751,10 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted,
753 * that p is also prime. A single pass will weed out the 751 * that p is also prime. A single pass will weed out the
754 * vast majority of composite q's. 752 * vast majority of composite q's.
755 */ 753 */
756 if (BN_is_prime_ex(q, 1, ctx, NULL) <= 0) { 754 is_prime = BN_is_prime_ex(q, 1, ctx, NULL);
755 if (is_prime < 0)
756 fatal("BN_is_prime_ex failed");
757 if (is_prime == 0) {
757 debug("%10u: q failed first possible prime test", 758 debug("%10u: q failed first possible prime test",
758 count_in); 759 count_in);
759 continue; 760 continue;
@@ -766,14 +767,20 @@ prime_test(FILE *in, FILE *out, u_int32_t trials, u_int32_t generator_wanted,
766 * will show up on the first Rabin-Miller iteration so it 767 * will show up on the first Rabin-Miller iteration so it
767 * doesn't hurt to specify a high iteration count. 768 * doesn't hurt to specify a high iteration count.
768 */ 769 */
769 if (!BN_is_prime_ex(p, trials, ctx, NULL)) { 770 is_prime = BN_is_prime_ex(p, trials, ctx, NULL);
771 if (is_prime < 0)
772 fatal("BN_is_prime_ex failed");
773 if (is_prime == 0) {
770 debug("%10u: p is not prime", count_in); 774 debug("%10u: p is not prime", count_in);
771 continue; 775 continue;
772 } 776 }
773 debug("%10u: p is almost certainly prime", count_in); 777 debug("%10u: p is almost certainly prime", count_in);
774 778
775 /* recheck q more rigorously */ 779 /* recheck q more rigorously */
776 if (!BN_is_prime_ex(q, trials - 1, ctx, NULL)) { 780 is_prime = BN_is_prime_ex(q, trials - 1, ctx, NULL);
781 if (is_prime < 0)
782 fatal("BN_is_prime_ex failed");
783 if (is_prime == 0) {
777 debug("%10u: q is not prime", count_in); 784 debug("%10u: q is not prime", count_in);
778 continue; 785 continue;
779 } 786 }
diff --git a/monitor.c b/monitor.c
index 531b2993a..60e529444 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor.c,v 1.186 2018/07/20 03:46:34 djm Exp $ */ 1/* $OpenBSD: monitor.c,v 1.197 2019/01/21 10:38:54 djm Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * Copyright 2002 Markus Friedl <markus@openbsd.org> 4 * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -112,48 +112,48 @@ static struct sshbuf *child_state;
112 112
113/* Functions on the monitor that answer unprivileged requests */ 113/* Functions on the monitor that answer unprivileged requests */
114 114
115int mm_answer_moduli(int, struct sshbuf *); 115int mm_answer_moduli(struct ssh *, int, struct sshbuf *);
116int mm_answer_sign(int, struct sshbuf *); 116int mm_answer_sign(struct ssh *, int, struct sshbuf *);
117int mm_answer_pwnamallow(int, struct sshbuf *); 117int mm_answer_pwnamallow(struct ssh *, int, struct sshbuf *);
118int mm_answer_auth2_read_banner(int, struct sshbuf *); 118int mm_answer_auth2_read_banner(struct ssh *, int, struct sshbuf *);
119int mm_answer_authserv(int, struct sshbuf *); 119int mm_answer_authserv(struct ssh *, int, struct sshbuf *);
120int mm_answer_authpassword(int, struct sshbuf *); 120int mm_answer_authpassword(struct ssh *, int, struct sshbuf *);
121int mm_answer_bsdauthquery(int, struct sshbuf *); 121int mm_answer_bsdauthquery(struct ssh *, int, struct sshbuf *);
122int mm_answer_bsdauthrespond(int, struct sshbuf *); 122int mm_answer_bsdauthrespond(struct ssh *, int, struct sshbuf *);
123int mm_answer_keyallowed(int, struct sshbuf *); 123int mm_answer_skeyquery(struct ssh *, int, struct sshbuf *);
124int mm_answer_keyverify(int, struct sshbuf *); 124int mm_answer_skeyrespond(struct ssh *, int, struct sshbuf *);
125int mm_answer_pty(int, struct sshbuf *); 125int mm_answer_keyallowed(struct ssh *, int, struct sshbuf *);
126int mm_answer_pty_cleanup(int, struct sshbuf *); 126int mm_answer_keyverify(struct ssh *, int, struct sshbuf *);
127int mm_answer_term(int, struct sshbuf *); 127int mm_answer_pty(struct ssh *, int, struct sshbuf *);
128int mm_answer_rsa_keyallowed(int, struct sshbuf *); 128int mm_answer_pty_cleanup(struct ssh *, int, struct sshbuf *);
129int mm_answer_rsa_challenge(int, struct sshbuf *); 129int mm_answer_term(struct ssh *, int, struct sshbuf *);
130int mm_answer_rsa_response(int, struct sshbuf *); 130int mm_answer_rsa_keyallowed(struct ssh *, int, struct sshbuf *);
131int mm_answer_sesskey(int, struct sshbuf *); 131int mm_answer_rsa_challenge(struct ssh *, int, struct sshbuf *);
132int mm_answer_sessid(int, struct sshbuf *); 132int mm_answer_rsa_response(struct ssh *, int, struct sshbuf *);
133int mm_answer_sesskey(struct ssh *, int, struct sshbuf *);
134int mm_answer_sessid(struct ssh *, int, struct sshbuf *);
133 135
134#ifdef USE_PAM 136#ifdef USE_PAM
135int mm_answer_pam_start(int, struct sshbuf *); 137int mm_answer_pam_start(struct ssh *, int, struct sshbuf *);
136int mm_answer_pam_account(int, struct sshbuf *); 138int mm_answer_pam_account(struct ssh *, int, struct sshbuf *);
137int mm_answer_pam_init_ctx(int, struct sshbuf *); 139int mm_answer_pam_init_ctx(struct ssh *, int, struct sshbuf *);
138int mm_answer_pam_query(int, struct sshbuf *); 140int mm_answer_pam_query(struct ssh *, int, struct sshbuf *);
139int mm_answer_pam_respond(int, struct sshbuf *); 141int mm_answer_pam_respond(struct ssh *, int, struct sshbuf *);
140int mm_answer_pam_free_ctx(int, struct sshbuf *); 142int mm_answer_pam_free_ctx(struct ssh *, int, struct sshbuf *);
141#endif 143#endif
142 144
143#ifdef GSSAPI 145#ifdef GSSAPI
144int mm_answer_gss_setup_ctx(int, struct sshbuf *); 146int mm_answer_gss_setup_ctx(struct ssh *, int, struct sshbuf *);
145int mm_answer_gss_accept_ctx(int, struct sshbuf *); 147int mm_answer_gss_accept_ctx(struct ssh *, int, struct sshbuf *);
146int mm_answer_gss_userok(int, struct sshbuf *); 148int mm_answer_gss_userok(struct ssh *, int, struct sshbuf *);
147int mm_answer_gss_checkmic(int, struct sshbuf *); 149int mm_answer_gss_checkmic(struct ssh *, int, struct sshbuf *);
148#endif 150#endif
149 151
150#ifdef SSH_AUDIT_EVENTS 152#ifdef SSH_AUDIT_EVENTS
151int mm_answer_audit_event(int, struct sshbuf *); 153int mm_answer_audit_event(struct ssh *, int, struct sshbuf *);
152int mm_answer_audit_command(int, struct sshbuf *); 154int mm_answer_audit_command(struct ssh *, int, struct sshbuf *);
153#endif 155#endif
154 156
155static int monitor_read_log(struct monitor *);
156
157static Authctxt *authctxt; 157static Authctxt *authctxt;
158 158
159/* local state for key verify */ 159/* local state for key verify */
@@ -172,7 +172,7 @@ static pid_t monitor_child_pid;
172struct mon_table { 172struct mon_table {
173 enum monitor_reqtype type; 173 enum monitor_reqtype type;
174 int flags; 174 int flags;
175 int (*f)(int, struct sshbuf *); 175 int (*f)(struct ssh *, int, struct sshbuf *);
176}; 176};
177 177
178#define MON_ISAUTH 0x0004 /* Required for Authentication */ 178#define MON_ISAUTH 0x0004 /* Required for Authentication */
@@ -184,6 +184,10 @@ struct mon_table {
184 184
185#define MON_PERMIT 0x1000 /* Request is permitted */ 185#define MON_PERMIT 0x1000 /* Request is permitted */
186 186
187static int monitor_read(struct ssh *, struct monitor *, struct mon_table *,
188 struct mon_table **);
189static int monitor_read_log(struct monitor *);
190
187struct mon_table mon_dispatch_proto20[] = { 191struct mon_table mon_dispatch_proto20[] = {
188#ifdef WITH_OPENSSL 192#ifdef WITH_OPENSSL
189 {MONITOR_REQ_MODULI, MON_ONCE, mm_answer_moduli}, 193 {MONITOR_REQ_MODULI, MON_ONCE, mm_answer_moduli},
@@ -265,9 +269,8 @@ monitor_permit_authentications(int permit)
265} 269}
266 270
267void 271void
268monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor) 272monitor_child_preauth(struct ssh *ssh, struct monitor *pmonitor)
269{ 273{
270 struct ssh *ssh = active_state; /* XXX */
271 struct mon_table *ent; 274 struct mon_table *ent;
272 int authenticated = 0, partial = 0; 275 int authenticated = 0, partial = 0;
273 276
@@ -279,7 +282,7 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
279 close(pmonitor->m_log_sendfd); 282 close(pmonitor->m_log_sendfd);
280 pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1; 283 pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1;
281 284
282 authctxt = _authctxt; 285 authctxt = (Authctxt *)ssh->authctxt;
283 memset(authctxt, 0, sizeof(*authctxt)); 286 memset(authctxt, 0, sizeof(*authctxt));
284 ssh->authctxt = authctxt; 287 ssh->authctxt = authctxt;
285 288
@@ -297,7 +300,8 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
297 auth_submethod = NULL; 300 auth_submethod = NULL;
298 auth2_authctxt_reset_info(authctxt); 301 auth2_authctxt_reset_info(authctxt);
299 302
300 authenticated = (monitor_read(pmonitor, mon_dispatch, &ent) == 1); 303 authenticated = (monitor_read(ssh, pmonitor,
304 mon_dispatch, &ent) == 1);
301 305
302 /* Special handling for multiple required authentications */ 306 /* Special handling for multiple required authentications */
303 if (options.num_auth_methods != 0) { 307 if (options.num_auth_methods != 0) {
@@ -329,13 +333,13 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
329 mm_request_receive_expect(pmonitor->m_sendfd, 333 mm_request_receive_expect(pmonitor->m_sendfd,
330 MONITOR_REQ_PAM_ACCOUNT, m); 334 MONITOR_REQ_PAM_ACCOUNT, m);
331 authenticated = mm_answer_pam_account( 335 authenticated = mm_answer_pam_account(
332 pmonitor->m_sendfd, m); 336 ssh, pmonitor->m_sendfd, m);
333 sshbuf_free(m); 337 sshbuf_free(m);
334 } 338 }
335#endif 339#endif
336 } 340 }
337 if (ent->flags & (MON_AUTHDECIDE|MON_ALOG)) { 341 if (ent->flags & (MON_AUTHDECIDE|MON_ALOG)) {
338 auth_log(authctxt, authenticated, partial, 342 auth_log(ssh, authenticated, partial,
339 auth_method, auth_submethod); 343 auth_method, auth_submethod);
340 if (!partial && !authenticated) 344 if (!partial && !authenticated)
341 authctxt->failures++; 345 authctxt->failures++;
@@ -356,7 +360,7 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
356 ssh->authctxt = NULL; 360 ssh->authctxt = NULL;
357 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); 361 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user);
358 362
359 mm_get_keystate(pmonitor); 363 mm_get_keystate(ssh, pmonitor);
360 364
361 /* Drain any buffered messages from the child */ 365 /* Drain any buffered messages from the child */
362 while (pmonitor->m_log_recvfd != -1 && monitor_read_log(pmonitor) == 0) 366 while (pmonitor->m_log_recvfd != -1 && monitor_read_log(pmonitor) == 0)
@@ -382,7 +386,7 @@ monitor_child_handler(int sig)
382} 386}
383 387
384void 388void
385monitor_child_postauth(struct monitor *pmonitor) 389monitor_child_postauth(struct ssh *ssh, struct monitor *pmonitor)
386{ 390{
387 close(pmonitor->m_recvfd); 391 close(pmonitor->m_recvfd);
388 pmonitor->m_recvfd = -1; 392 pmonitor->m_recvfd = -1;
@@ -408,7 +412,7 @@ monitor_child_postauth(struct monitor *pmonitor)
408 } 412 }
409 413
410 for (;;) 414 for (;;)
411 monitor_read(pmonitor, mon_dispatch, NULL); 415 monitor_read(ssh, pmonitor, mon_dispatch, NULL);
412} 416}
413 417
414static int 418static int
@@ -463,8 +467,8 @@ monitor_read_log(struct monitor *pmonitor)
463 return 0; 467 return 0;
464} 468}
465 469
466int 470static int
467monitor_read(struct monitor *pmonitor, struct mon_table *ent, 471monitor_read(struct ssh *ssh, struct monitor *pmonitor, struct mon_table *ent,
468 struct mon_table **pent) 472 struct mon_table **pent)
469{ 473{
470 struct sshbuf *m; 474 struct sshbuf *m;
@@ -514,7 +518,7 @@ monitor_read(struct monitor *pmonitor, struct mon_table *ent,
514 if (!(ent->flags & MON_PERMIT)) 518 if (!(ent->flags & MON_PERMIT))
515 fatal("%s: unpermitted request %d", __func__, 519 fatal("%s: unpermitted request %d", __func__,
516 type); 520 type);
517 ret = (*ent->f)(pmonitor->m_sendfd, m); 521 ret = (*ent->f)(ssh, pmonitor->m_sendfd, m);
518 sshbuf_free(m); 522 sshbuf_free(m);
519 523
520 /* The child may use this request only once, disable it */ 524 /* The child may use this request only once, disable it */
@@ -565,7 +569,7 @@ monitor_reset_key_state(void)
565 569
566#ifdef WITH_OPENSSL 570#ifdef WITH_OPENSSL
567int 571int
568mm_answer_moduli(int sock, struct sshbuf *m) 572mm_answer_moduli(struct ssh *ssh, int sock, struct sshbuf *m)
569{ 573{
570 DH *dh; 574 DH *dh;
571 const BIGNUM *dh_p, *dh_g; 575 const BIGNUM *dh_p, *dh_g;
@@ -607,9 +611,8 @@ mm_answer_moduli(int sock, struct sshbuf *m)
607#endif 611#endif
608 612
609int 613int
610mm_answer_sign(int sock, struct sshbuf *m) 614mm_answer_sign(struct ssh *ssh, int sock, struct sshbuf *m)
611{ 615{
612 struct ssh *ssh = active_state; /* XXX */
613 extern int auth_sock; /* XXX move to state struct? */ 616 extern int auth_sock; /* XXX move to state struct? */
614 struct sshkey *key; 617 struct sshkey *key;
615 struct sshbuf *sigbuf = NULL; 618 struct sshbuf *sigbuf = NULL;
@@ -710,9 +713,8 @@ mm_answer_sign(int sock, struct sshbuf *m)
710/* Retrieves the password entry and also checks if the user is permitted */ 713/* Retrieves the password entry and also checks if the user is permitted */
711 714
712int 715int
713mm_answer_pwnamallow(int sock, struct sshbuf *m) 716mm_answer_pwnamallow(struct ssh *ssh, int sock, struct sshbuf *m)
714{ 717{
715 struct ssh *ssh = active_state; /* XXX */
716 char *username; 718 char *username;
717 struct passwd *pwent; 719 struct passwd *pwent;
718 int r, allowed = 0; 720 int r, allowed = 0;
@@ -726,7 +728,7 @@ mm_answer_pwnamallow(int sock, struct sshbuf *m)
726 if ((r = sshbuf_get_cstring(m, &username, NULL)) != 0) 728 if ((r = sshbuf_get_cstring(m, &username, NULL)) != 0)
727 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 729 fatal("%s: buffer error: %s", __func__, ssh_err(r));
728 730
729 pwent = getpwnamallow(username); 731 pwent = getpwnamallow(ssh, username);
730 732
731 authctxt->user = xstrdup(username); 733 authctxt->user = xstrdup(username);
732 setproctitle("%s [priv]", pwent ? username : "unknown"); 734 setproctitle("%s [priv]", pwent ? username : "unknown");
@@ -810,7 +812,7 @@ mm_answer_pwnamallow(int sock, struct sshbuf *m)
810 return (0); 812 return (0);
811} 813}
812 814
813int mm_answer_auth2_read_banner(int sock, struct sshbuf *m) 815int mm_answer_auth2_read_banner(struct ssh *ssh, int sock, struct sshbuf *m)
814{ 816{
815 char *banner; 817 char *banner;
816 int r; 818 int r;
@@ -826,7 +828,7 @@ int mm_answer_auth2_read_banner(int sock, struct sshbuf *m)
826} 828}
827 829
828int 830int
829mm_answer_authserv(int sock, struct sshbuf *m) 831mm_answer_authserv(struct ssh *ssh, int sock, struct sshbuf *m)
830{ 832{
831 int r; 833 int r;
832 834
@@ -846,10 +848,38 @@ mm_answer_authserv(int sock, struct sshbuf *m)
846 return (0); 848 return (0);
847} 849}
848 850
851/*
852 * Check that the key type appears in the supplied pattern list, ignoring
853 * mismatches in the signature algorithm. (Signature algorithm checks are
854 * performed in the unprivileged authentication code).
855 * Returns 1 on success, 0 otherwise.
856 */
857static int
858key_base_type_match(const char *method, const struct sshkey *key,
859 const char *list)
860{
861 char *s, *l, *ol = xstrdup(list);
862 int found = 0;
863
864 l = ol;
865 for ((s = strsep(&l, ",")); s && *s != '\0'; (s = strsep(&l, ","))) {
866 if (sshkey_type_from_name(s) == key->type) {
867 found = 1;
868 break;
869 }
870 }
871 if (!found) {
872 error("%s key type %s is not in permitted list %s", method,
873 sshkey_ssh_name(key), list);
874 }
875
876 free(ol);
877 return found;
878}
879
849int 880int
850mm_answer_authpassword(int sock, struct sshbuf *m) 881mm_answer_authpassword(struct ssh *ssh, int sock, struct sshbuf *m)
851{ 882{
852 struct ssh *ssh = active_state; /* XXX */
853 static int call_count; 883 static int call_count;
854 char *passwd; 884 char *passwd;
855 int r, authenticated; 885 int r, authenticated;
@@ -888,7 +918,7 @@ mm_answer_authpassword(int sock, struct sshbuf *m)
888 918
889#ifdef BSD_AUTH 919#ifdef BSD_AUTH
890int 920int
891mm_answer_bsdauthquery(int sock, struct sshbuf *m) 921mm_answer_bsdauthquery(struct ssh *ssh, int sock, struct sshbuf *m)
892{ 922{
893 char *name, *infotxt; 923 char *name, *infotxt;
894 u_int numprompts, *echo_on, success; 924 u_int numprompts, *echo_on, success;
@@ -922,7 +952,7 @@ mm_answer_bsdauthquery(int sock, struct sshbuf *m)
922} 952}
923 953
924int 954int
925mm_answer_bsdauthrespond(int sock, struct sshbuf *m) 955mm_answer_bsdauthrespond(struct ssh *ssh, int sock, struct sshbuf *m)
926{ 956{
927 char *response; 957 char *response;
928 int r, authok; 958 int r, authok;
@@ -956,12 +986,12 @@ mm_answer_bsdauthrespond(int sock, struct sshbuf *m)
956 986
957#ifdef USE_PAM 987#ifdef USE_PAM
958int 988int
959mm_answer_pam_start(int sock, struct sshbuf *m) 989mm_answer_pam_start(struct ssh *ssh, int sock, struct sshbuf *m)
960{ 990{
961 if (!options.use_pam) 991 if (!options.use_pam)
962 fatal("UsePAM not set, but ended up in %s anyway", __func__); 992 fatal("UsePAM not set, but ended up in %s anyway", __func__);
963 993
964 start_pam(authctxt); 994 start_pam(ssh);
965 995
966 monitor_permit(mon_dispatch, MONITOR_REQ_PAM_ACCOUNT, 1); 996 monitor_permit(mon_dispatch, MONITOR_REQ_PAM_ACCOUNT, 1);
967 if (options.kbd_interactive_authentication) 997 if (options.kbd_interactive_authentication)
@@ -971,7 +1001,7 @@ mm_answer_pam_start(int sock, struct sshbuf *m)
971} 1001}
972 1002
973int 1003int
974mm_answer_pam_account(int sock, struct sshbuf *m) 1004mm_answer_pam_account(struct ssh *ssh, int sock, struct sshbuf *m)
975{ 1005{
976 u_int ret; 1006 u_int ret;
977 int r; 1007 int r;
@@ -994,7 +1024,7 @@ static void *sshpam_ctxt, *sshpam_authok;
994extern KbdintDevice sshpam_device; 1024extern KbdintDevice sshpam_device;
995 1025
996int 1026int
997mm_answer_pam_init_ctx(int sock, struct sshbuf *m) 1027mm_answer_pam_init_ctx(struct ssh *ssh, int sock, struct sshbuf *m)
998{ 1028{
999 u_int ok = 0; 1029 u_int ok = 0;
1000 int r; 1030 int r;
@@ -1019,7 +1049,7 @@ mm_answer_pam_init_ctx(int sock, struct sshbuf *m)
1019} 1049}
1020 1050
1021int 1051int
1022mm_answer_pam_query(int sock, struct sshbuf *m) 1052mm_answer_pam_query(struct ssh *ssh, int sock, struct sshbuf *m)
1023{ 1053{
1024 char *name = NULL, *info = NULL, **prompts = NULL; 1054 char *name = NULL, *info = NULL, **prompts = NULL;
1025 u_int i, num = 0, *echo_on = 0; 1055 u_int i, num = 0, *echo_on = 0;
@@ -1060,7 +1090,7 @@ mm_answer_pam_query(int sock, struct sshbuf *m)
1060} 1090}
1061 1091
1062int 1092int
1063mm_answer_pam_respond(int sock, struct sshbuf *m) 1093mm_answer_pam_respond(struct ssh *ssh, int sock, struct sshbuf *m)
1064{ 1094{
1065 char **resp; 1095 char **resp;
1066 u_int i, num; 1096 u_int i, num;
@@ -1098,7 +1128,7 @@ mm_answer_pam_respond(int sock, struct sshbuf *m)
1098} 1128}
1099 1129
1100int 1130int
1101mm_answer_pam_free_ctx(int sock, struct sshbuf *m) 1131mm_answer_pam_free_ctx(struct ssh *ssh, int sock, struct sshbuf *m)
1102{ 1132{
1103 int r = sshpam_authok != NULL && sshpam_authok == sshpam_ctxt; 1133 int r = sshpam_authok != NULL && sshpam_authok == sshpam_ctxt;
1104 1134
@@ -1118,9 +1148,8 @@ mm_answer_pam_free_ctx(int sock, struct sshbuf *m)
1118#endif 1148#endif
1119 1149
1120int 1150int
1121mm_answer_keyallowed(int sock, struct sshbuf *m) 1151mm_answer_keyallowed(struct ssh *ssh, int sock, struct sshbuf *m)
1122{ 1152{
1123 struct ssh *ssh = active_state; /* XXX */
1124 struct sshkey *key = NULL; 1153 struct sshkey *key = NULL;
1125 char *cuser, *chost; 1154 char *cuser, *chost;
1126 u_int pubkey_auth_attempt; 1155 u_int pubkey_auth_attempt;
@@ -1151,8 +1180,8 @@ mm_answer_keyallowed(int sock, struct sshbuf *m)
1151 break; 1180 break;
1152 if (auth2_key_already_used(authctxt, key)) 1181 if (auth2_key_already_used(authctxt, key))
1153 break; 1182 break;
1154 if (match_pattern_list(sshkey_ssh_name(key), 1183 if (!key_base_type_match(auth_method, key,
1155 options.pubkey_key_types, 0) != 1) 1184 options.pubkey_key_types))
1156 break; 1185 break;
1157 allowed = user_key_allowed(ssh, authctxt->pw, key, 1186 allowed = user_key_allowed(ssh, authctxt->pw, key,
1158 pubkey_auth_attempt, &opts); 1187 pubkey_auth_attempt, &opts);
@@ -1163,10 +1192,10 @@ mm_answer_keyallowed(int sock, struct sshbuf *m)
1163 break; 1192 break;
1164 if (auth2_key_already_used(authctxt, key)) 1193 if (auth2_key_already_used(authctxt, key))
1165 break; 1194 break;
1166 if (match_pattern_list(sshkey_ssh_name(key), 1195 if (!key_base_type_match(auth_method, key,
1167 options.hostbased_key_types, 0) != 1) 1196 options.hostbased_key_types))
1168 break; 1197 break;
1169 allowed = hostbased_key_allowed(authctxt->pw, 1198 allowed = hostbased_key_allowed(ssh, authctxt->pw,
1170 cuser, chost, key); 1199 cuser, chost, key);
1171 auth2_record_info(authctxt, 1200 auth2_record_info(authctxt,
1172 "client user \"%.100s\", client host \"%.100s\"", 1201 "client user \"%.100s\", client host \"%.100s\"",
@@ -1198,7 +1227,7 @@ mm_answer_keyallowed(int sock, struct sshbuf *m)
1198 hostbased_chost = chost; 1227 hostbased_chost = chost;
1199 } else { 1228 } else {
1200 /* Log failed attempt */ 1229 /* Log failed attempt */
1201 auth_log(authctxt, 0, 0, auth_method, NULL); 1230 auth_log(ssh, 0, 0, auth_method, NULL);
1202 free(cuser); 1231 free(cuser);
1203 free(chost); 1232 free(chost);
1204 } 1233 }
@@ -1355,9 +1384,8 @@ monitor_valid_hostbasedblob(u_char *data, u_int datalen, char *cuser,
1355} 1384}
1356 1385
1357int 1386int
1358mm_answer_keyverify(int sock, struct sshbuf *m) 1387mm_answer_keyverify(struct ssh *ssh, int sock, struct sshbuf *m)
1359{ 1388{
1360 struct ssh *ssh = active_state; /* XXX */
1361 struct sshkey *key; 1389 struct sshkey *key;
1362 u_char *signature, *data, *blob; 1390 u_char *signature, *data, *blob;
1363 char *sigalg; 1391 char *sigalg;
@@ -1402,7 +1430,7 @@ mm_answer_keyverify(int sock, struct sshbuf *m)
1402 fatal("%s: bad signature data blob", __func__); 1430 fatal("%s: bad signature data blob", __func__);
1403 1431
1404 ret = sshkey_verify(key, signature, signaturelen, data, datalen, 1432 ret = sshkey_verify(key, signature, signaturelen, data, datalen,
1405 sigalg, active_state->compat); 1433 sigalg, ssh->compat);
1406 debug3("%s: %s %p signature %s", __func__, auth_method, key, 1434 debug3("%s: %s %p signature %s", __func__, auth_method, key,
1407 (ret == 0) ? "verified" : "unverified"); 1435 (ret == 0) ? "verified" : "unverified");
1408 auth2_record_key(authctxt, ret == 0, key); 1436 auth2_record_key(authctxt, ret == 0, key);
@@ -1429,9 +1457,8 @@ mm_answer_keyverify(int sock, struct sshbuf *m)
1429} 1457}
1430 1458
1431static void 1459static void
1432mm_record_login(Session *s, struct passwd *pw) 1460mm_record_login(struct ssh *ssh, Session *s, struct passwd *pw)
1433{ 1461{
1434 struct ssh *ssh = active_state; /* XXX */
1435 socklen_t fromlen; 1462 socklen_t fromlen;
1436 struct sockaddr_storage from; 1463 struct sockaddr_storage from;
1437 1464
@@ -1441,8 +1468,8 @@ mm_record_login(Session *s, struct passwd *pw)
1441 */ 1468 */
1442 memset(&from, 0, sizeof(from)); 1469 memset(&from, 0, sizeof(from));
1443 fromlen = sizeof(from); 1470 fromlen = sizeof(from);
1444 if (packet_connection_is_on_socket()) { 1471 if (ssh_packet_connection_is_on_socket(ssh)) {
1445 if (getpeername(packet_get_connection_in(), 1472 if (getpeername(ssh_packet_get_connection_in(ssh),
1446 (struct sockaddr *)&from, &fromlen) < 0) { 1473 (struct sockaddr *)&from, &fromlen) < 0) {
1447 debug("getpeername: %.100s", strerror(errno)); 1474 debug("getpeername: %.100s", strerror(errno));
1448 cleanup_exit(255); 1475 cleanup_exit(255);
@@ -1466,7 +1493,7 @@ mm_session_close(Session *s)
1466} 1493}
1467 1494
1468int 1495int
1469mm_answer_pty(int sock, struct sshbuf *m) 1496mm_answer_pty(struct ssh *ssh, int sock, struct sshbuf *m)
1470{ 1497{
1471 extern struct monitor *pmonitor; 1498 extern struct monitor *pmonitor;
1472 Session *s; 1499 Session *s;
@@ -1494,7 +1521,7 @@ mm_answer_pty(int sock, struct sshbuf *m)
1494 if (dup2(s->ttyfd, 0) == -1) 1521 if (dup2(s->ttyfd, 0) == -1)
1495 fatal("%s: dup2", __func__); 1522 fatal("%s: dup2", __func__);
1496 1523
1497 mm_record_login(s, authctxt->pw); 1524 mm_record_login(ssh, s, authctxt->pw);
1498 1525
1499 /* Now we can close the file descriptor again */ 1526 /* Now we can close the file descriptor again */
1500 close(0); 1527 close(0);
@@ -1536,7 +1563,7 @@ mm_answer_pty(int sock, struct sshbuf *m)
1536} 1563}
1537 1564
1538int 1565int
1539mm_answer_pty_cleanup(int sock, struct sshbuf *m) 1566mm_answer_pty_cleanup(struct ssh *ssh, int sock, struct sshbuf *m)
1540{ 1567{
1541 Session *s; 1568 Session *s;
1542 char *tty; 1569 char *tty;
@@ -1554,9 +1581,8 @@ mm_answer_pty_cleanup(int sock, struct sshbuf *m)
1554} 1581}
1555 1582
1556int 1583int
1557mm_answer_term(int sock, struct sshbuf *req) 1584mm_answer_term(struct ssh *ssh, int sock, struct sshbuf *req)
1558{ 1585{
1559 struct ssh *ssh = active_state; /* XXX */
1560 extern struct monitor *pmonitor; 1586 extern struct monitor *pmonitor;
1561 int res, status; 1587 int res, status;
1562 1588
@@ -1583,7 +1609,7 @@ mm_answer_term(int sock, struct sshbuf *req)
1583#ifdef SSH_AUDIT_EVENTS 1609#ifdef SSH_AUDIT_EVENTS
1584/* Report that an audit event occurred */ 1610/* Report that an audit event occurred */
1585int 1611int
1586mm_answer_audit_event(int socket, struct sshbuf *m) 1612mm_answer_audit_event(struct ssh *ssh, int socket, struct sshbuf *m)
1587{ 1613{
1588 u_int n; 1614 u_int n;
1589 ssh_audit_event_t event; 1615 ssh_audit_event_t event;
@@ -1602,7 +1628,7 @@ mm_answer_audit_event(int socket, struct sshbuf *m)
1602 case SSH_LOGIN_ROOT_DENIED: 1628 case SSH_LOGIN_ROOT_DENIED:
1603 case SSH_CONNECTION_CLOSE: 1629 case SSH_CONNECTION_CLOSE:
1604 case SSH_INVALID_USER: 1630 case SSH_INVALID_USER:
1605 audit_event(event); 1631 audit_event(ssh, event);
1606 break; 1632 break;
1607 default: 1633 default:
1608 fatal("Audit event type %d not permitted", event); 1634 fatal("Audit event type %d not permitted", event);
@@ -1612,7 +1638,7 @@ mm_answer_audit_event(int socket, struct sshbuf *m)
1612} 1638}
1613 1639
1614int 1640int
1615mm_answer_audit_command(int socket, struct sshbuf *m) 1641mm_answer_audit_command(struct ssh *ssh, int socket, struct sshbuf *m)
1616{ 1642{
1617 char *cmd; 1643 char *cmd;
1618 int r; 1644 int r;
@@ -1628,10 +1654,8 @@ mm_answer_audit_command(int socket, struct sshbuf *m)
1628#endif /* SSH_AUDIT_EVENTS */ 1654#endif /* SSH_AUDIT_EVENTS */
1629 1655
1630void 1656void
1631monitor_clear_keystate(struct monitor *pmonitor) 1657monitor_clear_keystate(struct ssh *ssh, struct monitor *pmonitor)
1632{ 1658{
1633 struct ssh *ssh = active_state; /* XXX */
1634
1635 ssh_clear_newkeys(ssh, MODE_IN); 1659 ssh_clear_newkeys(ssh, MODE_IN);
1636 ssh_clear_newkeys(ssh, MODE_OUT); 1660 ssh_clear_newkeys(ssh, MODE_OUT);
1637 sshbuf_free(child_state); 1661 sshbuf_free(child_state);
@@ -1639,9 +1663,8 @@ monitor_clear_keystate(struct monitor *pmonitor)
1639} 1663}
1640 1664
1641void 1665void
1642monitor_apply_keystate(struct monitor *pmonitor) 1666monitor_apply_keystate(struct ssh *ssh, struct monitor *pmonitor)
1643{ 1667{
1644 struct ssh *ssh = active_state; /* XXX */
1645 struct kex *kex; 1668 struct kex *kex;
1646 int r; 1669 int r;
1647 1670
@@ -1654,18 +1677,19 @@ monitor_apply_keystate(struct monitor *pmonitor)
1654 if ((kex = ssh->kex) != NULL) { 1677 if ((kex = ssh->kex) != NULL) {
1655 /* XXX set callbacks */ 1678 /* XXX set callbacks */
1656#ifdef WITH_OPENSSL 1679#ifdef WITH_OPENSSL
1657 kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; 1680 kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server;
1658 kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; 1681 kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server;
1659 kex->kex[KEX_DH_GRP14_SHA256] = kexdh_server; 1682 kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server;
1660 kex->kex[KEX_DH_GRP16_SHA512] = kexdh_server; 1683 kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server;
1661 kex->kex[KEX_DH_GRP18_SHA512] = kexdh_server; 1684 kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
1662 kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; 1685 kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
1663 kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; 1686 kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
1664# ifdef OPENSSL_HAS_ECC 1687# ifdef OPENSSL_HAS_ECC
1665 kex->kex[KEX_ECDH_SHA2] = kexecdh_server; 1688 kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
1666# endif 1689# endif
1667#endif /* WITH_OPENSSL */ 1690#endif /* WITH_OPENSSL */
1668 kex->kex[KEX_C25519_SHA256] = kexc25519_server; 1691 kex->kex[KEX_C25519_SHA256] = kex_gen_server;
1692 kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_server;
1669 kex->load_host_public_key=&get_hostkey_public_by_type; 1693 kex->load_host_public_key=&get_hostkey_public_by_type;
1670 kex->load_host_private_key=&get_hostkey_private_by_type; 1694 kex->load_host_private_key=&get_hostkey_private_by_type;
1671 kex->host_key_index=&get_hostkey_index; 1695 kex->host_key_index=&get_hostkey_index;
@@ -1676,7 +1700,7 @@ monitor_apply_keystate(struct monitor *pmonitor)
1676/* This function requries careful sanity checking */ 1700/* This function requries careful sanity checking */
1677 1701
1678void 1702void
1679mm_get_keystate(struct monitor *pmonitor) 1703mm_get_keystate(struct ssh *ssh, struct monitor *pmonitor)
1680{ 1704{
1681 debug3("%s: Waiting for new keys", __func__); 1705 debug3("%s: Waiting for new keys", __func__);
1682 1706
@@ -1748,7 +1772,7 @@ monitor_reinit(struct monitor *mon)
1748 1772
1749#ifdef GSSAPI 1773#ifdef GSSAPI
1750int 1774int
1751mm_answer_gss_setup_ctx(int sock, struct sshbuf *m) 1775mm_answer_gss_setup_ctx(struct ssh *ssh, int sock, struct sshbuf *m)
1752{ 1776{
1753 gss_OID_desc goid; 1777 gss_OID_desc goid;
1754 OM_uint32 major; 1778 OM_uint32 major;
@@ -1781,7 +1805,7 @@ mm_answer_gss_setup_ctx(int sock, struct sshbuf *m)
1781} 1805}
1782 1806
1783int 1807int
1784mm_answer_gss_accept_ctx(int sock, struct sshbuf *m) 1808mm_answer_gss_accept_ctx(struct ssh *ssh, int sock, struct sshbuf *m)
1785{ 1809{
1786 gss_buffer_desc in; 1810 gss_buffer_desc in;
1787 gss_buffer_desc out = GSS_C_EMPTY_BUFFER; 1811 gss_buffer_desc out = GSS_C_EMPTY_BUFFER;
@@ -1815,7 +1839,7 @@ mm_answer_gss_accept_ctx(int sock, struct sshbuf *m)
1815} 1839}
1816 1840
1817int 1841int
1818mm_answer_gss_checkmic(int sock, struct sshbuf *m) 1842mm_answer_gss_checkmic(struct ssh *ssh, int sock, struct sshbuf *m)
1819{ 1843{
1820 gss_buffer_desc gssbuf, mic; 1844 gss_buffer_desc gssbuf, mic;
1821 OM_uint32 ret; 1845 OM_uint32 ret;
@@ -1846,7 +1870,7 @@ mm_answer_gss_checkmic(int sock, struct sshbuf *m)
1846} 1870}
1847 1871
1848int 1872int
1849mm_answer_gss_userok(int sock, struct sshbuf *m) 1873mm_answer_gss_userok(struct ssh *ssh, int sock, struct sshbuf *m)
1850{ 1874{
1851 int r, authenticated; 1875 int r, authenticated;
1852 const char *displayname; 1876 const char *displayname;
diff --git a/monitor.h b/monitor.h
index 16047299f..683e5e071 100644
--- a/monitor.h
+++ b/monitor.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor.h,v 1.21 2018/07/09 21:53:45 markus Exp $ */ 1/* $OpenBSD: monitor.h,v 1.23 2019/01/19 21:43:56 djm Exp $ */
2 2
3/* 3/*
4 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 4 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
@@ -65,6 +65,8 @@ enum monitor_reqtype {
65 65
66}; 66};
67 67
68struct ssh;
69
68struct monitor { 70struct monitor {
69 int m_recvfd; 71 int m_recvfd;
70 int m_sendfd; 72 int m_sendfd;
@@ -78,15 +80,16 @@ struct monitor *monitor_init(void);
78void monitor_reinit(struct monitor *); 80void monitor_reinit(struct monitor *);
79 81
80struct Authctxt; 82struct Authctxt;
81void monitor_child_preauth(struct Authctxt *, struct monitor *); 83void monitor_child_preauth(struct ssh *, struct monitor *);
82void monitor_child_postauth(struct monitor *); 84void monitor_child_postauth(struct ssh *, struct monitor *);
83 85
84struct mon_table; 86void monitor_clear_keystate(struct ssh *, struct monitor *);
85int monitor_read(struct monitor*, struct mon_table *, struct mon_table **); 87void monitor_apply_keystate(struct ssh *, struct monitor *);
86 88
87/* Prototypes for request sending and receiving */ 89/* Prototypes for request sending and receiving */
88void mm_request_send(int, enum monitor_reqtype, struct sshbuf *); 90void mm_request_send(int, enum monitor_reqtype, struct sshbuf *);
89void mm_request_receive(int, struct sshbuf *); 91void mm_request_receive(int, struct sshbuf *);
90void mm_request_receive_expect(int, enum monitor_reqtype, struct sshbuf *); 92void mm_request_receive_expect(int, enum monitor_reqtype, struct sshbuf *);
93void mm_get_keystate(struct ssh *, struct monitor *);
91 94
92#endif /* _MONITOR_H_ */ 95#endif /* _MONITOR_H_ */
diff --git a/monitor_wrap.c b/monitor_wrap.c
index 732fb3476..186e8f022 100644
--- a/monitor_wrap.c
+++ b/monitor_wrap.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.c,v 1.107 2018/07/20 03:46:34 djm Exp $ */ 1/* $OpenBSD: monitor_wrap.c,v 1.112 2019/01/21 09:54:11 djm Exp $ */
2/* 2/*
3 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 3 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
4 * Copyright 2002 Markus Friedl <markus@openbsd.org> 4 * Copyright 2002 Markus Friedl <markus@openbsd.org>
@@ -202,12 +202,8 @@ mm_choose_dh(int min, int nbits, int max)
202 if (success == 0) 202 if (success == 0)
203 fatal("%s: MONITOR_ANS_MODULI failed", __func__); 203 fatal("%s: MONITOR_ANS_MODULI failed", __func__);
204 204
205 if ((p = BN_new()) == NULL) 205 if ((r = sshbuf_get_bignum2(m, &p)) != 0 ||
206 fatal("%s: BN_new failed", __func__); 206 (r = sshbuf_get_bignum2(m, &g)) != 0)
207 if ((g = BN_new()) == NULL)
208 fatal("%s: BN_new failed", __func__);
209 if ((r = sshbuf_get_bignum2(m, p)) != 0 ||
210 (r = sshbuf_get_bignum2(m, g)) != 0)
211 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 207 fatal("%s: buffer error: %s", __func__, ssh_err(r));
212 208
213 debug3("%s: remaining %zu", __func__, sshbuf_len(m)); 209 debug3("%s: remaining %zu", __func__, sshbuf_len(m));
@@ -218,12 +214,12 @@ mm_choose_dh(int min, int nbits, int max)
218#endif 214#endif
219 215
220int 216int
221mm_sshkey_sign(struct sshkey *key, u_char **sigp, size_t *lenp, 217mm_sshkey_sign(struct ssh *ssh, struct sshkey *key, u_char **sigp, size_t *lenp,
222 const u_char *data, size_t datalen, const char *hostkey_alg, u_int compat) 218 const u_char *data, size_t datalen, const char *hostkey_alg, u_int compat)
223{ 219{
224 struct kex *kex = *pmonitor->m_pkex; 220 struct kex *kex = *pmonitor->m_pkex;
225 struct sshbuf *m; 221 struct sshbuf *m;
226 u_int ndx = kex->host_key_index(key, 0, active_state); 222 u_int ndx = kex->host_key_index(key, 0, ssh);
227 int r; 223 int r;
228 224
229 debug3("%s entering", __func__); 225 debug3("%s entering", __func__);
@@ -248,9 +244,8 @@ mm_sshkey_sign(struct sshkey *key, u_char **sigp, size_t *lenp,
248} 244}
249 245
250struct passwd * 246struct passwd *
251mm_getpwnamallow(const char *username) 247mm_getpwnamallow(struct ssh *ssh, const char *username)
252{ 248{
253 struct ssh *ssh = active_state; /* XXX */
254 struct sshbuf *m; 249 struct sshbuf *m;
255 struct passwd *pw; 250 struct passwd *pw;
256 size_t len; 251 size_t len;
@@ -438,8 +433,8 @@ mm_user_key_allowed(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
438} 433}
439 434
440int 435int
441mm_hostbased_key_allowed(struct passwd *pw, const char *user, const char *host, 436mm_hostbased_key_allowed(struct ssh *ssh, struct passwd *pw,
442 struct sshkey *key) 437 const char *user, const char *host, struct sshkey *key)
443{ 438{
444 return (mm_key_allowed(MM_HOSTKEY, user, host, key, 0, NULL)); 439 return (mm_key_allowed(MM_HOSTKEY, user, host, key, 0, NULL));
445} 440}
@@ -532,9 +527,8 @@ mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen,
532} 527}
533 528
534void 529void
535mm_send_keystate(struct monitor *monitor) 530mm_send_keystate(struct ssh *ssh, struct monitor *monitor)
536{ 531{
537 struct ssh *ssh = active_state; /* XXX */
538 struct sshbuf *m; 532 struct sshbuf *m;
539 int r; 533 int r;
540 534
@@ -628,7 +622,7 @@ mm_session_pty_cleanup2(Session *s)
628 622
629#ifdef USE_PAM 623#ifdef USE_PAM
630void 624void
631mm_start_pam(Authctxt *authctxt) 625mm_start_pam(struct ssh *ssh)
632{ 626{
633 struct sshbuf *m; 627 struct sshbuf *m;
634 628
@@ -869,7 +863,7 @@ mm_bsdauth_respond(void *ctx, u_int numresponses, char **responses)
869 863
870#ifdef SSH_AUDIT_EVENTS 864#ifdef SSH_AUDIT_EVENTS
871void 865void
872mm_audit_event(ssh_audit_event_t event) 866mm_audit_event(struct ssh *ssh, ssh_audit_event_t event)
873{ 867{
874 struct sshbuf *m; 868 struct sshbuf *m;
875 int r; 869 int r;
diff --git a/monitor_wrap.h b/monitor_wrap.h
index 644da081d..fdebb3aa4 100644
--- a/monitor_wrap.h
+++ b/monitor_wrap.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.h,v 1.38 2018/07/11 18:53:29 markus Exp $ */ 1/* $OpenBSD: monitor_wrap.h,v 1.41 2019/01/19 21:43:56 djm Exp $ */
2 2
3/* 3/*
4 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 4 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
@@ -33,6 +33,7 @@ extern int use_privsep;
33 33
34enum mm_keytype { MM_NOKEY, MM_HOSTKEY, MM_USERKEY }; 34enum mm_keytype { MM_NOKEY, MM_HOSTKEY, MM_USERKEY };
35 35
36struct ssh;
36struct monitor; 37struct monitor;
37struct Authctxt; 38struct Authctxt;
38struct sshkey; 39struct sshkey;
@@ -41,17 +42,17 @@ struct sshauthopt;
41void mm_log_handler(LogLevel, const char *, void *); 42void mm_log_handler(LogLevel, const char *, void *);
42int mm_is_monitor(void); 43int mm_is_monitor(void);
43DH *mm_choose_dh(int, int, int); 44DH *mm_choose_dh(int, int, int);
44int mm_sshkey_sign(struct sshkey *, u_char **, size_t *, const u_char *, size_t, 45int mm_sshkey_sign(struct ssh *, struct sshkey *, u_char **, size_t *,
45 const char *, u_int compat); 46 const u_char *, size_t, const char *, u_int compat);
46void mm_inform_authserv(char *, char *); 47void mm_inform_authserv(char *, char *);
47struct passwd *mm_getpwnamallow(const char *); 48struct passwd *mm_getpwnamallow(struct ssh *, const char *);
48char *mm_auth2_read_banner(void); 49char *mm_auth2_read_banner(void);
49int mm_auth_password(struct ssh *, char *); 50int mm_auth_password(struct ssh *, char *);
50int mm_key_allowed(enum mm_keytype, const char *, const char *, struct sshkey *, 51int mm_key_allowed(enum mm_keytype, const char *, const char *, struct sshkey *,
51 int, struct sshauthopt **); 52 int, struct sshauthopt **);
52int mm_user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int, 53int mm_user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
53 struct sshauthopt **); 54 struct sshauthopt **);
54int mm_hostbased_key_allowed(struct passwd *, const char *, 55int mm_hostbased_key_allowed(struct ssh *, struct passwd *, const char *,
55 const char *, struct sshkey *); 56 const char *, struct sshkey *);
56int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t, 57int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t,
57 const u_char *, size_t, const char *, u_int); 58 const u_char *, size_t, const char *, u_int);
@@ -65,7 +66,7 @@ OM_uint32 mm_ssh_gssapi_checkmic(Gssctxt *, gss_buffer_t, gss_buffer_t);
65#endif 66#endif
66 67
67#ifdef USE_PAM 68#ifdef USE_PAM
68void mm_start_pam(struct Authctxt *); 69void mm_start_pam(struct ssh *ssh);
69u_int mm_do_pam_account(void); 70u_int mm_do_pam_account(void);
70void *mm_sshpam_init_ctx(struct Authctxt *); 71void *mm_sshpam_init_ctx(struct Authctxt *);
71int mm_sshpam_query(void *, char **, char **, u_int *, char ***, u_int **); 72int mm_sshpam_query(void *, char **, char **, u_int *, char ***, u_int **);
@@ -75,7 +76,7 @@ void mm_sshpam_free_ctx(void *);
75 76
76#ifdef SSH_AUDIT_EVENTS 77#ifdef SSH_AUDIT_EVENTS
77#include "audit.h" 78#include "audit.h"
78void mm_audit_event(ssh_audit_event_t); 79void mm_audit_event(struct ssh *, ssh_audit_event_t);
79void mm_audit_run_command(const char *); 80void mm_audit_run_command(const char *);
80#endif 81#endif
81 82
@@ -88,10 +89,7 @@ void mm_session_pty_cleanup2(struct Session *);
88struct newkeys *mm_newkeys_from_blob(u_char *, int); 89struct newkeys *mm_newkeys_from_blob(u_char *, int);
89int mm_newkeys_to_blob(int, u_char **, u_int *); 90int mm_newkeys_to_blob(int, u_char **, u_int *);
90 91
91void monitor_clear_keystate(struct monitor *); 92void mm_send_keystate(struct ssh *, struct monitor*);
92void monitor_apply_keystate(struct monitor *);
93void mm_get_keystate(struct monitor *);
94void mm_send_keystate(struct monitor*);
95 93
96/* bsdauth */ 94/* bsdauth */
97int mm_bsdauth_query(void *, char **, char **, u_int *, char ***, u_int **); 95int mm_bsdauth_query(void *, char **, char **, u_int *, char ***, u_int **);
diff --git a/mux.c b/mux.c
index 8e4b60827..e89db193d 100644
--- a/mux.c
+++ b/mux.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: mux.c,v 1.77 2018/09/26 07:32:44 djm Exp $ */ 1/* $OpenBSD: mux.c,v 1.79 2019/01/19 21:35:25 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2002-2008 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -610,6 +610,7 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt)
610 struct Forward *rfwd; 610 struct Forward *rfwd;
611 Channel *c; 611 Channel *c;
612 struct sshbuf *out; 612 struct sshbuf *out;
613 u_int port;
613 int r; 614 int r;
614 615
615 if ((c = channel_by_id(ssh, fctx->cid)) == NULL) { 616 if ((c = channel_by_id(ssh, fctx->cid)) == NULL) {
@@ -632,7 +633,15 @@ mux_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt)
632 rfwd->connect_host, rfwd->connect_port); 633 rfwd->connect_host, rfwd->connect_port);
633 if (type == SSH2_MSG_REQUEST_SUCCESS) { 634 if (type == SSH2_MSG_REQUEST_SUCCESS) {
634 if (rfwd->listen_port == 0) { 635 if (rfwd->listen_port == 0) {
635 rfwd->allocated_port = packet_get_int(); 636 if ((r = sshpkt_get_u32(ssh, &port)) != 0)
637 fatal("%s: packet error: %s",
638 __func__, ssh_err(r));
639 if (port > 65535) {
640 fatal("Invalid allocated port %u for "
641 "mux remote forward to %s:%d", port,
642 rfwd->connect_host, rfwd->connect_port);
643 }
644 rfwd->allocated_port = (int)port;
636 debug("Allocated port %u for mux remote forward" 645 debug("Allocated port %u for mux remote forward"
637 " to %s:%d", rfwd->allocated_port, 646 " to %s:%d", rfwd->allocated_port,
638 rfwd->connect_host, rfwd->connect_port); 647 rfwd->connect_host, rfwd->connect_port);
@@ -1406,7 +1415,8 @@ mux_session_confirm(struct ssh *ssh, int id, int success, void *arg)
1406 if (cctx->want_agent_fwd && options.forward_agent) { 1415 if (cctx->want_agent_fwd && options.forward_agent) {
1407 debug("Requesting authentication agent forwarding."); 1416 debug("Requesting authentication agent forwarding.");
1408 channel_request_start(ssh, id, "auth-agent-req@openssh.com", 0); 1417 channel_request_start(ssh, id, "auth-agent-req@openssh.com", 0);
1409 packet_send(); 1418 if ((r = sshpkt_send(ssh)) != 0)
1419 fatal("%s: packet error: %s", __func__, ssh_err(r));
1410 } 1420 }
1411 1421
1412 client_session2_setup(ssh, id, cctx->want_tty, cctx->want_subsys, 1422 client_session2_setup(ssh, id, cctx->want_tty, cctx->want_subsys,
diff --git a/myproposal.h b/myproposal.h
index 27b4a15a1..f16729876 100644
--- a/myproposal.h
+++ b/myproposal.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: myproposal.h,v 1.57 2018/09/12 01:34:02 djm Exp $ */ 1/* $OpenBSD: myproposal.h,v 1.58 2019/02/23 08:20:43 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -90,20 +90,15 @@
90# else 90# else
91# define KEX_CURVE25519_METHODS "" 91# define KEX_CURVE25519_METHODS ""
92# endif 92# endif
93#define KEX_COMMON_KEX \ 93#define KEX_SERVER_KEX \
94 KEX_CURVE25519_METHODS \ 94 KEX_CURVE25519_METHODS \
95 KEX_ECDH_METHODS \ 95 KEX_ECDH_METHODS \
96 KEX_SHA2_METHODS 96 KEX_SHA2_METHODS \
97
98#define KEX_SERVER_KEX KEX_COMMON_KEX \
99 KEX_SHA2_GROUP14 \
100 "diffie-hellman-group14-sha1" \
101
102#define KEX_CLIENT_KEX KEX_COMMON_KEX \
103 "diffie-hellman-group-exchange-sha1," \
104 KEX_SHA2_GROUP14 \ 97 KEX_SHA2_GROUP14 \
105 "diffie-hellman-group14-sha1" 98 "diffie-hellman-group14-sha1"
106 99
100#define KEX_CLIENT_KEX KEX_SERVER_KEX
101
107#define KEX_DEFAULT_PK_ALG \ 102#define KEX_DEFAULT_PK_ALG \
108 HOSTKEY_ECDSA_CERT_METHODS \ 103 HOSTKEY_ECDSA_CERT_METHODS \
109 "ssh-ed25519-cert-v01@openssh.com," \ 104 "ssh-ed25519-cert-v01@openssh.com," \
diff --git a/opacket.c b/opacket.c
deleted file mode 100644
index e637d7a71..000000000
--- a/opacket.c
+++ /dev/null
@@ -1,320 +0,0 @@
1/* $OpenBSD: opacket.c,v 1.7 2017/10/20 01:56:39 djm Exp $ */
2/* Written by Markus Friedl. Placed in the public domain. */
3
4#include "includes.h"
5
6#include <stdarg.h>
7
8#include "ssherr.h"
9#include "packet.h"
10#include "log.h"
11
12struct ssh *active_state, *backup_state;
13
14/* Map old to new API */
15
16void
17ssh_packet_start(struct ssh *ssh, u_char type)
18{
19 int r;
20
21 if ((r = sshpkt_start(ssh, type)) != 0)
22 fatal("%s: %s", __func__, ssh_err(r));
23}
24
25void
26ssh_packet_put_char(struct ssh *ssh, int value)
27{
28 u_char ch = value;
29 int r;
30
31 if ((r = sshpkt_put_u8(ssh, ch)) != 0)
32 fatal("%s: %s", __func__, ssh_err(r));
33}
34
35void
36ssh_packet_put_int(struct ssh *ssh, u_int value)
37{
38 int r;
39
40 if ((r = sshpkt_put_u32(ssh, value)) != 0)
41 fatal("%s: %s", __func__, ssh_err(r));
42}
43
44void
45ssh_packet_put_int64(struct ssh *ssh, u_int64_t value)
46{
47 int r;
48
49 if ((r = sshpkt_put_u64(ssh, value)) != 0)
50 fatal("%s: %s", __func__, ssh_err(r));
51}
52
53void
54ssh_packet_put_string(struct ssh *ssh, const void *buf, u_int len)
55{
56 int r;
57
58 if ((r = sshpkt_put_string(ssh, buf, len)) != 0)
59 fatal("%s: %s", __func__, ssh_err(r));
60}
61
62void
63ssh_packet_put_cstring(struct ssh *ssh, const char *str)
64{
65 int r;
66
67 if ((r = sshpkt_put_cstring(ssh, str)) != 0)
68 fatal("%s: %s", __func__, ssh_err(r));
69}
70
71void
72ssh_packet_put_raw(struct ssh *ssh, const void *buf, u_int len)
73{
74 int r;
75
76 if ((r = sshpkt_put(ssh, buf, len)) != 0)
77 fatal("%s: %s", __func__, ssh_err(r));
78}
79
80
81#ifdef WITH_OPENSSL
82void
83ssh_packet_put_bignum2(struct ssh *ssh, BIGNUM * value)
84{
85 int r;
86
87 if ((r = sshpkt_put_bignum2(ssh, value)) != 0)
88 fatal("%s: %s", __func__, ssh_err(r));
89}
90
91# ifdef OPENSSL_HAS_ECC
92void
93ssh_packet_put_ecpoint(struct ssh *ssh, const EC_GROUP *curve,
94 const EC_POINT *point)
95{
96 int r;
97
98 if ((r = sshpkt_put_ec(ssh, point, curve)) != 0)
99 fatal("%s: %s", __func__, ssh_err(r));
100}
101# endif
102#endif /* WITH_OPENSSL */
103
104void
105ssh_packet_send(struct ssh *ssh)
106{
107 int r;
108
109 if ((r = sshpkt_send(ssh)) != 0)
110 fatal("%s: %s", __func__, ssh_err(r));
111}
112
113u_int
114ssh_packet_get_char(struct ssh *ssh)
115{
116 u_char ch;
117 int r;
118
119 if ((r = sshpkt_get_u8(ssh, &ch)) != 0)
120 fatal("%s: %s", __func__, ssh_err(r));
121 return ch;
122}
123
124u_int
125ssh_packet_get_int(struct ssh *ssh)
126{
127 u_int val;
128 int r;
129
130 if ((r = sshpkt_get_u32(ssh, &val)) != 0)
131 fatal("%s: %s", __func__, ssh_err(r));
132 return val;
133}
134
135u_int64_t
136ssh_packet_get_int64(struct ssh *ssh)
137{
138 u_int64_t val;
139 int r;
140
141 if ((r = sshpkt_get_u64(ssh, &val)) != 0)
142 fatal("%s: %s", __func__, ssh_err(r));
143 return val;
144}
145
146
147#ifdef WITH_OPENSSL
148void
149ssh_packet_get_bignum2(struct ssh *ssh, BIGNUM * value)
150{
151 int r;
152
153 if ((r = sshpkt_get_bignum2(ssh, value)) != 0)
154 fatal("%s: %s", __func__, ssh_err(r));
155}
156
157# ifdef OPENSSL_HAS_ECC
158void
159ssh_packet_get_ecpoint(struct ssh *ssh, const EC_GROUP *curve, EC_POINT *point)
160{
161 int r;
162
163 if ((r = sshpkt_get_ec(ssh, point, curve)) != 0)
164 fatal("%s: %s", __func__, ssh_err(r));
165}
166# endif
167#endif /* WITH_OPENSSL */
168
169void *
170ssh_packet_get_string(struct ssh *ssh, u_int *length_ptr)
171{
172 int r;
173 size_t len;
174 u_char *val;
175
176 if ((r = sshpkt_get_string(ssh, &val, &len)) != 0)
177 fatal("%s: %s", __func__, ssh_err(r));
178 if (length_ptr != NULL)
179 *length_ptr = (u_int)len;
180 return val;
181}
182
183const void *
184ssh_packet_get_string_ptr(struct ssh *ssh, u_int *length_ptr)
185{
186 int r;
187 size_t len;
188 const u_char *val;
189
190 if ((r = sshpkt_get_string_direct(ssh, &val, &len)) != 0)
191 fatal("%s: %s", __func__, ssh_err(r));
192 if (length_ptr != NULL)
193 *length_ptr = (u_int)len;
194 return val;
195}
196
197char *
198ssh_packet_get_cstring(struct ssh *ssh, u_int *length_ptr)
199{
200 int r;
201 size_t len;
202 char *val;
203
204 if ((r = sshpkt_get_cstring(ssh, &val, &len)) != 0)
205 fatal("%s: %s", __func__, ssh_err(r));
206 if (length_ptr != NULL)
207 *length_ptr = (u_int)len;
208 return val;
209}
210
211/* Old API, that had to be reimplemented */
212
213void
214packet_set_connection(int fd_in, int fd_out)
215{
216 active_state = ssh_packet_set_connection(active_state, fd_in, fd_out);
217 if (active_state == NULL)
218 fatal("%s: ssh_packet_set_connection failed", __func__);
219}
220
221u_int
222packet_get_char(void)
223{
224 return (ssh_packet_get_char(active_state));
225}
226
227u_int
228packet_get_int(void)
229{
230 return (ssh_packet_get_int(active_state));
231}
232
233int
234packet_read_seqnr(u_int32_t *seqnr)
235{
236 u_char type;
237 int r;
238
239 if ((r = ssh_packet_read_seqnr(active_state, &type, seqnr)) != 0)
240 sshpkt_fatal(active_state, __func__, r);
241 return type;
242}
243
244int
245packet_read_poll_seqnr(u_int32_t *seqnr)
246{
247 u_char type;
248 int r;
249
250 if ((r = ssh_packet_read_poll_seqnr(active_state, &type, seqnr)))
251 sshpkt_fatal(active_state, __func__, r);
252 return type;
253}
254
255void
256packet_close(void)
257{
258 ssh_packet_close(active_state);
259 active_state = NULL;
260}
261
262void
263packet_process_incoming(const char *buf, u_int len)
264{
265 int r;
266
267 if ((r = ssh_packet_process_incoming(active_state, buf, len)) != 0)
268 sshpkt_fatal(active_state, __func__, r);
269}
270
271void
272packet_write_wait(void)
273{
274 int r;
275
276 if ((r = ssh_packet_write_wait(active_state)) != 0)
277 sshpkt_fatal(active_state, __func__, r);
278}
279
280void
281packet_write_poll(void)
282{
283 int r;
284
285 if ((r = ssh_packet_write_poll(active_state)) != 0)
286 sshpkt_fatal(active_state, __func__, r);
287}
288
289void
290packet_read_expect(int expected_type)
291{
292 int r;
293
294 if ((r = ssh_packet_read_expect(active_state, expected_type)) != 0)
295 sshpkt_fatal(active_state, __func__, r);
296}
297
298void
299packet_disconnect(const char *fmt, ...)
300{
301 char buf[1024];
302 va_list args;
303
304 va_start(args, fmt);
305 vsnprintf(buf, sizeof(buf), fmt, args);
306 va_end(args);
307 ssh_packet_disconnect(active_state, "%s", buf);
308}
309
310void
311packet_send_debug(const char *fmt, ...)
312{
313 char buf[1024];
314 va_list args;
315
316 va_start(args, fmt);
317 vsnprintf(buf, sizeof(buf), fmt, args);
318 va_end(args);
319 ssh_packet_send_debug(active_state, "%s", buf);
320}
diff --git a/opacket.h b/opacket.h
deleted file mode 100644
index f92fe586e..000000000
--- a/opacket.h
+++ /dev/null
@@ -1,154 +0,0 @@
1/* $OpenBSD: opacket.h,v 1.13 2018/07/06 09:03:02 sf Exp $ */
2#ifndef _OPACKET_H
3/* Written by Markus Friedl. Placed in the public domain. */
4
5/* Map old to new API */
6void ssh_packet_start(struct ssh *, u_char);
7void ssh_packet_put_char(struct ssh *, int ch);
8void ssh_packet_put_int(struct ssh *, u_int value);
9void ssh_packet_put_int64(struct ssh *, u_int64_t value);
10void ssh_packet_put_bignum2(struct ssh *, BIGNUM * value);
11void ssh_packet_put_ecpoint(struct ssh *, const EC_GROUP *, const EC_POINT *);
12void ssh_packet_put_string(struct ssh *, const void *buf, u_int len);
13void ssh_packet_put_cstring(struct ssh *, const char *str);
14void ssh_packet_put_raw(struct ssh *, const void *buf, u_int len);
15void ssh_packet_send(struct ssh *);
16
17u_int ssh_packet_get_char(struct ssh *);
18u_int ssh_packet_get_int(struct ssh *);
19u_int64_t ssh_packet_get_int64(struct ssh *);
20void ssh_packet_get_bignum2(struct ssh *, BIGNUM * value);
21void ssh_packet_get_ecpoint(struct ssh *, const EC_GROUP *, EC_POINT *);
22void *ssh_packet_get_string(struct ssh *, u_int *length_ptr);
23char *ssh_packet_get_cstring(struct ssh *, u_int *length_ptr);
24
25/* don't allow remaining bytes after the end of the message */
26#define ssh_packet_check_eom(ssh) \
27do { \
28 int _len = ssh_packet_remaining(ssh); \
29 if (_len > 0) { \
30 logit("Packet integrity error (%d bytes remaining) at %s:%d", \
31 _len ,__FILE__, __LINE__); \
32 ssh_packet_disconnect(ssh, \
33 "Packet integrity error."); \
34 } \
35} while (0)
36
37/* old API */
38void packet_close(void);
39u_int packet_get_char(void);
40u_int packet_get_int(void);
41void packet_set_connection(int, int);
42int packet_read_seqnr(u_int32_t *);
43int packet_read_poll_seqnr(u_int32_t *);
44void packet_process_incoming(const char *buf, u_int len);
45void packet_write_wait(void);
46void packet_write_poll(void);
47void packet_read_expect(int expected_type);
48#define packet_set_timeout(timeout, count) \
49 ssh_packet_set_timeout(active_state, (timeout), (count))
50#define packet_connection_is_on_socket() \
51 ssh_packet_connection_is_on_socket(active_state)
52#define packet_set_nonblocking() \
53 ssh_packet_set_nonblocking(active_state)
54#define packet_get_connection_in() \
55 ssh_packet_get_connection_in(active_state)
56#define packet_get_connection_out() \
57 ssh_packet_get_connection_out(active_state)
58#define packet_set_protocol_flags(protocol_flags) \
59 ssh_packet_set_protocol_flags(active_state, (protocol_flags))
60#define packet_get_protocol_flags() \
61 ssh_packet_get_protocol_flags(active_state)
62#define packet_start(type) \
63 ssh_packet_start(active_state, (type))
64#define packet_put_char(value) \
65 ssh_packet_put_char(active_state, (value))
66#define packet_put_int(value) \
67 ssh_packet_put_int(active_state, (value))
68#define packet_put_int64(value) \
69 ssh_packet_put_int64(active_state, (value))
70#define packet_put_string( buf, len) \
71 ssh_packet_put_string(active_state, (buf), (len))
72#define packet_put_cstring(str) \
73 ssh_packet_put_cstring(active_state, (str))
74#define packet_put_raw(buf, len) \
75 ssh_packet_put_raw(active_state, (buf), (len))
76#define packet_put_bignum2(value) \
77 ssh_packet_put_bignum2(active_state, (value))
78#define packet_send() \
79 ssh_packet_send(active_state)
80#define packet_read() \
81 ssh_packet_read(active_state)
82#define packet_get_int64() \
83 ssh_packet_get_int64(active_state)
84#define packet_get_bignum2(value) \
85 ssh_packet_get_bignum2(active_state, (value))
86#define packet_remaining() \
87 ssh_packet_remaining(active_state)
88#define packet_get_string(length_ptr) \
89 ssh_packet_get_string(active_state, (length_ptr))
90#define packet_get_string_ptr(length_ptr) \
91 ssh_packet_get_string_ptr(active_state, (length_ptr))
92#define packet_get_cstring(length_ptr) \
93 ssh_packet_get_cstring(active_state, (length_ptr))
94void packet_send_debug(const char *, ...)
95 __attribute__((format(printf, 1, 2)));
96void packet_disconnect(const char *, ...)
97 __attribute__((format(printf, 1, 2)))
98 __attribute__((noreturn));
99#define packet_have_data_to_write() \
100 ssh_packet_have_data_to_write(active_state)
101#define packet_not_very_much_data_to_write() \
102 ssh_packet_not_very_much_data_to_write(active_state)
103#define packet_set_interactive(interactive, qos_interactive, qos_bulk) \
104 ssh_packet_set_interactive(active_state, (interactive), (qos_interactive), (qos_bulk))
105#define packet_is_interactive() \
106 ssh_packet_is_interactive(active_state)
107#define packet_set_maxsize(s) \
108 ssh_packet_set_maxsize(active_state, (s))
109#define packet_inc_alive_timeouts() \
110 ssh_packet_inc_alive_timeouts(active_state)
111#define packet_set_alive_timeouts(ka) \
112 ssh_packet_set_alive_timeouts(active_state, (ka))
113#define packet_get_maxsize() \
114 ssh_packet_get_maxsize(active_state)
115#define packet_add_padding(pad) \
116 sshpkt_add_padding(active_state, (pad))
117#define packet_send_ignore(nbytes) \
118 ssh_packet_send_ignore(active_state, (nbytes))
119#define packet_set_server() \
120 ssh_packet_set_server(active_state)
121#define packet_set_authenticated() \
122 ssh_packet_set_authenticated(active_state)
123#define packet_get_input() \
124 ssh_packet_get_input(active_state)
125#define packet_get_output() \
126 ssh_packet_get_output(active_state)
127#define packet_check_eom() \
128 ssh_packet_check_eom(active_state)
129#define set_newkeys(mode) \
130 ssh_set_newkeys(active_state, (mode))
131#define packet_get_state(m) \
132 ssh_packet_get_state(active_state, m)
133#define packet_set_state(m) \
134 ssh_packet_set_state(active_state, m)
135#define packet_get_raw(lenp) \
136 sshpkt_ptr(active_state, lenp)
137#define packet_get_ecpoint(c,p) \
138 ssh_packet_get_ecpoint(active_state, c, p)
139#define packet_put_ecpoint(c,p) \
140 ssh_packet_put_ecpoint(active_state, c, p)
141#define packet_get_rekey_timeout() \
142 ssh_packet_get_rekey_timeout(active_state)
143#define packet_set_rekey_limits(x,y) \
144 ssh_packet_set_rekey_limits(active_state, x, y)
145#define packet_get_bytes(x,y) \
146 ssh_packet_get_bytes(active_state, x, y)
147#define packet_set_mux() \
148 ssh_packet_set_mux(active_state)
149#define packet_get_mux() \
150 ssh_packet_get_mux(active_state)
151#define packet_clear_keys() \
152 ssh_packet_clear_keys(active_state)
153
154#endif /* _OPACKET_H */
diff --git a/openbsd-compat/bsd-cygwin_util.c b/openbsd-compat/bsd-cygwin_util.c
index fb49e30f5..54628e260 100644
--- a/openbsd-compat/bsd-cygwin_util.c
+++ b/openbsd-compat/bsd-cygwin_util.c
@@ -37,6 +37,9 @@
37#include <string.h> 37#include <string.h>
38#include <unistd.h> 38#include <unistd.h>
39#include <stdarg.h> 39#include <stdarg.h>
40#include <stdlib.h>
41#include <wchar.h>
42#include <wctype.h>
40 43
41#include "xmalloc.h" 44#include "xmalloc.h"
42 45
@@ -117,4 +120,150 @@ free_windows_environment(char **p)
117 free(p); 120 free(p);
118} 121}
119 122
123/*
124 * Returns true if the given string matches the pattern (which may contain ?
125 * and * as wildcards), and zero if it does not match.
126 *
127 * The Cygwin version of this function must be case-insensitive and take
128 * Unicode characters into account.
129 */
130
131static int
132__match_pattern (const wchar_t *s, const wchar_t *pattern)
133{
134 for (;;) {
135 /* If at end of pattern, accept if also at end of string. */
136 if (!*pattern)
137 return !*s;
138
139 if (*pattern == '*') {
140 /* Skip the asterisk. */
141 pattern++;
142
143 /* If at end of pattern, accept immediately. */
144 if (!*pattern)
145 return 1;
146
147 /* If next character in pattern is known, optimize. */
148 if (*pattern != '?' && *pattern != '*') {
149 /*
150 * Look instances of the next character in
151 * pattern, and try to match starting from
152 * those.
153 */
154 for (; *s; s++)
155 if (*s == *pattern &&
156 __match_pattern(s + 1, pattern + 1))
157 return 1;
158 /* Failed. */
159 return 0;
160 }
161 /*
162 * Move ahead one character at a time and try to
163 * match at each position.
164 */
165 for (; *s; s++)
166 if (__match_pattern(s, pattern))
167 return 1;
168 /* Failed. */
169 return 0;
170 }
171 /*
172 * There must be at least one more character in the string.
173 * If we are at the end, fail.
174 */
175 if (!*s)
176 return 0;
177
178 /* Check if the next character of the string is acceptable. */
179 if (*pattern != '?' && towlower(*pattern) != towlower(*s))
180 return 0;
181
182 /* Move to the next character, both in string and in pattern. */
183 s++;
184 pattern++;
185 }
186 /* NOTREACHED */
187}
188
189static int
190_match_pattern(const char *s, const char *pattern)
191{
192 wchar_t *ws;
193 wchar_t *wpattern;
194 size_t len;
195 int ret;
196
197 if ((len = mbstowcs(NULL, s, 0)) < 0)
198 return 0;
199 ws = (wchar_t *) xcalloc(len + 1, sizeof (wchar_t));
200 mbstowcs(ws, s, len + 1);
201 if ((len = mbstowcs(NULL, pattern, 0)) < 0)
202 return 0;
203 wpattern = (wchar_t *) xcalloc(len + 1, sizeof (wchar_t));
204 mbstowcs(wpattern, pattern, len + 1);
205 ret = __match_pattern (ws, wpattern);
206 free(ws);
207 free(wpattern);
208 return ret;
209}
210
211/*
212 * Tries to match the string against the
213 * comma-separated sequence of subpatterns (each possibly preceded by ! to
214 * indicate negation). Returns -1 if negation matches, 1 if there is
215 * a positive match, 0 if there is no match at all.
216 */
217int
218cygwin_ug_match_pattern_list(const char *string, const char *pattern)
219{
220 char sub[1024];
221 int negated;
222 int got_positive;
223 u_int i, subi, len = strlen(pattern);
224
225 got_positive = 0;
226 for (i = 0; i < len;) {
227 /* Check if the subpattern is negated. */
228 if (pattern[i] == '!') {
229 negated = 1;
230 i++;
231 } else
232 negated = 0;
233
234 /*
235 * Extract the subpattern up to a comma or end. Convert the
236 * subpattern to lowercase.
237 */
238 for (subi = 0;
239 i < len && subi < sizeof(sub) - 1 && pattern[i] != ',';
240 subi++, i++)
241 sub[subi] = pattern[i];
242 /* If subpattern too long, return failure (no match). */
243 if (subi >= sizeof(sub) - 1)
244 return 0;
245
246 /* If the subpattern was terminated by a comma, then skip it. */
247 if (i < len && pattern[i] == ',')
248 i++;
249
250 /* Null-terminate the subpattern. */
251 sub[subi] = '\0';
252
253 /* Try to match the subpattern against the string. */
254 if (_match_pattern(string, sub)) {
255 if (negated)
256 return -1; /* Negative */
257 else
258 got_positive = 1; /* Positive */
259 }
260 }
261
262 /*
263 * Return success if got a positive match. If there was a negative
264 * match, we have already returned -1 and never get here.
265 */
266 return got_positive;
267}
268
120#endif /* HAVE_CYGWIN */ 269#endif /* HAVE_CYGWIN */
diff --git a/openbsd-compat/bsd-cygwin_util.h b/openbsd-compat/bsd-cygwin_util.h
index 202c055db..55c5a5b81 100644
--- a/openbsd-compat/bsd-cygwin_util.h
+++ b/openbsd-compat/bsd-cygwin_util.h
@@ -55,6 +55,7 @@ int binary_open(const char *, int , ...);
55int check_ntsec(const char *); 55int check_ntsec(const char *);
56char **fetch_windows_environment(void); 56char **fetch_windows_environment(void);
57void free_windows_environment(char **); 57void free_windows_environment(char **);
58int cygwin_ug_match_pattern_list(const char *, const char *);
58 59
59#ifndef NO_BINARY_OPEN 60#ifndef NO_BINARY_OPEN
60#define open binary_open 61#define open binary_open
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c
index 5d7540a70..aa1c7d7a3 100644
--- a/openbsd-compat/bsd-misc.c
+++ b/openbsd-compat/bsd-misc.c
@@ -25,6 +25,7 @@
25# include <sys/time.h> 25# include <sys/time.h>
26#endif 26#endif
27 27
28#include <fcntl.h>
28#include <string.h> 29#include <string.h>
29#include <signal.h> 30#include <signal.h>
30#include <stdlib.h> 31#include <stdlib.h>
@@ -117,6 +118,106 @@ int utimes(char *filename, struct timeval *tvp)
117} 118}
118#endif 119#endif
119 120
121#ifndef HAVE_UTIMENSAT
122/*
123 * A limited implementation of utimensat() that only implements the
124 * functionality used by OpenSSH, currently only AT_FDCWD and
125 * AT_SYMLINK_NOFOLLOW.
126 */
127int
128utimensat(int fd, const char *path, const struct timespec times[2],
129 int flag)
130{
131 struct timeval tv[2];
132 int ret, oflags = O_WRONLY;
133
134 tv[0].tv_sec = times[0].tv_sec;
135 tv[0].tv_usec = times[0].tv_nsec / 1000;
136 tv[1].tv_sec = times[1].tv_sec;
137 tv[1].tv_usec = times[1].tv_nsec / 1000;
138
139 if (fd != AT_FDCWD) {
140 errno = ENOSYS;
141 return -1;
142 }
143# ifndef HAVE_FUTIMES
144 return utimes(path, tv);
145# else
146# ifdef O_NOFOLLOW
147 if (flag & AT_SYMLINK_NOFOLLOW)
148 oflags |= O_NOFOLLOW;
149# endif /* O_NOFOLLOW */
150 if ((fd = open(path, oflags)) == -1)
151 return -1;
152 ret = futimes(fd, tv);
153 close(fd);
154 return ret;
155# endif
156}
157#endif
158
159#ifndef HAVE_FCHOWNAT
160/*
161 * A limited implementation of fchownat() that only implements the
162 * functionality used by OpenSSH, currently only AT_FDCWD and
163 * AT_SYMLINK_NOFOLLOW.
164 */
165int
166fchownat(int fd, const char *path, uid_t owner, gid_t group, int flag)
167{
168 int ret, oflags = O_WRONLY;
169
170 if (fd != AT_FDCWD) {
171 errno = ENOSYS;
172 return -1;
173 }
174# ifndef HAVE_FCHOWN
175 return chown(pathname, owner, group);
176# else
177# ifdef O_NOFOLLOW
178 if (flag & AT_SYMLINK_NOFOLLOW)
179 oflags |= O_NOFOLLOW;
180# endif /* O_NOFOLLOW */
181 if ((fd = open(path, oflags)) == -1)
182 return -1;
183 ret = fchown(fd, owner, group);
184 close(fd);
185 return ret;
186# endif
187}
188#endif
189
190#ifndef HAVE_FCHMODAT
191/*
192 * A limited implementation of fchmodat() that only implements the
193 * functionality used by OpenSSH, currently only AT_FDCWD and
194 * AT_SYMLINK_NOFOLLOW.
195 */
196int
197fchmodat(int fd, const char *path, mode_t mode, int flag)
198{
199 int ret, oflags = O_WRONLY;
200
201 if (fd != AT_FDCWD) {
202 errno = ENOSYS;
203 return -1;
204 }
205# ifndef HAVE_FCHMOD
206 return chown(pathname, owner, group);
207# else
208# ifdef O_NOFOLLOW
209 if (flag & AT_SYMLINK_NOFOLLOW)
210 oflags |= O_NOFOLLOW;
211# endif /* O_NOFOLLOW */
212 if ((fd = open(path, oflags)) == -1)
213 return -1;
214 ret = fchmod(fd, mode);
215 close(fd);
216 return ret;
217# endif
218}
219#endif
220
120#ifndef HAVE_TRUNCATE 221#ifndef HAVE_TRUNCATE
121int truncate(const char *path, off_t length) 222int truncate(const char *path, off_t length)
122{ 223{
diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h
index 52ec52853..cb158cd5c 100644
--- a/openbsd-compat/bsd-misc.h
+++ b/openbsd-compat/bsd-misc.h
@@ -64,6 +64,26 @@ struct timeval {
64int utimes(char *, struct timeval *); 64int utimes(char *, struct timeval *);
65#endif /* HAVE_UTIMES */ 65#endif /* HAVE_UTIMES */
66 66
67#ifndef HAVE_UTIMENSAT
68/* start with the high bits and work down to minimise risk of overlap */
69# ifndef AT_SYMLINK_NOFOLLOW
70# define AT_SYMLINK_NOFOLLOW 0x80000000
71# endif
72int utimensat(int, const char *, const struct timespec[2], int);
73#endif
74
75#ifndef AT_FDCWD
76# define AT_FDCWD (-2)
77#endif
78
79#ifndef HAVE_FCHMODAT
80int fchmodat(int, const char *, mode_t, int);
81#endif
82
83#ifndef HAVE_FCHOWNAT
84int fchownat(int, const char *, uid_t, gid_t, int);
85#endif
86
67#ifndef HAVE_TRUNCATE 87#ifndef HAVE_TRUNCATE
68int truncate (const char *, off_t); 88int truncate (const char *, off_t);
69#endif /* HAVE_TRUNCATE */ 89#endif /* HAVE_TRUNCATE */
diff --git a/openbsd-compat/libressl-api-compat.c b/openbsd-compat/libressl-api-compat.c
index de3e64a63..ae00ff593 100644
--- a/openbsd-compat/libressl-api-compat.c
+++ b/openbsd-compat/libressl-api-compat.c
@@ -152,7 +152,9 @@
152#include <openssl/dsa.h> 152#include <openssl/dsa.h>
153#include <openssl/rsa.h> 153#include <openssl/rsa.h>
154#include <openssl/evp.h> 154#include <openssl/evp.h>
155#ifdef OPENSSL_HAS_ECC
155#include <openssl/ecdsa.h> 156#include <openssl/ecdsa.h>
157#endif
156#include <openssl/dh.h> 158#include <openssl/dh.h>
157 159
158#ifndef HAVE_DSA_GET0_PQG 160#ifndef HAVE_DSA_GET0_PQG
@@ -417,6 +419,7 @@ DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s)
417} 419}
418#endif /* HAVE_DSA_SIG_SET0 */ 420#endif /* HAVE_DSA_SIG_SET0 */
419 421
422#ifdef OPENSSL_HAS_ECC
420#ifndef HAVE_ECDSA_SIG_GET0 423#ifndef HAVE_ECDSA_SIG_GET0
421void 424void
422ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps) 425ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps)
@@ -442,6 +445,7 @@ ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s)
442 return 1; 445 return 1;
443} 446}
444#endif /* HAVE_ECDSA_SIG_SET0 */ 447#endif /* HAVE_ECDSA_SIG_SET0 */
448#endif /* OPENSSL_HAS_ECC */
445 449
446#ifndef HAVE_DH_GET0_PQG 450#ifndef HAVE_DH_GET0_PQG
447void 451void
diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h
index f5c833bf2..865aaee53 100644
--- a/openbsd-compat/openbsd-compat.h
+++ b/openbsd-compat/openbsd-compat.h
@@ -61,6 +61,7 @@ void closefrom(int);
61#endif 61#endif
62 62
63#ifndef HAVE_GETLINE 63#ifndef HAVE_GETLINE
64#include <stdio.h>
64ssize_t getline(char **, size_t *, FILE *); 65ssize_t getline(char **, size_t *, FILE *);
65#endif 66#endif
66 67
diff --git a/openbsd-compat/openssl-compat.c b/openbsd-compat/openssl-compat.c
index 8b4a36274..a37ca61bf 100644
--- a/openbsd-compat/openssl-compat.c
+++ b/openbsd-compat/openssl-compat.c
@@ -66,23 +66,31 @@ ssh_compatible_openssl(long headerver, long libver)
66 return 0; 66 return 0;
67} 67}
68 68
69#ifdef USE_OPENSSL_ENGINE
70void 69void
71ssh_OpenSSL_add_all_algorithms(void) 70ssh_libcrypto_init(void)
72{ 71{
72#if defined(HAVE_OPENSSL_INIT_CRYPTO) && \
73 defined(OPENSSL_INIT_ADD_ALL_CIPHERS) && \
74 defined(OPENSSL_INIT_ADD_ALL_DIGESTS)
75 OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS |
76 OPENSSL_INIT_ADD_ALL_DIGESTS, NULL);
77#elif defined(HAVE_OPENSSL_ADD_ALL_ALGORITHMS)
73 OpenSSL_add_all_algorithms(); 78 OpenSSL_add_all_algorithms();
79#endif
74 80
81#ifdef USE_OPENSSL_ENGINE
75 /* Enable use of crypto hardware */ 82 /* Enable use of crypto hardware */
76 ENGINE_load_builtin_engines(); 83 ENGINE_load_builtin_engines();
77 ENGINE_register_all_complete(); 84 ENGINE_register_all_complete();
78 85
79#if OPENSSL_VERSION_NUMBER < 0x10001000L 86 /* Load the libcrypto config file to pick up engines defined there */
80 OPENSSL_config(NULL); 87# if defined(HAVE_OPENSSL_INIT_CRYPTO) && defined(OPENSSL_INIT_LOAD_CONFIG)
81#else
82 OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS | 88 OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS |
83 OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CONFIG, NULL); 89 OPENSSL_INIT_ADD_ALL_DIGESTS | OPENSSL_INIT_LOAD_CONFIG, NULL);
84#endif 90# else
91 OPENSSL_config(NULL);
92# endif
93#endif /* USE_OPENSSL_ENGINE */
85} 94}
86#endif
87 95
88#endif /* WITH_OPENSSL */ 96#endif /* WITH_OPENSSL */
diff --git a/openbsd-compat/openssl-compat.h b/openbsd-compat/openssl-compat.h
index 9e0264c04..917bc6f7c 100644
--- a/openbsd-compat/openssl-compat.h
+++ b/openbsd-compat/openssl-compat.h
@@ -21,16 +21,32 @@
21#ifdef WITH_OPENSSL 21#ifdef WITH_OPENSSL
22 22
23#include <openssl/opensslv.h> 23#include <openssl/opensslv.h>
24#include <openssl/crypto.h>
24#include <openssl/evp.h> 25#include <openssl/evp.h>
25#include <openssl/rsa.h> 26#include <openssl/rsa.h>
26#include <openssl/dsa.h> 27#include <openssl/dsa.h>
28#ifdef OPENSSL_HAS_ECC
27#include <openssl/ecdsa.h> 29#include <openssl/ecdsa.h>
30#endif
28#include <openssl/dh.h> 31#include <openssl/dh.h>
29 32
30int ssh_compatible_openssl(long, long); 33int ssh_compatible_openssl(long, long);
34void ssh_libcrypto_init(void);
35
36#if (OPENSSL_VERSION_NUMBER < 0x1000100fL)
37# error OpenSSL 1.0.1 or greater is required
38#endif
39
40#ifndef OPENSSL_VERSION
41# define OPENSSL_VERSION SSLEAY_VERSION
42#endif
43
44#ifndef HAVE_OPENSSL_VERSION
45# define OpenSSL_version(x) SSLeay_version(x)
46#endif
31 47
32#if (OPENSSL_VERSION_NUMBER <= 0x0090805fL) 48#ifndef HAVE_OPENSSL_VERSION_NUM
33# error OpenSSL 0.9.8f or greater is required 49# define OpenSSL_version_num SSLeay
34#endif 50#endif
35 51
36#if OPENSSL_VERSION_NUMBER < 0x10000001L 52#if OPENSSL_VERSION_NUMBER < 0x10000001L
@@ -77,27 +93,6 @@ void ssh_aes_ctr_iv(EVP_CIPHER_CTX *, int, u_char *, size_t);
77# endif 93# endif
78#endif 94#endif
79 95
80/*
81 * We overload some of the OpenSSL crypto functions with ssh_* equivalents
82 * to automatically handle OpenSSL engine initialisation.
83 *
84 * In order for the compat library to call the real functions, it must
85 * define SSH_DONT_OVERLOAD_OPENSSL_FUNCS before including this file and
86 * implement the ssh_* equivalents.
87 */
88#ifndef SSH_DONT_OVERLOAD_OPENSSL_FUNCS
89
90# ifdef USE_OPENSSL_ENGINE
91# ifdef OpenSSL_add_all_algorithms
92# undef OpenSSL_add_all_algorithms
93# endif
94# define OpenSSL_add_all_algorithms() ssh_OpenSSL_add_all_algorithms()
95# endif
96
97void ssh_OpenSSL_add_all_algorithms(void);
98
99#endif /* SSH_DONT_OVERLOAD_OPENSSL_FUNCS */
100
101/* LibreSSL/OpenSSL 1.1x API compat */ 96/* LibreSSL/OpenSSL 1.1x API compat */
102#ifndef HAVE_DSA_GET0_PQG 97#ifndef HAVE_DSA_GET0_PQG
103void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q, 98void DSA_get0_pqg(const DSA *d, const BIGNUM **p, const BIGNUM **q,
@@ -161,6 +156,7 @@ void DSA_SIG_get0(const DSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
161int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s); 156int DSA_SIG_set0(DSA_SIG *sig, BIGNUM *r, BIGNUM *s);
162#endif /* DSA_SIG_SET0 */ 157#endif /* DSA_SIG_SET0 */
163 158
159#ifdef OPENSSL_HAS_ECC
164#ifndef HAVE_ECDSA_SIG_GET0 160#ifndef HAVE_ECDSA_SIG_GET0
165void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); 161void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
166#endif /* HAVE_ECDSA_SIG_GET0 */ 162#endif /* HAVE_ECDSA_SIG_GET0 */
@@ -168,6 +164,7 @@ void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps);
168#ifndef HAVE_ECDSA_SIG_SET0 164#ifndef HAVE_ECDSA_SIG_SET0
169int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s); 165int ECDSA_SIG_set0(ECDSA_SIG *sig, BIGNUM *r, BIGNUM *s);
170#endif /* HAVE_ECDSA_SIG_SET0 */ 166#endif /* HAVE_ECDSA_SIG_SET0 */
167#endif /* OPENSSL_HAS_ECC */
171 168
172#ifndef HAVE_DH_GET0_PQG 169#ifndef HAVE_DH_GET0_PQG
173void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q, 170void DH_get0_pqg(const DH *dh, const BIGNUM **p, const BIGNUM **q,
diff --git a/openbsd-compat/port-aix.c b/openbsd-compat/port-aix.c
index 943177c70..fc80dc39f 100644
--- a/openbsd-compat/port-aix.c
+++ b/openbsd-compat/port-aix.c
@@ -313,7 +313,8 @@ sys_auth_get_lastlogin_msg(const char *user, uid_t uid)
313 * record_failed_login: generic "login failed" interface function 313 * record_failed_login: generic "login failed" interface function
314 */ 314 */
315void 315void
316record_failed_login(const char *user, const char *hostname, const char *ttyname) 316record_failed_login(struct ssh *ssh, const char *user, const char *hostname,
317 const char *ttyname)
317{ 318{
318 if (geteuid() != 0) 319 if (geteuid() != 0)
319 return; 320 return;
diff --git a/openbsd-compat/port-aix.h b/openbsd-compat/port-aix.h
index 748c0e4e3..904de3096 100644
--- a/openbsd-compat/port-aix.h
+++ b/openbsd-compat/port-aix.h
@@ -30,6 +30,7 @@
30# include <sys/socket.h> 30# include <sys/socket.h>
31#endif 31#endif
32 32
33struct ssh;
33struct sshbuf; 34struct sshbuf;
34 35
35/* These should be in the system headers but are not. */ 36/* These should be in the system headers but are not. */
@@ -89,8 +90,8 @@ void aix_usrinfo(struct passwd *);
89# define CUSTOM_SYS_AUTH_ALLOWED_USER 1 90# define CUSTOM_SYS_AUTH_ALLOWED_USER 1
90int sys_auth_allowed_user(struct passwd *, struct sshbuf *); 91int sys_auth_allowed_user(struct passwd *, struct sshbuf *);
91# define CUSTOM_SYS_AUTH_RECORD_LOGIN 1 92# define CUSTOM_SYS_AUTH_RECORD_LOGIN 1
92int sys_auth_record_login(const char *, const char *, 93int sys_auth_record_login(const char *, const char *, const char *,
93 const char *, struct sshbuf *); 94 struct sshbuf *);
94# define CUSTOM_SYS_AUTH_GET_LASTLOGIN_MSG 95# define CUSTOM_SYS_AUTH_GET_LASTLOGIN_MSG
95char *sys_auth_get_lastlogin_msg(const char *, uid_t); 96char *sys_auth_get_lastlogin_msg(const char *, uid_t);
96# define CUSTOM_FAILED_LOGIN 1 97# define CUSTOM_FAILED_LOGIN 1
diff --git a/openbsd-compat/regress/Makefile.in b/openbsd-compat/regress/Makefile.in
index 529331be5..c5aae61e2 100644
--- a/openbsd-compat/regress/Makefile.in
+++ b/openbsd-compat/regress/Makefile.in
@@ -14,7 +14,7 @@ LIBS=@LIBS@
14LDFLAGS=@LDFLAGS@ $(LIBCOMPAT) 14LDFLAGS=@LDFLAGS@ $(LIBCOMPAT)
15 15
16TESTPROGS=closefromtest$(EXEEXT) snprintftest$(EXEEXT) strduptest$(EXEEXT) \ 16TESTPROGS=closefromtest$(EXEEXT) snprintftest$(EXEEXT) strduptest$(EXEEXT) \
17 strtonumtest$(EXEEXT) opensslvertest$(EXEEXT) 17 strtonumtest$(EXEEXT) opensslvertest$(EXEEXT) utimensattest$(EXEEXT)
18 18
19all: t-exec ${OTHERTESTS} 19all: t-exec ${OTHERTESTS}
20 20
diff --git a/openbsd-compat/regress/utimensattest.c b/openbsd-compat/regress/utimensattest.c
new file mode 100644
index 000000000..a7bc7634b
--- /dev/null
+++ b/openbsd-compat/regress/utimensattest.c
@@ -0,0 +1,97 @@
1/*
2 * Copyright (c) 2019 Darren Tucker
3 *
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#include <sys/types.h>
18#include <sys/stat.h>
19
20#include <errno.h>
21#include <fcntl.h>
22#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25#include <unistd.h>
26
27#define TMPFILE "utimensat.tmp"
28#define TMPFILE2 "utimensat.tmp2"
29
30#ifndef AT_SYMLINK_NOFOLLOW
31# define AT_SYMLINK_NOFOLLOW 0x80000000
32#endif
33
34int utimensat(int, const char *, const struct timespec[2], int);
35
36void
37fail(char *msg, long expect, long got)
38{
39 int saved_errno = errno;
40
41 if (expect == got && got == 0)
42 fprintf(stderr, "utimensat: %s: %s\n", msg,
43 strerror(saved_errno));
44 else
45 fprintf(stderr, "utimensat: %s: expected %ld got %ld\n",
46 msg, expect, got);
47 exit(1);
48}
49
50int
51main(void)
52{
53 int fd;
54 struct stat sb;
55 struct timespec ts[2];
56
57 if ((fd = open(TMPFILE, O_CREAT, 0600)) == -1)
58 fail("open", 0, 0);
59 close(fd);
60
61 ts[0].tv_sec = 12345678;
62 ts[0].tv_nsec = 23456789;
63 ts[1].tv_sec = 34567890;
64 ts[1].tv_nsec = 45678901;
65 if (utimensat(AT_FDCWD, TMPFILE, ts, AT_SYMLINK_NOFOLLOW) == -1)
66 fail("utimensat", 0, 0);
67
68 if (stat(TMPFILE, &sb) == -1)
69 fail("stat", 0, 0 );
70 if (sb.st_atime != 12345678)
71 fail("st_atime", 0, 0 );
72 if (sb.st_mtime != 34567890)
73 fail("st_mtime", 0, 0 );
74#if 0
75 /*
76 * Results expected to be rounded to the nearest microsecond.
77 * Depends on timestamp precision in kernel and filesystem so
78 * disabled by default.
79 */
80 if (sb.st_atim.tv_nsec != 23456000)
81 fail("atim.tv_nsec", 23456000, sb.st_atim.tv_nsec);
82 if (sb.st_mtim.tv_nsec != 45678000)
83 fail("mtim.tv_nsec", 45678000, sb.st_mtim.tv_nsec);
84#endif
85
86 if (rename(TMPFILE, TMPFILE2) == -1)
87 fail("rename", 0, 0);
88 if (symlink(TMPFILE2, TMPFILE) == -1)
89 fail("symlink", 0, 0);
90
91 if (utimensat(AT_FDCWD, TMPFILE, ts, AT_SYMLINK_NOFOLLOW) != -1)
92 fail("utimensat followed symlink", 0, 0);
93
94 if (!(unlink(TMPFILE) == 0 && unlink(TMPFILE2) == 0))
95 fail("unlink", 0, 0);
96 exit(0);
97}
diff --git a/openbsd-compat/sys-queue.h b/openbsd-compat/sys-queue.h
index af93d6814..5108f394c 100644
--- a/openbsd-compat/sys-queue.h
+++ b/openbsd-compat/sys-queue.h
@@ -81,6 +81,7 @@
81#undef SIMPLEQ_EMPTY 81#undef SIMPLEQ_EMPTY
82#undef SIMPLEQ_NEXT 82#undef SIMPLEQ_NEXT
83#undef SIMPLEQ_FOREACH 83#undef SIMPLEQ_FOREACH
84#undef SIMPLEQ_FOREACH_SAFE
84#undef SIMPLEQ_INIT 85#undef SIMPLEQ_INIT
85#undef SIMPLEQ_INSERT_HEAD 86#undef SIMPLEQ_INSERT_HEAD
86#undef SIMPLEQ_INSERT_TAIL 87#undef SIMPLEQ_INSERT_TAIL
diff --git a/packet.c b/packet.c
index dcf35e6e6..36e352b44 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.c,v 1.277 2018/07/16 03:09:13 djm Exp $ */ 1/* $OpenBSD: packet.c,v 1.283 2019/03/01 03:29:32 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -58,6 +58,7 @@
58#include <string.h> 58#include <string.h>
59#include <unistd.h> 59#include <unistd.h>
60#include <limits.h> 60#include <limits.h>
61#include <poll.h>
61#include <signal.h> 62#include <signal.h>
62#include <time.h> 63#include <time.h>
63 64
@@ -228,6 +229,7 @@ ssh_alloc_session_state(void)
228 229
229 if ((ssh = calloc(1, sizeof(*ssh))) == NULL || 230 if ((ssh = calloc(1, sizeof(*ssh))) == NULL ||
230 (state = calloc(1, sizeof(*state))) == NULL || 231 (state = calloc(1, sizeof(*state))) == NULL ||
232 (ssh->kex = kex_new()) == NULL ||
231 (state->input = sshbuf_new()) == NULL || 233 (state->input = sshbuf_new()) == NULL ||
232 (state->output = sshbuf_new()) == NULL || 234 (state->output = sshbuf_new()) == NULL ||
233 (state->outgoing_packet = sshbuf_new()) == NULL || 235 (state->outgoing_packet = sshbuf_new()) == NULL ||
@@ -250,6 +252,10 @@ ssh_alloc_session_state(void)
250 ssh->state = state; 252 ssh->state = state;
251 return ssh; 253 return ssh;
252 fail: 254 fail:
255 if (ssh) {
256 kex_free(ssh->kex);
257 free(ssh);
258 }
253 if (state) { 259 if (state) {
254 sshbuf_free(state->input); 260 sshbuf_free(state->input);
255 sshbuf_free(state->output); 261 sshbuf_free(state->output);
@@ -257,7 +263,6 @@ ssh_alloc_session_state(void)
257 sshbuf_free(state->outgoing_packet); 263 sshbuf_free(state->outgoing_packet);
258 free(state); 264 free(state);
259 } 265 }
260 free(ssh);
261 return NULL; 266 return NULL;
262} 267}
263 268
@@ -272,8 +277,7 @@ ssh_packet_set_input_hook(struct ssh *ssh, ssh_packet_hook_fn *hook, void *ctx)
272int 277int
273ssh_packet_is_rekeying(struct ssh *ssh) 278ssh_packet_is_rekeying(struct ssh *ssh)
274{ 279{
275 return ssh->state->rekeying || 280 return ssh->state->rekeying || ssh->kex->done == 0;
276 (ssh->kex != NULL && ssh->kex->done == 0);
277} 281}
278 282
279/* 283/*
@@ -837,6 +841,7 @@ ssh_set_newkeys(struct ssh *ssh, int mode)
837 u_int64_t *max_blocks; 841 u_int64_t *max_blocks;
838 const char *wmsg; 842 const char *wmsg;
839 int r, crypt_type; 843 int r, crypt_type;
844 const char *dir = mode == MODE_OUT ? "out" : "in";
840 845
841 debug2("set_newkeys: mode %d", mode); 846 debug2("set_newkeys: mode %d", mode);
842 847
@@ -852,14 +857,12 @@ ssh_set_newkeys(struct ssh *ssh, int mode)
852 max_blocks = &state->max_blocks_in; 857 max_blocks = &state->max_blocks_in;
853 } 858 }
854 if (state->newkeys[mode] != NULL) { 859 if (state->newkeys[mode] != NULL) {
855 debug("set_newkeys: rekeying, input %llu bytes %llu blocks, " 860 debug("%s: rekeying %s, input %llu bytes %llu blocks, "
856 "output %llu bytes %llu blocks", 861 "output %llu bytes %llu blocks", __func__, dir,
857 (unsigned long long)state->p_read.bytes, 862 (unsigned long long)state->p_read.bytes,
858 (unsigned long long)state->p_read.blocks, 863 (unsigned long long)state->p_read.blocks,
859 (unsigned long long)state->p_send.bytes, 864 (unsigned long long)state->p_send.bytes,
860 (unsigned long long)state->p_send.blocks); 865 (unsigned long long)state->p_send.blocks);
861 cipher_free(*ccp);
862 *ccp = NULL;
863 kex_free_newkeys(state->newkeys[mode]); 866 kex_free_newkeys(state->newkeys[mode]);
864 state->newkeys[mode] = NULL; 867 state->newkeys[mode] = NULL;
865 } 868 }
@@ -877,7 +880,9 @@ ssh_set_newkeys(struct ssh *ssh, int mode)
877 return r; 880 return r;
878 } 881 }
879 mac->enabled = 1; 882 mac->enabled = 1;
880 DBG(debug("cipher_init_context: %d", mode)); 883 DBG(debug("%s: cipher_init_context: %s", __func__, dir));
884 cipher_free(*ccp);
885 *ccp = NULL;
881 if ((r = cipher_init(ccp, enc->cipher, enc->key, enc->key_len, 886 if ((r = cipher_init(ccp, enc->cipher, enc->key, enc->key_len,
882 enc->iv, enc->iv_len, crypt_type)) != 0) 887 enc->iv, enc->iv_len, crypt_type)) != 0)
883 return r; 888 return r;
@@ -916,7 +921,8 @@ ssh_set_newkeys(struct ssh *ssh, int mode)
916 if (state->rekey_limit) 921 if (state->rekey_limit)
917 *max_blocks = MINIMUM(*max_blocks, 922 *max_blocks = MINIMUM(*max_blocks,
918 state->rekey_limit / enc->block_size); 923 state->rekey_limit / enc->block_size);
919 debug("rekey after %llu blocks", (unsigned long long)*max_blocks); 924 debug("rekey %s after %llu blocks", dir,
925 (unsigned long long)*max_blocks);
920 return 0; 926 return 0;
921} 927}
922 928
@@ -932,7 +938,7 @@ ssh_packet_need_rekeying(struct ssh *ssh, u_int outbound_packet_len)
932 return 0; 938 return 0;
933 939
934 /* Haven't keyed yet or KEX in progress. */ 940 /* Haven't keyed yet or KEX in progress. */
935 if (ssh->kex == NULL || ssh_packet_is_rekeying(ssh)) 941 if (ssh_packet_is_rekeying(ssh))
936 return 0; 942 return 0;
937 943
938 /* Peer can't rekey */ 944 /* Peer can't rekey */
@@ -1805,10 +1811,10 @@ sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l)
1805/* 1811/*
1806 * Pretty-print connection-terminating errors and exit. 1812 * Pretty-print connection-terminating errors and exit.
1807 */ 1813 */
1808void 1814static void
1809sshpkt_fatal(struct ssh *ssh, const char *tag, int r) 1815sshpkt_vfatal(struct ssh *ssh, int r, const char *fmt, va_list ap)
1810{ 1816{
1811 char remote_id[512]; 1817 char *tag = NULL, remote_id[512];
1812 1818
1813 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id)); 1819 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1814 1820
@@ -1842,6 +1848,11 @@ sshpkt_fatal(struct ssh *ssh, const char *tag, int r)
1842 } 1848 }
1843 /* FALLTHROUGH */ 1849 /* FALLTHROUGH */
1844 default: 1850 default:
1851 if (vasprintf(&tag, fmt, ap) == -1) {
1852 ssh_packet_clear_keys(ssh);
1853 logdie("%s: could not allocate failure message",
1854 __func__);
1855 }
1845 ssh_packet_clear_keys(ssh); 1856 ssh_packet_clear_keys(ssh);
1846 logdie("%s%sConnection %s %s: %s", 1857 logdie("%s%sConnection %s %s: %s",
1847 tag != NULL ? tag : "", tag != NULL ? ": " : "", 1858 tag != NULL ? tag : "", tag != NULL ? ": " : "",
@@ -1850,6 +1861,18 @@ sshpkt_fatal(struct ssh *ssh, const char *tag, int r)
1850 } 1861 }
1851} 1862}
1852 1863
1864void
1865sshpkt_fatal(struct ssh *ssh, int r, const char *fmt, ...)
1866{
1867 va_list ap;
1868
1869 va_start(ap, fmt);
1870 sshpkt_vfatal(ssh, r, fmt, ap);
1871 /* NOTREACHED */
1872 va_end(ap);
1873 logdie("%s: should have exited", __func__);
1874}
1875
1853/* 1876/*
1854 * Logs the error plus constructs and sends a disconnect packet, closes the 1877 * Logs the error plus constructs and sends a disconnect packet, closes the
1855 * connection, and exits. This function never returns. The error message 1878 * connection, and exits. This function never returns. The error message
@@ -1885,10 +1908,10 @@ ssh_packet_disconnect(struct ssh *ssh, const char *fmt,...)
1885 * for it to get sent. 1908 * for it to get sent.
1886 */ 1909 */
1887 if ((r = sshpkt_disconnect(ssh, "%s", buf)) != 0) 1910 if ((r = sshpkt_disconnect(ssh, "%s", buf)) != 0)
1888 sshpkt_fatal(ssh, __func__, r); 1911 sshpkt_fatal(ssh, r, "%s", __func__);
1889 1912
1890 if ((r = ssh_packet_write_wait(ssh)) != 0) 1913 if ((r = ssh_packet_write_wait(ssh)) != 0)
1891 sshpkt_fatal(ssh, __func__, r); 1914 sshpkt_fatal(ssh, r, "%s", __func__);
1892 1915
1893 /* Close the connection. */ 1916 /* Close the connection. */
1894 ssh_packet_close(ssh); 1917 ssh_packet_close(ssh);
@@ -2123,6 +2146,7 @@ void
2123ssh_packet_set_server(struct ssh *ssh) 2146ssh_packet_set_server(struct ssh *ssh)
2124{ 2147{
2125 ssh->state->server_side = 1; 2148 ssh->state->server_side = 1;
2149 ssh->kex->server = 1; /* XXX unify? */
2126} 2150}
2127 2151
2128void 2152void
@@ -2175,9 +2199,9 @@ kex_to_blob(struct sshbuf *m, struct kex *kex)
2175 (r = sshbuf_put_u32(m, kex->kex_type)) != 0 || 2199 (r = sshbuf_put_u32(m, kex->kex_type)) != 0 ||
2176 (r = sshbuf_put_stringb(m, kex->my)) != 0 || 2200 (r = sshbuf_put_stringb(m, kex->my)) != 0 ||
2177 (r = sshbuf_put_stringb(m, kex->peer)) != 0 || 2201 (r = sshbuf_put_stringb(m, kex->peer)) != 0 ||
2178 (r = sshbuf_put_u32(m, kex->flags)) != 0 || 2202 (r = sshbuf_put_stringb(m, kex->client_version)) != 0 ||
2179 (r = sshbuf_put_cstring(m, kex->client_version_string)) != 0 || 2203 (r = sshbuf_put_stringb(m, kex->server_version)) != 0 ||
2180 (r = sshbuf_put_cstring(m, kex->server_version_string)) != 0) 2204 (r = sshbuf_put_u32(m, kex->flags)) != 0)
2181 return r; 2205 return r;
2182 return 0; 2206 return 0;
2183} 2207}
@@ -2327,12 +2351,8 @@ kex_from_blob(struct sshbuf *m, struct kex **kexp)
2327 struct kex *kex; 2351 struct kex *kex;
2328 int r; 2352 int r;
2329 2353
2330 if ((kex = calloc(1, sizeof(struct kex))) == NULL || 2354 if ((kex = kex_new()) == NULL)
2331 (kex->my = sshbuf_new()) == NULL || 2355 return SSH_ERR_ALLOC_FAIL;
2332 (kex->peer = sshbuf_new()) == NULL) {
2333 r = SSH_ERR_ALLOC_FAIL;
2334 goto out;
2335 }
2336 if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 || 2356 if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 ||
2337 (r = sshbuf_get_u32(m, &kex->we_need)) != 0 || 2357 (r = sshbuf_get_u32(m, &kex->we_need)) != 0 ||
2338 (r = sshbuf_get_cstring(m, &kex->hostkey_alg, NULL)) != 0 || 2358 (r = sshbuf_get_cstring(m, &kex->hostkey_alg, NULL)) != 0 ||
@@ -2341,23 +2361,20 @@ kex_from_blob(struct sshbuf *m, struct kex **kexp)
2341 (r = sshbuf_get_u32(m, &kex->kex_type)) != 0 || 2361 (r = sshbuf_get_u32(m, &kex->kex_type)) != 0 ||
2342 (r = sshbuf_get_stringb(m, kex->my)) != 0 || 2362 (r = sshbuf_get_stringb(m, kex->my)) != 0 ||
2343 (r = sshbuf_get_stringb(m, kex->peer)) != 0 || 2363 (r = sshbuf_get_stringb(m, kex->peer)) != 0 ||
2344 (r = sshbuf_get_u32(m, &kex->flags)) != 0 || 2364 (r = sshbuf_get_stringb(m, kex->client_version)) != 0 ||
2345 (r = sshbuf_get_cstring(m, &kex->client_version_string, NULL)) != 0 || 2365 (r = sshbuf_get_stringb(m, kex->server_version)) != 0 ||
2346 (r = sshbuf_get_cstring(m, &kex->server_version_string, NULL)) != 0) 2366 (r = sshbuf_get_u32(m, &kex->flags)) != 0)
2347 goto out; 2367 goto out;
2348 kex->server = 1; 2368 kex->server = 1;
2349 kex->done = 1; 2369 kex->done = 1;
2350 r = 0; 2370 r = 0;
2351 out: 2371 out:
2352 if (r != 0 || kexp == NULL) { 2372 if (r != 0 || kexp == NULL) {
2353 if (kex != NULL) { 2373 kex_free(kex);
2354 sshbuf_free(kex->my);
2355 sshbuf_free(kex->peer);
2356 free(kex);
2357 }
2358 if (kexp != NULL) 2374 if (kexp != NULL)
2359 *kexp = NULL; 2375 *kexp = NULL;
2360 } else { 2376 } else {
2377 kex_free(*kexp);
2361 *kexp = kex; 2378 *kexp = kex;
2362 } 2379 }
2363 return r; 2380 return r;
@@ -2468,6 +2485,12 @@ sshpkt_put_stringb(struct ssh *ssh, const struct sshbuf *v)
2468 return sshbuf_put_stringb(ssh->state->outgoing_packet, v); 2485 return sshbuf_put_stringb(ssh->state->outgoing_packet, v);
2469} 2486}
2470 2487
2488int
2489sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp)
2490{
2491 return sshbuf_froms(ssh->state->incoming_packet, valp);
2492}
2493
2471#ifdef WITH_OPENSSL 2494#ifdef WITH_OPENSSL
2472#ifdef OPENSSL_HAS_ECC 2495#ifdef OPENSSL_HAS_ECC
2473int 2496int
@@ -2544,11 +2567,10 @@ sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g)
2544} 2567}
2545#endif /* OPENSSL_HAS_ECC */ 2568#endif /* OPENSSL_HAS_ECC */
2546 2569
2547
2548int 2570int
2549sshpkt_get_bignum2(struct ssh *ssh, BIGNUM *v) 2571sshpkt_get_bignum2(struct ssh *ssh, BIGNUM **valp)
2550{ 2572{
2551 return sshbuf_get_bignum2(ssh->state->incoming_packet, v); 2573 return sshbuf_get_bignum2(ssh->state->incoming_packet, valp);
2552} 2574}
2553#endif /* WITH_OPENSSL */ 2575#endif /* WITH_OPENSSL */
2554 2576
diff --git a/packet.h b/packet.h
index 170203cab..0dfa36da1 100644
--- a/packet.h
+++ b/packet.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.h,v 1.86 2018/07/09 21:20:26 markus Exp $ */ 1/* $OpenBSD: packet.h,v 1.90 2019/01/21 10:35:09 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -176,7 +176,8 @@ int sshpkt_send(struct ssh *ssh);
176int sshpkt_disconnect(struct ssh *, const char *fmt, ...) 176int sshpkt_disconnect(struct ssh *, const char *fmt, ...)
177 __attribute__((format(printf, 2, 3))); 177 __attribute__((format(printf, 2, 3)));
178int sshpkt_add_padding(struct ssh *, u_char); 178int sshpkt_add_padding(struct ssh *, u_char);
179void sshpkt_fatal(struct ssh *ssh, const char *tag, int r); 179void sshpkt_fatal(struct ssh *ssh, int r, const char *fmt, ...)
180 __attribute__((format(printf, 3, 4)));
180int sshpkt_msg_ignore(struct ssh *, u_int); 181int sshpkt_msg_ignore(struct ssh *, u_int);
181 182
182int sshpkt_put(struct ssh *ssh, const void *v, size_t len); 183int sshpkt_put(struct ssh *ssh, const void *v, size_t len);
@@ -198,16 +199,13 @@ int sshpkt_get_string(struct ssh *ssh, u_char **valp, size_t *lenp);
198int sshpkt_get_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp); 199int sshpkt_get_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp);
199int sshpkt_peek_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp); 200int sshpkt_peek_string_direct(struct ssh *ssh, const u_char **valp, size_t *lenp);
200int sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp); 201int sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp);
202int sshpkt_getb_froms(struct ssh *ssh, struct sshbuf **valp);
201int sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g); 203int sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g);
202int sshpkt_get_bignum2(struct ssh *ssh, BIGNUM *v); 204int sshpkt_get_bignum2(struct ssh *ssh, BIGNUM **valp);
203int sshpkt_get_end(struct ssh *ssh); 205int sshpkt_get_end(struct ssh *ssh);
204void sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l); 206void sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l);
205const u_char *sshpkt_ptr(struct ssh *, size_t *lenp); 207const u_char *sshpkt_ptr(struct ssh *, size_t *lenp);
206 208
207/* OLD API */
208extern struct ssh *active_state;
209#include "opacket.h"
210
211#if !defined(WITH_OPENSSL) 209#if !defined(WITH_OPENSSL)
212# undef BIGNUM 210# undef BIGNUM
213# undef EC_KEY 211# undef EC_KEY
diff --git a/progressmeter.c b/progressmeter.c
index fe9bf52e4..e385c1254 100644
--- a/progressmeter.c
+++ b/progressmeter.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: progressmeter.c,v 1.45 2016/06/30 05:17:05 dtucker Exp $ */ 1/* $OpenBSD: progressmeter.c,v 1.47 2019/01/24 16:52:17 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2003 Nils Nordman. All rights reserved. 3 * Copyright (c) 2003 Nils Nordman. All rights reserved.
4 * 4 *
@@ -31,6 +31,7 @@
31 31
32#include <errno.h> 32#include <errno.h>
33#include <signal.h> 33#include <signal.h>
34#include <stdarg.h>
34#include <stdio.h> 35#include <stdio.h>
35#include <string.h> 36#include <string.h>
36#include <time.h> 37#include <time.h>
@@ -39,6 +40,7 @@
39#include "progressmeter.h" 40#include "progressmeter.h"
40#include "atomicio.h" 41#include "atomicio.h"
41#include "misc.h" 42#include "misc.h"
43#include "utf8.h"
42 44
43#define DEFAULT_WINSIZE 80 45#define DEFAULT_WINSIZE 80
44#define MAX_WINSIZE 512 46#define MAX_WINSIZE 512
@@ -57,11 +59,8 @@ static void format_rate(char *, int, off_t);
57static void sig_winch(int); 59static void sig_winch(int);
58static void setscreensize(void); 60static void setscreensize(void);
59 61
60/* updates the progressmeter to reflect the current state of the transfer */
61void refresh_progress_meter(void);
62
63/* signal handler for updating the progress meter */ 62/* signal handler for updating the progress meter */
64static void update_progress_meter(int); 63static void sig_alarm(int);
65 64
66static double start; /* start progress */ 65static double start; /* start progress */
67static double last_update; /* last progress update */ 66static double last_update; /* last progress update */
@@ -74,6 +73,7 @@ static long stalled; /* how long we have been stalled */
74static int bytes_per_second; /* current speed in bytes per second */ 73static int bytes_per_second; /* current speed in bytes per second */
75static int win_size; /* terminal window size */ 74static int win_size; /* terminal window size */
76static volatile sig_atomic_t win_resized; /* for window resizing */ 75static volatile sig_atomic_t win_resized; /* for window resizing */
76static volatile sig_atomic_t alarm_fired;
77 77
78/* units for format_size */ 78/* units for format_size */
79static const char unit[] = " KMGT"; 79static const char unit[] = " KMGT";
@@ -117,7 +117,7 @@ format_size(char *buf, int size, off_t bytes)
117} 117}
118 118
119void 119void
120refresh_progress_meter(void) 120refresh_progress_meter(int force_update)
121{ 121{
122 char buf[MAX_WINSIZE + 1]; 122 char buf[MAX_WINSIZE + 1];
123 off_t transferred; 123 off_t transferred;
@@ -126,9 +126,17 @@ refresh_progress_meter(void)
126 off_t bytes_left; 126 off_t bytes_left;
127 int cur_speed; 127 int cur_speed;
128 int hours, minutes, seconds; 128 int hours, minutes, seconds;
129 int i, len;
130 int file_len; 129 int file_len;
131 130
131 if ((!force_update && !alarm_fired && !win_resized) || !can_output())
132 return;
133 alarm_fired = 0;
134
135 if (win_resized) {
136 setscreensize();
137 win_resized = 0;
138 }
139
132 transferred = *counter - (cur_pos ? cur_pos : start_pos); 140 transferred = *counter - (cur_pos ? cur_pos : start_pos);
133 cur_pos = *counter; 141 cur_pos = *counter;
134 now = monotime_double(); 142 now = monotime_double();
@@ -158,16 +166,11 @@ refresh_progress_meter(void)
158 166
159 /* filename */ 167 /* filename */
160 buf[0] = '\0'; 168 buf[0] = '\0';
161 file_len = win_size - 35; 169 file_len = win_size - 36;
162 if (file_len > 0) { 170 if (file_len > 0) {
163 len = snprintf(buf, file_len + 1, "\r%s", file); 171 buf[0] = '\r';
164 if (len < 0) 172 snmprintf(buf+1, sizeof(buf)-1 , &file_len, "%*s",
165 len = 0; 173 file_len * -1, file);
166 if (len >= file_len + 1)
167 len = file_len;
168 for (i = len; i < file_len; i++)
169 buf[i] = ' ';
170 buf[file_len] = '\0';
171 } 174 }
172 175
173 /* percent of transfer done */ 176 /* percent of transfer done */
@@ -228,22 +231,11 @@ refresh_progress_meter(void)
228 231
229/*ARGSUSED*/ 232/*ARGSUSED*/
230static void 233static void
231update_progress_meter(int ignore) 234sig_alarm(int ignore)
232{ 235{
233 int save_errno; 236 signal(SIGALRM, sig_alarm);
234 237 alarm_fired = 1;
235 save_errno = errno;
236
237 if (win_resized) {
238 setscreensize();
239 win_resized = 0;
240 }
241 if (can_output())
242 refresh_progress_meter();
243
244 signal(SIGALRM, update_progress_meter);
245 alarm(UPDATE_INTERVAL); 238 alarm(UPDATE_INTERVAL);
246 errno = save_errno;
247} 239}
248 240
249void 241void
@@ -259,10 +251,9 @@ start_progress_meter(const char *f, off_t filesize, off_t *ctr)
259 bytes_per_second = 0; 251 bytes_per_second = 0;
260 252
261 setscreensize(); 253 setscreensize();
262 if (can_output()) 254 refresh_progress_meter(1);
263 refresh_progress_meter();
264 255
265 signal(SIGALRM, update_progress_meter); 256 signal(SIGALRM, sig_alarm);
266 signal(SIGWINCH, sig_winch); 257 signal(SIGWINCH, sig_winch);
267 alarm(UPDATE_INTERVAL); 258 alarm(UPDATE_INTERVAL);
268} 259}
@@ -277,7 +268,7 @@ stop_progress_meter(void)
277 268
278 /* Ensure we complete the progress */ 269 /* Ensure we complete the progress */
279 if (cur_pos != end_pos) 270 if (cur_pos != end_pos)
280 refresh_progress_meter(); 271 refresh_progress_meter(1);
281 272
282 atomicio(vwrite, STDOUT_FILENO, "\n", 1); 273 atomicio(vwrite, STDOUT_FILENO, "\n", 1);
283} 274}
@@ -286,6 +277,7 @@ stop_progress_meter(void)
286static void 277static void
287sig_winch(int sig) 278sig_winch(int sig)
288{ 279{
280 signal(SIGWINCH, sig_winch);
289 win_resized = 1; 281 win_resized = 1;
290} 282}
291 283
diff --git a/progressmeter.h b/progressmeter.h
index bf179dca6..1703ea75b 100644
--- a/progressmeter.h
+++ b/progressmeter.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: progressmeter.h,v 1.3 2015/01/14 13:54:13 djm Exp $ */ 1/* $OpenBSD: progressmeter.h,v 1.5 2019/01/24 16:52:17 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2002 Nils Nordman. All rights reserved. 3 * Copyright (c) 2002 Nils Nordman. All rights reserved.
4 * 4 *
@@ -24,4 +24,5 @@
24 */ 24 */
25 25
26void start_progress_meter(const char *, off_t, off_t *); 26void start_progress_meter(const char *, off_t, off_t *);
27void refresh_progress_meter(int);
27void stop_progress_meter(void); 28void stop_progress_meter(void);
diff --git a/readconf.c b/readconf.c
index 433811521..ec497e79f 100644
--- a/readconf.c
+++ b/readconf.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.c,v 1.300 2018/10/05 14:26:09 naddy Exp $ */ 1/* $OpenBSD: readconf.c,v 1.304 2019/03/01 02:08:50 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -133,10 +133,11 @@
133 133
134static int read_config_file_depth(const char *filename, struct passwd *pw, 134static int read_config_file_depth(const char *filename, struct passwd *pw,
135 const char *host, const char *original_host, Options *options, 135 const char *host, const char *original_host, Options *options,
136 int flags, int *activep, int depth); 136 int flags, int *activep, int *want_final_pass, int depth);
137static int process_config_line_depth(Options *options, struct passwd *pw, 137static int process_config_line_depth(Options *options, struct passwd *pw,
138 const char *host, const char *original_host, char *line, 138 const char *host, const char *original_host, char *line,
139 const char *filename, int linenum, int *activep, int flags, int depth); 139 const char *filename, int linenum, int *activep, int flags,
140 int *want_final_pass, int depth);
140 141
141/* Keyword tokens. */ 142/* Keyword tokens. */
142 143
@@ -207,8 +208,8 @@ static struct {
207 { "gssapidelegatecredentials", oUnsupported }, 208 { "gssapidelegatecredentials", oUnsupported },
208#endif 209#endif
209#ifdef ENABLE_PKCS11 210#ifdef ENABLE_PKCS11
210 { "smartcarddevice", oPKCS11Provider },
211 { "pkcs11provider", oPKCS11Provider }, 211 { "pkcs11provider", oPKCS11Provider },
212 { "smartcarddevice", oPKCS11Provider },
212# else 213# else
213 { "smartcarddevice", oUnsupported }, 214 { "smartcarddevice", oUnsupported },
214 { "pkcs11provider", oUnsupported }, 215 { "pkcs11provider", oUnsupported },
@@ -539,8 +540,8 @@ execute_in_shell(const char *cmd)
539 */ 540 */
540static int 541static int
541match_cfg_line(Options *options, char **condition, struct passwd *pw, 542match_cfg_line(Options *options, char **condition, struct passwd *pw,
542 const char *host_arg, const char *original_host, int post_canon, 543 const char *host_arg, const char *original_host, int final_pass,
543 const char *filename, int linenum) 544 int *want_final_pass, const char *filename, int linenum)
544{ 545{
545 char *arg, *oattrib, *attrib, *cmd, *cp = *condition, *host, *criteria; 546 char *arg, *oattrib, *attrib, *cmd, *cp = *condition, *host, *criteria;
546 const char *ruser; 547 const char *ruser;
@@ -554,7 +555,7 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
554 */ 555 */
555 port = options->port <= 0 ? default_ssh_port() : options->port; 556 port = options->port <= 0 ? default_ssh_port() : options->port;
556 ruser = options->user == NULL ? pw->pw_name : options->user; 557 ruser = options->user == NULL ? pw->pw_name : options->user;
557 if (post_canon) { 558 if (final_pass) {
558 host = xstrdup(options->hostname); 559 host = xstrdup(options->hostname);
559 } else if (options->hostname != NULL) { 560 } else if (options->hostname != NULL) {
560 /* NB. Please keep in sync with ssh.c:main() */ 561 /* NB. Please keep in sync with ssh.c:main() */
@@ -586,8 +587,16 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
586 goto out; 587 goto out;
587 } 588 }
588 attributes++; 589 attributes++;
589 if (strcasecmp(attrib, "canonical") == 0) { 590 if (strcasecmp(attrib, "canonical") == 0 ||
590 r = !!post_canon; /* force bitmask member to boolean */ 591 strcasecmp(attrib, "final") == 0) {
592 /*
593 * If the config requests "Match final" then remember
594 * this so we can perform a second pass later.
595 */
596 if (strcasecmp(attrib, "final") == 0 &&
597 want_final_pass != NULL)
598 *want_final_pass = 1;
599 r = !!final_pass; /* force bitmask member to boolean */
591 if (r == (negate ? 1 : 0)) 600 if (r == (negate ? 1 : 0))
592 this_result = result = 0; 601 this_result = result = 0;
593 debug3("%.200s line %d: %smatched '%s'", 602 debug3("%.200s line %d: %smatched '%s'",
@@ -824,14 +833,14 @@ process_config_line(Options *options, struct passwd *pw, const char *host,
824 int linenum, int *activep, int flags) 833 int linenum, int *activep, int flags)
825{ 834{
826 return process_config_line_depth(options, pw, host, original_host, 835 return process_config_line_depth(options, pw, host, original_host,
827 line, filename, linenum, activep, flags, 0); 836 line, filename, linenum, activep, flags, NULL, 0);
828} 837}
829 838
830#define WHITESPACE " \t\r\n" 839#define WHITESPACE " \t\r\n"
831static int 840static int
832process_config_line_depth(Options *options, struct passwd *pw, const char *host, 841process_config_line_depth(Options *options, struct passwd *pw, const char *host,
833 const char *original_host, char *line, const char *filename, 842 const char *original_host, char *line, const char *filename,
834 int linenum, int *activep, int flags, int depth) 843 int linenum, int *activep, int flags, int *want_final_pass, int depth)
835{ 844{
836 char *s, **charptr, *endofnumber, *keyword, *arg, *arg2; 845 char *s, **charptr, *endofnumber, *keyword, *arg, *arg2;
837 char **cpptr, fwdarg[256]; 846 char **cpptr, fwdarg[256];
@@ -1339,7 +1348,8 @@ parse_keytypes:
1339 fatal("Host directive not supported as a command-line " 1348 fatal("Host directive not supported as a command-line "
1340 "option"); 1349 "option");
1341 value = match_cfg_line(options, &s, pw, host, original_host, 1350 value = match_cfg_line(options, &s, pw, host, original_host,
1342 flags & SSHCONF_POSTCANON, filename, linenum); 1351 flags & SSHCONF_FINAL, want_final_pass,
1352 filename, linenum);
1343 if (value < 0) 1353 if (value < 0)
1344 fatal("%.200s line %d: Bad Match condition", filename, 1354 fatal("%.200s line %d: Bad Match condition", filename,
1345 linenum); 1355 linenum);
@@ -1521,7 +1531,7 @@ parse_keytypes:
1521 if (*arg == '~' && (flags & SSHCONF_USERCONF) == 0) 1531 if (*arg == '~' && (flags & SSHCONF_USERCONF) == 0)
1522 fatal("%.200s line %d: bad include path %s.", 1532 fatal("%.200s line %d: bad include path %s.",
1523 filename, linenum, arg); 1533 filename, linenum, arg);
1524 if (*arg != '/' && *arg != '~') { 1534 if (!path_absolute(arg) && *arg != '~') {
1525 xasprintf(&arg2, "%s/%s", 1535 xasprintf(&arg2, "%s/%s",
1526 (flags & SSHCONF_USERCONF) ? 1536 (flags & SSHCONF_USERCONF) ?
1527 "~/" _PATH_SSH_USER_DIR : SSHDIR, arg); 1537 "~/" _PATH_SSH_USER_DIR : SSHDIR, arg);
@@ -1548,7 +1558,7 @@ parse_keytypes:
1548 pw, host, original_host, options, 1558 pw, host, original_host, options,
1549 flags | SSHCONF_CHECKPERM | 1559 flags | SSHCONF_CHECKPERM |
1550 (oactive ? 0 : SSHCONF_NEVERMATCH), 1560 (oactive ? 0 : SSHCONF_NEVERMATCH),
1551 activep, depth + 1); 1561 activep, want_final_pass, depth + 1);
1552 if (r != 1 && errno != ENOENT) { 1562 if (r != 1 && errno != ENOENT) {
1553 fatal("Can't open user config file " 1563 fatal("Can't open user config file "
1554 "%.100s: %.100s", gl.gl_pathv[i], 1564 "%.100s: %.100s", gl.gl_pathv[i],
@@ -1751,19 +1761,20 @@ parse_keytypes:
1751 */ 1761 */
1752int 1762int
1753read_config_file(const char *filename, struct passwd *pw, const char *host, 1763read_config_file(const char *filename, struct passwd *pw, const char *host,
1754 const char *original_host, Options *options, int flags) 1764 const char *original_host, Options *options, int flags,
1765 int *want_final_pass)
1755{ 1766{
1756 int active = 1; 1767 int active = 1;
1757 1768
1758 return read_config_file_depth(filename, pw, host, original_host, 1769 return read_config_file_depth(filename, pw, host, original_host,
1759 options, flags, &active, 0); 1770 options, flags, &active, want_final_pass, 0);
1760} 1771}
1761 1772
1762#define READCONF_MAX_DEPTH 16 1773#define READCONF_MAX_DEPTH 16
1763static int 1774static int
1764read_config_file_depth(const char *filename, struct passwd *pw, 1775read_config_file_depth(const char *filename, struct passwd *pw,
1765 const char *host, const char *original_host, Options *options, 1776 const char *host, const char *original_host, Options *options,
1766 int flags, int *activep, int depth) 1777 int flags, int *activep, int *want_final_pass, int depth)
1767{ 1778{
1768 FILE *f; 1779 FILE *f;
1769 char *line = NULL; 1780 char *line = NULL;
@@ -1798,7 +1809,8 @@ read_config_file_depth(const char *filename, struct passwd *pw,
1798 /* Update line number counter. */ 1809 /* Update line number counter. */
1799 linenum++; 1810 linenum++;
1800 if (process_config_line_depth(options, pw, host, original_host, 1811 if (process_config_line_depth(options, pw, host, original_host,
1801 line, filename, linenum, activep, flags, depth) != 0) 1812 line, filename, linenum, activep, flags, want_final_pass,
1813 depth) != 0)
1802 bad_options++; 1814 bad_options++;
1803 } 1815 }
1804 free(line); 1816 free(line);
@@ -2110,9 +2122,9 @@ fill_default_options(Options * options)
2110 defaults, all)) != 0) \ 2122 defaults, all)) != 0) \
2111 fatal("%s: %s: %s", __func__, #what, ssh_err(r)); \ 2123 fatal("%s: %s: %s", __func__, #what, ssh_err(r)); \
2112 } while (0) 2124 } while (0)
2113 ASSEMBLE(ciphers, KEX_SERVER_ENCRYPT, all_cipher); 2125 ASSEMBLE(ciphers, KEX_CLIENT_ENCRYPT, all_cipher);
2114 ASSEMBLE(macs, KEX_SERVER_MAC, all_mac); 2126 ASSEMBLE(macs, KEX_CLIENT_MAC, all_mac);
2115 ASSEMBLE(kex_algorithms, KEX_SERVER_KEX, all_kex); 2127 ASSEMBLE(kex_algorithms, KEX_CLIENT_KEX, all_kex);
2116 ASSEMBLE(hostbased_key_types, KEX_DEFAULT_PK_ALG, all_key); 2128 ASSEMBLE(hostbased_key_types, KEX_DEFAULT_PK_ALG, all_key);
2117 ASSEMBLE(pubkey_key_types, KEX_DEFAULT_PK_ALG, all_key); 2129 ASSEMBLE(pubkey_key_types, KEX_DEFAULT_PK_ALG, all_key);
2118 ASSEMBLE(ca_sign_algorithms, SSH_ALLOWED_CA_SIGALGS, all_sig); 2130 ASSEMBLE(ca_sign_algorithms, SSH_ALLOWED_CA_SIGALGS, all_sig);
@@ -2135,6 +2147,7 @@ fill_default_options(Options * options)
2135 CLEAR_ON_NONE(options->proxy_command); 2147 CLEAR_ON_NONE(options->proxy_command);
2136 CLEAR_ON_NONE(options->control_path); 2148 CLEAR_ON_NONE(options->control_path);
2137 CLEAR_ON_NONE(options->revoked_host_keys); 2149 CLEAR_ON_NONE(options->revoked_host_keys);
2150 CLEAR_ON_NONE(options->pkcs11_provider);
2138 if (options->jump_host != NULL && 2151 if (options->jump_host != NULL &&
2139 strcmp(options->jump_host, "none") == 0 && 2152 strcmp(options->jump_host, "none") == 0 &&
2140 options->jump_port == 0 && options->jump_user == NULL) { 2153 options->jump_port == 0 && options->jump_user == NULL) {
diff --git a/readconf.h b/readconf.h
index fc7e38251..8e36bf32a 100644
--- a/readconf.h
+++ b/readconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.h,v 1.128 2018/09/20 03:30:44 djm Exp $ */ 1/* $OpenBSD: readconf.h,v 1.129 2018/11/23 05:08:07 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -185,7 +185,7 @@ typedef struct {
185 185
186#define SSHCONF_CHECKPERM 1 /* check permissions on config file */ 186#define SSHCONF_CHECKPERM 1 /* check permissions on config file */
187#define SSHCONF_USERCONF 2 /* user provided config file not system */ 187#define SSHCONF_USERCONF 2 /* user provided config file not system */
188#define SSHCONF_POSTCANON 4 /* After hostname canonicalisation */ 188#define SSHCONF_FINAL 4 /* Final pass over config, after canon. */
189#define SSHCONF_NEVERMATCH 8 /* Match/Host never matches; internal only */ 189#define SSHCONF_NEVERMATCH 8 /* Match/Host never matches; internal only */
190 190
191#define SSH_UPDATE_HOSTKEYS_NO 0 191#define SSH_UPDATE_HOSTKEYS_NO 0
@@ -203,7 +203,7 @@ void fill_default_options_for_canonicalization(Options *);
203int process_config_line(Options *, struct passwd *, const char *, 203int process_config_line(Options *, struct passwd *, const char *,
204 const char *, char *, const char *, int, int *, int); 204 const char *, char *, const char *, int, int *, int);
205int read_config_file(const char *, struct passwd *, const char *, 205int read_config_file(const char *, struct passwd *, const char *,
206 const char *, Options *, int); 206 const char *, Options *, int, int *);
207int parse_forward(struct Forward *, const char *, int, int); 207int parse_forward(struct Forward *, const char *, int, int);
208int parse_jump(const char *, Options *, int); 208int parse_jump(const char *, Options *, int);
209int parse_ssh_uri(const char *, char **, char **, int *); 209int parse_ssh_uri(const char *, char **, char **, int *);
diff --git a/readpass.c b/readpass.c
index f160f866b..44014ef8a 100644
--- a/readpass.c
+++ b/readpass.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: readpass.c,v 1.52 2018/07/18 11:34:04 dtucker Exp $ */ 1/* $OpenBSD: readpass.c,v 1.53 2019/01/19 04:15:56 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -117,7 +117,7 @@ ssh_askpass(char *askpass, const char *msg)
117char * 117char *
118read_passphrase(const char *prompt, int flags) 118read_passphrase(const char *prompt, int flags)
119{ 119{
120 char *askpass = NULL, *ret, buf[1024]; 120 char cr = '\r', *askpass = NULL, *ret, buf[1024];
121 int rppflags, use_askpass = 0, ttyfd; 121 int rppflags, use_askpass = 0, ttyfd;
122 122
123 rppflags = (flags & RP_ECHO) ? RPP_ECHO_ON : RPP_ECHO_OFF; 123 rppflags = (flags & RP_ECHO) ? RPP_ECHO_ON : RPP_ECHO_OFF;
@@ -131,9 +131,16 @@ read_passphrase(const char *prompt, int flags)
131 } else { 131 } else {
132 rppflags |= RPP_REQUIRE_TTY; 132 rppflags |= RPP_REQUIRE_TTY;
133 ttyfd = open(_PATH_TTY, O_RDWR); 133 ttyfd = open(_PATH_TTY, O_RDWR);
134 if (ttyfd >= 0) 134 if (ttyfd >= 0) {
135 /*
136 * If we're on a tty, ensure that show the prompt at
137 * the beginning of the line. This will hopefully
138 * clobber any password characters the user has
139 * optimistically typed before echo is disabled.
140 */
141 (void)write(ttyfd, &cr, 1);
135 close(ttyfd); 142 close(ttyfd);
136 else { 143 } else {
137 debug("read_passphrase: can't open %s: %s", _PATH_TTY, 144 debug("read_passphrase: can't open %s: %s", _PATH_TTY,
138 strerror(errno)); 145 strerror(errno));
139 use_askpass = 1; 146 use_askpass = 1;
diff --git a/regress/Makefile b/regress/Makefile
index 647b4a049..925edf71a 100644
--- a/regress/Makefile
+++ b/regress/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.97 2018/06/07 04:46:34 djm Exp $ 1# $OpenBSD: Makefile,v 1.100 2019/01/20 23:24:19 djm Exp $
2 2
3REGRESS_TARGETS= unit t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t-exec 3REGRESS_TARGETS= unit t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 t11 t12 t-exec
4tests: prep $(REGRESS_TARGETS) 4tests: prep $(REGRESS_TARGETS)
@@ -11,7 +11,6 @@ prep:
11 11
12clean: 12clean:
13 for F in $(CLEANFILES); do rm -f $(OBJ)$$F; done 13 for F in $(CLEANFILES); do rm -f $(OBJ)$$F; done
14 test -z "${SUDO}" || ${SUDO} rm -f ${SUDO_CLEAN}
15 rm -rf $(OBJ).putty 14 rm -rf $(OBJ).putty
16 15
17distclean: clean 16distclean: clean
@@ -92,7 +91,8 @@ LTESTS= connect \
92INTEROP_TESTS= putty-transfer putty-ciphers putty-kex conch-ciphers 91INTEROP_TESTS= putty-transfer putty-ciphers putty-kex conch-ciphers
93#INTEROP_TESTS+=ssh-com ssh-com-client ssh-com-keygen ssh-com-sftp 92#INTEROP_TESTS+=ssh-com ssh-com-client ssh-com-keygen ssh-com-sftp
94 93
95#LTESTS= cipher-speed 94EXTRA_TESTS= agent-pkcs11
95#EXTRA_TESTS+= cipher-speed
96 96
97USERNAME= ${LOGNAME} 97USERNAME= ${LOGNAME}
98CLEANFILES= *.core actual agent-key.* authorized_keys_${USERNAME} \ 98CLEANFILES= *.core actual agent-key.* authorized_keys_${USERNAME} \
@@ -122,8 +122,6 @@ CLEANFILES= *.core actual agent-key.* authorized_keys_${USERNAME} \
122 t8.out t8.out.pub t9.out t9.out.pub testdata \ 122 t8.out t8.out.pub t9.out t9.out.pub testdata \
123 user_*key* user_ca* user_key* 123 user_*key* user_ca* user_key*
124 124
125SUDO_CLEAN+= /var/run/testdata_${USERNAME} /var/run/keycommand_${USERNAME}
126
127# Enable all malloc(3) randomisations and checks 125# Enable all malloc(3) randomisations and checks
128TEST_ENV= "MALLOC_OPTIONS=CFGJRSUX" 126TEST_ENV= "MALLOC_OPTIONS=CFGJRSUX"
129 127
@@ -217,6 +215,13 @@ t-exec-interop: ${INTEROP_TESTS:=.sh}
217 (env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || exit $$?; \ 215 (env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || exit $$?; \
218 done 216 done
219 217
218t-extra: ${EXTRA_TESTS:=.sh}
219 @if [ "x$?" = "x" ]; then exit 0; fi; \
220 for TEST in ""$?; do \
221 echo "run test $${TEST}" ... 1>&2; \
222 (env SUDO="${SUDO}" TEST_ENV=${TEST_ENV} ${TEST_SHELL} ${.CURDIR}/test-exec.sh ${.OBJDIR} ${.CURDIR}/$${TEST}) || exit $$?; \
223 done
224
220# Not run by default 225# Not run by default
221interop: ${INTEROP_TARGETS} 226interop: ${INTEROP_TARGETS}
222 227
diff --git a/regress/agent-pkcs11.sh b/regress/agent-pkcs11.sh
index db3018b88..5205d9067 100644
--- a/regress/agent-pkcs11.sh
+++ b/regress/agent-pkcs11.sh
@@ -1,16 +1,53 @@
1# $OpenBSD: agent-pkcs11.sh,v 1.3 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: agent-pkcs11.sh,v 1.6 2019/01/21 09:13:41 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="pkcs11 agent test" 4tid="pkcs11 agent test"
5 5
6TEST_SSH_PIN="" 6try_token_libs() {
7TEST_SSH_PKCS11=/usr/local/lib/soft-pkcs11.so.0.0 7 for _lib in "$@" ; do
8 if test -f "$_lib" ; then
9 verbose "Using token library $_lib"
10 TEST_SSH_PKCS11="$_lib"
11 return
12 fi
13 done
14 echo "skipped: Unable to find PKCS#11 token library"
15 exit 0
16}
17
18try_token_libs \
19 /usr/local/lib/softhsm/libsofthsm2.so \
20 /usr/lib64/pkcs11/libsofthsm2.so \
21 /usr/lib/x86_64-linux-gnu/softhsm/libsofthsm2.so
22
23TEST_SSH_PIN=1234
24TEST_SSH_SOPIN=12345678
25if [ "x$TEST_SSH_SSHPKCS11HELPER" != "x" ]; then
26 SSH_PKCS11_HELPER="${TEST_SSH_SSHPKCS11HELPER}"
27 export SSH_PKCS11_HELPER
28fi
8 29
9test -f "$TEST_SSH_PKCS11" || fatal "$TEST_SSH_PKCS11 does not exist" 30test -f "$TEST_SSH_PKCS11" || fatal "$TEST_SSH_PKCS11 does not exist"
10 31
11# setup environment for soft-pkcs11 token 32# setup environment for softhsm2 token
12SOFTPKCS11RC=$OBJ/pkcs11.info 33DIR=$OBJ/SOFTHSM
13export SOFTPKCS11RC 34rm -rf $DIR
35TOKEN=$DIR/tokendir
36mkdir -p $TOKEN
37SOFTHSM2_CONF=$DIR/softhsm2.conf
38export SOFTHSM2_CONF
39cat > $SOFTHSM2_CONF << EOF
40# SoftHSM v2 configuration file
41directories.tokendir = ${TOKEN}
42objectstore.backend = file
43# ERROR, WARNING, INFO, DEBUG
44log.level = DEBUG
45# If CKF_REMOVABLE_DEVICE flag should be set
46slots.removable = false
47EOF
48out=$(softhsm2-util --init-token --free --label token-slot-0 --pin "$TEST_SSH_PIN" --so-pin "$TEST_SSH_SOPIN")
49slot=$(echo -- $out | sed 's/.* //')
50
14# prevent ssh-agent from calling ssh-askpass 51# prevent ssh-agent from calling ssh-askpass
15SSH_ASKPASS=/usr/bin/true 52SSH_ASKPASS=/usr/bin/true
16export SSH_ASKPASS 53export SSH_ASKPASS
@@ -22,22 +59,27 @@ notty() {
22 if (fork) { wait; exit($? >> 8); } else { exec(@ARGV) }' "$@" 59 if (fork) { wait; exit($? >> 8); } else { exec(@ARGV) }' "$@"
23} 60}
24 61
62trace "generating keys"
63RSA=${DIR}/RSA
64EC=${DIR}/EC
65openssl genpkey -algorithm rsa > $RSA
66openssl pkcs8 -nocrypt -in $RSA |\
67 softhsm2-util --slot "$slot" --label 01 --id 01 --pin "$TEST_SSH_PIN" --import /dev/stdin
68openssl genpkey \
69 -genparam \
70 -algorithm ec \
71 -pkeyopt ec_paramgen_curve:prime256v1 |\
72 openssl genpkey \
73 -paramfile /dev/stdin > $EC
74openssl pkcs8 -nocrypt -in $EC |\
75 softhsm2-util --slot "$slot" --label 02 --id 02 --pin "$TEST_SSH_PIN" --import /dev/stdin
76
25trace "start agent" 77trace "start agent"
26eval `${SSHAGENT} -s` > /dev/null 78eval `${SSHAGENT} -s` > /dev/null
27r=$? 79r=$?
28if [ $r -ne 0 ]; then 80if [ $r -ne 0 ]; then
29 fail "could not start ssh-agent: exit code $r" 81 fail "could not start ssh-agent: exit code $r"
30else 82else
31 trace "generating key/cert"
32 rm -f $OBJ/pkcs11.key $OBJ/pkcs11.crt
33 openssl genrsa -out $OBJ/pkcs11.key 2048 > /dev/null 2>&1
34 chmod 600 $OBJ/pkcs11.key
35 openssl req -key $OBJ/pkcs11.key -new -x509 \
36 -out $OBJ/pkcs11.crt -text -subj '/CN=pkcs11 test' > /dev/null
37 printf "a\ta\t$OBJ/pkcs11.crt\t$OBJ/pkcs11.key" > $SOFTPKCS11RC
38 # add to authorized keys
39 ${SSHKEYGEN} -y -f $OBJ/pkcs11.key > $OBJ/authorized_keys_$USER
40
41 trace "add pkcs11 key to agent" 83 trace "add pkcs11 key to agent"
42 echo ${TEST_SSH_PIN} | notty ${SSHADD} -s ${TEST_SSH_PKCS11} > /dev/null 2>&1 84 echo ${TEST_SSH_PIN} | notty ${SSHADD} -s ${TEST_SSH_PKCS11} > /dev/null 2>&1
43 r=$? 85 r=$?
@@ -52,12 +94,23 @@ else
52 fail "ssh-add -l failed: exit code $r" 94 fail "ssh-add -l failed: exit code $r"
53 fi 95 fi
54 96
55 trace "pkcs11 connect via agent" 97 for k in $RSA $EC; do
56 ${SSH} -F $OBJ/ssh_proxy somehost exit 5 98 trace "testing $k"
57 r=$? 99 chmod 600 $k
58 if [ $r -ne 5 ]; then 100 ssh-keygen -y -f $k > $k.pub
59 fail "ssh connect failed (exit code $r)" 101 pub=$(cat $k.pub)
60 fi 102 ${SSHADD} -L | grep -q "$pub" || fail "key $k missing in ssh-add -L"
103 ${SSHADD} -T $k.pub || fail "ssh-add -T with $k failed"
104
105 # add to authorized keys
106 cat $k.pub > $OBJ/authorized_keys_$USER
107 trace "pkcs11 connect via agent ($k)"
108 ${SSH} -F $OBJ/ssh_proxy somehost exit 5
109 r=$?
110 if [ $r -ne 5 ]; then
111 fail "ssh connect failed (exit code $r)"
112 fi
113 done
61 114
62 trace "remove pkcs11 keys" 115 trace "remove pkcs11 keys"
63 echo ${TEST_SSH_PIN} | notty ${SSHADD} -e ${TEST_SSH_PKCS11} > /dev/null 2>&1 116 echo ${TEST_SSH_PIN} | notty ${SSHADD} -e ${TEST_SSH_PKCS11} > /dev/null 2>&1
diff --git a/regress/agent-timeout.sh b/regress/agent-timeout.sh
index 9598c2032..80012f80c 100644
--- a/regress/agent-timeout.sh
+++ b/regress/agent-timeout.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent-timeout.sh,v 1.3 2015/03/03 22:35:19 markus Exp $ 1# $OpenBSD: agent-timeout.sh,v 1.4 2019/01/28 00:08:26 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="agent timeout test" 4tid="agent timeout test"
@@ -12,16 +12,18 @@ if [ $r -ne 0 ]; then
12 fail "could not start ssh-agent: exit code $r" 12 fail "could not start ssh-agent: exit code $r"
13else 13else
14 trace "add keys with timeout" 14 trace "add keys with timeout"
15 keys=0
15 for t in ${SSH_KEYTYPES}; do 16 for t in ${SSH_KEYTYPES}; do
16 ${SSHADD} -t ${SSHAGENT_TIMEOUT} $OBJ/$t > /dev/null 2>&1 17 ${SSHADD} -t ${SSHAGENT_TIMEOUT} $OBJ/$t > /dev/null 2>&1
17 if [ $? -ne 0 ]; then 18 if [ $? -ne 0 ]; then
18 fail "ssh-add did succeed exit code 0" 19 fail "ssh-add did succeed exit code 0"
19 fi 20 fi
21 keys=$((${keys} + 1))
20 done 22 done
21 n=`${SSHADD} -l 2> /dev/null | wc -l` 23 n=`${SSHADD} -l 2> /dev/null | wc -l`
22 trace "agent has $n keys" 24 trace "agent has $n keys"
23 if [ $n -ne 2 ]; then 25 if [ $n -ne $keys ]; then
24 fail "ssh-add -l did not return 2 keys: $n" 26 fail "ssh-add -l did not return $keys keys: $n"
25 fi 27 fi
26 trace "sleeping 2*${SSHAGENT_TIMEOUT} seconds" 28 trace "sleeping 2*${SSHAGENT_TIMEOUT} seconds"
27 sleep ${SSHAGENT_TIMEOUT} 29 sleep ${SSHAGENT_TIMEOUT}
diff --git a/regress/agent.sh b/regress/agent.sh
index 7111056c9..788b02064 100644
--- a/regress/agent.sh
+++ b/regress/agent.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent.sh,v 1.13 2017/12/19 00:49:30 djm Exp $ 1# $OpenBSD: agent.sh,v 1.14 2019/01/28 00:12:36 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="simple agent test" 4tid="simple agent test"
@@ -27,6 +27,9 @@ ${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_ca_key \
27trace "overwrite authorized keys" 27trace "overwrite authorized keys"
28printf '' > $OBJ/authorized_keys_$USER 28printf '' > $OBJ/authorized_keys_$USER
29 29
30echo "PubkeyAcceptedKeyTypes +ssh-dss" >> $OBJ/ssh_proxy
31echo "PubkeyAcceptedKeyTypes +ssh-dss" >> $OBJ/sshd_proxy
32
30for t in ${SSH_KEYTYPES}; do 33for t in ${SSH_KEYTYPES}; do
31 # generate user key for agent 34 # generate user key for agent
32 rm -f $OBJ/$t-agent $OBJ/$t-agent.pub* 35 rm -f $OBJ/$t-agent $OBJ/$t-agent.pub*
@@ -96,6 +99,7 @@ fi
96(printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \ 99(printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \
97 > $OBJ/authorized_keys_$USER 100 > $OBJ/authorized_keys_$USER
98for t in ${SSH_KEYTYPES}; do 101for t in ${SSH_KEYTYPES}; do
102 if [ "$t" != "ssh-dss" ]; then
99 trace "connect via agent using $t key" 103 trace "connect via agent using $t key"
100 ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \ 104 ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
101 -oCertificateFile=$OBJ/$t-agent-cert.pub \ 105 -oCertificateFile=$OBJ/$t-agent-cert.pub \
@@ -104,6 +108,7 @@ for t in ${SSH_KEYTYPES}; do
104 if [ $r -ne 52 ]; then 108 if [ $r -ne 52 ]; then
105 fail "ssh connect with failed (exit code $r)" 109 fail "ssh connect with failed (exit code $r)"
106 fi 110 fi
111 fi
107done 112done
108 113
109trace "delete all agent keys" 114trace "delete all agent keys"
diff --git a/regress/cert-hostkey.sh b/regress/cert-hostkey.sh
index d2ecd318b..3ce777967 100644
--- a/regress/cert-hostkey.sh
+++ b/regress/cert-hostkey.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: cert-hostkey.sh,v 1.16 2018/07/03 11:43:49 djm Exp $ 1# $OpenBSD: cert-hostkey.sh,v 1.17 2018/10/31 11:09:27 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="certified host keys" 4tid="certified host keys"
@@ -127,7 +127,7 @@ attempt_connect() {
127} 127}
128 128
129# Basic connect and revocation tests. 129# Basic connect and revocation tests.
130for privsep in yes no ; do 130for privsep in yes sandbox ; do
131 for ktype in $PLAIN_TYPES ; do 131 for ktype in $PLAIN_TYPES ; do
132 verbose "$tid: host ${ktype} cert connect privsep $privsep" 132 verbose "$tid: host ${ktype} cert connect privsep $privsep"
133 ( 133 (
@@ -165,7 +165,7 @@ for ktype in $PLAIN_TYPES ; do
165 kh_revoke cert_host_key_${ktype}.pub >> $OBJ/known_hosts-cert.orig 165 kh_revoke cert_host_key_${ktype}.pub >> $OBJ/known_hosts-cert.orig
166done 166done
167cp $OBJ/known_hosts-cert.orig $OBJ/known_hosts-cert 167cp $OBJ/known_hosts-cert.orig $OBJ/known_hosts-cert
168for privsep in yes no ; do 168for privsep in yes sandbox ; do
169 for ktype in $PLAIN_TYPES ; do 169 for ktype in $PLAIN_TYPES ; do
170 verbose "$tid: host ${ktype} revoked cert privsep $privsep" 170 verbose "$tid: host ${ktype} revoked cert privsep $privsep"
171 ( 171 (
diff --git a/regress/cert-userkey.sh b/regress/cert-userkey.sh
index 30c2c156d..6849e9922 100644
--- a/regress/cert-userkey.sh
+++ b/regress/cert-userkey.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: cert-userkey.sh,v 1.19 2018/03/12 00:54:04 djm Exp $ 1# $OpenBSD: cert-userkey.sh,v 1.20 2018/10/31 11:09:27 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="certified user keys" 4tid="certified user keys"
@@ -47,7 +47,7 @@ done
47# Test explicitly-specified principals 47# Test explicitly-specified principals
48for ktype in $EXTRA_TYPES $PLAIN_TYPES ; do 48for ktype in $EXTRA_TYPES $PLAIN_TYPES ; do
49 t=$(kname $ktype) 49 t=$(kname $ktype)
50 for privsep in yes no ; do 50 for privsep in yes sandbox ; do
51 _prefix="${ktype} privsep $privsep" 51 _prefix="${ktype} privsep $privsep"
52 52
53 # Setup for AuthorizedPrincipalsFile 53 # Setup for AuthorizedPrincipalsFile
diff --git a/regress/keys-command.sh b/regress/keys-command.sh
index 4029e2c78..d166fc589 100644
--- a/regress/keys-command.sh
+++ b/regress/keys-command.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: keys-command.sh,v 1.4 2016/09/26 21:34:38 bluhm Exp $ 1# $OpenBSD: keys-command.sh,v 1.5 2018/11/22 08:48:32 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="authorized keys from command" 4tid="authorized keys from command"
@@ -19,7 +19,8 @@ expected_key_fp=`$SSHKEYGEN -lf $OBJ/rsa.pub | awk '{ print $2 }'`
19 19
20# Establish a AuthorizedKeysCommand in /var/run where it will have 20# Establish a AuthorizedKeysCommand in /var/run where it will have
21# acceptable directory permissions. 21# acceptable directory permissions.
22KEY_COMMAND="/var/run/keycommand_${LOGNAME}" 22KEY_COMMAND="/var/run/keycommand_${LOGNAME}.$$"
23trap "${SUDO} rm -f ${KEY_COMMAND}" 0
23cat << _EOF | $SUDO sh -c "rm -f '$KEY_COMMAND' ; cat > '$KEY_COMMAND'" 24cat << _EOF | $SUDO sh -c "rm -f '$KEY_COMMAND' ; cat > '$KEY_COMMAND'"
24#!/bin/sh 25#!/bin/sh
25echo args: "\$@" >> $OBJ/keys-command-args 26echo args: "\$@" >> $OBJ/keys-command-args
@@ -78,5 +79,3 @@ if [ -x $KEY_COMMAND ]; then
78else 79else
79 echo "SKIPPED: $KEY_COMMAND not executable (/var/run mounted noexec?)" 80 echo "SKIPPED: $KEY_COMMAND not executable (/var/run mounted noexec?)"
80fi 81fi
81
82$SUDO rm -f $KEY_COMMAND
diff --git a/regress/keyscan.sh b/regress/keyscan.sh
index 3bde1219a..8940d24b6 100644
--- a/regress/keyscan.sh
+++ b/regress/keyscan.sh
@@ -1,14 +1,20 @@
1# $OpenBSD: keyscan.sh,v 1.6 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: keyscan.sh,v 1.9 2019/01/28 03:50:39 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="keyscan" 4tid="keyscan"
5 5
6# remove DSA hostkey 6KEYTYPES=`${SSH} -Q key-plain`
7rm -f ${OBJ}/host.dsa 7for i in $KEYTYPES; do
8 if [ -z "$algs" ]; then
9 algs="$i"
10 else
11 algs="$algs,$i"
12 fi
13done
14echo "HostKeyAlgorithms $algs" >> $OBJ/sshd_config
8 15
9start_sshd 16start_sshd
10 17
11KEYTYPES=`${SSH} -Q key-plain`
12for t in $KEYTYPES; do 18for t in $KEYTYPES; do
13 trace "keyscan type $t" 19 trace "keyscan type $t"
14 ${SSHKEYSCAN} -t $t -p $PORT 127.0.0.1 127.0.0.1 127.0.0.1 \ 20 ${SSHKEYSCAN} -t $t -p $PORT 127.0.0.1 127.0.0.1 127.0.0.1 \
diff --git a/regress/misc/kexfuzz/Makefile b/regress/misc/kexfuzz/Makefile
index a7bb6b70d..20802cb87 100644
--- a/regress/misc/kexfuzz/Makefile
+++ b/regress/misc/kexfuzz/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.3 2017/12/21 05:46:35 djm Exp $ 1# $OpenBSD: Makefile,v 1.4 2019/01/21 12:50:12 djm Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.include <bsd.obj.mk> 4.include <bsd.obj.mk>
@@ -18,12 +18,21 @@ SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c
18SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c 18SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
19SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c 19SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
20SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c 20SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c
21SRCS+=kex.c kexc25519.c kexc25519c.c kexc25519s.c kexdh.c kexdhc.c kexdhs.c 21SRCS+=compat.c ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
22SRCS+=kexecdh.c kexecdhc.c kexecdhs.c kexgex.c kexgexc.c kexgexs.c
23SRCS+=dh.c compat.c
24SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
25SRCS+=cipher-chachapoly.c chacha.c poly1305.c 22SRCS+=cipher-chachapoly.c chacha.c poly1305.c
26SRCS+=smult_curve25519_ref.c 23
24SRCS+= kex.c
25SRCS+= dh.c
26SRCS+= kexdh.c
27SRCS+= kexecdh.c
28SRCS+= kexgex.c
29SRCS+= kexgexc.c
30SRCS+= kexgexs.c
31SRCS+= kexc25519.c
32SRCS+= smult_curve25519_ref.c
33SRCS+= kexgen.c
34SRCS+= kexsntrup4591761x25519.c
35SRCS+= sntrup4591761.c
27 36
28SRCS+=digest-openssl.c 37SRCS+=digest-openssl.c
29#SRCS+=digest-libc.c 38#SRCS+=digest-libc.c
diff --git a/regress/misc/kexfuzz/kexfuzz.c b/regress/misc/kexfuzz/kexfuzz.c
index 3e2c48160..7051e87b1 100644
--- a/regress/misc/kexfuzz/kexfuzz.c
+++ b/regress/misc/kexfuzz/kexfuzz.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexfuzz.c,v 1.4 2017/04/30 23:34:55 djm Exp $ */ 1/* $OpenBSD: kexfuzz.c,v 1.5 2019/01/21 12:50:12 djm Exp $ */
2/* 2/*
3 * Fuzz harness for KEX code 3 * Fuzz harness for KEX code
4 * 4 *
@@ -29,8 +29,6 @@
29#include "authfile.h" 29#include "authfile.h"
30#include "log.h" 30#include "log.h"
31 31
32struct ssh *active_state = NULL; /* XXX - needed for linking */
33
34void kex_tests(void); 32void kex_tests(void);
35static int do_debug = 0; 33static int do_debug = 0;
36 34
@@ -275,18 +273,18 @@ do_kex_with_key(const char *kex, struct sshkey *prvkey, int *c2s, int *s2c,
275 ASSERT_PTR_NE(server2->kex, NULL); 273 ASSERT_PTR_NE(server2->kex, NULL);
276 /* XXX we need to set the callbacks */ 274 /* XXX we need to set the callbacks */
277#ifdef WITH_OPENSSL 275#ifdef WITH_OPENSSL
278 server2->kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; 276 server2->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server;
279 server2->kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; 277 server2->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server;
280 server2->kex->kex[KEX_DH_GRP14_SHA256] = kexdh_server; 278 server2->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server;
281 server2->kex->kex[KEX_DH_GRP16_SHA512] = kexdh_server; 279 server2->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server;
282 server2->kex->kex[KEX_DH_GRP18_SHA512] = kexdh_server; 280 server2->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
283 server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; 281 server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
284 server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; 282 server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
285# ifdef OPENSSL_HAS_ECC 283# ifdef OPENSSL_HAS_ECC
286 server2->kex->kex[KEX_ECDH_SHA2] = kexecdh_server; 284 server2->kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
287# endif 285# endif
288#endif 286#endif
289 server2->kex->kex[KEX_C25519_SHA256] = kexc25519_server; 287 server2->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
290 server2->kex->load_host_public_key = server->kex->load_host_public_key; 288 server2->kex->load_host_public_key = server->kex->load_host_public_key;
291 server2->kex->load_host_private_key = server->kex->load_host_private_key; 289 server2->kex->load_host_private_key = server->kex->load_host_private_key;
292 server2->kex->sign = server->kex->sign; 290 server2->kex->sign = server->kex->sign;
diff --git a/regress/multiplex.sh b/regress/multiplex.sh
index a6fad8eb8..de357c4d5 100644
--- a/regress/multiplex.sh
+++ b/regress/multiplex.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: multiplex.sh,v 1.28 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: multiplex.sh,v 1.29 2019/01/01 22:20:16 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4make_tmpdir 4make_tmpdir
@@ -142,7 +142,8 @@ ${SSH} -F $OBJ/ssh_config -p$P otherhost true \
142verbose "test $tid: cmd forward local (UNIX)" 142verbose "test $tid: cmd forward local (UNIX)"
143${SSH} -F $OBJ/ssh_config -S $CTL -Oforward -L $OBJ/unix-1.fwd:localhost:$PORT otherhost \ 143${SSH} -F $OBJ/ssh_config -S $CTL -Oforward -L $OBJ/unix-1.fwd:localhost:$PORT otherhost \
144 || fail "request local forward failed" 144 || fail "request local forward failed"
145echo "" | $NC -U $OBJ/unix-1.fwd | grep "Protocol mismatch" >/dev/null 2>&1 \ 145echo "" | $NC -U $OBJ/unix-1.fwd | \
146 grep "Invalid SSH identification string" >/dev/null 2>&1 \
146 || fail "connect to local forward path failed" 147 || fail "connect to local forward path failed"
147${SSH} -F $OBJ/ssh_config -S $CTL -Ocancel -L $OBJ/unix-1.fwd:localhost:$PORT otherhost \ 148${SSH} -F $OBJ/ssh_config -S $CTL -Ocancel -L $OBJ/unix-1.fwd:localhost:$PORT otherhost \
148 || fail "cancel local forward failed" 149 || fail "cancel local forward failed"
@@ -153,7 +154,8 @@ rm -f $OBJ/unix-1.fwd
153verbose "test $tid: cmd forward remote (UNIX)" 154verbose "test $tid: cmd forward remote (UNIX)"
154${SSH} -F $OBJ/ssh_config -S $CTL -Oforward -R $OBJ/unix-1.fwd:localhost:$PORT otherhost \ 155${SSH} -F $OBJ/ssh_config -S $CTL -Oforward -R $OBJ/unix-1.fwd:localhost:$PORT otherhost \
155 || fail "request remote forward failed" 156 || fail "request remote forward failed"
156echo "" | $NC -U $OBJ/unix-1.fwd | grep "Protocol mismatch" >/dev/null 2>&1 \ 157echo "" | $NC -U $OBJ/unix-1.fwd | \
158 grep "Invalid SSH identification string" >/dev/null 2>&1 \
157 || fail "connect to remote forwarded path failed" 159 || fail "connect to remote forwarded path failed"
158${SSH} -F $OBJ/ssh_config -S $CTL -Ocancel -R $OBJ/unix-1.fwd:localhost:$PORT otherhost \ 160${SSH} -F $OBJ/ssh_config -S $CTL -Ocancel -R $OBJ/unix-1.fwd:localhost:$PORT otherhost \
159 || fail "cancel remote forward failed" 161 || fail "cancel remote forward failed"
diff --git a/regress/multipubkey.sh b/regress/multipubkey.sh
index e9d15306f..4d443ec45 100644
--- a/regress/multipubkey.sh
+++ b/regress/multipubkey.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: multipubkey.sh,v 1.1 2014/12/22 08:06:03 djm Exp $ 1# $OpenBSD: multipubkey.sh,v 1.2 2018/10/31 11:09:27 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="multiple pubkey" 4tid="multiple pubkey"
@@ -31,7 +31,7 @@ grep -v IdentityFile $OBJ/ssh_proxy.orig > $OBJ/ssh_proxy
31opts="-oProtocol=2 -F $OBJ/ssh_proxy -oIdentitiesOnly=yes" 31opts="-oProtocol=2 -F $OBJ/ssh_proxy -oIdentitiesOnly=yes"
32opts="$opts -i $OBJ/cert_user_key1 -i $OBJ/user_key1 -i $OBJ/user_key2" 32opts="$opts -i $OBJ/cert_user_key1 -i $OBJ/user_key1 -i $OBJ/user_key2"
33 33
34for privsep in no yes; do 34for privsep in yes sandbox ; do
35 ( 35 (
36 grep -v "Protocol" $OBJ/sshd_proxy.orig 36 grep -v "Protocol" $OBJ/sshd_proxy.orig
37 echo "Protocol 2" 37 echo "Protocol 2"
diff --git a/regress/principals-command.sh b/regress/principals-command.sh
index bcc68e80b..197c00021 100644
--- a/regress/principals-command.sh
+++ b/regress/principals-command.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: principals-command.sh,v 1.4 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: principals-command.sh,v 1.6 2018/11/22 08:48:32 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="authorized principals command" 4tid="authorized principals command"
@@ -30,7 +30,8 @@ CA_FP=`${SSHKEYGEN} -lf $OBJ/user_ca_key.pub | awk '{ print $2 }'`
30 30
31# Establish a AuthorizedPrincipalsCommand in /var/run where it will have 31# Establish a AuthorizedPrincipalsCommand in /var/run where it will have
32# acceptable directory permissions. 32# acceptable directory permissions.
33PRINCIPALS_COMMAND="/var/run/principals_command_${LOGNAME}" 33PRINCIPALS_COMMAND="/var/run/principals_command_${LOGNAME}.$$"
34trap "$SUDO rm -f ${PRINCIPALS_COMMAND}" 0
34cat << _EOF | $SUDO sh -c "cat > '$PRINCIPALS_COMMAND'" 35cat << _EOF | $SUDO sh -c "cat > '$PRINCIPALS_COMMAND'"
35#!/bin/sh 36#!/bin/sh
36test "x\$1" != "x${LOGNAME}" && exit 1 37test "x\$1" != "x${LOGNAME}" && exit 1
@@ -57,7 +58,7 @@ fi
57 58
58if [ -x $PRINCIPALS_COMMAND ]; then 59if [ -x $PRINCIPALS_COMMAND ]; then
59 # Test explicitly-specified principals 60 # Test explicitly-specified principals
60 for privsep in yes no ; do 61 for privsep in yes sandbox ; do
61 _prefix="privsep $privsep" 62 _prefix="privsep $privsep"
62 63
63 # Setup for AuthorizedPrincipalsCommand 64 # Setup for AuthorizedPrincipalsCommand
diff --git a/regress/sftp-chroot.sh b/regress/sftp-chroot.sh
index ba5bd1efb..5acc4d2de 100644
--- a/regress/sftp-chroot.sh
+++ b/regress/sftp-chroot.sh
@@ -1,11 +1,12 @@
1# $OpenBSD: sftp-chroot.sh,v 1.6 2018/02/09 03:42:57 dtucker Exp $ 1# $OpenBSD: sftp-chroot.sh,v 1.7 2018/11/22 08:48:32 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sftp in chroot" 4tid="sftp in chroot"
5 5
6CHROOT=/var/run 6CHROOT=/var/run
7FILENAME=testdata_${USER} 7FILENAME=testdata_${USER}.$$
8PRIVDATA=${CHROOT}/${FILENAME} 8PRIVDATA=${CHROOT}/${FILENAME}
9trap "${SUDO} rm -f ${PRIVDATA}" 0
9 10
10if [ -z "$SUDO" -a ! -w /var/run ]; then 11if [ -z "$SUDO" -a ! -w /var/run ]; then
11 echo "need SUDO to create file in /var/run, test won't work without" 12 echo "need SUDO to create file in /var/run, test won't work without"
@@ -28,5 +29,3 @@ ${SFTP} -S "$SSH" -F $OBJ/ssh_config host:/${FILENAME} $COPY \
28 >>$TEST_REGRESS_LOGFILE 2>&1 || \ 29 >>$TEST_REGRESS_LOGFILE 2>&1 || \
29 fatal "Fetch ${FILENAME} failed" 30 fatal "Fetch ${FILENAME} failed"
30cmp $PRIVDATA $COPY || fail "$PRIVDATA $COPY differ" 31cmp $PRIVDATA $COPY || fail "$PRIVDATA $COPY differ"
31
32$SUDO rm $PRIVDATA
diff --git a/regress/sftp-cmds.sh b/regress/sftp-cmds.sh
index aad7fcac2..1289c4089 100644
--- a/regress/sftp-cmds.sh
+++ b/regress/sftp-cmds.sh
@@ -77,7 +77,6 @@ echo "get \"$DATA\" $COPY" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 \
77 || fail "get failed" 77 || fail "get failed"
78cmp $DATA ${COPY} || fail "corrupted copy after get" 78cmp $DATA ${COPY} || fail "corrupted copy after get"
79 79
80if [ "$os" != "cygwin" ]; then
81rm -f ${QUOTECOPY} 80rm -f ${QUOTECOPY}
82cp $DATA ${QUOTECOPY} 81cp $DATA ${QUOTECOPY}
83verbose "$tid: get filename with quotes" 82verbose "$tid: get filename with quotes"
@@ -85,7 +84,6 @@ echo "get \"$QUOTECOPY_ARG\" ${COPY}" | ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1
85 || fail "get failed" 84 || fail "get failed"
86cmp ${COPY} ${QUOTECOPY} || fail "corrupted copy after get with quotes" 85cmp ${COPY} ${QUOTECOPY} || fail "corrupted copy after get with quotes"
87rm -f ${QUOTECOPY} ${COPY} 86rm -f ${QUOTECOPY} ${COPY}
88fi
89 87
90rm -f "$SPACECOPY" ${COPY} 88rm -f "$SPACECOPY" ${COPY}
91cp $DATA "$SPACECOPY" 89cp $DATA "$SPACECOPY"
@@ -136,13 +134,11 @@ echo "put $DATA $COPY" | \
136 ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed" 134 ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
137cmp $DATA ${COPY} || fail "corrupted copy after put" 135cmp $DATA ${COPY} || fail "corrupted copy after put"
138 136
139if [ "$os" != "cygwin" ]; then
140rm -f ${QUOTECOPY} 137rm -f ${QUOTECOPY}
141verbose "$tid: put filename with quotes" 138verbose "$tid: put filename with quotes"
142echo "put $DATA \"$QUOTECOPY_ARG\"" | \ 139echo "put $DATA \"$QUOTECOPY_ARG\"" | \
143 ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed" 140 ${SFTP} -D ${SFTPSERVER} >/dev/null 2>&1 || fail "put failed"
144cmp $DATA ${QUOTECOPY} || fail "corrupted copy after put with quotes" 141cmp $DATA ${QUOTECOPY} || fail "corrupted copy after put with quotes"
145fi
146 142
147rm -f "$SPACECOPY" 143rm -f "$SPACECOPY"
148verbose "$tid: put filename with spaces" 144verbose "$tid: put filename with spaces"
diff --git a/regress/test-exec.sh b/regress/test-exec.sh
index 40d46e3cd..b8e2009de 100644
--- a/regress/test-exec.sh
+++ b/regress/test-exec.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: test-exec.sh,v 1.64 2018/08/10 01:35:49 dtucker Exp $ 1# $OpenBSD: test-exec.sh,v 1.65 2019/01/27 06:30:53 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4#SUDO=sudo 4#SUDO=sudo
@@ -12,10 +12,6 @@ OSF1*)
12 BIN_SH=xpg4 12 BIN_SH=xpg4
13 export BIN_SH 13 export BIN_SH
14 ;; 14 ;;
15CYGWIN_NT-5.0)
16 os=cygwin
17 TEST_SSH_IPV6=no
18 ;;
19CYGWIN*) 15CYGWIN*)
20 os=cygwin 16 os=cygwin
21 ;; 17 ;;
@@ -469,11 +465,11 @@ fi
469 465
470rm -f $OBJ/known_hosts $OBJ/authorized_keys_$USER 466rm -f $OBJ/known_hosts $OBJ/authorized_keys_$USER
471 467
472SSH_KEYTYPES="rsa ed25519" 468SSH_KEYTYPES=`$SSH -Q key-plain`
473 469
474trace "generate keys"
475for t in ${SSH_KEYTYPES}; do 470for t in ${SSH_KEYTYPES}; do
476 # generate user key 471 # generate user key
472 trace "generating key type $t"
477 if [ ! -f $OBJ/$t ] || [ ${SSHKEYGEN_BIN} -nt $OBJ/$t ]; then 473 if [ ! -f $OBJ/$t ] || [ ${SSHKEYGEN_BIN} -nt $OBJ/$t ]; then
478 rm -f $OBJ/$t 474 rm -f $OBJ/$t
479 ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t ||\ 475 ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t ||\
diff --git a/regress/unittests/Makefile.inc b/regress/unittests/Makefile.inc
index b509f4452..428ef6836 100644
--- a/regress/unittests/Makefile.inc
+++ b/regress/unittests/Makefile.inc
@@ -1,8 +1,25 @@
1# $OpenBSD: Makefile.inc,v 1.12 2017/12/21 00:41:22 djm Exp $ 1# $OpenBSD: Makefile.inc,v 1.13 2018/10/17 23:28:05 djm Exp $
2
3REGRESS_FAIL_EARLY?= yes
2 4
3.include <bsd.own.mk> 5.include <bsd.own.mk>
4.include <bsd.obj.mk> 6.include <bsd.obj.mk>
5 7
8# User-settable options
9UNITTEST_FAST?= no # Skip slow tests (e.g. less intensive fuzzing).
10UNITTEST_SLOW?= no # Include slower tests (e.g. more intensive fuzzing).
11UNITTEST_VERBOSE?= no # Verbose test output (inc. per-test names).
12
13MALLOC_OPTIONS?= CFGJRSUX
14TEST_ENV?= MALLOC_OPTIONS=${MALLOC_OPTIONS}
15
16# XXX detect from ssh binary?
17OPENSSL?= yes
18
19.if (${OPENSSL:L} == "yes")
20CFLAGS+= -DWITH_OPENSSL
21.endif
22
6# enable warnings 23# enable warnings
7WARNINGS=Yes 24WARNINGS=Yes
8 25
@@ -49,5 +66,21 @@ DPADD+=${.CURDIR}/../test_helper/libtest_helper.a
49 66
50.PATH: ${.CURDIR}/${SSHREL} 67.PATH: ${.CURDIR}/${SSHREL}
51 68
69LDADD+= -lutil
70DPADD+= ${LIBUTIL}
71
72.if (${OPENSSL:L} == "yes")
52LDADD+= -lcrypto 73LDADD+= -lcrypto
53DPADD+= ${LIBCRYPTO} 74DPADD+= ${LIBCRYPTO}
75.endif
76
77UNITTEST_ARGS?=
78
79.if (${UNITTEST_VERBOSE:L} != "no")
80UNITTEST_ARGS+= -v
81.endif
82.if (${UNITTEST_FAST:L} != "no")
83UNITTEST_ARGS+= -f
84.elif (${UNITTEST_SLOW:L} != "no")
85UNITTEST_ARGS+= -F
86.endif
diff --git a/regress/unittests/kex/Makefile b/regress/unittests/kex/Makefile
index 5c61307a3..7b4c644e5 100644
--- a/regress/unittests/kex/Makefile
+++ b/regress/unittests/kex/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $ 1# $OpenBSD: Makefile,v 1.6 2019/01/21 12:35:20 djm Exp $
2 2
3PROG=test_kex 3PROG=test_kex
4SRCS=tests.c test_kex.c 4SRCS=tests.c test_kex.c
@@ -9,12 +9,21 @@ SRCS+=atomicio.c sshkey.c authfile.c cipher.c log.c ssh-rsa.c ssh-dss.c
9SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c 9SRCS+=ssh-ecdsa.c ssh-ed25519.c mac.c umac.c umac128.c hmac.c misc.c
10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c 10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
11SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c 11SRCS+=addrmatch.c bitmap.c packet.c dispatch.c canohost.c ssh_api.c
12SRCS+=kex.c kexc25519.c kexc25519c.c kexc25519s.c kexdh.c kexdhc.c kexdhs.c 12SRCS+=compat.c ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
13SRCS+=kexecdh.c kexecdhc.c kexecdhs.c kexgex.c kexgexc.c kexgexs.c
14SRCS+=dh.c compat.c
15SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
16SRCS+=cipher-chachapoly.c chacha.c poly1305.c 13SRCS+=cipher-chachapoly.c chacha.c poly1305.c
17SRCS+=smult_curve25519_ref.c 14
15SRCS+= kex.c
16SRCS+= dh.c
17SRCS+= kexdh.c
18SRCS+= kexecdh.c
19SRCS+= kexgex.c
20SRCS+= kexgexc.c
21SRCS+= kexgexs.c
22SRCS+= kexc25519.c
23SRCS+= smult_curve25519_ref.c
24SRCS+= kexgen.c
25SRCS+= kexsntrup4591761x25519.c
26SRCS+= sntrup4591761.c
18 27
19SRCS+=digest-openssl.c 28SRCS+=digest-openssl.c
20#SRCS+=digest-libc.c 29#SRCS+=digest-libc.c
diff --git a/regress/unittests/kex/test_kex.c b/regress/unittests/kex/test_kex.c
index 6e5999bb9..a860efc02 100644
--- a/regress/unittests/kex/test_kex.c
+++ b/regress/unittests/kex/test_kex.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_kex.c,v 1.2 2015/07/10 06:23:25 markus Exp $ */ 1/* $OpenBSD: test_kex.c,v 1.4 2019/01/21 12:35:20 djm Exp $ */
2/* 2/*
3 * Regress test KEX 3 * Regress test KEX
4 * 4 *
@@ -24,8 +24,6 @@
24#include "packet.h" 24#include "packet.h"
25#include "myproposal.h" 25#include "myproposal.h"
26 26
27struct ssh *active_state = NULL; /* XXX - needed for linking */
28
29void kex_tests(void); 27void kex_tests(void);
30static int do_debug = 0; 28static int do_debug = 0;
31 29
@@ -139,20 +137,19 @@ do_kex_with_key(char *kex, int keytype, int bits)
139 ASSERT_INT_EQ(ssh_init(&server2, 1, NULL), 0); 137 ASSERT_INT_EQ(ssh_init(&server2, 1, NULL), 0);
140 ASSERT_PTR_NE(server2, NULL); 138 ASSERT_PTR_NE(server2, NULL);
141 ASSERT_INT_EQ(ssh_add_hostkey(server2, private), 0); 139 ASSERT_INT_EQ(ssh_add_hostkey(server2, private), 0);
142 kex_free(server2->kex); /* XXX or should ssh_packet_set_state()? */
143 ASSERT_INT_EQ(ssh_packet_set_state(server2, state), 0); 140 ASSERT_INT_EQ(ssh_packet_set_state(server2, state), 0);
144 ASSERT_INT_EQ(sshbuf_len(state), 0); 141 ASSERT_INT_EQ(sshbuf_len(state), 0);
145 sshbuf_free(state); 142 sshbuf_free(state);
146 ASSERT_PTR_NE(server2->kex, NULL); 143 ASSERT_PTR_NE(server2->kex, NULL);
147 /* XXX we need to set the callbacks */ 144 /* XXX we need to set the callbacks */
148 server2->kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; 145 server2->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server;
149 server2->kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; 146 server2->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server;
150 server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; 147 server2->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
151 server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; 148 server2->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
152#ifdef OPENSSL_HAS_ECC 149#ifdef OPENSSL_HAS_ECC
153 server2->kex->kex[KEX_ECDH_SHA2] = kexecdh_server; 150 server2->kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
154#endif 151#endif
155 server2->kex->kex[KEX_C25519_SHA256] = kexc25519_server; 152 server2->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
156 server2->kex->load_host_public_key = server->kex->load_host_public_key; 153 server2->kex->load_host_public_key = server->kex->load_host_public_key;
157 server2->kex->load_host_private_key = server->kex->load_host_private_key; 154 server2->kex->load_host_private_key = server->kex->load_host_private_key;
158 server2->kex->sign = server->kex->sign; 155 server2->kex->sign = server->kex->sign;
diff --git a/regress/unittests/sshbuf/Makefile b/regress/unittests/sshbuf/Makefile
index 81d4f27a6..0e8e9fd10 100644
--- a/regress/unittests/sshbuf/Makefile
+++ b/regress/unittests/sshbuf/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.6 2017/12/21 00:41:22 djm Exp $ 1# $OpenBSD: Makefile,v 1.7 2018/10/17 23:28:05 djm Exp $
2 2
3.include <bsd.regress.mk> 3.include <bsd.regress.mk>
4 4
@@ -17,6 +17,5 @@ SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
17SRCS+=atomicio.c 17SRCS+=atomicio.c
18 18
19run-regress-${PROG}: ${PROG} 19run-regress-${PROG}: ${PROG}
20 env ${TEST_ENV} ./${PROG} 20 env ${TEST_ENV} ./${PROG} ${UNITTEST_ARGS}
21
22 21
diff --git a/regress/unittests/sshbuf/test_sshbuf_fuzz.c b/regress/unittests/sshbuf/test_sshbuf_fuzz.c
index c52376b53..e236c82f9 100644
--- a/regress/unittests/sshbuf/test_sshbuf_fuzz.c
+++ b/regress/unittests/sshbuf/test_sshbuf_fuzz.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_sshbuf_fuzz.c,v 1.1 2014/04/30 05:32:00 djm Exp $ */ 1/* $OpenBSD: test_sshbuf_fuzz.c,v 1.2 2018/10/17 23:28:05 djm Exp $ */
2/* 2/*
3 * Regress test for sshbuf.h buffer API 3 * Regress test for sshbuf.h buffer API
4 * 4 *
@@ -30,10 +30,15 @@ sshbuf_fuzz_tests(void)
30{ 30{
31 struct sshbuf *p1; 31 struct sshbuf *p1;
32 u_char *dp; 32 u_char *dp;
33 size_t sz, sz2, i; 33 size_t sz, sz2, i, ntests = NUM_FUZZ_TESTS;
34 u_int32_t r; 34 u_int32_t r;
35 int ret; 35 int ret;
36 36
37 if (test_is_fast())
38 ntests >>= 2;
39 if (test_is_slow())
40 ntests <<= 2;
41
37 /* NB. uses sshbuf internals */ 42 /* NB. uses sshbuf internals */
38 TEST_START("fuzz alloc/dealloc"); 43 TEST_START("fuzz alloc/dealloc");
39 p1 = sshbuf_new(); 44 p1 = sshbuf_new();
diff --git a/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c b/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c
index a68e1329e..5d39e63e1 100644
--- a/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c
+++ b/regress/unittests/sshbuf/test_sshbuf_getput_crypto.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_sshbuf_getput_crypto.c,v 1.1 2014/04/30 05:32:00 djm Exp $ */ 1/* $OpenBSD: test_sshbuf_getput_crypto.c,v 1.2 2019/01/21 12:29:35 djm Exp $ */
2/* 2/*
3 * Regress test for sshbuf.h buffer API 3 * Regress test for sshbuf.h buffer API
4 * 4 *
@@ -33,7 +33,6 @@ sshbuf_getput_crypto_tests(void)
33{ 33{
34 struct sshbuf *p1; 34 struct sshbuf *p1;
35 BIGNUM *bn, *bn2; 35 BIGNUM *bn, *bn2;
36 /* This one has num_bits != num_bytes * 8 to test bignum1 encoding */
37 const char *hexbn1 = "0102030405060708090a0b0c0d0e0f10"; 36 const char *hexbn1 = "0102030405060708090a0b0c0d0e0f10";
38 /* This one has MSB set to test bignum2 encoding negative-avoidance */ 37 /* This one has MSB set to test bignum2 encoding negative-avoidance */
39 const char *hexbn2 = "f0e0d0c0b0a0908070605040302010007fff11"; 38 const char *hexbn2 = "f0e0d0c0b0a0908070605040302010007fff11";
@@ -77,54 +76,6 @@ sshbuf_getput_crypto_tests(void)
77 ASSERT_INT_GT(BN_hex2bn(&bnn, b), 0); \ 76 ASSERT_INT_GT(BN_hex2bn(&bnn, b), 0); \
78 } while (0) 77 } while (0)
79 78
80 TEST_START("sshbuf_put_bignum1");
81 MKBN(hexbn1, bn);
82 p1 = sshbuf_new();
83 ASSERT_PTR_NE(p1, NULL);
84 ASSERT_INT_EQ(sshbuf_put_bignum1(p1, bn), 0);
85 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn1) + 2);
86 ASSERT_U16_EQ(PEEK_U16(sshbuf_ptr(p1)), (u_int16_t)BN_num_bits(bn));
87 ASSERT_MEM_EQ(sshbuf_ptr(p1) + 2, expbn1, sizeof(expbn1));
88 BN_free(bn);
89 sshbuf_free(p1);
90 TEST_DONE();
91
92 TEST_START("sshbuf_put_bignum1 limited");
93 MKBN(hexbn1, bn);
94 p1 = sshbuf_new();
95 ASSERT_PTR_NE(p1, NULL);
96 ASSERT_INT_EQ(sshbuf_set_max_size(p1, sizeof(expbn1) + 1), 0);
97 r = sshbuf_put_bignum1(p1, bn);
98 ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
99 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
100 BN_free(bn);
101 sshbuf_free(p1);
102 TEST_DONE();
103
104 TEST_START("sshbuf_put_bignum1 bn2");
105 MKBN(hexbn2, bn);
106 p1 = sshbuf_new();
107 ASSERT_PTR_NE(p1, NULL);
108 ASSERT_INT_EQ(sshbuf_put_bignum1(p1, bn), 0);
109 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 2);
110 ASSERT_U16_EQ(PEEK_U16(sshbuf_ptr(p1)), (u_int16_t)BN_num_bits(bn));
111 ASSERT_MEM_EQ(sshbuf_ptr(p1) + 2, expbn2, sizeof(expbn2));
112 BN_free(bn);
113 sshbuf_free(p1);
114 TEST_DONE();
115
116 TEST_START("sshbuf_put_bignum1 bn2 limited");
117 MKBN(hexbn2, bn);
118 p1 = sshbuf_new();
119 ASSERT_PTR_NE(p1, NULL);
120 ASSERT_INT_EQ(sshbuf_set_max_size(p1, sizeof(expbn1) + 1), 0);
121 r = sshbuf_put_bignum1(p1, bn);
122 ASSERT_INT_EQ(r, SSH_ERR_NO_BUFFER_SPACE);
123 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 0);
124 BN_free(bn);
125 sshbuf_free(p1);
126 TEST_DONE();
127
128 TEST_START("sshbuf_put_bignum2"); 79 TEST_START("sshbuf_put_bignum2");
129 MKBN(hexbn1, bn); 80 MKBN(hexbn1, bn);
130 p1 = sshbuf_new(); 81 p1 = sshbuf_new();
@@ -174,88 +125,6 @@ sshbuf_getput_crypto_tests(void)
174 sshbuf_free(p1); 125 sshbuf_free(p1);
175 TEST_DONE(); 126 TEST_DONE();
176 127
177 TEST_START("sshbuf_get_bignum1");
178 MKBN(hexbn1, bn);
179 p1 = sshbuf_new();
180 ASSERT_PTR_NE(p1, NULL);
181 ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
182 ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1)), 0);
183 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn1));
184 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
185 bn2 = BN_new();
186 ASSERT_INT_EQ(sshbuf_get_bignum1(p1, bn2), 0);
187 ASSERT_BIGNUM_EQ(bn, bn2);
188 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
189 BN_free(bn);
190 BN_free(bn2);
191 sshbuf_free(p1);
192 TEST_DONE();
193
194 TEST_START("sshbuf_get_bignum1 truncated");
195 MKBN(hexbn1, bn);
196 p1 = sshbuf_new();
197 ASSERT_PTR_NE(p1, NULL);
198 ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
199 ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1) - 1), 0);
200 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn1) - 1);
201 bn2 = BN_new();
202 r = sshbuf_get_bignum1(p1, bn2);
203 ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
204 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn1) - 1);
205 BN_free(bn);
206 BN_free(bn2);
207 sshbuf_free(p1);
208 TEST_DONE();
209
210 TEST_START("sshbuf_get_bignum1 giant");
211 MKBN(hexbn1, bn);
212 p1 = sshbuf_new();
213 ASSERT_PTR_NE(p1, NULL);
214 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xffff), 0);
215 ASSERT_INT_EQ(sshbuf_reserve(p1, (0xffff + 7) / 8, NULL), 0);
216 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + ((0xffff + 7) / 8));
217 bn2 = BN_new();
218 r = sshbuf_get_bignum1(p1, bn2);
219 ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_TOO_LARGE);
220 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + ((0xffff + 7) / 8));
221 BN_free(bn);
222 BN_free(bn2);
223 sshbuf_free(p1);
224 TEST_DONE();
225
226 TEST_START("sshbuf_get_bignum1 bn2");
227 MKBN(hexbn2, bn);
228 p1 = sshbuf_new();
229 ASSERT_PTR_NE(p1, NULL);
230 ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
231 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
232 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn2));
233 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
234 bn2 = BN_new();
235 ASSERT_INT_EQ(sshbuf_get_bignum1(p1, bn2), 0);
236 ASSERT_BIGNUM_EQ(bn, bn2);
237 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
238 BN_free(bn);
239 BN_free(bn2);
240 sshbuf_free(p1);
241 TEST_DONE();
242
243 TEST_START("sshbuf_get_bignum1 bn2 truncated");
244 MKBN(hexbn2, bn);
245 p1 = sshbuf_new();
246 ASSERT_PTR_NE(p1, NULL);
247 ASSERT_INT_EQ(sshbuf_put_u16(p1, BN_num_bits(bn)), 0);
248 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2) - 1), 0);
249 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn2) - 1);
250 bn2 = BN_new();
251 r = sshbuf_get_bignum1(p1, bn2);
252 ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
253 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2 + sizeof(expbn2) - 1);
254 BN_free(bn);
255 BN_free(bn2);
256 sshbuf_free(p1);
257 TEST_DONE();
258
259 TEST_START("sshbuf_get_bignum2"); 128 TEST_START("sshbuf_get_bignum2");
260 MKBN(hexbn1, bn); 129 MKBN(hexbn1, bn);
261 p1 = sshbuf_new(); 130 p1 = sshbuf_new();
@@ -264,8 +133,8 @@ sshbuf_getput_crypto_tests(void)
264 ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1)), 0); 133 ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1)), 0);
265 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + sizeof(expbn1)); 134 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + sizeof(expbn1));
266 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0); 135 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
267 bn2 = BN_new(); 136 bn2 = NULL;
268 ASSERT_INT_EQ(sshbuf_get_bignum2(p1, bn2), 0); 137 ASSERT_INT_EQ(sshbuf_get_bignum2(p1, &bn2), 0);
269 ASSERT_BIGNUM_EQ(bn, bn2); 138 ASSERT_BIGNUM_EQ(bn, bn2);
270 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2); 139 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
271 BN_free(bn); 140 BN_free(bn);
@@ -279,8 +148,8 @@ sshbuf_getput_crypto_tests(void)
279 ASSERT_PTR_NE(p1, NULL); 148 ASSERT_PTR_NE(p1, NULL);
280 ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0); 149 ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0);
281 ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1) - 1), 0); 150 ASSERT_INT_EQ(sshbuf_put(p1, expbn1, sizeof(expbn1) - 1), 0);
282 bn2 = BN_new(); 151 bn2 = NULL;
283 r = sshbuf_get_bignum2(p1, bn2); 152 r = sshbuf_get_bignum2(p1, &bn2);
284 ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE); 153 ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
285 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn1) + 3); 154 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn1) + 3);
286 BN_free(bn); 155 BN_free(bn);
@@ -294,8 +163,8 @@ sshbuf_getput_crypto_tests(void)
294 ASSERT_PTR_NE(p1, NULL); 163 ASSERT_PTR_NE(p1, NULL);
295 ASSERT_INT_EQ(sshbuf_put_u32(p1, 65536), 0); 164 ASSERT_INT_EQ(sshbuf_put_u32(p1, 65536), 0);
296 ASSERT_INT_EQ(sshbuf_reserve(p1, 65536, NULL), 0); 165 ASSERT_INT_EQ(sshbuf_reserve(p1, 65536, NULL), 0);
297 bn2 = BN_new(); 166 bn2 = NULL;
298 r = sshbuf_get_bignum2(p1, bn2); 167 r = sshbuf_get_bignum2(p1, &bn2);
299 ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_TOO_LARGE); 168 ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_TOO_LARGE);
300 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 65536 + 4); 169 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 65536 + 4);
301 BN_free(bn); 170 BN_free(bn);
@@ -312,8 +181,8 @@ sshbuf_getput_crypto_tests(void)
312 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0); 181 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
313 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + 1 + sizeof(expbn2)); 182 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 4 + 1 + sizeof(expbn2));
314 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0); 183 ASSERT_INT_EQ(sshbuf_put_u16(p1, 0xd00f), 0);
315 bn2 = BN_new(); 184 bn2 = NULL;
316 ASSERT_INT_EQ(sshbuf_get_bignum2(p1, bn2), 0); 185 ASSERT_INT_EQ(sshbuf_get_bignum2(p1, &bn2), 0);
317 ASSERT_BIGNUM_EQ(bn, bn2); 186 ASSERT_BIGNUM_EQ(bn, bn2);
318 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2); 187 ASSERT_SIZE_T_EQ(sshbuf_len(p1), 2);
319 BN_free(bn); 188 BN_free(bn);
@@ -328,8 +197,8 @@ sshbuf_getput_crypto_tests(void)
328 ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn) + 1), 0); 197 ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn) + 1), 0);
329 ASSERT_INT_EQ(sshbuf_put_u8(p1, 0x00), 0); 198 ASSERT_INT_EQ(sshbuf_put_u8(p1, 0x00), 0);
330 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2) - 1), 0); 199 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2) - 1), 0);
331 bn2 = BN_new(); 200 bn2 = NULL;
332 r = sshbuf_get_bignum2(p1, bn2); 201 r = sshbuf_get_bignum2(p1, &bn2);
333 ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE); 202 ASSERT_INT_EQ(r, SSH_ERR_MESSAGE_INCOMPLETE);
334 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 1 + 4 - 1); 203 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 1 + 4 - 1);
335 BN_free(bn); 204 BN_free(bn);
@@ -343,8 +212,8 @@ sshbuf_getput_crypto_tests(void)
343 ASSERT_PTR_NE(p1, NULL); 212 ASSERT_PTR_NE(p1, NULL);
344 ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0); 213 ASSERT_INT_EQ(sshbuf_put_u32(p1, BN_num_bytes(bn)), 0);
345 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0); 214 ASSERT_INT_EQ(sshbuf_put(p1, expbn2, sizeof(expbn2)), 0);
346 bn2 = BN_new(); 215 bn2 = NULL;
347 r = sshbuf_get_bignum2(p1, bn2); 216 r = sshbuf_get_bignum2(p1, &bn2);
348 ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_IS_NEGATIVE); 217 ASSERT_INT_EQ(r, SSH_ERR_BIGNUM_IS_NEGATIVE);
349 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 4); 218 ASSERT_SIZE_T_EQ(sshbuf_len(p1), sizeof(expbn2) + 4);
350 BN_free(bn); 219 BN_free(bn);
diff --git a/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c b/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c
index c6b5c29d1..ca06bfb00 100644
--- a/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c
+++ b/regress/unittests/sshbuf/test_sshbuf_getput_fuzz.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_sshbuf_getput_fuzz.c,v 1.2 2014/05/02 02:54:00 djm Exp $ */ 1/* $OpenBSD: test_sshbuf_getput_fuzz.c,v 1.4 2019/01/21 12:29:35 djm Exp $ */
2/* 2/*
3 * Regress test for sshbuf.h buffer API 3 * Regress test for sshbuf.h buffer API
4 * 4 *
@@ -54,11 +54,8 @@ attempt_parse_blob(u_char *blob, size_t len)
54 bzero(s, l); 54 bzero(s, l);
55 free(s); 55 free(s);
56 } 56 }
57 bn = BN_new(); 57 bn = NULL;
58 sshbuf_get_bignum1(p1, bn); 58 sshbuf_get_bignum2(p1, &bn);
59 BN_clear_free(bn);
60 bn = BN_new();
61 sshbuf_get_bignum2(p1, bn);
62 BN_clear_free(bn); 59 BN_clear_free(bn);
63#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256) 60#if defined(OPENSSL_HAS_ECC) && defined(OPENSSL_HAS_NISTP256)
64 eck = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1); 61 eck = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
@@ -92,10 +89,6 @@ sshbuf_getput_fuzz_tests(void)
92 /* string */ 89 /* string */
93 0x00, 0x00, 0x00, 0x09, 90 0x00, 0x00, 0x00, 0x09,
94 'O', ' ', 'G', 'o', 'r', 'g', 'o', 'n', '!', 91 'O', ' ', 'G', 'o', 'r', 'g', 'o', 'n', '!',
95 /* bignum1 */
96 0x79,
97 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
98 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
99 /* bignum2 */ 92 /* bignum2 */
100 0x00, 0x00, 0x00, 0x14, 93 0x00, 0x00, 0x00, 0x14,
101 0x00, 94 0x00,
@@ -115,11 +108,15 @@ sshbuf_getput_fuzz_tests(void)
115 0x55, 0x0f, 0x69, 0xd8, 0x0e, 0xc2, 0x3c, 0xd4, 108 0x55, 0x0f, 0x69, 0xd8, 0x0e, 0xc2, 0x3c, 0xd4,
116 }; 109 };
117 struct fuzz *fuzz; 110 struct fuzz *fuzz;
111 u_int fuzzers = FUZZ_1_BIT_FLIP | FUZZ_2_BIT_FLIP |
112 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
113 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END;
114
115 if (test_is_fast())
116 fuzzers &= ~(FUZZ_2_BYTE_FLIP|FUZZ_2_BIT_FLIP);
118 117
119 TEST_START("fuzz blob parsing"); 118 TEST_START("fuzz blob parsing");
120 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | FUZZ_2_BIT_FLIP | 119 fuzz = fuzz_begin(fuzzers, blob, sizeof(blob));
121 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
122 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, blob, sizeof(blob));
123 TEST_ONERROR(onerror, fuzz); 120 TEST_ONERROR(onerror, fuzz);
124 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) 121 for(; !fuzz_done(fuzz); fuzz_next(fuzz))
125 attempt_parse_blob(blob, sizeof(blob)); 122 attempt_parse_blob(blob, sizeof(blob));
diff --git a/regress/unittests/sshkey/Makefile b/regress/unittests/sshkey/Makefile
index 1c940bec6..aa731df1c 100644
--- a/regress/unittests/sshkey/Makefile
+++ b/regress/unittests/sshkey/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $ 1# $OpenBSD: Makefile,v 1.6 2018/10/17 23:28:05 djm Exp $
2 2
3PROG=test_sshkey 3PROG=test_sshkey
4SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c 4SRCS=tests.c test_sshkey.c test_file.c test_fuzz.c common.c
@@ -18,7 +18,7 @@ SRCS+=digest-openssl.c
18REGRESS_TARGETS=run-regress-${PROG} 18REGRESS_TARGETS=run-regress-${PROG}
19 19
20run-regress-${PROG}: ${PROG} 20run-regress-${PROG}: ${PROG}
21 env ${TEST_ENV} ./${PROG} -d ${.CURDIR}/testdata 21 env ${TEST_ENV} ./${PROG} ${UNITTEST_ARGS} -d ${.CURDIR}/testdata
22 22
23.include <bsd.regress.mk> 23.include <bsd.regress.mk>
24 24
diff --git a/regress/unittests/sshkey/test_fuzz.c b/regress/unittests/sshkey/test_fuzz.c
index d3b0c92b4..5953de595 100644
--- a/regress/unittests/sshkey/test_fuzz.c
+++ b/regress/unittests/sshkey/test_fuzz.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_fuzz.c,v 1.8 2017/12/21 00:41:22 djm Exp $ */ 1/* $OpenBSD: test_fuzz.c,v 1.9 2018/10/17 23:28:05 djm Exp $ */
2/* 2/*
3 * Fuzz tests for key parsing 3 * Fuzz tests for key parsing
4 * 4 *
@@ -51,14 +51,16 @@ public_fuzz(struct sshkey *k)
51 struct sshkey *k1; 51 struct sshkey *k1;
52 struct sshbuf *buf; 52 struct sshbuf *buf;
53 struct fuzz *fuzz; 53 struct fuzz *fuzz;
54 u_int fuzzers = FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP |
55 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END;
54 56
57 if (test_is_fast())
58 fuzzers &= ~FUZZ_1_BIT_FLIP;
59 if (test_is_slow())
60 fuzzers |= FUZZ_2_BIT_FLIP | FUZZ_2_BYTE_FLIP;
55 ASSERT_PTR_NE(buf = sshbuf_new(), NULL); 61 ASSERT_PTR_NE(buf = sshbuf_new(), NULL);
56 ASSERT_INT_EQ(sshkey_putb(k, buf), 0); 62 ASSERT_INT_EQ(sshkey_putb(k, buf), 0);
57 /* XXX need a way to run the tests in "slow, but complete" mode */ 63 fuzz = fuzz_begin(fuzzers, sshbuf_mutable_ptr(buf), sshbuf_len(buf));
58 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* XXX too slow FUZZ_2_BIT_FLIP | */
59 FUZZ_1_BYTE_FLIP | /* XXX too slow FUZZ_2_BYTE_FLIP | */
60 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END,
61 sshbuf_mutable_ptr(buf), sshbuf_len(buf));
62 ASSERT_INT_EQ(sshkey_from_blob(sshbuf_ptr(buf), sshbuf_len(buf), 64 ASSERT_INT_EQ(sshkey_from_blob(sshbuf_ptr(buf), sshbuf_len(buf),
63 &k1), 0); 65 &k1), 0);
64 sshkey_free(k1); 66 sshkey_free(k1);
@@ -77,12 +79,17 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
77 struct fuzz *fuzz; 79 struct fuzz *fuzz;
78 u_char *sig, c[] = "some junk to be signed"; 80 u_char *sig, c[] = "some junk to be signed";
79 size_t l; 81 size_t l;
82 u_int fuzzers = FUZZ_1_BIT_FLIP | FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
83 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END;
84
85 if (test_is_fast())
86 fuzzers &= ~FUZZ_2_BYTE_FLIP;
87 if (test_is_slow())
88 fuzzers |= FUZZ_2_BIT_FLIP;
80 89
81 ASSERT_INT_EQ(sshkey_sign(k, &sig, &l, c, sizeof(c), sig_alg, 0), 0); 90 ASSERT_INT_EQ(sshkey_sign(k, &sig, &l, c, sizeof(c), sig_alg, 0), 0);
82 ASSERT_SIZE_T_GT(l, 0); 91 ASSERT_SIZE_T_GT(l, 0);
83 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* too slow FUZZ_2_BIT_FLIP | */ 92 fuzz = fuzz_begin(fuzzers, sig, l);
84 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
85 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, sig, l);
86 ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), NULL, 0), 0); 93 ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), NULL, 0), 0);
87 free(sig); 94 free(sig);
88 TEST_ONERROR(onerror, fuzz); 95 TEST_ONERROR(onerror, fuzz);
@@ -96,13 +103,15 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
96 fuzz_cleanup(fuzz); 103 fuzz_cleanup(fuzz);
97} 104}
98 105
106#define NUM_FAST_BASE64_TESTS 1024
107
99void 108void
100sshkey_fuzz_tests(void) 109sshkey_fuzz_tests(void)
101{ 110{
102 struct sshkey *k1; 111 struct sshkey *k1;
103 struct sshbuf *buf, *fuzzed; 112 struct sshbuf *buf, *fuzzed;
104 struct fuzz *fuzz; 113 struct fuzz *fuzz;
105 int r; 114 int r, i;
106 115
107 116
108 TEST_START("fuzz RSA private"); 117 TEST_START("fuzz RSA private");
@@ -114,12 +123,14 @@ sshkey_fuzz_tests(void)
114 sshbuf_free(buf); 123 sshbuf_free(buf);
115 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 124 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
116 TEST_ONERROR(onerror, fuzz); 125 TEST_ONERROR(onerror, fuzz);
117 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 126 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
118 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 127 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
119 ASSERT_INT_EQ(r, 0); 128 ASSERT_INT_EQ(r, 0);
120 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 129 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
121 sshkey_free(k1); 130 sshkey_free(k1);
122 sshbuf_reset(fuzzed); 131 sshbuf_reset(fuzzed);
132 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
133 break;
123 } 134 }
124 sshbuf_free(fuzzed); 135 sshbuf_free(fuzzed);
125 fuzz_cleanup(fuzz); 136 fuzz_cleanup(fuzz);
@@ -134,12 +145,14 @@ sshkey_fuzz_tests(void)
134 sshbuf_free(buf); 145 sshbuf_free(buf);
135 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 146 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
136 TEST_ONERROR(onerror, fuzz); 147 TEST_ONERROR(onerror, fuzz);
137 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 148 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
138 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 149 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
139 ASSERT_INT_EQ(r, 0); 150 ASSERT_INT_EQ(r, 0);
140 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 151 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
141 sshkey_free(k1); 152 sshkey_free(k1);
142 sshbuf_reset(fuzzed); 153 sshbuf_reset(fuzzed);
154 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
155 break;
143 } 156 }
144 sshbuf_free(fuzzed); 157 sshbuf_free(fuzzed);
145 fuzz_cleanup(fuzz); 158 fuzz_cleanup(fuzz);
@@ -154,12 +167,14 @@ sshkey_fuzz_tests(void)
154 sshbuf_free(buf); 167 sshbuf_free(buf);
155 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 168 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
156 TEST_ONERROR(onerror, fuzz); 169 TEST_ONERROR(onerror, fuzz);
157 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 170 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
158 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 171 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
159 ASSERT_INT_EQ(r, 0); 172 ASSERT_INT_EQ(r, 0);
160 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 173 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
161 sshkey_free(k1); 174 sshkey_free(k1);
162 sshbuf_reset(fuzzed); 175 sshbuf_reset(fuzzed);
176 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
177 break;
163 } 178 }
164 sshbuf_free(fuzzed); 179 sshbuf_free(fuzzed);
165 fuzz_cleanup(fuzz); 180 fuzz_cleanup(fuzz);
@@ -174,12 +189,14 @@ sshkey_fuzz_tests(void)
174 sshbuf_free(buf); 189 sshbuf_free(buf);
175 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 190 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
176 TEST_ONERROR(onerror, fuzz); 191 TEST_ONERROR(onerror, fuzz);
177 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 192 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
178 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 193 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
179 ASSERT_INT_EQ(r, 0); 194 ASSERT_INT_EQ(r, 0);
180 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 195 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
181 sshkey_free(k1); 196 sshkey_free(k1);
182 sshbuf_reset(fuzzed); 197 sshbuf_reset(fuzzed);
198 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
199 break;
183 } 200 }
184 sshbuf_free(fuzzed); 201 sshbuf_free(fuzzed);
185 fuzz_cleanup(fuzz); 202 fuzz_cleanup(fuzz);
@@ -195,12 +212,14 @@ sshkey_fuzz_tests(void)
195 sshbuf_free(buf); 212 sshbuf_free(buf);
196 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 213 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
197 TEST_ONERROR(onerror, fuzz); 214 TEST_ONERROR(onerror, fuzz);
198 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 215 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
199 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 216 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
200 ASSERT_INT_EQ(r, 0); 217 ASSERT_INT_EQ(r, 0);
201 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 218 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
202 sshkey_free(k1); 219 sshkey_free(k1);
203 sshbuf_reset(fuzzed); 220 sshbuf_reset(fuzzed);
221 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
222 break;
204 } 223 }
205 sshbuf_free(fuzzed); 224 sshbuf_free(fuzzed);
206 fuzz_cleanup(fuzz); 225 fuzz_cleanup(fuzz);
@@ -215,12 +234,14 @@ sshkey_fuzz_tests(void)
215 sshbuf_free(buf); 234 sshbuf_free(buf);
216 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 235 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
217 TEST_ONERROR(onerror, fuzz); 236 TEST_ONERROR(onerror, fuzz);
218 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 237 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
219 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 238 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
220 ASSERT_INT_EQ(r, 0); 239 ASSERT_INT_EQ(r, 0);
221 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 240 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
222 sshkey_free(k1); 241 sshkey_free(k1);
223 sshbuf_reset(fuzzed); 242 sshbuf_reset(fuzzed);
243 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
244 break;
224 } 245 }
225 sshbuf_free(fuzzed); 246 sshbuf_free(fuzzed);
226 fuzz_cleanup(fuzz); 247 fuzz_cleanup(fuzz);
@@ -236,12 +257,14 @@ sshkey_fuzz_tests(void)
236 sshbuf_free(buf); 257 sshbuf_free(buf);
237 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL); 258 ASSERT_PTR_NE(fuzzed = sshbuf_new(), NULL);
238 TEST_ONERROR(onerror, fuzz); 259 TEST_ONERROR(onerror, fuzz);
239 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 260 for(i = 0; !fuzz_done(fuzz); i++, fuzz_next(fuzz)) {
240 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz)); 261 r = sshbuf_put(fuzzed, fuzz_ptr(fuzz), fuzz_len(fuzz));
241 ASSERT_INT_EQ(r, 0); 262 ASSERT_INT_EQ(r, 0);
242 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0) 263 if (sshkey_parse_private_fileblob(fuzzed, "", &k1, NULL) == 0)
243 sshkey_free(k1); 264 sshkey_free(k1);
244 sshbuf_reset(fuzzed); 265 sshbuf_reset(fuzzed);
266 if (test_is_fast() && i >= NUM_FAST_BASE64_TESTS)
267 break;
245 } 268 }
246 sshbuf_free(fuzzed); 269 sshbuf_free(fuzzed);
247 fuzz_cleanup(fuzz); 270 fuzz_cleanup(fuzz);
diff --git a/regress/unittests/sshkey/tests.c b/regress/unittests/sshkey/tests.c
index 13f265cdb..78aa9223d 100644
--- a/regress/unittests/sshkey/tests.c
+++ b/regress/unittests/sshkey/tests.c
@@ -7,8 +7,6 @@
7 7
8#include "includes.h" 8#include "includes.h"
9 9
10#include <openssl/evp.h>
11
12#include "../test_helper/test_helper.h" 10#include "../test_helper/test_helper.h"
13 11
14void sshkey_tests(void); 12void sshkey_tests(void);
@@ -18,9 +16,6 @@ void sshkey_fuzz_tests(void);
18void 16void
19tests(void) 17tests(void)
20{ 18{
21 OpenSSL_add_all_algorithms();
22 ERR_load_CRYPTO_strings();
23
24 sshkey_tests(); 19 sshkey_tests();
25 sshkey_file_tests(); 20 sshkey_file_tests();
26 sshkey_fuzz_tests(); 21 sshkey_fuzz_tests();
diff --git a/regress/unittests/test_helper/test_helper.c b/regress/unittests/test_helper/test_helper.c
index 4cc70852c..e7a47b265 100644
--- a/regress/unittests/test_helper/test_helper.c
+++ b/regress/unittests/test_helper/test_helper.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_helper.c,v 1.8 2018/02/08 08:46:20 djm Exp $ */ 1/* $OpenBSD: test_helper.c,v 1.11 2018/11/23 02:53:57 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
4 * 4 *
@@ -35,11 +35,13 @@
35#include <signal.h> 35#include <signal.h>
36 36
37#include <openssl/bn.h> 37#include <openssl/bn.h>
38#include <openssl/err.h>
38 39
39#if defined(HAVE_STRNVIS) && defined(HAVE_VIS_H) && !defined(BROKEN_STRNVIS) 40#if defined(HAVE_STRNVIS) && defined(HAVE_VIS_H) && !defined(BROKEN_STRNVIS)
40# include <vis.h> 41# include <vis.h>
41#endif 42#endif
42 43
44#include "entropy.h"
43#include "test_helper.h" 45#include "test_helper.h"
44#include "atomicio.h" 46#include "atomicio.h"
45 47
@@ -115,12 +117,17 @@ static test_onerror_func_t *test_onerror = NULL;
115static void *onerror_ctx = NULL; 117static void *onerror_ctx = NULL;
116static const char *data_dir = NULL; 118static const char *data_dir = NULL;
117static char subtest_info[512]; 119static char subtest_info[512];
120static int fast = 0;
121static int slow = 0;
118 122
119int 123int
120main(int argc, char **argv) 124main(int argc, char **argv)
121{ 125{
122 int ch; 126 int ch;
123 127
128 seed_rng();
129 ERR_load_CRYPTO_strings();
130
124 /* Handle systems without __progname */ 131 /* Handle systems without __progname */
125 if (__progname == NULL) { 132 if (__progname == NULL) {
126 __progname = strrchr(argv[0], '/'); 133 __progname = strrchr(argv[0], '/');
@@ -134,8 +141,14 @@ main(int argc, char **argv)
134 } 141 }
135 } 142 }
136 143
137 while ((ch = getopt(argc, argv, "vqd:")) != -1) { 144 while ((ch = getopt(argc, argv, "Ffvqd:")) != -1) {
138 switch (ch) { 145 switch (ch) {
146 case 'F':
147 slow = 1;
148 break;
149 case 'f':
150 fast = 1;
151 break;
139 case 'd': 152 case 'd':
140 data_dir = optarg; 153 data_dir = optarg;
141 break; 154 break;
@@ -167,17 +180,29 @@ main(int argc, char **argv)
167} 180}
168 181
169int 182int
170test_is_verbose() 183test_is_verbose(void)
171{ 184{
172 return verbose_mode; 185 return verbose_mode;
173} 186}
174 187
175int 188int
176test_is_quiet() 189test_is_quiet(void)
177{ 190{
178 return quiet_mode; 191 return quiet_mode;
179} 192}
180 193
194int
195test_is_fast(void)
196{
197 return fast;
198}
199
200int
201test_is_slow(void)
202{
203 return slow;
204}
205
181const char * 206const char *
182test_data_file(const char *name) 207test_data_file(const char *name)
183{ 208{
diff --git a/regress/unittests/test_helper/test_helper.h b/regress/unittests/test_helper/test_helper.h
index 6da0066e9..1f893c8dd 100644
--- a/regress/unittests/test_helper/test_helper.h
+++ b/regress/unittests/test_helper/test_helper.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_helper.h,v 1.8 2018/02/08 08:46:20 djm Exp $ */ 1/* $OpenBSD: test_helper.h,v 1.9 2018/10/17 23:28:05 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
4 * 4 *
@@ -45,6 +45,8 @@ void set_onerror_func(test_onerror_func_t *f, void *ctx);
45void test_done(void); 45void test_done(void);
46int test_is_verbose(void); 46int test_is_verbose(void);
47int test_is_quiet(void); 47int test_is_quiet(void);
48int test_is_fast(void);
49int test_is_slow(void);
48void test_subtest_info(const char *fmt, ...) 50void test_subtest_info(const char *fmt, ...)
49 __attribute__((format(printf, 1, 2))); 51 __attribute__((format(printf, 1, 2)));
50void ssl_err_check(const char *file, int line); 52void ssl_err_check(const char *file, int line);
diff --git a/scp.0 b/scp.0
index 03157e8b7..045f1183d 100644
--- a/scp.0
+++ b/scp.0
@@ -4,8 +4,9 @@ NAME
4 scp M-bM-^@M-^S secure copy (remote file copy program) 4 scp M-bM-^@M-^S secure copy (remote file copy program)
5 5
6SYNOPSIS 6SYNOPSIS
7 scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 7 scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]
8 [-l limit] [-o ssh_option] [-P port] [-S program] source ... target 8 [-J destination] [-l limit] [-o ssh_option] [-P port] [-S program]
9 source ... target
9 10
10DESCRIPTION 11DESCRIPTION
11 scp copies files between hosts on a network. It uses ssh(1) for data 12 scp copies files between hosts on a network. It uses ssh(1) for data
@@ -52,6 +53,14 @@ DESCRIPTION
52 key authentication is read. This option is directly passed to 53 key authentication is read. This option is directly passed to
53 ssh(1). 54 ssh(1).
54 55
56 -J destination
57 Connect to the target host by first making an scp connection to
58 the jump host described by destination and then establishing a
59 TCP forwarding to the ultimate destination from there. Multiple
60 jump hops may be specified separated by comma characters. This
61 is a shortcut to specify a ProxyJump configuration directive.
62 This option is directly passed to ssh(1).
63
55 -l limit 64 -l limit
56 Limits the used bandwidth, specified in Kbit/s. 65 Limits the used bandwidth, specified in Kbit/s.
57 66
@@ -141,6 +150,16 @@ DESCRIPTION
141 Name of program to use for the encrypted connection. The program 150 Name of program to use for the encrypted connection. The program
142 must understand ssh(1) options. 151 must understand ssh(1) options.
143 152
153 -T Disable strict filename checking. By default when copying files
154 from a remote host to a local directory scp checks that the
155 received filenames match those requested on the command-line to
156 prevent the remote end from sending unexpected or unwanted files.
157 Because of differences in how various operating systems and
158 shells interpret filename wildcards, these checks may cause
159 wanted files to be rejected. This option disables these checks
160 at the expense of fully trusting that the server will not send
161 unexpected filenames.
162
144 -v Verbose mode. Causes scp and ssh(1) to print debugging messages 163 -v Verbose mode. Causes scp and ssh(1) to print debugging messages
145 about their progress. This is helpful in debugging connection, 164 about their progress. This is helpful in debugging connection,
146 authentication, and configuration problems. 165 authentication, and configuration problems.
@@ -160,4 +179,4 @@ AUTHORS
160 Timo Rinne <tri@iki.fi> 179 Timo Rinne <tri@iki.fi>
161 Tatu Ylonen <ylo@cs.hut.fi> 180 Tatu Ylonen <ylo@cs.hut.fi>
162 181
163OpenBSD 6.4 September 20, 2018 OpenBSD 6.4 182OpenBSD 6.5 January 26, 2019 OpenBSD 6.5
diff --git a/scp.1 b/scp.1
index 0e5cc1b2d..a2833dab0 100644
--- a/scp.1
+++ b/scp.1
@@ -8,9 +8,9 @@
8.\" 8.\"
9.\" Created: Sun May 7 00:14:37 1995 ylo 9.\" Created: Sun May 7 00:14:37 1995 ylo
10.\" 10.\"
11.\" $OpenBSD: scp.1,v 1.81 2018/09/20 06:58:48 jmc Exp $ 11.\" $OpenBSD: scp.1,v 1.85 2019/01/26 22:41:28 djm Exp $
12.\" 12.\"
13.Dd $Mdocdate: September 20 2018 $ 13.Dd $Mdocdate: January 26 2019 $
14.Dt SCP 1 14.Dt SCP 1
15.Os 15.Os
16.Sh NAME 16.Sh NAME
@@ -18,10 +18,11 @@
18.Nd secure copy (remote file copy program) 18.Nd secure copy (remote file copy program)
19.Sh SYNOPSIS 19.Sh SYNOPSIS
20.Nm scp 20.Nm scp
21.Op Fl 346BCpqrv 21.Op Fl 346BCpqrTv
22.Op Fl c Ar cipher 22.Op Fl c Ar cipher
23.Op Fl F Ar ssh_config 23.Op Fl F Ar ssh_config
24.Op Fl i Ar identity_file 24.Op Fl i Ar identity_file
25.Op Fl J Ar destination
25.Op Fl l Ar limit 26.Op Fl l Ar limit
26.Op Fl o Ar ssh_option 27.Op Fl o Ar ssh_option
27.Op Fl P Ar port 28.Op Fl P Ar port
@@ -106,6 +107,19 @@ Selects the file from which the identity (private key) for public key
106authentication is read. 107authentication is read.
107This option is directly passed to 108This option is directly passed to
108.Xr ssh 1 . 109.Xr ssh 1 .
110.It Fl J Ar destination
111Connect to the target host by first making an
112.Nm
113connection to the jump host described by
114.Ar destination
115and then establishing a TCP forwarding to the ultimate destination from
116there.
117Multiple jump hops may be specified separated by comma characters.
118This is a shortcut to specify a
119.Cm ProxyJump
120configuration directive.
121This option is directly passed to
122.Xr ssh 1 .
109.It Fl l Ar limit 123.It Fl l Ar limit
110Limits the used bandwidth, specified in Kbit/s. 124Limits the used bandwidth, specified in Kbit/s.
111.It Fl o Ar ssh_option 125.It Fl o Ar ssh_option
@@ -208,6 +222,16 @@ to use for the encrypted connection.
208The program must understand 222The program must understand
209.Xr ssh 1 223.Xr ssh 1
210options. 224options.
225.It Fl T
226Disable strict filename checking.
227By default when copying files from a remote host to a local directory
228.Nm
229checks that the received filenames match those requested on the command-line
230to prevent the remote end from sending unexpected or unwanted files.
231Because of differences in how various operating systems and shells interpret
232filename wildcards, these checks may cause wanted files to be rejected.
233This option disables these checks at the expense of fully trusting that
234the server will not send unexpected filenames.
211.It Fl v 235.It Fl v
212Verbose mode. 236Verbose mode.
213Causes 237Causes
diff --git a/scp.c b/scp.c
index 60682c687..80bc0e8b1 100644
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: scp.c,v 1.197 2018/06/01 04:31:48 dtucker Exp $ */ 1/* $OpenBSD: scp.c,v 1.204 2019/02/10 11:15:52 djm Exp $ */
2/* 2/*
3 * scp - secure remote copy. This is basically patched BSD rcp which 3 * scp - secure remote copy. This is basically patched BSD rcp which
4 * uses ssh to do the data transfer (instead of using rcmd). 4 * uses ssh to do the data transfer (instead of using rcmd).
@@ -94,6 +94,7 @@
94#include <dirent.h> 94#include <dirent.h>
95#include <errno.h> 95#include <errno.h>
96#include <fcntl.h> 96#include <fcntl.h>
97#include <fnmatch.h>
97#include <limits.h> 98#include <limits.h>
98#include <locale.h> 99#include <locale.h>
99#include <pwd.h> 100#include <pwd.h>
@@ -375,14 +376,14 @@ void verifydir(char *);
375struct passwd *pwd; 376struct passwd *pwd;
376uid_t userid; 377uid_t userid;
377int errs, remin, remout; 378int errs, remin, remout;
378int pflag, iamremote, iamrecursive, targetshouldbedirectory; 379int Tflag, pflag, iamremote, iamrecursive, targetshouldbedirectory;
379 380
380#define CMDNEEDS 64 381#define CMDNEEDS 64
381char cmd[CMDNEEDS]; /* must hold "rcp -r -p -d\0" */ 382char cmd[CMDNEEDS]; /* must hold "rcp -r -p -d\0" */
382 383
383int response(void); 384int response(void);
384void rsource(char *, struct stat *); 385void rsource(char *, struct stat *);
385void sink(int, char *[]); 386void sink(int, char *[], const char *);
386void source(int, char *[]); 387void source(int, char *[]);
387void tolocal(int, char *[]); 388void tolocal(int, char *[]);
388void toremote(int, char *[]); 389void toremote(int, char *[]);
@@ -400,6 +401,8 @@ main(int argc, char **argv)
400 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ 401 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
401 sanitise_stdfd(); 402 sanitise_stdfd();
402 403
404 seed_rng();
405
403 msetlocale(); 406 msetlocale();
404 407
405 /* Copy argv, because we modify it */ 408 /* Copy argv, because we modify it */
@@ -421,8 +424,9 @@ main(int argc, char **argv)
421 addargs(&args, "-oRemoteCommand=none"); 424 addargs(&args, "-oRemoteCommand=none");
422 addargs(&args, "-oRequestTTY=no"); 425 addargs(&args, "-oRequestTTY=no");
423 426
424 fflag = tflag = 0; 427 fflag = Tflag = tflag = 0;
425 while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -1) 428 while ((ch = getopt(argc, argv,
429 "dfl:prtTvBCc:i:P:q12346S:o:F:J:")) != -1) {
426 switch (ch) { 430 switch (ch) {
427 /* User-visible flags. */ 431 /* User-visible flags. */
428 case '1': 432 case '1':
@@ -444,6 +448,7 @@ main(int argc, char **argv)
444 case 'c': 448 case 'c':
445 case 'i': 449 case 'i':
446 case 'F': 450 case 'F':
451 case 'J':
447 addargs(&remote_remote_args, "-%c", ch); 452 addargs(&remote_remote_args, "-%c", ch);
448 addargs(&remote_remote_args, "%s", optarg); 453 addargs(&remote_remote_args, "%s", optarg);
449 addargs(&args, "-%c", ch); 454 addargs(&args, "-%c", ch);
@@ -501,9 +506,13 @@ main(int argc, char **argv)
501 setmode(0, O_BINARY); 506 setmode(0, O_BINARY);
502#endif 507#endif
503 break; 508 break;
509 case 'T':
510 Tflag = 1;
511 break;
504 default: 512 default:
505 usage(); 513 usage();
506 } 514 }
515 }
507 argc -= optind; 516 argc -= optind;
508 argv += optind; 517 argv += optind;
509 518
@@ -534,7 +543,7 @@ main(int argc, char **argv)
534 } 543 }
535 if (tflag) { 544 if (tflag) {
536 /* Receive data. */ 545 /* Receive data. */
537 sink(argc, argv); 546 sink(argc, argv, NULL);
538 exit(errs != 0); 547 exit(errs != 0);
539 } 548 }
540 if (argc < 2) 549 if (argc < 2)
@@ -585,6 +594,7 @@ scpio(void *_cnt, size_t s)
585 off_t *cnt = (off_t *)_cnt; 594 off_t *cnt = (off_t *)_cnt;
586 595
587 *cnt += s; 596 *cnt += s;
597 refresh_progress_meter(0);
588 if (limit_kbps > 0) 598 if (limit_kbps > 0)
589 bandwidth_limit(&bwlimit, s); 599 bandwidth_limit(&bwlimit, s);
590 return 0; 600 return 0;
@@ -620,6 +630,253 @@ parse_scp_uri(const char *uri, char **userp, char **hostp, int *portp,
620 return r; 630 return r;
621} 631}
622 632
633/* Appends a string to an array; returns 0 on success, -1 on alloc failure */
634static int
635append(char *cp, char ***ap, size_t *np)
636{
637 char **tmp;
638
639 if ((tmp = reallocarray(*ap, *np + 1, sizeof(*tmp))) == NULL)
640 return -1;
641 tmp[(*np)] = cp;
642 (*np)++;
643 *ap = tmp;
644 return 0;
645}
646
647/*
648 * Finds the start and end of the first brace pair in the pattern.
649 * returns 0 on success or -1 for invalid patterns.
650 */
651static int
652find_brace(const char *pattern, int *startp, int *endp)
653{
654 int i;
655 int in_bracket, brace_level;
656
657 *startp = *endp = -1;
658 in_bracket = brace_level = 0;
659 for (i = 0; i < INT_MAX && *endp < 0 && pattern[i] != '\0'; i++) {
660 switch (pattern[i]) {
661 case '\\':
662 /* skip next character */
663 if (pattern[i + 1] != '\0')
664 i++;
665 break;
666 case '[':
667 in_bracket = 1;
668 break;
669 case ']':
670 in_bracket = 0;
671 break;
672 case '{':
673 if (in_bracket)
674 break;
675 if (pattern[i + 1] == '}') {
676 /* Protect a single {}, for find(1), like csh */
677 i++; /* skip */
678 break;
679 }
680 if (*startp == -1)
681 *startp = i;
682 brace_level++;
683 break;
684 case '}':
685 if (in_bracket)
686 break;
687 if (*startp < 0) {
688 /* Unbalanced brace */
689 return -1;
690 }
691 if (--brace_level <= 0)
692 *endp = i;
693 break;
694 }
695 }
696 /* unbalanced brackets/braces */
697 if (*endp < 0 && (*startp >= 0 || in_bracket))
698 return -1;
699 return 0;
700}
701
702/*
703 * Assembles and records a successfully-expanded pattern, returns -1 on
704 * alloc failure.
705 */
706static int
707emit_expansion(const char *pattern, int brace_start, int brace_end,
708 int sel_start, int sel_end, char ***patternsp, size_t *npatternsp)
709{
710 char *cp;
711 int o = 0, tail_len = strlen(pattern + brace_end + 1);
712
713 if ((cp = malloc(brace_start + (sel_end - sel_start) +
714 tail_len + 1)) == NULL)
715 return -1;
716
717 /* Pattern before initial brace */
718 if (brace_start > 0) {
719 memcpy(cp, pattern, brace_start);
720 o = brace_start;
721 }
722 /* Current braced selection */
723 if (sel_end - sel_start > 0) {
724 memcpy(cp + o, pattern + sel_start,
725 sel_end - sel_start);
726 o += sel_end - sel_start;
727 }
728 /* Remainder of pattern after closing brace */
729 if (tail_len > 0) {
730 memcpy(cp + o, pattern + brace_end + 1, tail_len);
731 o += tail_len;
732 }
733 cp[o] = '\0';
734 if (append(cp, patternsp, npatternsp) != 0) {
735 free(cp);
736 return -1;
737 }
738 return 0;
739}
740
741/*
742 * Expand the first encountered brace in pattern, appending the expanded
743 * patterns it yielded to the *patternsp array.
744 *
745 * Returns 0 on success or -1 on allocation failure.
746 *
747 * Signals whether expansion was performed via *expanded and whether
748 * pattern was invalid via *invalid.
749 */
750static int
751brace_expand_one(const char *pattern, char ***patternsp, size_t *npatternsp,
752 int *expanded, int *invalid)
753{
754 int i;
755 int in_bracket, brace_start, brace_end, brace_level;
756 int sel_start, sel_end;
757
758 *invalid = *expanded = 0;
759
760 if (find_brace(pattern, &brace_start, &brace_end) != 0) {
761 *invalid = 1;
762 return 0;
763 } else if (brace_start == -1)
764 return 0;
765
766 in_bracket = brace_level = 0;
767 for (i = sel_start = brace_start + 1; i < brace_end; i++) {
768 switch (pattern[i]) {
769 case '{':
770 if (in_bracket)
771 break;
772 brace_level++;
773 break;
774 case '}':
775 if (in_bracket)
776 break;
777 brace_level--;
778 break;
779 case '[':
780 in_bracket = 1;
781 break;
782 case ']':
783 in_bracket = 0;
784 break;
785 case '\\':
786 if (i < brace_end - 1)
787 i++; /* skip */
788 break;
789 }
790 if (pattern[i] == ',' || i == brace_end - 1) {
791 if (in_bracket || brace_level > 0)
792 continue;
793 /* End of a selection, emit an expanded pattern */
794
795 /* Adjust end index for last selection */
796 sel_end = (i == brace_end - 1) ? brace_end : i;
797 if (emit_expansion(pattern, brace_start, brace_end,
798 sel_start, sel_end, patternsp, npatternsp) != 0)
799 return -1;
800 /* move on to the next selection */
801 sel_start = i + 1;
802 continue;
803 }
804 }
805 if (in_bracket || brace_level > 0) {
806 *invalid = 1;
807 return 0;
808 }
809 /* success */
810 *expanded = 1;
811 return 0;
812}
813
814/* Expand braces from pattern. Returns 0 on success, -1 on failure */
815static int
816brace_expand(const char *pattern, char ***patternsp, size_t *npatternsp)
817{
818 char *cp, *cp2, **active = NULL, **done = NULL;
819 size_t i, nactive = 0, ndone = 0;
820 int ret = -1, invalid = 0, expanded = 0;
821
822 *patternsp = NULL;
823 *npatternsp = 0;
824
825 /* Start the worklist with the original pattern */
826 if ((cp = strdup(pattern)) == NULL)
827 return -1;
828 if (append(cp, &active, &nactive) != 0) {
829 free(cp);
830 return -1;
831 }
832 while (nactive > 0) {
833 cp = active[nactive - 1];
834 nactive--;
835 if (brace_expand_one(cp, &active, &nactive,
836 &expanded, &invalid) == -1) {
837 free(cp);
838 goto fail;
839 }
840 if (invalid)
841 fatal("%s: invalid brace pattern \"%s\"", __func__, cp);
842 if (expanded) {
843 /*
844 * Current entry expanded to new entries on the
845 * active list; discard the progenitor pattern.
846 */
847 free(cp);
848 continue;
849 }
850 /*
851 * Pattern did not expand; append the finename component to
852 * the completed list
853 */
854 if ((cp2 = strrchr(cp, '/')) != NULL)
855 *cp2++ = '\0';
856 else
857 cp2 = cp;
858 if (append(xstrdup(cp2), &done, &ndone) != 0) {
859 free(cp);
860 goto fail;
861 }
862 free(cp);
863 }
864 /* success */
865 *patternsp = done;
866 *npatternsp = ndone;
867 done = NULL;
868 ndone = 0;
869 ret = 0;
870 fail:
871 for (i = 0; i < nactive; i++)
872 free(active[i]);
873 free(active);
874 for (i = 0; i < ndone; i++)
875 free(done[i]);
876 free(done);
877 return ret;
878}
879
623void 880void
624toremote(int argc, char **argv) 881toremote(int argc, char **argv)
625{ 882{
@@ -791,7 +1048,7 @@ tolocal(int argc, char **argv)
791 continue; 1048 continue;
792 } 1049 }
793 free(bp); 1050 free(bp);
794 sink(1, argv + argc - 1); 1051 sink(1, argv + argc - 1, src);
795 (void) close(remin); 1052 (void) close(remin);
796 remin = remout = -1; 1053 remin = remout = -1;
797 } 1054 }
@@ -967,7 +1224,7 @@ rsource(char *name, struct stat *statp)
967 (sizeof(type) != 4 && sizeof(type) != 8)) 1224 (sizeof(type) != 4 && sizeof(type) != 8))
968 1225
969void 1226void
970sink(int argc, char **argv) 1227sink(int argc, char **argv, const char *src)
971{ 1228{
972 static BUF buffer; 1229 static BUF buffer;
973 struct stat stb; 1230 struct stat stb;
@@ -983,6 +1240,8 @@ sink(int argc, char **argv)
983 unsigned long long ull; 1240 unsigned long long ull;
984 int setimes, targisdir, wrerrno = 0; 1241 int setimes, targisdir, wrerrno = 0;
985 char ch, *cp, *np, *targ, *why, *vect[1], buf[2048], visbuf[2048]; 1242 char ch, *cp, *np, *targ, *why, *vect[1], buf[2048], visbuf[2048];
1243 char **patterns = NULL;
1244 size_t n, npatterns = 0;
986 struct timeval tv[2]; 1245 struct timeval tv[2];
987 1246
988#define atime tv[0] 1247#define atime tv[0]
@@ -1007,10 +1266,18 @@ sink(int argc, char **argv)
1007 (void) atomicio(vwrite, remout, "", 1); 1266 (void) atomicio(vwrite, remout, "", 1);
1008 if (stat(targ, &stb) == 0 && S_ISDIR(stb.st_mode)) 1267 if (stat(targ, &stb) == 0 && S_ISDIR(stb.st_mode))
1009 targisdir = 1; 1268 targisdir = 1;
1269 if (src != NULL && !iamrecursive && !Tflag) {
1270 /*
1271 * Prepare to try to restrict incoming filenames to match
1272 * the requested destination file glob.
1273 */
1274 if (brace_expand(src, &patterns, &npatterns) != 0)
1275 fatal("%s: could not expand pattern", __func__);
1276 }
1010 for (first = 1;; first = 0) { 1277 for (first = 1;; first = 0) {
1011 cp = buf; 1278 cp = buf;
1012 if (atomicio(read, remin, cp, 1) != 1) 1279 if (atomicio(read, remin, cp, 1) != 1)
1013 return; 1280 goto done;
1014 if (*cp++ == '\n') 1281 if (*cp++ == '\n')
1015 SCREWUP("unexpected <newline>"); 1282 SCREWUP("unexpected <newline>");
1016 do { 1283 do {
@@ -1036,7 +1303,7 @@ sink(int argc, char **argv)
1036 } 1303 }
1037 if (buf[0] == 'E') { 1304 if (buf[0] == 'E') {
1038 (void) atomicio(vwrite, remout, "", 1); 1305 (void) atomicio(vwrite, remout, "", 1);
1039 return; 1306 goto done;
1040 } 1307 }
1041 if (ch == '\n') 1308 if (ch == '\n')
1042 *--cp = 0; 1309 *--cp = 0;
@@ -1106,10 +1373,19 @@ sink(int argc, char **argv)
1106 SCREWUP("size out of range"); 1373 SCREWUP("size out of range");
1107 size = (off_t)ull; 1374 size = (off_t)ull;
1108 1375
1109 if ((strchr(cp, '/') != NULL) || (strcmp(cp, "..") == 0)) { 1376 if (*cp == '\0' || strchr(cp, '/') != NULL ||
1377 strcmp(cp, ".") == 0 || strcmp(cp, "..") == 0) {
1110 run_err("error: unexpected filename: %s", cp); 1378 run_err("error: unexpected filename: %s", cp);
1111 exit(1); 1379 exit(1);
1112 } 1380 }
1381 if (npatterns > 0) {
1382 for (n = 0; n < npatterns; n++) {
1383 if (fnmatch(patterns[n], cp, 0) == 0)
1384 break;
1385 }
1386 if (n >= npatterns)
1387 SCREWUP("filename does not match request");
1388 }
1113 if (targisdir) { 1389 if (targisdir) {
1114 static char *namebuf; 1390 static char *namebuf;
1115 static size_t cursize; 1391 static size_t cursize;
@@ -1147,7 +1423,7 @@ sink(int argc, char **argv)
1147 goto bad; 1423 goto bad;
1148 } 1424 }
1149 vect[0] = xstrdup(np); 1425 vect[0] = xstrdup(np);
1150 sink(1, vect); 1426 sink(1, vect, src);
1151 if (setimes) { 1427 if (setimes) {
1152 setimes = 0; 1428 setimes = 0;
1153 if (utimes(vect[0], tv) < 0) 1429 if (utimes(vect[0], tv) < 0)
@@ -1268,7 +1544,15 @@ bad: run_err("%s: %s", np, strerror(errno));
1268 break; 1544 break;
1269 } 1545 }
1270 } 1546 }
1547done:
1548 for (n = 0; n < npatterns; n++)
1549 free(patterns[n]);
1550 free(patterns);
1551 return;
1271screwup: 1552screwup:
1553 for (n = 0; n < npatterns; n++)
1554 free(patterns[n]);
1555 free(patterns);
1272 run_err("protocol error: %s", why); 1556 run_err("protocol error: %s", why);
1273 exit(1); 1557 exit(1);
1274} 1558}
@@ -1315,8 +1599,9 @@ void
1315usage(void) 1599usage(void)
1316{ 1600{
1317 (void) fprintf(stderr, 1601 (void) fprintf(stderr,
1318 "usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n" 1602 "usage: scp [-346BCpqrTv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
1319 " [-l limit] [-o ssh_option] [-P port] [-S program] source ... target\n"); 1603 " [-J destination] [-l limit] [-o ssh_option] [-P port]\n"
1604 " [-S program] source ... target\n");
1320 exit(1); 1605 exit(1);
1321} 1606}
1322 1607
diff --git a/servconf.c b/servconf.c
index 932d363bb..ffac5d2c7 100644
--- a/servconf.c
+++ b/servconf.c
@@ -1,5 +1,5 @@
1 1
2/* $OpenBSD: servconf.c,v 1.342 2018/09/20 23:40:16 djm Exp $ */ 2/* $OpenBSD: servconf.c,v 1.350 2019/03/25 22:33:44 djm Exp $ */
3/* 3/*
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
5 * All rights reserved 5 * All rights reserved
@@ -221,26 +221,40 @@ assemble_algorithms(ServerOptions *o)
221} 221}
222 222
223static void 223static void
224array_append(const char *file, const int line, const char *directive, 224array_append2(const char *file, const int line, const char *directive,
225 char ***array, u_int *lp, const char *s) 225 char ***array, int **iarray, u_int *lp, const char *s, int i)
226{ 226{
227 227
228 if (*lp >= INT_MAX) 228 if (*lp >= INT_MAX)
229 fatal("%s line %d: Too many %s entries", file, line, directive); 229 fatal("%s line %d: Too many %s entries", file, line, directive);
230 230
231 if (iarray != NULL) {
232 *iarray = xrecallocarray(*iarray, *lp, *lp + 1,
233 sizeof(**iarray));
234 (*iarray)[*lp] = i;
235 }
236
231 *array = xrecallocarray(*array, *lp, *lp + 1, sizeof(**array)); 237 *array = xrecallocarray(*array, *lp, *lp + 1, sizeof(**array));
232 (*array)[*lp] = xstrdup(s); 238 (*array)[*lp] = xstrdup(s);
233 (*lp)++; 239 (*lp)++;
234} 240}
235 241
242static void
243array_append(const char *file, const int line, const char *directive,
244 char ***array, u_int *lp, const char *s)
245{
246 array_append2(file, line, directive, array, NULL, lp, s, 0);
247}
248
236void 249void
237servconf_add_hostkey(const char *file, const int line, 250servconf_add_hostkey(const char *file, const int line,
238 ServerOptions *options, const char *path) 251 ServerOptions *options, const char *path, int userprovided)
239{ 252{
240 char *apath = derelativise_path(path); 253 char *apath = derelativise_path(path);
241 254
242 array_append(file, line, "HostKey", 255 array_append2(file, line, "HostKey",
243 &options->host_key_files, &options->num_host_key_files, apath); 256 &options->host_key_files, &options->host_key_file_userprovided,
257 &options->num_host_key_files, apath, userprovided);
244 free(apath); 258 free(apath);
245} 259}
246 260
@@ -268,16 +282,16 @@ fill_default_server_options(ServerOptions *options)
268 if (options->num_host_key_files == 0) { 282 if (options->num_host_key_files == 0) {
269 /* fill default hostkeys for protocols */ 283 /* fill default hostkeys for protocols */
270 servconf_add_hostkey("[default]", 0, options, 284 servconf_add_hostkey("[default]", 0, options,
271 _PATH_HOST_RSA_KEY_FILE); 285 _PATH_HOST_RSA_KEY_FILE, 0);
272#ifdef OPENSSL_HAS_ECC 286#ifdef OPENSSL_HAS_ECC
273 servconf_add_hostkey("[default]", 0, options, 287 servconf_add_hostkey("[default]", 0, options,
274 _PATH_HOST_ECDSA_KEY_FILE); 288 _PATH_HOST_ECDSA_KEY_FILE, 0);
275#endif 289#endif
276 servconf_add_hostkey("[default]", 0, options, 290 servconf_add_hostkey("[default]", 0, options,
277 _PATH_HOST_ED25519_KEY_FILE); 291 _PATH_HOST_ED25519_KEY_FILE, 0);
278#ifdef WITH_XMSS 292#ifdef WITH_XMSS
279 servconf_add_hostkey("[default]", 0, options, 293 servconf_add_hostkey("[default]", 0, options,
280 _PATH_HOST_XMSS_KEY_FILE); 294 _PATH_HOST_XMSS_KEY_FILE, 0);
281#endif /* WITH_XMSS */ 295#endif /* WITH_XMSS */
282 } 296 }
283 /* No certificates by default */ 297 /* No certificates by default */
@@ -456,7 +470,6 @@ fill_default_server_options(ServerOptions *options)
456 options->compression = 0; 470 options->compression = 0;
457 } 471 }
458#endif 472#endif
459
460} 473}
461 474
462/* Keyword tokens. */ 475/* Keyword tokens. */
@@ -702,7 +715,7 @@ derelativise_path(const char *path)
702 if (strcasecmp(path, "none") == 0) 715 if (strcasecmp(path, "none") == 0)
703 return xstrdup("none"); 716 return xstrdup("none");
704 expanded = tilde_expand_filename(path, getuid()); 717 expanded = tilde_expand_filename(path, getuid());
705 if (*expanded == '/') 718 if (path_absolute(expanded))
706 return expanded; 719 return expanded;
707 if (getcwd(cwd, sizeof(cwd)) == NULL) 720 if (getcwd(cwd, sizeof(cwd)) == NULL)
708 fatal("%s: getcwd: %s", __func__, strerror(errno)); 721 fatal("%s: getcwd: %s", __func__, strerror(errno));
@@ -864,7 +877,7 @@ process_permitopen_list(struct ssh *ssh, ServerOpCodes opcode,
864{ 877{
865 u_int i; 878 u_int i;
866 int port; 879 int port;
867 char *host, *arg, *oarg; 880 char *host, *arg, *oarg, ch;
868 int where = opcode == sPermitOpen ? FORWARD_LOCAL : FORWARD_REMOTE; 881 int where = opcode == sPermitOpen ? FORWARD_LOCAL : FORWARD_REMOTE;
869 const char *what = lookup_opcode_name(opcode); 882 const char *what = lookup_opcode_name(opcode);
870 883
@@ -882,8 +895,9 @@ process_permitopen_list(struct ssh *ssh, ServerOpCodes opcode,
882 /* Otherwise treat it as a list of permitted host:port */ 895 /* Otherwise treat it as a list of permitted host:port */
883 for (i = 0; i < num_opens; i++) { 896 for (i = 0; i < num_opens; i++) {
884 oarg = arg = xstrdup(opens[i]); 897 oarg = arg = xstrdup(opens[i]);
885 host = hpdelim(&arg); 898 ch = '\0';
886 if (host == NULL) 899 host = hpdelim2(&arg, &ch);
900 if (host == NULL || ch == '/')
887 fatal("%s: missing host in %s", __func__, what); 901 fatal("%s: missing host in %s", __func__, what);
888 host = cleanhostname(host); 902 host = cleanhostname(host);
889 if (arg == NULL || ((port = permitopen_port(arg)) < 0)) 903 if (arg == NULL || ((port = permitopen_port(arg)) < 0))
@@ -909,12 +923,11 @@ process_permitopen(struct ssh *ssh, ServerOptions *options)
909} 923}
910 924
911struct connection_info * 925struct connection_info *
912get_connection_info(int populate, int use_dns) 926get_connection_info(struct ssh *ssh, int populate, int use_dns)
913{ 927{
914 struct ssh *ssh = active_state; /* XXX */
915 static struct connection_info ci; 928 static struct connection_info ci;
916 929
917 if (!populate) 930 if (ssh == NULL || !populate)
918 return &ci; 931 return &ci;
919 ci.host = auth_get_canonical_hostname(ssh, use_dns); 932 ci.host = auth_get_canonical_hostname(ssh, use_dns);
920 ci.address = ssh_remote_ipaddr(ssh); 933 ci.address = ssh_remote_ipaddr(ssh);
@@ -1035,7 +1048,7 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
1035 } 1048 }
1036 if (ci->user == NULL) 1049 if (ci->user == NULL)
1037 match_test_missing_fatal("User", "user"); 1050 match_test_missing_fatal("User", "user");
1038 if (match_pattern_list(ci->user, arg, 0) != 1) 1051 if (match_usergroup_pattern_list(ci->user, arg) != 1)
1039 result = 0; 1052 result = 0;
1040 else 1053 else
1041 debug("user %.100s matched 'User %.100s' at " 1054 debug("user %.100s matched 'User %.100s' at "
@@ -1201,7 +1214,7 @@ process_server_config_line(ServerOptions *options, char *line,
1201 const char *filename, int linenum, int *activep, 1214 const char *filename, int linenum, int *activep,
1202 struct connection_info *connectinfo) 1215 struct connection_info *connectinfo)
1203{ 1216{
1204 char *cp, ***chararrayptr, **charptr, *arg, *arg2, *p; 1217 char ch, *cp, ***chararrayptr, **charptr, *arg, *arg2, *p;
1205 int cmdline = 0, *intptr, value, value2, n, port; 1218 int cmdline = 0, *intptr, value, value2, n, port;
1206 SyslogFacility *log_facility_ptr; 1219 SyslogFacility *log_facility_ptr;
1207 LogLevel *log_level_ptr; 1220 LogLevel *log_level_ptr;
@@ -1301,8 +1314,10 @@ process_server_config_line(ServerOptions *options, char *line,
1301 port = 0; 1314 port = 0;
1302 p = arg; 1315 p = arg;
1303 } else { 1316 } else {
1304 p = hpdelim(&arg); 1317 arg2 = NULL;
1305 if (p == NULL) 1318 ch = '\0';
1319 p = hpdelim2(&arg, &ch);
1320 if (p == NULL || ch == '/')
1306 fatal("%s line %d: bad address:port usage", 1321 fatal("%s line %d: bad address:port usage",
1307 filename, linenum); 1322 filename, linenum);
1308 p = cleanhostname(p); 1323 p = cleanhostname(p);
@@ -1355,8 +1370,10 @@ process_server_config_line(ServerOptions *options, char *line,
1355 if (!arg || *arg == '\0') 1370 if (!arg || *arg == '\0')
1356 fatal("%s line %d: missing file name.", 1371 fatal("%s line %d: missing file name.",
1357 filename, linenum); 1372 filename, linenum);
1358 if (*activep) 1373 if (*activep) {
1359 servconf_add_hostkey(filename, linenum, options, arg); 1374 servconf_add_hostkey(filename, linenum,
1375 options, arg, 1);
1376 }
1360 break; 1377 break;
1361 1378
1362 case sHostKeyAgent: 1379 case sHostKeyAgent:
@@ -1928,8 +1945,9 @@ process_server_config_line(ServerOptions *options, char *line,
1928 xasprintf(&arg2, "*:%s", arg); 1945 xasprintf(&arg2, "*:%s", arg);
1929 } else { 1946 } else {
1930 arg2 = xstrdup(arg); 1947 arg2 = xstrdup(arg);
1931 p = hpdelim(&arg); 1948 ch = '\0';
1932 if (p == NULL) { 1949 p = hpdelim2(&arg, &ch);
1950 if (p == NULL || ch == '/') {
1933 fatal("%s line %d: missing host in %s", 1951 fatal("%s line %d: missing host in %s",
1934 filename, linenum, 1952 filename, linenum,
1935 lookup_opcode_name(opcode)); 1953 lookup_opcode_name(opcode));
diff --git a/servconf.h b/servconf.h
index 0175e00e8..54e0a8d8d 100644
--- a/servconf.h
+++ b/servconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: servconf.h,v 1.137 2018/09/20 03:28:06 djm Exp $ */ 1/* $OpenBSD: servconf.h,v 1.139 2019/01/19 21:37:48 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -75,6 +75,7 @@ typedef struct {
75 char *routing_domain; /* Bind session to routing domain */ 75 char *routing_domain; /* Bind session to routing domain */
76 76
77 char **host_key_files; /* Files containing host keys. */ 77 char **host_key_files; /* Files containing host keys. */
78 int *host_key_file_userprovided; /* Key was specified by user. */
78 u_int num_host_key_files; /* Number of files for host keys. */ 79 u_int num_host_key_files; /* Number of files for host keys. */
79 char **host_cert_files; /* Files containing host certs. */ 80 char **host_cert_files; /* Files containing host certs. */
80 u_int num_host_cert_files; /* Number of files for host certs. */ 81 u_int num_host_cert_files; /* Number of files for host certs. */
@@ -257,7 +258,7 @@ struct connection_info {
257 M_CP_STRARRAYOPT(permitted_listens, num_permitted_listens); \ 258 M_CP_STRARRAYOPT(permitted_listens, num_permitted_listens); \
258 } while (0) 259 } while (0)
259 260
260struct connection_info *get_connection_info(int, int); 261struct connection_info *get_connection_info(struct ssh *, int, int);
261void initialize_server_options(ServerOptions *); 262void initialize_server_options(ServerOptions *);
262void fill_default_server_options(ServerOptions *); 263void fill_default_server_options(ServerOptions *);
263int process_server_config_line(ServerOptions *, char *, const char *, int, 264int process_server_config_line(ServerOptions *, char *, const char *, int,
@@ -273,7 +274,7 @@ void copy_set_server_options(ServerOptions *, ServerOptions *, int);
273void dump_config(ServerOptions *); 274void dump_config(ServerOptions *);
274char *derelativise_path(const char *); 275char *derelativise_path(const char *);
275void servconf_add_hostkey(const char *, const int, 276void servconf_add_hostkey(const char *, const int,
276 ServerOptions *, const char *path); 277 ServerOptions *, const char *path, int);
277void servconf_add_hostcert(const char *, const int, 278void servconf_add_hostcert(const char *, const int,
278 ServerOptions *, const char *path); 279 ServerOptions *, const char *path);
279 280
diff --git a/serverloop.c b/serverloop.c
index 7be83e2d3..d7b04b37c 100644
--- a/serverloop.c
+++ b/serverloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: serverloop.c,v 1.209 2018/07/27 05:13:02 dtucker Exp $ */ 1/* $OpenBSD: serverloop.c,v 1.215 2019/03/27 09:29:14 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -49,6 +49,7 @@
49#include <errno.h> 49#include <errno.h>
50#include <fcntl.h> 50#include <fcntl.h>
51#include <pwd.h> 51#include <pwd.h>
52#include <limits.h>
52#include <signal.h> 53#include <signal.h>
53#include <string.h> 54#include <string.h>
54#include <termios.h> 55#include <termios.h>
@@ -98,7 +99,7 @@ static volatile sig_atomic_t child_terminated = 0; /* The child has terminated.
98static volatile sig_atomic_t received_sigterm = 0; 99static volatile sig_atomic_t received_sigterm = 0;
99 100
100/* prototypes */ 101/* prototypes */
101static void server_init_dispatch(void); 102static void server_init_dispatch(struct ssh *);
102 103
103/* requested tunnel forwarding interface(s), shared with session.c */ 104/* requested tunnel forwarding interface(s), shared with session.c */
104char *tun_fwd_ifnames = NULL; 105char *tun_fwd_ifnames = NULL;
@@ -179,11 +180,12 @@ sigterm_handler(int sig)
179static void 180static void
180client_alive_check(struct ssh *ssh) 181client_alive_check(struct ssh *ssh)
181{ 182{
182 int channel_id;
183 char remote_id[512]; 183 char remote_id[512];
184 int r, channel_id;
184 185
185 /* timeout, check to see how many we have had */ 186 /* timeout, check to see how many we have had */
186 if (packet_inc_alive_timeouts() > options.client_alive_count_max) { 187 if (ssh_packet_inc_alive_timeouts(ssh) >
188 options.client_alive_count_max) {
187 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id)); 189 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
188 logit("Timeout, client not responding from %s", remote_id); 190 logit("Timeout, client not responding from %s", remote_id);
189 cleanup_exit(255); 191 cleanup_exit(255);
@@ -194,14 +196,17 @@ client_alive_check(struct ssh *ssh)
194 * we should get back a failure 196 * we should get back a failure
195 */ 197 */
196 if ((channel_id = channel_find_open(ssh)) == -1) { 198 if ((channel_id = channel_find_open(ssh)) == -1) {
197 packet_start(SSH2_MSG_GLOBAL_REQUEST); 199 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 ||
198 packet_put_cstring("keepalive@openssh.com"); 200 (r = sshpkt_put_cstring(ssh, "keepalive@openssh.com"))
199 packet_put_char(1); /* boolean: want reply */ 201 != 0 ||
202 (r = sshpkt_put_u8(ssh, 1)) != 0) /* boolean: want reply */
203 fatal("%s: %s", __func__, ssh_err(r));
200 } else { 204 } else {
201 channel_request_start(ssh, channel_id, 205 channel_request_start(ssh, channel_id,
202 "keepalive@openssh.com", 1); 206 "keepalive@openssh.com", 1);
203 } 207 }
204 packet_send(); 208 if ((r = sshpkt_send(ssh)) != 0)
209 fatal("%s: %s", __func__, ssh_err(r));
205} 210}
206 211
207/* 212/*
@@ -220,6 +225,7 @@ wait_until_can_do_something(struct ssh *ssh,
220 int ret; 225 int ret;
221 time_t minwait_secs = 0; 226 time_t minwait_secs = 0;
222 int client_alive_scheduled = 0; 227 int client_alive_scheduled = 0;
228 /* time we last heard from the client OR sent a keepalive */
223 static time_t last_client_time; 229 static time_t last_client_time;
224 230
225 /* Allocate and update select() masks for channel descriptors. */ 231 /* Allocate and update select() masks for channel descriptors. */
@@ -242,9 +248,10 @@ wait_until_can_do_something(struct ssh *ssh,
242 uint64_t keepalive_ms = 248 uint64_t keepalive_ms =
243 (uint64_t)options.client_alive_interval * 1000; 249 (uint64_t)options.client_alive_interval * 1000;
244 250
245 client_alive_scheduled = 1; 251 if (max_time_ms == 0 || max_time_ms > keepalive_ms) {
246 if (max_time_ms == 0 || max_time_ms > keepalive_ms)
247 max_time_ms = keepalive_ms; 252 max_time_ms = keepalive_ms;
253 client_alive_scheduled = 1;
254 }
248 } 255 }
249 256
250#if 0 257#if 0
@@ -258,14 +265,14 @@ wait_until_can_do_something(struct ssh *ssh,
258 * If we have buffered packet data going to the client, mark that 265 * If we have buffered packet data going to the client, mark that
259 * descriptor. 266 * descriptor.
260 */ 267 */
261 if (packet_have_data_to_write()) 268 if (ssh_packet_have_data_to_write(ssh))
262 FD_SET(connection_out, *writesetp); 269 FD_SET(connection_out, *writesetp);
263 270
264 /* 271 /*
265 * If child has terminated and there is enough buffer space to read 272 * If child has terminated and there is enough buffer space to read
266 * from it, then read as much as is available and exit. 273 * from it, then read as much as is available and exit.
267 */ 274 */
268 if (child_terminated && packet_not_very_much_data_to_write()) 275 if (child_terminated && ssh_packet_not_very_much_data_to_write(ssh))
269 if (max_time_ms == 0 || client_alive_scheduled) 276 if (max_time_ms == 0 || client_alive_scheduled)
270 max_time_ms = 100; 277 max_time_ms = 100;
271 278
@@ -288,13 +295,15 @@ wait_until_can_do_something(struct ssh *ssh,
288 } else if (client_alive_scheduled) { 295 } else if (client_alive_scheduled) {
289 time_t now = monotime(); 296 time_t now = monotime();
290 297
291 if (ret == 0) { /* timeout */ 298 /*
299 * If the select timed out, or returned for some other reason
300 * but we haven't heard from the client in time, send keepalive.
301 */
302 if (ret == 0 || (last_client_time != 0 && last_client_time +
303 options.client_alive_interval <= now)) {
292 client_alive_check(ssh); 304 client_alive_check(ssh);
293 } else if (FD_ISSET(connection_in, *readsetp)) {
294 last_client_time = now; 305 last_client_time = now;
295 } else if (last_client_time != 0 && last_client_time + 306 } else if (FD_ISSET(connection_in, *readsetp)) {
296 options.client_alive_interval <= now) {
297 client_alive_check(ssh);
298 last_client_time = now; 307 last_client_time = now;
299 } 308 }
300 } 309 }
@@ -309,7 +318,7 @@ wait_until_can_do_something(struct ssh *ssh,
309static int 318static int
310process_input(struct ssh *ssh, fd_set *readset, int connection_in) 319process_input(struct ssh *ssh, fd_set *readset, int connection_in)
311{ 320{
312 int len; 321 int r, len;
313 char buf[16384]; 322 char buf[16384];
314 323
315 /* Read and buffer any input data from the client. */ 324 /* Read and buffer any input data from the client. */
@@ -330,7 +339,10 @@ process_input(struct ssh *ssh, fd_set *readset, int connection_in)
330 } 339 }
331 } else { 340 } else {
332 /* Buffer any received data. */ 341 /* Buffer any received data. */
333 packet_process_incoming(buf, len); 342 if ((r = ssh_packet_process_incoming(ssh, buf, len))
343 != 0)
344 fatal("%s: ssh_packet_process_incoming: %s",
345 __func__, ssh_err(r));
334 } 346 }
335 } 347 }
336 return 0; 348 return 0;
@@ -340,11 +352,16 @@ process_input(struct ssh *ssh, fd_set *readset, int connection_in)
340 * Sends data from internal buffers to client program stdin. 352 * Sends data from internal buffers to client program stdin.
341 */ 353 */
342static void 354static void
343process_output(fd_set *writeset, int connection_out) 355process_output(struct ssh *ssh, fd_set *writeset, int connection_out)
344{ 356{
357 int r;
358
345 /* Send any buffered packet data to the client. */ 359 /* Send any buffered packet data to the client. */
346 if (FD_ISSET(connection_out, writeset)) 360 if (FD_ISSET(connection_out, writeset)) {
347 packet_write_poll(); 361 if ((r = ssh_packet_write_poll(ssh)) != 0)
362 fatal("%s: ssh_packet_write_poll: %s",
363 __func__, ssh_err(r));
364 }
348} 365}
349 366
350static void 367static void
@@ -387,8 +404,8 @@ server_loop2(struct ssh *ssh, Authctxt *authctxt)
387 404
388 signal(SIGCHLD, sigchld_handler); 405 signal(SIGCHLD, sigchld_handler);
389 child_terminated = 0; 406 child_terminated = 0;
390 connection_in = packet_get_connection_in(); 407 connection_in = ssh_packet_get_connection_in(ssh);
391 connection_out = packet_get_connection_out(); 408 connection_out = ssh_packet_get_connection_out(ssh);
392 409
393 if (!use_privsep) { 410 if (!use_privsep) {
394 signal(SIGTERM, sigterm_handler); 411 signal(SIGTERM, sigterm_handler);
@@ -401,18 +418,21 @@ server_loop2(struct ssh *ssh, Authctxt *authctxt)
401 max_fd = MAXIMUM(connection_in, connection_out); 418 max_fd = MAXIMUM(connection_in, connection_out);
402 max_fd = MAXIMUM(max_fd, notify_pipe[0]); 419 max_fd = MAXIMUM(max_fd, notify_pipe[0]);
403 420
404 server_init_dispatch(); 421 server_init_dispatch(ssh);
405 422
406 for (;;) { 423 for (;;) {
407 process_buffered_input_packets(ssh); 424 process_buffered_input_packets(ssh);
408 425
409 if (!ssh_packet_is_rekeying(ssh) && 426 if (!ssh_packet_is_rekeying(ssh) &&
410 packet_not_very_much_data_to_write()) 427 ssh_packet_not_very_much_data_to_write(ssh))
411 channel_output_poll(ssh); 428 channel_output_poll(ssh);
412 if (options.rekey_interval > 0 && !ssh_packet_is_rekeying(ssh)) 429 if (options.rekey_interval > 0 &&
413 rekey_timeout_ms = packet_get_rekey_timeout() * 1000; 430 !ssh_packet_is_rekeying(ssh)) {
414 else 431 rekey_timeout_ms = ssh_packet_get_rekey_timeout(ssh) *
432 1000;
433 } else {
415 rekey_timeout_ms = 0; 434 rekey_timeout_ms = 0;
435 }
416 436
417 wait_until_can_do_something(ssh, connection_in, connection_out, 437 wait_until_can_do_something(ssh, connection_in, connection_out,
418 &readset, &writeset, &max_fd, &nalloc, rekey_timeout_ms); 438 &readset, &writeset, &max_fd, &nalloc, rekey_timeout_ms);
@@ -428,7 +448,7 @@ server_loop2(struct ssh *ssh, Authctxt *authctxt)
428 channel_after_select(ssh, readset, writeset); 448 channel_after_select(ssh, readset, writeset);
429 if (process_input(ssh, readset, connection_in) < 0) 449 if (process_input(ssh, readset, connection_in) < 0)
430 break; 450 break;
431 process_output(writeset, connection_out); 451 process_output(ssh, writeset, connection_out);
432 } 452 }
433 collect_children(ssh); 453 collect_children(ssh);
434 454
@@ -451,7 +471,7 @@ server_input_keep_alive(int type, u_int32_t seq, struct ssh *ssh)
451 * even if this was generated by something other than 471 * even if this was generated by something other than
452 * the bogus CHANNEL_REQUEST we send for keepalives. 472 * the bogus CHANNEL_REQUEST we send for keepalives.
453 */ 473 */
454 packet_set_alive_timeouts(0); 474 ssh_packet_set_alive_timeouts(ssh, 0);
455 return 0; 475 return 0;
456} 476}
457 477
@@ -459,16 +479,28 @@ static Channel *
459server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg) 479server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg)
460{ 480{
461 Channel *c = NULL; 481 Channel *c = NULL;
462 char *target, *originator; 482 char *target = NULL, *originator = NULL;
463 u_short target_port, originator_port; 483 u_int target_port = 0, originator_port = 0;
464 484 int r;
465 target = packet_get_string(NULL); 485
466 target_port = packet_get_int(); 486 if ((r = sshpkt_get_cstring(ssh, &target, NULL)) != 0 ||
467 originator = packet_get_string(NULL); 487 (r = sshpkt_get_u32(ssh, &target_port)) != 0 ||
468 originator_port = packet_get_int(); 488 (r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 ||
469 packet_check_eom(); 489 (r = sshpkt_get_u32(ssh, &originator_port)) != 0 ||
490 (r = sshpkt_get_end(ssh)) != 0)
491 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
492 if (target_port > 0xFFFF) {
493 error("%s: invalid target port", __func__);
494 *reason = SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED;
495 goto out;
496 }
497 if (originator_port > 0xFFFF) {
498 error("%s: invalid originator port", __func__);
499 *reason = SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED;
500 goto out;
501 }
470 502
471 debug("%s: originator %s port %d, target %s port %d", __func__, 503 debug("%s: originator %s port %u, target %s port %u", __func__,
472 originator, originator_port, target, target_port); 504 originator, originator_port, target, target_port);
473 505
474 /* XXX fine grained permissions */ 506 /* XXX fine grained permissions */
@@ -485,9 +517,9 @@ server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg)
485 *reason = SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED; 517 *reason = SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED;
486 } 518 }
487 519
520 out:
488 free(originator); 521 free(originator);
489 free(target); 522 free(target);
490
491 return c; 523 return c;
492} 524}
493 525
@@ -495,17 +527,23 @@ static Channel *
495server_request_direct_streamlocal(struct ssh *ssh) 527server_request_direct_streamlocal(struct ssh *ssh)
496{ 528{
497 Channel *c = NULL; 529 Channel *c = NULL;
498 char *target, *originator; 530 char *target = NULL, *originator = NULL;
499 u_short originator_port; 531 u_int originator_port = 0;
500 struct passwd *pw = the_authctxt->pw; 532 struct passwd *pw = the_authctxt->pw;
533 int r;
501 534
502 if (pw == NULL || !the_authctxt->valid) 535 if (pw == NULL || !the_authctxt->valid)
503 fatal("%s: no/invalid user", __func__); 536 fatal("%s: no/invalid user", __func__);
504 537
505 target = packet_get_string(NULL); 538 if ((r = sshpkt_get_cstring(ssh, &target, NULL)) != 0 ||
506 originator = packet_get_string(NULL); 539 (r = sshpkt_get_cstring(ssh, &originator, NULL)) != 0 ||
507 originator_port = packet_get_int(); 540 (r = sshpkt_get_u32(ssh, &originator_port)) != 0 ||
508 packet_check_eom(); 541 (r = sshpkt_get_end(ssh)) != 0)
542 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
543 if (originator_port > 0xFFFF) {
544 error("%s: invalid originator port", __func__);
545 goto out;
546 }
509 547
510 debug("%s: originator %s port %d, target %s", __func__, 548 debug("%s: originator %s port %d, target %s", __func__,
511 originator, originator_port, target); 549 originator, originator_port, target);
@@ -522,9 +560,9 @@ server_request_direct_streamlocal(struct ssh *ssh)
522 originator, originator_port, target); 560 originator, originator_port, target);
523 } 561 }
524 562
563out:
525 free(originator); 564 free(originator);
526 free(target); 565 free(target);
527
528 return c; 566 return c;
529} 567}
530 568
@@ -532,27 +570,35 @@ static Channel *
532server_request_tun(struct ssh *ssh) 570server_request_tun(struct ssh *ssh)
533{ 571{
534 Channel *c = NULL; 572 Channel *c = NULL;
535 int mode, tun, sock; 573 u_int mode, tun;
574 int r, sock;
536 char *tmp, *ifname = NULL; 575 char *tmp, *ifname = NULL;
537 576
538 mode = packet_get_int(); 577 if ((r = sshpkt_get_u32(ssh, &mode)) != 0)
578 sshpkt_fatal(ssh, r, "%s: parse mode", __func__);
539 switch (mode) { 579 switch (mode) {
540 case SSH_TUNMODE_POINTOPOINT: 580 case SSH_TUNMODE_POINTOPOINT:
541 case SSH_TUNMODE_ETHERNET: 581 case SSH_TUNMODE_ETHERNET:
542 break; 582 break;
543 default: 583 default:
544 packet_send_debug("Unsupported tunnel device mode."); 584 ssh_packet_send_debug(ssh, "Unsupported tunnel device mode.");
545 return NULL; 585 return NULL;
546 } 586 }
547 if ((options.permit_tun & mode) == 0) { 587 if ((options.permit_tun & mode) == 0) {
548 packet_send_debug("Server has rejected tunnel device " 588 ssh_packet_send_debug(ssh, "Server has rejected tunnel device "
549 "forwarding"); 589 "forwarding");
550 return NULL; 590 return NULL;
551 } 591 }
552 592
553 tun = packet_get_int(); 593 if ((r = sshpkt_get_u32(ssh, &tun)) != 0)
594 sshpkt_fatal(ssh, r, "%s: parse device", __func__);
595 if (tun > INT_MAX) {
596 debug("%s: invalid tun", __func__);
597 goto done;
598 }
554 if (auth_opts->force_tun_device != -1) { 599 if (auth_opts->force_tun_device != -1) {
555 if (tun != SSH_TUNID_ANY && auth_opts->force_tun_device != tun) 600 if (tun != SSH_TUNID_ANY &&
601 auth_opts->force_tun_device != (int)tun)
556 goto done; 602 goto done;
557 tun = auth_opts->force_tun_device; 603 tun = auth_opts->force_tun_device;
558 } 604 }
@@ -585,7 +631,7 @@ server_request_tun(struct ssh *ssh)
585 631
586 done: 632 done:
587 if (c == NULL) 633 if (c == NULL)
588 packet_send_debug("Failed to open the tunnel device."); 634 ssh_packet_send_debug(ssh, "Failed to open the tunnel device.");
589 return c; 635 return c;
590} 636}
591 637
@@ -593,13 +639,15 @@ static Channel *
593server_request_session(struct ssh *ssh) 639server_request_session(struct ssh *ssh)
594{ 640{
595 Channel *c; 641 Channel *c;
642 int r;
596 643
597 debug("input_session_request"); 644 debug("input_session_request");
598 packet_check_eom(); 645 if ((r = sshpkt_get_end(ssh)) != 0)
646 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
599 647
600 if (no_more_sessions) { 648 if (no_more_sessions) {
601 packet_disconnect("Possible attack: attempt to open a session " 649 ssh_packet_disconnect(ssh, "Possible attack: attempt to open a "
602 "after additional sessions disabled"); 650 "session after additional sessions disabled");
603 } 651 }
604 652
605 /* 653 /*
@@ -624,20 +672,22 @@ static int
624server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh) 672server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
625{ 673{
626 Channel *c = NULL; 674 Channel *c = NULL;
627 char *ctype; 675 char *ctype = NULL;
628 const char *errmsg = NULL; 676 const char *errmsg = NULL;
629 int rchan, reason = SSH2_OPEN_CONNECT_FAILED; 677 int r, reason = SSH2_OPEN_CONNECT_FAILED;
630 u_int rmaxpack, rwindow, len; 678 u_int rchan = 0, rmaxpack = 0, rwindow = 0;
631 679
632 ctype = packet_get_string(&len); 680 if ((r = sshpkt_get_cstring(ssh, &ctype, NULL)) != 0 ||
633 rchan = packet_get_int(); 681 (r = sshpkt_get_u32(ssh, &rchan)) != 0 ||
634 rwindow = packet_get_int(); 682 (r = sshpkt_get_u32(ssh, &rwindow)) != 0 ||
635 rmaxpack = packet_get_int(); 683 (r = sshpkt_get_u32(ssh, &rmaxpack)) != 0)
636 684 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
637 debug("%s: ctype %s rchan %d win %d max %d", __func__, 685 debug("%s: ctype %s rchan %u win %u max %u", __func__,
638 ctype, rchan, rwindow, rmaxpack); 686 ctype, rchan, rwindow, rmaxpack);
639 687
640 if (strcmp(ctype, "session") == 0) { 688 if (rchan > INT_MAX) {
689 error("%s: invalid remote channel ID", __func__);
690 } else if (strcmp(ctype, "session") == 0) {
641 c = server_request_session(ssh); 691 c = server_request_session(ssh);
642 } else if (strcmp(ctype, "direct-tcpip") == 0) { 692 } else if (strcmp(ctype, "direct-tcpip") == 0) {
643 c = server_request_direct_tcpip(ssh, &reason, &errmsg); 693 c = server_request_direct_tcpip(ssh, &reason, &errmsg);
@@ -648,26 +698,32 @@ server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
648 } 698 }
649 if (c != NULL) { 699 if (c != NULL) {
650 debug("%s: confirm %s", __func__, ctype); 700 debug("%s: confirm %s", __func__, ctype);
651 c->remote_id = rchan; 701 c->remote_id = (int)rchan;
652 c->have_remote_id = 1; 702 c->have_remote_id = 1;
653 c->remote_window = rwindow; 703 c->remote_window = rwindow;
654 c->remote_maxpacket = rmaxpack; 704 c->remote_maxpacket = rmaxpack;
655 if (c->type != SSH_CHANNEL_CONNECTING) { 705 if (c->type != SSH_CHANNEL_CONNECTING) {
656 packet_start(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION); 706 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION)) != 0 ||
657 packet_put_int(c->remote_id); 707 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
658 packet_put_int(c->self); 708 (r = sshpkt_put_u32(ssh, c->self)) != 0 ||
659 packet_put_int(c->local_window); 709 (r = sshpkt_put_u32(ssh, c->local_window)) != 0 ||
660 packet_put_int(c->local_maxpacket); 710 (r = sshpkt_put_u32(ssh, c->local_maxpacket)) != 0 ||
661 packet_send(); 711 (r = sshpkt_send(ssh)) != 0) {
712 sshpkt_fatal(ssh, r,
713 "%s: send open confirm", __func__);
714 }
662 } 715 }
663 } else { 716 } else {
664 debug("%s: failure %s", __func__, ctype); 717 debug("%s: failure %s", __func__, ctype);
665 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE); 718 if ((r = sshpkt_start(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 ||
666 packet_put_int(rchan); 719 (r = sshpkt_put_u32(ssh, rchan)) != 0 ||
667 packet_put_int(reason); 720 (r = sshpkt_put_u32(ssh, reason)) != 0 ||
668 packet_put_cstring(errmsg ? errmsg : "open failed"); 721 (r = sshpkt_put_cstring(ssh, errmsg ? errmsg : "open failed")) != 0 ||
669 packet_put_cstring(""); 722 (r = sshpkt_put_cstring(ssh, "")) != 0 ||
670 packet_send(); 723 (r = sshpkt_send(ssh)) != 0) {
724 sshpkt_fatal(ssh, r,
725 "%s: send open failure", __func__);
726 }
671 } 727 }
672 free(ctype); 728 free(ctype);
673 return 0; 729 return 0;
@@ -730,9 +786,9 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
730 (r = sshbuf_put_string(sigbuf, 786 (r = sshbuf_put_string(sigbuf,
731 ssh->kex->session_id, ssh->kex->session_id_len)) != 0 || 787 ssh->kex->session_id, ssh->kex->session_id_len)) != 0 ||
732 (r = sshkey_puts(key, sigbuf)) != 0 || 788 (r = sshkey_puts(key, sigbuf)) != 0 ||
733 (r = ssh->kex->sign(key_prv, key_pub, &sig, &slen, 789 (r = ssh->kex->sign(ssh, key_prv, key_pub, &sig, &slen,
734 sshbuf_ptr(sigbuf), sshbuf_len(sigbuf), 790 sshbuf_ptr(sigbuf), sshbuf_len(sigbuf),
735 use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0)) != 0 || 791 use_kexsigtype ? ssh->kex->hostkey_alg : NULL)) != 0 ||
736 (r = sshbuf_put_string(resp, sig, slen)) != 0) { 792 (r = sshbuf_put_string(resp, sig, slen)) != 0) {
737 error("%s: couldn't prepare signature: %s", 793 error("%s: couldn't prepare signature: %s",
738 __func__, ssh_err(r)); 794 __func__, ssh_err(r));
@@ -754,65 +810,66 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
754static int 810static int
755server_input_global_request(int type, u_int32_t seq, struct ssh *ssh) 811server_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
756{ 812{
757 char *rtype; 813 char *rtype = NULL;
758 int want_reply; 814 u_char want_reply = 0;
759 int r, success = 0, allocated_listen_port = 0; 815 int r, success = 0, allocated_listen_port = 0;
816 u_int port = 0;
760 struct sshbuf *resp = NULL; 817 struct sshbuf *resp = NULL;
761 struct passwd *pw = the_authctxt->pw; 818 struct passwd *pw = the_authctxt->pw;
819 struct Forward fwd;
762 820
821 memset(&fwd, 0, sizeof(fwd));
763 if (pw == NULL || !the_authctxt->valid) 822 if (pw == NULL || !the_authctxt->valid)
764 fatal("%s: no/invalid user", __func__); 823 fatal("%s: no/invalid user", __func__);
765 824
766 rtype = packet_get_string(NULL); 825 if ((r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 ||
767 want_reply = packet_get_char(); 826 (r = sshpkt_get_u8(ssh, &want_reply)) != 0)
827 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
768 debug("%s: rtype %s want_reply %d", __func__, rtype, want_reply); 828 debug("%s: rtype %s want_reply %d", __func__, rtype, want_reply);
769 829
770 /* -R style forwarding */ 830 /* -R style forwarding */
771 if (strcmp(rtype, "tcpip-forward") == 0) { 831 if (strcmp(rtype, "tcpip-forward") == 0) {
772 struct Forward fwd; 832 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_host, NULL)) != 0 ||
773 833 (r = sshpkt_get_u32(ssh, &port)) != 0)
774 memset(&fwd, 0, sizeof(fwd)); 834 sshpkt_fatal(ssh, r, "%s: parse tcpip-forward", __func__);
775 fwd.listen_host = packet_get_string(NULL); 835 debug("%s: tcpip-forward listen %s port %u", __func__,
776 fwd.listen_port = (u_short)packet_get_int(); 836 fwd.listen_host, port);
777 debug("%s: tcpip-forward listen %s port %d", __func__, 837 if (port <= INT_MAX)
778 fwd.listen_host, fwd.listen_port); 838 fwd.listen_port = (int)port;
779
780 /* check permissions */ 839 /* check permissions */
781 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 || 840 if (port > INT_MAX ||
841 (options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 ||
782 !auth_opts->permit_port_forwarding_flag || 842 !auth_opts->permit_port_forwarding_flag ||
783 options.disable_forwarding || 843 options.disable_forwarding ||
784 (!want_reply && fwd.listen_port == 0) || 844 (!want_reply && fwd.listen_port == 0) ||
785 (fwd.listen_port != 0 && 845 (fwd.listen_port != 0 &&
786 !bind_permitted(fwd.listen_port, pw->pw_uid))) { 846 !bind_permitted(fwd.listen_port, pw->pw_uid))) {
787 success = 0; 847 success = 0;
788 packet_send_debug("Server has disabled port forwarding."); 848 ssh_packet_send_debug(ssh, "Server has disabled port forwarding.");
789 } else { 849 } else {
790 /* Start listening on the port */ 850 /* Start listening on the port */
791 success = channel_setup_remote_fwd_listener(ssh, &fwd, 851 success = channel_setup_remote_fwd_listener(ssh, &fwd,
792 &allocated_listen_port, &options.fwd_opts); 852 &allocated_listen_port, &options.fwd_opts);
793 } 853 }
794 free(fwd.listen_host);
795 if ((resp = sshbuf_new()) == NULL) 854 if ((resp = sshbuf_new()) == NULL)
796 fatal("%s: sshbuf_new", __func__); 855 fatal("%s: sshbuf_new", __func__);
797 if (allocated_listen_port != 0 && 856 if (allocated_listen_port != 0 &&
798 (r = sshbuf_put_u32(resp, allocated_listen_port)) != 0) 857 (r = sshbuf_put_u32(resp, allocated_listen_port)) != 0)
799 fatal("%s: sshbuf_put_u32: %s", __func__, ssh_err(r)); 858 fatal("%s: sshbuf_put_u32: %s", __func__, ssh_err(r));
800 } else if (strcmp(rtype, "cancel-tcpip-forward") == 0) { 859 } else if (strcmp(rtype, "cancel-tcpip-forward") == 0) {
801 struct Forward fwd; 860 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_host, NULL)) != 0 ||
861 (r = sshpkt_get_u32(ssh, &port)) != 0)
862 sshpkt_fatal(ssh, r, "%s: parse cancel-tcpip-forward", __func__);
802 863
803 memset(&fwd, 0, sizeof(fwd));
804 fwd.listen_host = packet_get_string(NULL);
805 fwd.listen_port = (u_short)packet_get_int();
806 debug("%s: cancel-tcpip-forward addr %s port %d", __func__, 864 debug("%s: cancel-tcpip-forward addr %s port %d", __func__,
807 fwd.listen_host, fwd.listen_port); 865 fwd.listen_host, port);
808 866 if (port <= INT_MAX) {
809 success = channel_cancel_rport_listener(ssh, &fwd); 867 fwd.listen_port = (int)port;
810 free(fwd.listen_host); 868 success = channel_cancel_rport_listener(ssh, &fwd);
869 }
811 } else if (strcmp(rtype, "streamlocal-forward@openssh.com") == 0) { 870 } else if (strcmp(rtype, "streamlocal-forward@openssh.com") == 0) {
812 struct Forward fwd; 871 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_path, NULL)) != 0)
813 872 sshpkt_fatal(ssh, r, "%s: parse streamlocal-forward@openssh.com", __func__);
814 memset(&fwd, 0, sizeof(fwd));
815 fwd.listen_path = packet_get_string(NULL);
816 debug("%s: streamlocal-forward listen path %s", __func__, 873 debug("%s: streamlocal-forward listen path %s", __func__,
817 fwd.listen_path); 874 fwd.listen_path);
818 875
@@ -822,39 +879,37 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
822 options.disable_forwarding || 879 options.disable_forwarding ||
823 (pw->pw_uid != 0 && !use_privsep)) { 880 (pw->pw_uid != 0 && !use_privsep)) {
824 success = 0; 881 success = 0;
825 packet_send_debug("Server has disabled " 882 ssh_packet_send_debug(ssh, "Server has disabled "
826 "streamlocal forwarding."); 883 "streamlocal forwarding.");
827 } else { 884 } else {
828 /* Start listening on the socket */ 885 /* Start listening on the socket */
829 success = channel_setup_remote_fwd_listener(ssh, 886 success = channel_setup_remote_fwd_listener(ssh,
830 &fwd, NULL, &options.fwd_opts); 887 &fwd, NULL, &options.fwd_opts);
831 } 888 }
832 free(fwd.listen_path);
833 } else if (strcmp(rtype, "cancel-streamlocal-forward@openssh.com") == 0) { 889 } else if (strcmp(rtype, "cancel-streamlocal-forward@openssh.com") == 0) {
834 struct Forward fwd; 890 if ((r = sshpkt_get_cstring(ssh, &fwd.listen_path, NULL)) != 0)
835 891 sshpkt_fatal(ssh, r, "%s: parse cancel-streamlocal-forward@openssh.com", __func__);
836 memset(&fwd, 0, sizeof(fwd));
837 fwd.listen_path = packet_get_string(NULL);
838 debug("%s: cancel-streamlocal-forward path %s", __func__, 892 debug("%s: cancel-streamlocal-forward path %s", __func__,
839 fwd.listen_path); 893 fwd.listen_path);
840 894
841 success = channel_cancel_rport_listener(ssh, &fwd); 895 success = channel_cancel_rport_listener(ssh, &fwd);
842 free(fwd.listen_path);
843 } else if (strcmp(rtype, "no-more-sessions@openssh.com") == 0) { 896 } else if (strcmp(rtype, "no-more-sessions@openssh.com") == 0) {
844 no_more_sessions = 1; 897 no_more_sessions = 1;
845 success = 1; 898 success = 1;
846 } else if (strcmp(rtype, "hostkeys-prove-00@openssh.com") == 0) { 899 } else if (strcmp(rtype, "hostkeys-prove-00@openssh.com") == 0) {
847 success = server_input_hostkeys_prove(ssh, &resp); 900 success = server_input_hostkeys_prove(ssh, &resp);
848 } 901 }
902 /* XXX sshpkt_get_end() */
849 if (want_reply) { 903 if (want_reply) {
850 packet_start(success ? 904 if ((r = sshpkt_start(ssh, success ?
851 SSH2_MSG_REQUEST_SUCCESS : SSH2_MSG_REQUEST_FAILURE); 905 SSH2_MSG_REQUEST_SUCCESS : SSH2_MSG_REQUEST_FAILURE)) != 0 ||
852 if (success && resp != NULL) 906 (success && resp != NULL && (r = sshpkt_putb(ssh, resp)) != 0) ||
853 ssh_packet_put_raw(ssh, sshbuf_ptr(resp), 907 (r = sshpkt_send(ssh)) != 0 ||
854 sshbuf_len(resp)); 908 (r = ssh_packet_write_wait(ssh)) != 0)
855 packet_send(); 909 sshpkt_fatal(ssh, r, "%s: send reply", __func__);
856 packet_write_wait();
857 } 910 }
911 free(fwd.listen_host);
912 free(fwd.listen_path);
858 free(rtype); 913 free(rtype);
859 sshbuf_free(resp); 914 sshbuf_free(resp);
860 return 0; 915 return 0;
@@ -864,58 +919,64 @@ static int
864server_input_channel_req(int type, u_int32_t seq, struct ssh *ssh) 919server_input_channel_req(int type, u_int32_t seq, struct ssh *ssh)
865{ 920{
866 Channel *c; 921 Channel *c;
867 int id, reply, success = 0; 922 int r, success = 0;
868 char *rtype; 923 char *rtype = NULL;
869 924 u_char want_reply = 0;
870 id = packet_get_int(); 925 u_int id = 0;
871 rtype = packet_get_string(NULL); 926
872 reply = packet_get_char(); 927 if ((r = sshpkt_get_u32(ssh, &id)) != 0 ||
873 928 (r = sshpkt_get_cstring(ssh, &rtype, NULL)) != 0 ||
874 debug("server_input_channel_req: channel %d request %s reply %d", 929 (r = sshpkt_get_u8(ssh, &want_reply)) != 0)
875 id, rtype, reply); 930 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
876 931
877 if ((c = channel_lookup(ssh, id)) == NULL) 932 debug("server_input_channel_req: channel %u request %s reply %d",
878 packet_disconnect("server_input_channel_req: " 933 id, rtype, want_reply);
879 "unknown channel %d", id); 934
935 if (id >= INT_MAX || (c = channel_lookup(ssh, (int)id)) == NULL) {
936 ssh_packet_disconnect(ssh, "%s: unknown channel %d",
937 __func__, id);
938 }
880 if (!strcmp(rtype, "eow@openssh.com")) { 939 if (!strcmp(rtype, "eow@openssh.com")) {
881 packet_check_eom(); 940 if ((r = sshpkt_get_end(ssh)) != 0)
941 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
882 chan_rcvd_eow(ssh, c); 942 chan_rcvd_eow(ssh, c);
883 } else if ((c->type == SSH_CHANNEL_LARVAL || 943 } else if ((c->type == SSH_CHANNEL_LARVAL ||
884 c->type == SSH_CHANNEL_OPEN) && strcmp(c->ctype, "session") == 0) 944 c->type == SSH_CHANNEL_OPEN) && strcmp(c->ctype, "session") == 0)
885 success = session_input_channel_req(ssh, c, rtype); 945 success = session_input_channel_req(ssh, c, rtype);
886 if (reply && !(c->flags & CHAN_CLOSE_SENT)) { 946 if (want_reply && !(c->flags & CHAN_CLOSE_SENT)) {
887 if (!c->have_remote_id) 947 if (!c->have_remote_id)
888 fatal("%s: channel %d: no remote_id", 948 fatal("%s: channel %d: no remote_id",
889 __func__, c->self); 949 __func__, c->self);
890 packet_start(success ? 950 if ((r = sshpkt_start(ssh, success ?
891 SSH2_MSG_CHANNEL_SUCCESS : SSH2_MSG_CHANNEL_FAILURE); 951 SSH2_MSG_CHANNEL_SUCCESS : SSH2_MSG_CHANNEL_FAILURE)) != 0 ||
892 packet_put_int(c->remote_id); 952 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
893 packet_send(); 953 (r = sshpkt_send(ssh)) != 0)
954 sshpkt_fatal(ssh, r, "%s: send reply", __func__);
894 } 955 }
895 free(rtype); 956 free(rtype);
896 return 0; 957 return 0;
897} 958}
898 959
899static void 960static void
900server_init_dispatch(void) 961server_init_dispatch(struct ssh *ssh)
901{ 962{
902 debug("server_init_dispatch"); 963 debug("server_init_dispatch");
903 dispatch_init(&dispatch_protocol_error); 964 ssh_dispatch_init(ssh, &dispatch_protocol_error);
904 dispatch_set(SSH2_MSG_CHANNEL_CLOSE, &channel_input_oclose); 965 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_CLOSE, &channel_input_oclose);
905 dispatch_set(SSH2_MSG_CHANNEL_DATA, &channel_input_data); 966 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_DATA, &channel_input_data);
906 dispatch_set(SSH2_MSG_CHANNEL_EOF, &channel_input_ieof); 967 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_EOF, &channel_input_ieof);
907 dispatch_set(SSH2_MSG_CHANNEL_EXTENDED_DATA, &channel_input_extended_data); 968 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_EXTENDED_DATA, &channel_input_extended_data);
908 dispatch_set(SSH2_MSG_CHANNEL_OPEN, &server_input_channel_open); 969 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN, &server_input_channel_open);
909 dispatch_set(SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, &channel_input_open_confirmation); 970 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN_CONFIRMATION, &channel_input_open_confirmation);
910 dispatch_set(SSH2_MSG_CHANNEL_OPEN_FAILURE, &channel_input_open_failure); 971 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_OPEN_FAILURE, &channel_input_open_failure);
911 dispatch_set(SSH2_MSG_CHANNEL_REQUEST, &server_input_channel_req); 972 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_REQUEST, &server_input_channel_req);
912 dispatch_set(SSH2_MSG_CHANNEL_WINDOW_ADJUST, &channel_input_window_adjust); 973 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_WINDOW_ADJUST, &channel_input_window_adjust);
913 dispatch_set(SSH2_MSG_GLOBAL_REQUEST, &server_input_global_request); 974 ssh_dispatch_set(ssh, SSH2_MSG_GLOBAL_REQUEST, &server_input_global_request);
914 /* client_alive */ 975 /* client_alive */
915 dispatch_set(SSH2_MSG_CHANNEL_SUCCESS, &server_input_keep_alive); 976 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_SUCCESS, &server_input_keep_alive);
916 dispatch_set(SSH2_MSG_CHANNEL_FAILURE, &server_input_keep_alive); 977 ssh_dispatch_set(ssh, SSH2_MSG_CHANNEL_FAILURE, &server_input_keep_alive);
917 dispatch_set(SSH2_MSG_REQUEST_SUCCESS, &server_input_keep_alive); 978 ssh_dispatch_set(ssh, SSH2_MSG_REQUEST_SUCCESS, &server_input_keep_alive);
918 dispatch_set(SSH2_MSG_REQUEST_FAILURE, &server_input_keep_alive); 979 ssh_dispatch_set(ssh, SSH2_MSG_REQUEST_FAILURE, &server_input_keep_alive);
919 /* rekeying */ 980 /* rekeying */
920 dispatch_set(SSH2_MSG_KEXINIT, &kex_input_kexinit); 981 ssh_dispatch_set(ssh, SSH2_MSG_KEXINIT, &kex_input_kexinit);
921} 982}
diff --git a/session.c b/session.c
index 2d0958d11..ac06b08e9 100644
--- a/session.c
+++ b/session.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: session.c,v 1.307 2018/10/04 00:10:11 djm Exp $ */ 1/* $OpenBSD: session.c,v 1.315 2019/02/22 03:37:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 3 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
4 * All rights reserved 4 * All rights reserved
@@ -123,9 +123,6 @@ int do_exec_no_pty(struct ssh *, Session *, const char *);
123int do_exec(struct ssh *, Session *, const char *); 123int do_exec(struct ssh *, Session *, const char *);
124void do_login(struct ssh *, Session *, const char *); 124void do_login(struct ssh *, Session *, const char *);
125void do_child(struct ssh *, Session *, const char *); 125void do_child(struct ssh *, Session *, const char *);
126#ifdef LOGIN_NEEDS_UTMPX
127static void do_pre_login(Session *s);
128#endif
129void do_motd(void); 126void do_motd(void);
130int check_quietlogin(Session *, const char *); 127int check_quietlogin(Session *, const char *);
131 128
@@ -142,7 +139,7 @@ extern int startup_pipe;
142extern void destroy_sensitive_data(void); 139extern void destroy_sensitive_data(void);
143extern struct sshbuf *loginmsg; 140extern struct sshbuf *loginmsg;
144extern struct sshauthopt *auth_opts; 141extern struct sshauthopt *auth_opts;
145char *tun_fwd_ifnames; /* serverloop.c */ 142extern char *tun_fwd_ifnames; /* serverloop.c */
146 143
147/* original command from peer. */ 144/* original command from peer. */
148const char *original_command = NULL; 145const char *original_command = NULL;
@@ -204,7 +201,7 @@ auth_input_request_forwarding(struct ssh *ssh, struct passwd * pw)
204 201
205 /* Create private directory for socket */ 202 /* Create private directory for socket */
206 if (mkdtemp(auth_sock_dir) == NULL) { 203 if (mkdtemp(auth_sock_dir) == NULL) {
207 packet_send_debug("Agent forwarding disabled: " 204 ssh_packet_send_debug(ssh, "Agent forwarding disabled: "
208 "mkdtemp() failed: %.100s", strerror(errno)); 205 "mkdtemp() failed: %.100s", strerror(errno));
209 restore_uid(); 206 restore_uid();
210 free(auth_sock_dir); 207 free(auth_sock_dir);
@@ -236,7 +233,9 @@ auth_input_request_forwarding(struct ssh *ssh, struct passwd * pw)
236 authsock_err: 233 authsock_err:
237 free(auth_sock_name); 234 free(auth_sock_name);
238 if (auth_sock_dir != NULL) { 235 if (auth_sock_dir != NULL) {
236 temporarily_use_uid(pw);
239 rmdir(auth_sock_dir); 237 rmdir(auth_sock_dir);
238 restore_uid();
240 free(auth_sock_dir); 239 free(auth_sock_dir);
241 } 240 }
242 if (sock != -1) 241 if (sock != -1)
@@ -359,7 +358,7 @@ do_authenticated(struct ssh *ssh, Authctxt *authctxt)
359 else 358 else
360 channel_permit_all(ssh, FORWARD_REMOTE); 359 channel_permit_all(ssh, FORWARD_REMOTE);
361 } 360 }
362 auth_debug_send(); 361 auth_debug_send(ssh);
363 362
364 prepare_auth_info_file(authctxt->pw, authctxt->session_info); 363 prepare_auth_info_file(authctxt->pw, authctxt->session_info);
365 364
@@ -521,7 +520,7 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
521 520
522 s->pid = pid; 521 s->pid = pid;
523 /* Set interactive/non-interactive mode. */ 522 /* Set interactive/non-interactive mode. */
524 packet_set_interactive(s->display != NULL, 523 ssh_packet_set_interactive(ssh, s->display != NULL,
525 options.ip_qos_interactive, options.ip_qos_bulk); 524 options.ip_qos_interactive, options.ip_qos_bulk);
526 525
527 /* 526 /*
@@ -548,7 +547,7 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
548 * Enter the interactive session. Note: server_loop must be able to 547 * Enter the interactive session. Note: server_loop must be able to
549 * handle the case that fdin and fdout are the same. 548 * handle the case that fdin and fdout are the same.
550 */ 549 */
551 session_set_fds(s, inout[1], inout[1], err[1], 550 session_set_fds(ssh, s, inout[1], inout[1], err[1],
552 s->is_subsystem, 0); 551 s->is_subsystem, 0);
553#endif 552#endif
554 return 0; 553 return 0;
@@ -650,41 +649,12 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command)
650 649
651 /* Enter interactive session. */ 650 /* Enter interactive session. */
652 s->ptymaster = ptymaster; 651 s->ptymaster = ptymaster;
653 packet_set_interactive(1, 652 ssh_packet_set_interactive(ssh, 1,
654 options.ip_qos_interactive, options.ip_qos_bulk); 653 options.ip_qos_interactive, options.ip_qos_bulk);
655 session_set_fds(ssh, s, ptyfd, fdout, -1, 1, 1); 654 session_set_fds(ssh, s, ptyfd, fdout, -1, 1, 1);
656 return 0; 655 return 0;
657} 656}
658 657
659#ifdef LOGIN_NEEDS_UTMPX
660static void
661do_pre_login(Session *s)
662{
663 struct ssh *ssh = active_state; /* XXX */
664 socklen_t fromlen;
665 struct sockaddr_storage from;
666 pid_t pid = getpid();
667
668 /*
669 * Get IP address of client. If the connection is not a socket, let
670 * the address be 0.0.0.0.
671 */
672 memset(&from, 0, sizeof(from));
673 fromlen = sizeof(from);
674 if (packet_connection_is_on_socket()) {
675 if (getpeername(packet_get_connection_in(),
676 (struct sockaddr *)&from, &fromlen) < 0) {
677 debug("getpeername: %.100s", strerror(errno));
678 cleanup_exit(255);
679 }
680 }
681
682 record_utmp_only(pid, s->tty, s->pw->pw_name,
683 session_get_remote_name_or_ip(ssh, utmp_len, options.use_dns),
684 (struct sockaddr *)&from, fromlen);
685}
686#endif
687
688/* 658/*
689 * This is called to fork and execute a command. If another command is 659 * This is called to fork and execute a command. If another command is
690 * to be forced, execute that instead. 660 * to be forced, execute that instead.
@@ -783,8 +753,8 @@ do_login(struct ssh *ssh, Session *s, const char *command)
783 */ 753 */
784 memset(&from, 0, sizeof(from)); 754 memset(&from, 0, sizeof(from));
785 fromlen = sizeof(from); 755 fromlen = sizeof(from);
786 if (packet_connection_is_on_socket()) { 756 if (ssh_packet_connection_is_on_socket(ssh)) {
787 if (getpeername(packet_get_connection_in(), 757 if (getpeername(ssh_packet_get_connection_in(ssh),
788 (struct sockaddr *)&from, &fromlen) < 0) { 758 (struct sockaddr *)&from, &fromlen) < 0) {
789 debug("getpeername: %.100s", strerror(errno)); 759 debug("getpeername: %.100s", strerror(errno));
790 cleanup_exit(255); 760 cleanup_exit(255);
@@ -1082,8 +1052,11 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1082# endif /* HAVE_CYGWIN */ 1052# endif /* HAVE_CYGWIN */
1083#endif /* HAVE_LOGIN_CAP */ 1053#endif /* HAVE_LOGIN_CAP */
1084 1054
1085 snprintf(buf, sizeof buf, "%.200s/%.50s", _PATH_MAILDIR, pw->pw_name); 1055 if (!options.use_pam) {
1086 child_set_env(&env, &envsize, "MAIL", buf); 1056 snprintf(buf, sizeof buf, "%.200s/%.50s",
1057 _PATH_MAILDIR, pw->pw_name);
1058 child_set_env(&env, &envsize, "MAIL", buf);
1059 }
1087 1060
1088 /* Normal systems set SHELL by default. */ 1061 /* Normal systems set SHELL by default. */
1089 child_set_env(&env, &envsize, "SHELL", shell); 1062 child_set_env(&env, &envsize, "SHELL", shell);
@@ -1162,15 +1135,18 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1162 char **p; 1135 char **p;
1163 1136
1164 /* 1137 /*
1165 * Don't allow SSH_AUTH_INFO variables posted to PAM to leak 1138 * Don't allow PAM-internal env vars to leak
1166 * back into the environment. 1139 * back into the session environment.
1167 */ 1140 */
1141#define PAM_ENV_BLACKLIST "SSH_AUTH_INFO*,SSH_CONNECTION*"
1168 p = fetch_pam_child_environment(); 1142 p = fetch_pam_child_environment();
1169 copy_environment_blacklist(p, &env, &envsize, "SSH_AUTH_INFO*"); 1143 copy_environment_blacklist(p, &env, &envsize,
1144 PAM_ENV_BLACKLIST);
1170 free_pam_environment(p); 1145 free_pam_environment(p);
1171 1146
1172 p = fetch_pam_environment(); 1147 p = fetch_pam_environment();
1173 copy_environment_blacklist(p, &env, &envsize, "SSH_AUTH_INFO*"); 1148 copy_environment_blacklist(p, &env, &envsize,
1149 PAM_ENV_BLACKLIST);
1174 free_pam_environment(p); 1150 free_pam_environment(p);
1175 } 1151 }
1176#endif /* USE_PAM */ 1152#endif /* USE_PAM */
@@ -1192,7 +1168,7 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1192 ssh_local_port(ssh)); 1168 ssh_local_port(ssh));
1193 child_set_env(&env, &envsize, "SSH_CLIENT", buf); 1169 child_set_env(&env, &envsize, "SSH_CLIENT", buf);
1194 1170
1195 laddr = get_local_ipaddr(packet_get_connection_in()); 1171 laddr = get_local_ipaddr(ssh_packet_get_connection_in(ssh));
1196 snprintf(buf, sizeof buf, "%.50s %d %.50s %d", 1172 snprintf(buf, sizeof buf, "%.50s %d %.50s %d",
1197 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh), 1173 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
1198 laddr, ssh_local_port(ssh)); 1174 laddr, ssh_local_port(ssh));
@@ -1334,7 +1310,7 @@ safely_chroot(const char *path, uid_t uid)
1334 char component[PATH_MAX]; 1310 char component[PATH_MAX];
1335 struct stat st; 1311 struct stat st;
1336 1312
1337 if (*path != '/') 1313 if (!path_absolute(path))
1338 fatal("chroot path does not begin at root"); 1314 fatal("chroot path does not begin at root");
1339 if (strlen(path) >= sizeof(component)) 1315 if (strlen(path) >= sizeof(component))
1340 fatal("chroot path too long"); 1316 fatal("chroot path too long");
@@ -1359,7 +1335,7 @@ safely_chroot(const char *path, uid_t uid)
1359 component, strerror(errno)); 1335 component, strerror(errno));
1360 if (st.st_uid != 0 || (st.st_mode & 022) != 0) 1336 if (st.st_uid != 0 || (st.st_mode & 022) != 0)
1361 fatal("bad ownership or modes for chroot " 1337 fatal("bad ownership or modes for chroot "
1362 "directory %s\"%s\"", 1338 "directory %s\"%s\"",
1363 cp == NULL ? "" : "component ", component); 1339 cp == NULL ? "" : "component ", component);
1364 if (!S_ISDIR(st.st_mode)) 1340 if (!S_ISDIR(st.st_mode))
1365 fatal("chroot path %s\"%s\" is not a directory", 1341 fatal("chroot path %s\"%s\" is not a directory",
@@ -1497,11 +1473,12 @@ child_close_fds(struct ssh *ssh)
1497 auth_sock = -1; 1473 auth_sock = -1;
1498 } 1474 }
1499 1475
1500 if (packet_get_connection_in() == packet_get_connection_out()) 1476 if (ssh_packet_get_connection_in(ssh) ==
1501 close(packet_get_connection_in()); 1477 ssh_packet_get_connection_out(ssh))
1478 close(ssh_packet_get_connection_in(ssh));
1502 else { 1479 else {
1503 close(packet_get_connection_in()); 1480 close(ssh_packet_get_connection_in(ssh));
1504 close(packet_get_connection_out()); 1481 close(ssh_packet_get_connection_out(ssh));
1505 } 1482 }
1506 /* 1483 /*
1507 * Close all descriptors related to channels. They will still remain 1484 * Close all descriptors related to channels. They will still remain
@@ -1535,15 +1512,16 @@ void
1535do_child(struct ssh *ssh, Session *s, const char *command) 1512do_child(struct ssh *ssh, Session *s, const char *command)
1536{ 1513{
1537 extern char **environ; 1514 extern char **environ;
1538 char **env; 1515 char **env, *argv[ARGV_MAX], remote_id[512];
1539 char *argv[ARGV_MAX];
1540 const char *shell, *shell0; 1516 const char *shell, *shell0;
1541 struct passwd *pw = s->pw; 1517 struct passwd *pw = s->pw;
1542 int r = 0; 1518 int r = 0;
1543 1519
1520 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1521
1544 /* remove hostkey from the child's memory */ 1522 /* remove hostkey from the child's memory */
1545 destroy_sensitive_data(); 1523 destroy_sensitive_data();
1546 packet_clear_keys(); 1524 ssh_packet_clear_keys(ssh);
1547 1525
1548 /* Force a password change */ 1526 /* Force a password change */
1549 if (s->authctxt->force_pwchange) { 1527 if (s->authctxt->force_pwchange) {
@@ -1663,6 +1641,8 @@ do_child(struct ssh *ssh, Session *s, const char *command)
1663 signal(SIGPIPE, SIG_DFL); 1641 signal(SIGPIPE, SIG_DFL);
1664 1642
1665 if (s->is_subsystem == SUBSYSTEM_INT_SFTP_ERROR) { 1643 if (s->is_subsystem == SUBSYSTEM_INT_SFTP_ERROR) {
1644 error("Connection from %s: refusing non-sftp session",
1645 remote_id);
1666 printf("This service allows sftp connections only.\n"); 1646 printf("This service allows sftp connections only.\n");
1667 fflush(NULL); 1647 fflush(NULL);
1668 exit(1); 1648 exit(1);
@@ -1905,11 +1885,14 @@ session_by_pid(pid_t pid)
1905static int 1885static int
1906session_window_change_req(struct ssh *ssh, Session *s) 1886session_window_change_req(struct ssh *ssh, Session *s)
1907{ 1887{
1908 s->col = packet_get_int(); 1888 int r;
1909 s->row = packet_get_int(); 1889
1910 s->xpixel = packet_get_int(); 1890 if ((r = sshpkt_get_u32(ssh, &s->col)) != 0 ||
1911 s->ypixel = packet_get_int(); 1891 (r = sshpkt_get_u32(ssh, &s->row)) != 0 ||
1912 packet_check_eom(); 1892 (r = sshpkt_get_u32(ssh, &s->xpixel)) != 0 ||
1893 (r = sshpkt_get_u32(ssh, &s->ypixel)) != 0 ||
1894 (r = sshpkt_get_end(ssh)) != 0)
1895 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
1913 pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel); 1896 pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
1914 return 1; 1897 return 1;
1915} 1898}
@@ -1917,22 +1900,23 @@ session_window_change_req(struct ssh *ssh, Session *s)
1917static int 1900static int
1918session_pty_req(struct ssh *ssh, Session *s) 1901session_pty_req(struct ssh *ssh, Session *s)
1919{ 1902{
1920 u_int len; 1903 int r;
1921 1904
1922 if (!auth_opts->permit_pty_flag || !options.permit_tty) { 1905 if (!auth_opts->permit_pty_flag || !options.permit_tty) {
1923 debug("Allocating a pty not permitted for this connection."); 1906 debug("Allocating a pty not permitted for this connection.");
1924 return 0; 1907 return 0;
1925 } 1908 }
1926 if (s->ttyfd != -1) { 1909 if (s->ttyfd != -1) {
1927 packet_disconnect("Protocol error: you already have a pty."); 1910 ssh_packet_disconnect(ssh, "Protocol error: you already have a pty.");
1928 return 0; 1911 return 0;
1929 } 1912 }
1930 1913
1931 s->term = packet_get_string(&len); 1914 if ((r = sshpkt_get_cstring(ssh, &s->term, NULL)) != 0 ||
1932 s->col = packet_get_int(); 1915 (r = sshpkt_get_u32(ssh, &s->col)) != 0 ||
1933 s->row = packet_get_int(); 1916 (r = sshpkt_get_u32(ssh, &s->row)) != 0 ||
1934 s->xpixel = packet_get_int(); 1917 (r = sshpkt_get_u32(ssh, &s->xpixel)) != 0 ||
1935 s->ypixel = packet_get_int(); 1918 (r = sshpkt_get_u32(ssh, &s->ypixel)) != 0)
1919 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
1936 1920
1937 if (strcmp(s->term, "") == 0) { 1921 if (strcmp(s->term, "") == 0) {
1938 free(s->term); 1922 free(s->term);
@@ -1954,13 +1938,15 @@ session_pty_req(struct ssh *ssh, Session *s)
1954 1938
1955 ssh_tty_parse_modes(ssh, s->ttyfd); 1939 ssh_tty_parse_modes(ssh, s->ttyfd);
1956 1940
1941 if ((r = sshpkt_get_end(ssh)) != 0)
1942 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
1943
1957 if (!use_privsep) 1944 if (!use_privsep)
1958 pty_setowner(s->pw, s->tty); 1945 pty_setowner(s->pw, s->tty);
1959 1946
1960 /* Set window size from the packet. */ 1947 /* Set window size from the packet. */
1961 pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel); 1948 pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
1962 1949
1963 packet_check_eom();
1964 session_proctitle(s); 1950 session_proctitle(s);
1965 return 1; 1951 return 1;
1966} 1952}
@@ -1969,13 +1955,13 @@ static int
1969session_subsystem_req(struct ssh *ssh, Session *s) 1955session_subsystem_req(struct ssh *ssh, Session *s)
1970{ 1956{
1971 struct stat st; 1957 struct stat st;
1972 u_int len; 1958 int r, success = 0;
1973 int success = 0;
1974 char *prog, *cmd; 1959 char *prog, *cmd;
1975 u_int i; 1960 u_int i;
1976 1961
1977 s->subsys = packet_get_string(&len); 1962 if ((r = sshpkt_get_cstring(ssh, &s->subsys, NULL)) != 0 ||
1978 packet_check_eom(); 1963 (r = sshpkt_get_end(ssh)) != 0)
1964 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
1979 debug2("subsystem request for %.100s by user %s", s->subsys, 1965 debug2("subsystem request for %.100s by user %s", s->subsys,
1980 s->pw->pw_name); 1966 s->pw->pw_name);
1981 1967
@@ -2008,18 +1994,22 @@ session_subsystem_req(struct ssh *ssh, Session *s)
2008static int 1994static int
2009session_x11_req(struct ssh *ssh, Session *s) 1995session_x11_req(struct ssh *ssh, Session *s)
2010{ 1996{
2011 int success; 1997 int r, success;
1998 u_char single_connection = 0;
2012 1999
2013 if (s->auth_proto != NULL || s->auth_data != NULL) { 2000 if (s->auth_proto != NULL || s->auth_data != NULL) {
2014 error("session_x11_req: session %d: " 2001 error("session_x11_req: session %d: "
2015 "x11 forwarding already active", s->self); 2002 "x11 forwarding already active", s->self);
2016 return 0; 2003 return 0;
2017 } 2004 }
2018 s->single_connection = packet_get_char(); 2005 if ((r = sshpkt_get_u8(ssh, &single_connection)) != 0 ||
2019 s->auth_proto = packet_get_string(NULL); 2006 (r = sshpkt_get_cstring(ssh, &s->auth_proto, NULL)) != 0 ||
2020 s->auth_data = packet_get_string(NULL); 2007 (r = sshpkt_get_cstring(ssh, &s->auth_data, NULL)) != 0 ||
2021 s->screen = packet_get_int(); 2008 (r = sshpkt_get_u32(ssh, &s->screen)) != 0 ||
2022 packet_check_eom(); 2009 (r = sshpkt_get_end(ssh)) != 0)
2010 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
2011
2012 s->single_connection = single_connection;
2023 2013
2024 if (xauth_valid_string(s->auth_proto) && 2014 if (xauth_valid_string(s->auth_proto) &&
2025 xauth_valid_string(s->auth_data)) 2015 xauth_valid_string(s->auth_data))
@@ -2040,17 +2030,24 @@ session_x11_req(struct ssh *ssh, Session *s)
2040static int 2030static int
2041session_shell_req(struct ssh *ssh, Session *s) 2031session_shell_req(struct ssh *ssh, Session *s)
2042{ 2032{
2043 packet_check_eom(); 2033 int r;
2034
2035 if ((r = sshpkt_get_end(ssh)) != 0)
2036 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
2044 return do_exec(ssh, s, NULL) == 0; 2037 return do_exec(ssh, s, NULL) == 0;
2045} 2038}
2046 2039
2047static int 2040static int
2048session_exec_req(struct ssh *ssh, Session *s) 2041session_exec_req(struct ssh *ssh, Session *s)
2049{ 2042{
2050 u_int len, success; 2043 u_int success;
2044 int r;
2045 char *command = NULL;
2046
2047 if ((r = sshpkt_get_cstring(ssh, &command, NULL)) != 0 ||
2048 (r = sshpkt_get_end(ssh)) != 0)
2049 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
2051 2050
2052 char *command = packet_get_string(&len);
2053 packet_check_eom();
2054 success = do_exec(ssh, s, command) == 0; 2051 success = do_exec(ssh, s, command) == 0;
2055 free(command); 2052 free(command);
2056 return success; 2053 return success;
@@ -2059,9 +2056,11 @@ session_exec_req(struct ssh *ssh, Session *s)
2059static int 2056static int
2060session_break_req(struct ssh *ssh, Session *s) 2057session_break_req(struct ssh *ssh, Session *s)
2061{ 2058{
2059 int r;
2062 2060
2063 packet_get_int(); /* ignored */ 2061 if ((r = sshpkt_get_u32(ssh, NULL)) != 0 || /* ignore */
2064 packet_check_eom(); 2062 (r = sshpkt_get_end(ssh)) != 0)
2063 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
2065 2064
2066 if (s->ptymaster == -1 || tcsendbreak(s->ptymaster, 0) < 0) 2065 if (s->ptymaster == -1 || tcsendbreak(s->ptymaster, 0) < 0)
2067 return 0; 2066 return 0;
@@ -2072,11 +2071,13 @@ static int
2072session_env_req(struct ssh *ssh, Session *s) 2071session_env_req(struct ssh *ssh, Session *s)
2073{ 2072{
2074 char *name, *val; 2073 char *name, *val;
2075 u_int name_len, val_len, i; 2074 u_int i;
2075 int r;
2076 2076
2077 name = packet_get_cstring(&name_len); 2077 if ((r = sshpkt_get_cstring(ssh, &name, NULL)) != 0 ||
2078 val = packet_get_cstring(&val_len); 2078 (r = sshpkt_get_cstring(ssh, &val, NULL)) != 0 ||
2079 packet_check_eom(); 2079 (r = sshpkt_get_end(ssh)) != 0)
2080 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
2080 2081
2081 /* Don't set too many environment variables */ 2082 /* Don't set too many environment variables */
2082 if (s->num_env > 128) { 2083 if (s->num_env > 128) {
@@ -2179,8 +2180,10 @@ static int
2179session_auth_agent_req(struct ssh *ssh, Session *s) 2180session_auth_agent_req(struct ssh *ssh, Session *s)
2180{ 2181{
2181 static int called = 0; 2182 static int called = 0;
2183 int r;
2182 2184
2183 packet_check_eom(); 2185 if ((r = sshpkt_get_end(ssh)) != 0)
2186 sshpkt_fatal(ssh, r, "%s: parse packet", __func__);
2184 if (!auth_opts->permit_agent_forwarding_flag || 2187 if (!auth_opts->permit_agent_forwarding_flag ||
2185 !options.allow_agent_forwarding) { 2188 !options.allow_agent_forwarding) {
2186 debug("%s: agent forwarding disabled", __func__); 2189 debug("%s: agent forwarding disabled", __func__);
@@ -2370,6 +2373,7 @@ static void
2370session_exit_message(struct ssh *ssh, Session *s, int status) 2373session_exit_message(struct ssh *ssh, Session *s, int status)
2371{ 2374{
2372 Channel *c; 2375 Channel *c;
2376 int r;
2373 2377
2374 if ((c = channel_lookup(ssh, s->chanid)) == NULL) 2378 if ((c = channel_lookup(ssh, s->chanid)) == NULL)
2375 fatal("%s: session %d: no channel %d", 2379 fatal("%s: session %d: no channel %d",
@@ -2379,22 +2383,23 @@ session_exit_message(struct ssh *ssh, Session *s, int status)
2379 2383
2380 if (WIFEXITED(status)) { 2384 if (WIFEXITED(status)) {
2381 channel_request_start(ssh, s->chanid, "exit-status", 0); 2385 channel_request_start(ssh, s->chanid, "exit-status", 0);
2382 packet_put_int(WEXITSTATUS(status)); 2386 if ((r = sshpkt_put_u32(ssh, WEXITSTATUS(status))) != 0 ||
2383 packet_send(); 2387 (r = sshpkt_send(ssh)) != 0)
2388 sshpkt_fatal(ssh, r, "%s: exit reply", __func__);
2384 } else if (WIFSIGNALED(status)) { 2389 } else if (WIFSIGNALED(status)) {
2385 channel_request_start(ssh, s->chanid, "exit-signal", 0); 2390 channel_request_start(ssh, s->chanid, "exit-signal", 0);
2386 packet_put_cstring(sig2name(WTERMSIG(status))); 2391#ifndef WCOREDUMP
2387#ifdef WCOREDUMP 2392# define WCOREDUMP(x) (0)
2388 packet_put_char(WCOREDUMP(status)? 1 : 0); 2393#endif
2389#else /* WCOREDUMP */ 2394 if ((r = sshpkt_put_cstring(ssh, sig2name(WTERMSIG(status)))) != 0 ||
2390 packet_put_char(0); 2395 (r = sshpkt_put_u8(ssh, WCOREDUMP(status)? 1 : 0)) != 0 ||
2391#endif /* WCOREDUMP */ 2396 (r = sshpkt_put_cstring(ssh, "")) != 0 ||
2392 packet_put_cstring(""); 2397 (r = sshpkt_put_cstring(ssh, "")) != 0 ||
2393 packet_put_cstring(""); 2398 (r = sshpkt_send(ssh)) != 0)
2394 packet_send(); 2399 sshpkt_fatal(ssh, r, "%s: exit reply", __func__);
2395 } else { 2400 } else {
2396 /* Some weird exit cause. Just exit. */ 2401 /* Some weird exit cause. Just exit. */
2397 packet_disconnect("wait returned status %04x.", status); 2402 ssh_packet_disconnect(ssh, "wait returned status %04x.", status);
2398 } 2403 }
2399 2404
2400 /* disconnect channel */ 2405 /* disconnect channel */
@@ -2565,7 +2570,7 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2565 u_int i; 2570 u_int i;
2566 2571
2567 if (!auth_opts->permit_x11_forwarding_flag) { 2572 if (!auth_opts->permit_x11_forwarding_flag) {
2568 packet_send_debug("X11 forwarding disabled by key options."); 2573 ssh_packet_send_debug(ssh, "X11 forwarding disabled by key options.");
2569 return 0; 2574 return 0;
2570 } 2575 }
2571 if (!options.x11_forwarding) { 2576 if (!options.x11_forwarding) {
@@ -2574,7 +2579,7 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2574 } 2579 }
2575 if (options.xauth_location == NULL || 2580 if (options.xauth_location == NULL ||
2576 (stat(options.xauth_location, &st) == -1)) { 2581 (stat(options.xauth_location, &st) == -1)) {
2577 packet_send_debug("No xauth program; cannot forward X11."); 2582 ssh_packet_send_debug(ssh, "No xauth program; cannot forward X11.");
2578 return 0; 2583 return 0;
2579 } 2584 }
2580 if (s->display != NULL) { 2585 if (s->display != NULL) {
@@ -2615,7 +2620,7 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2615 he = gethostbyname(hostname); 2620 he = gethostbyname(hostname);
2616 if (he == NULL) { 2621 if (he == NULL) {
2617 error("Can't get IP address for X11 DISPLAY."); 2622 error("Can't get IP address for X11 DISPLAY.");
2618 packet_send_debug("Can't get IP address for X11 DISPLAY."); 2623 ssh_packet_send_debug(ssh, "Can't get IP address for X11 DISPLAY.");
2619 return 0; 2624 return 0;
2620 } 2625 }
2621 memcpy(&my_addr, he->h_addr_list[0], sizeof(struct in_addr)); 2626 memcpy(&my_addr, he->h_addr_list[0], sizeof(struct in_addr));
diff --git a/sftp-client.c b/sftp-client.c
index 4986d6d8d..73e3c2f53 100644
--- a/sftp-client.c
+++ b/sftp-client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-client.c,v 1.130 2018/07/31 03:07:24 djm Exp $ */ 1/* $OpenBSD: sftp-client.c,v 1.133 2019/01/24 16:52:17 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -86,6 +86,7 @@ struct sftp_conn {
86#define SFTP_EXT_FSTATVFS 0x00000004 86#define SFTP_EXT_FSTATVFS 0x00000004
87#define SFTP_EXT_HARDLINK 0x00000008 87#define SFTP_EXT_HARDLINK 0x00000008
88#define SFTP_EXT_FSYNC 0x00000010 88#define SFTP_EXT_FSYNC 0x00000010
89#define SFTP_EXT_LSETSTAT 0x00000020
89 u_int exts; 90 u_int exts;
90 u_int64_t limit_kbps; 91 u_int64_t limit_kbps;
91 struct bwlimit bwlimit_in, bwlimit_out; 92 struct bwlimit bwlimit_in, bwlimit_out;
@@ -101,7 +102,9 @@ sftpio(void *_bwlimit, size_t amount)
101{ 102{
102 struct bwlimit *bwlimit = (struct bwlimit *)_bwlimit; 103 struct bwlimit *bwlimit = (struct bwlimit *)_bwlimit;
103 104
104 bandwidth_limit(bwlimit, amount); 105 refresh_progress_meter(0);
106 if (bwlimit != NULL)
107 bandwidth_limit(bwlimit, amount);
105 return 0; 108 return 0;
106} 109}
107 110
@@ -121,8 +124,8 @@ send_msg(struct sftp_conn *conn, struct sshbuf *m)
121 iov[1].iov_base = (u_char *)sshbuf_ptr(m); 124 iov[1].iov_base = (u_char *)sshbuf_ptr(m);
122 iov[1].iov_len = sshbuf_len(m); 125 iov[1].iov_len = sshbuf_len(m);
123 126
124 if (atomiciov6(writev, conn->fd_out, iov, 2, 127 if (atomiciov6(writev, conn->fd_out, iov, 2, sftpio,
125 conn->limit_kbps > 0 ? sftpio : NULL, &conn->bwlimit_out) != 128 conn->limit_kbps > 0 ? &conn->bwlimit_out : NULL) !=
126 sshbuf_len(m) + sizeof(mlen)) 129 sshbuf_len(m) + sizeof(mlen))
127 fatal("Couldn't send packet: %s", strerror(errno)); 130 fatal("Couldn't send packet: %s", strerror(errno));
128 131
@@ -138,8 +141,8 @@ get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial)
138 141
139 if ((r = sshbuf_reserve(m, 4, &p)) != 0) 142 if ((r = sshbuf_reserve(m, 4, &p)) != 0)
140 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 143 fatal("%s: buffer error: %s", __func__, ssh_err(r));
141 if (atomicio6(read, conn->fd_in, p, 4, 144 if (atomicio6(read, conn->fd_in, p, 4, sftpio,
142 conn->limit_kbps > 0 ? sftpio : NULL, &conn->bwlimit_in) != 4) { 145 conn->limit_kbps > 0 ? &conn->bwlimit_in : NULL) != 4) {
143 if (errno == EPIPE || errno == ECONNRESET) 146 if (errno == EPIPE || errno == ECONNRESET)
144 fatal("Connection closed"); 147 fatal("Connection closed");
145 else 148 else
@@ -157,8 +160,8 @@ get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial)
157 160
158 if ((r = sshbuf_reserve(m, msg_len, &p)) != 0) 161 if ((r = sshbuf_reserve(m, msg_len, &p)) != 0)
159 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 162 fatal("%s: buffer error: %s", __func__, ssh_err(r));
160 if (atomicio6(read, conn->fd_in, p, msg_len, 163 if (atomicio6(read, conn->fd_in, p, msg_len, sftpio,
161 conn->limit_kbps > 0 ? sftpio : NULL, &conn->bwlimit_in) 164 conn->limit_kbps > 0 ? &conn->bwlimit_in : NULL)
162 != msg_len) { 165 != msg_len) {
163 if (errno == EPIPE) 166 if (errno == EPIPE)
164 fatal("Connection closed"); 167 fatal("Connection closed");
@@ -463,6 +466,10 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests,
463 strcmp((char *)value, "1") == 0) { 466 strcmp((char *)value, "1") == 0) {
464 ret->exts |= SFTP_EXT_FSYNC; 467 ret->exts |= SFTP_EXT_FSYNC;
465 known = 1; 468 known = 1;
469 } else if (strcmp(name, "lsetstat@openssh.com") == 0 &&
470 strcmp((char *)value, "1") == 0) {
471 ret->exts |= SFTP_EXT_LSETSTAT;
472 known = 1;
466 } 473 }
467 if (known) { 474 if (known) {
468 debug2("Server supports extension \"%s\" revision %s", 475 debug2("Server supports extension \"%s\" revision %s",
@@ -1096,7 +1103,6 @@ do_statvfs(struct sftp_conn *conn, const char *path, struct sftp_statvfs *st,
1096 1103
1097 if ((msg = sshbuf_new()) == NULL) 1104 if ((msg = sshbuf_new()) == NULL)
1098 fatal("%s: sshbuf_new failed", __func__); 1105 fatal("%s: sshbuf_new failed", __func__);
1099 sshbuf_reset(msg);
1100 if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || 1106 if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 ||
1101 (r = sshbuf_put_u32(msg, id)) != 0 || 1107 (r = sshbuf_put_u32(msg, id)) != 0 ||
1102 (r = sshbuf_put_cstring(msg, "statvfs@openssh.com")) != 0 || 1108 (r = sshbuf_put_cstring(msg, "statvfs@openssh.com")) != 0 ||
@@ -1125,7 +1131,6 @@ do_fstatvfs(struct sftp_conn *conn, const u_char *handle, u_int handle_len,
1125 1131
1126 if ((msg = sshbuf_new()) == NULL) 1132 if ((msg = sshbuf_new()) == NULL)
1127 fatal("%s: sshbuf_new failed", __func__); 1133 fatal("%s: sshbuf_new failed", __func__);
1128 sshbuf_reset(msg);
1129 if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 || 1134 if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 ||
1130 (r = sshbuf_put_u32(msg, id)) != 0 || 1135 (r = sshbuf_put_u32(msg, id)) != 0 ||
1131 (r = sshbuf_put_cstring(msg, "fstatvfs@openssh.com")) != 0 || 1136 (r = sshbuf_put_cstring(msg, "fstatvfs@openssh.com")) != 0 ||
@@ -1138,6 +1143,38 @@ do_fstatvfs(struct sftp_conn *conn, const u_char *handle, u_int handle_len,
1138} 1143}
1139#endif 1144#endif
1140 1145
1146int
1147do_lsetstat(struct sftp_conn *conn, const char *path, Attrib *a)
1148{
1149 struct sshbuf *msg;
1150 u_int status, id;
1151 int r;
1152
1153 if ((conn->exts & SFTP_EXT_LSETSTAT) == 0) {
1154 error("Server does not support lsetstat@openssh.com extension");
1155 return -1;
1156 }
1157
1158 id = conn->msg_id++;
1159 if ((msg = sshbuf_new()) == NULL)
1160 fatal("%s: sshbuf_new failed", __func__);
1161 if ((r = sshbuf_put_u8(msg, SSH2_FXP_EXTENDED)) != 0 ||
1162 (r = sshbuf_put_u32(msg, id)) != 0 ||
1163 (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 ||
1164 (r = sshbuf_put_cstring(msg, path)) != 0 ||
1165 (r = encode_attrib(msg, a)) != 0)
1166 fatal("%s: buffer error: %s", __func__, ssh_err(r));
1167 send_msg(conn, msg);
1168 sshbuf_free(msg);
1169
1170 status = get_status(conn, id);
1171 if (status != SSH2_FX_OK)
1172 error("Couldn't setstat on \"%s\": %s", path,
1173 fx2txt(status));
1174
1175 return status == SSH2_FX_OK ? 0 : -1;
1176}
1177
1141static void 1178static void
1142send_read_request(struct sftp_conn *conn, u_int id, u_int64_t offset, 1179send_read_request(struct sftp_conn *conn, u_int id, u_int64_t offset,
1143 u_int len, const u_char *handle, u_int handle_len) 1180 u_int len, const u_char *handle, u_int handle_len)
@@ -1147,7 +1184,6 @@ send_read_request(struct sftp_conn *conn, u_int id, u_int64_t offset,
1147 1184
1148 if ((msg = sshbuf_new()) == NULL) 1185 if ((msg = sshbuf_new()) == NULL)
1149 fatal("%s: sshbuf_new failed", __func__); 1186 fatal("%s: sshbuf_new failed", __func__);
1150 sshbuf_reset(msg);
1151 if ((r = sshbuf_put_u8(msg, SSH2_FXP_READ)) != 0 || 1187 if ((r = sshbuf_put_u8(msg, SSH2_FXP_READ)) != 0 ||
1152 (r = sshbuf_put_u32(msg, id)) != 0 || 1188 (r = sshbuf_put_u32(msg, id)) != 0 ||
1153 (r = sshbuf_put_string(msg, handle, handle_len)) != 0 || 1189 (r = sshbuf_put_string(msg, handle, handle_len)) != 0 ||
diff --git a/sftp-client.h b/sftp-client.h
index 14a3b8182..63a9b8b13 100644
--- a/sftp-client.h
+++ b/sftp-client.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-client.h,v 1.27 2015/05/08 06:45:13 djm Exp $ */ 1/* $OpenBSD: sftp-client.h,v 1.28 2019/01/16 23:23:45 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 4 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
@@ -91,6 +91,9 @@ int do_setstat(struct sftp_conn *, const char *, Attrib *);
91/* Set file attributes of open file 'handle' */ 91/* Set file attributes of open file 'handle' */
92int do_fsetstat(struct sftp_conn *, const u_char *, u_int, Attrib *); 92int do_fsetstat(struct sftp_conn *, const u_char *, u_int, Attrib *);
93 93
94/* Set file attributes of 'path', not following symlinks */
95int do_lsetstat(struct sftp_conn *conn, const char *path, Attrib *a);
96
94/* Canonicalise 'path' - caller must free result */ 97/* Canonicalise 'path' - caller must free result */
95char *do_realpath(struct sftp_conn *, const char *); 98char *do_realpath(struct sftp_conn *, const char *);
96 99
diff --git a/sftp-common.c b/sftp-common.c
index 5d743d3b2..677f27d63 100644
--- a/sftp-common.c
+++ b/sftp-common.c
@@ -36,6 +36,7 @@
36#include <string.h> 36#include <string.h>
37#include <time.h> 37#include <time.h>
38#include <stdarg.h> 38#include <stdarg.h>
39#include <unistd.h>
39#ifdef HAVE_UTIL_H 40#ifdef HAVE_UTIL_H
40#include <util.h> 41#include <util.h>
41#endif 42#endif
diff --git a/sftp-server-main.c b/sftp-server-main.c
index c6ccd623e..6230d897d 100644
--- a/sftp-server-main.c
+++ b/sftp-server-main.c
@@ -43,6 +43,8 @@ main(int argc, char **argv)
43 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ 43 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
44 sanitise_stdfd(); 44 sanitise_stdfd();
45 45
46 seed_rng();
47
46 if ((user_pw = getpwuid(getuid())) == NULL) { 48 if ((user_pw = getpwuid(getuid())) == NULL) {
47 fprintf(stderr, "No user found for uid %lu\n", 49 fprintf(stderr, "No user found for uid %lu\n",
48 (u_long)getuid()); 50 (u_long)getuid());
diff --git a/sftp-server.0 b/sftp-server.0
index 4c42b26c9..fb84373d9 100644
--- a/sftp-server.0
+++ b/sftp-server.0
@@ -93,4 +93,4 @@ HISTORY
93AUTHORS 93AUTHORS
94 Markus Friedl <markus@openbsd.org> 94 Markus Friedl <markus@openbsd.org>
95 95
96OpenBSD 6.4 December 11, 2014 OpenBSD 6.4 96OpenBSD 6.5 December 11, 2014 OpenBSD 6.5
diff --git a/sftp-server.c b/sftp-server.c
index ab1b063f2..19a132bd9 100644
--- a/sftp-server.c
+++ b/sftp-server.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-server.c,v 1.112 2018/06/01 03:33:53 djm Exp $ */ 1/* $OpenBSD: sftp-server.c,v 1.114 2019/01/16 23:22:10 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000-2004 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000-2004 Markus Friedl. All rights reserved.
4 * 4 *
@@ -107,6 +107,7 @@ static void process_extended_statvfs(u_int32_t id);
107static void process_extended_fstatvfs(u_int32_t id); 107static void process_extended_fstatvfs(u_int32_t id);
108static void process_extended_hardlink(u_int32_t id); 108static void process_extended_hardlink(u_int32_t id);
109static void process_extended_fsync(u_int32_t id); 109static void process_extended_fsync(u_int32_t id);
110static void process_extended_lsetstat(u_int32_t id);
110static void process_extended(u_int32_t id); 111static void process_extended(u_int32_t id);
111 112
112struct sftp_handler { 113struct sftp_handler {
@@ -117,7 +118,7 @@ struct sftp_handler {
117 int does_write; /* if nonzero, banned for readonly mode */ 118 int does_write; /* if nonzero, banned for readonly mode */
118}; 119};
119 120
120struct sftp_handler handlers[] = { 121static const struct sftp_handler handlers[] = {
121 /* NB. SSH2_FXP_OPEN does the readonly check in the handler itself */ 122 /* NB. SSH2_FXP_OPEN does the readonly check in the handler itself */
122 { "open", NULL, SSH2_FXP_OPEN, process_open, 0 }, 123 { "open", NULL, SSH2_FXP_OPEN, process_open, 0 },
123 { "close", NULL, SSH2_FXP_CLOSE, process_close, 0 }, 124 { "close", NULL, SSH2_FXP_CLOSE, process_close, 0 },
@@ -141,18 +142,19 @@ struct sftp_handler handlers[] = {
141}; 142};
142 143
143/* SSH2_FXP_EXTENDED submessages */ 144/* SSH2_FXP_EXTENDED submessages */
144struct sftp_handler extended_handlers[] = { 145static const struct sftp_handler extended_handlers[] = {
145 { "posix-rename", "posix-rename@openssh.com", 0, 146 { "posix-rename", "posix-rename@openssh.com", 0,
146 process_extended_posix_rename, 1 }, 147 process_extended_posix_rename, 1 },
147 { "statvfs", "statvfs@openssh.com", 0, process_extended_statvfs, 0 }, 148 { "statvfs", "statvfs@openssh.com", 0, process_extended_statvfs, 0 },
148 { "fstatvfs", "fstatvfs@openssh.com", 0, process_extended_fstatvfs, 0 }, 149 { "fstatvfs", "fstatvfs@openssh.com", 0, process_extended_fstatvfs, 0 },
149 { "hardlink", "hardlink@openssh.com", 0, process_extended_hardlink, 1 }, 150 { "hardlink", "hardlink@openssh.com", 0, process_extended_hardlink, 1 },
150 { "fsync", "fsync@openssh.com", 0, process_extended_fsync, 1 }, 151 { "fsync", "fsync@openssh.com", 0, process_extended_fsync, 1 },
152 { "lsetstat", "lsetstat@openssh.com", 0, process_extended_lsetstat, 1 },
151 { NULL, NULL, 0, NULL, 0 } 153 { NULL, NULL, 0, NULL, 0 }
152}; 154};
153 155
154static int 156static int
155request_permitted(struct sftp_handler *h) 157request_permitted(const struct sftp_handler *h)
156{ 158{
157 char *result; 159 char *result;
158 160
@@ -285,9 +287,9 @@ enum {
285 HANDLE_FILE 287 HANDLE_FILE
286}; 288};
287 289
288Handle *handles = NULL; 290static Handle *handles = NULL;
289u_int num_handles = 0; 291static u_int num_handles = 0;
290int first_unused_handle = -1; 292static int first_unused_handle = -1;
291 293
292static void handle_unused(int i) 294static void handle_unused(int i)
293{ 295{
@@ -666,6 +668,8 @@ process_init(void)
666 (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */ 668 (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */
667 /* fsync extension */ 669 /* fsync extension */
668 (r = sshbuf_put_cstring(msg, "fsync@openssh.com")) != 0 || 670 (r = sshbuf_put_cstring(msg, "fsync@openssh.com")) != 0 ||
671 (r = sshbuf_put_cstring(msg, "1")) != 0 || /* version */
672 (r = sshbuf_put_cstring(msg, "lsetstat@openssh.com")) != 0 ||
669 (r = sshbuf_put_cstring(msg, "1")) != 0) /* version */ 673 (r = sshbuf_put_cstring(msg, "1")) != 0) /* version */
670 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 674 fatal("%s: buffer error: %s", __func__, ssh_err(r));
671 send_msg(msg); 675 send_msg(msg);
@@ -889,6 +893,18 @@ attrib_to_tv(const Attrib *a)
889 return tv; 893 return tv;
890} 894}
891 895
896static struct timespec *
897attrib_to_ts(const Attrib *a)
898{
899 static struct timespec ts[2];
900
901 ts[0].tv_sec = a->atime;
902 ts[0].tv_nsec = 0;
903 ts[1].tv_sec = a->mtime;
904 ts[1].tv_nsec = 0;
905 return ts;
906}
907
892static void 908static void
893process_setstat(u_int32_t id) 909process_setstat(u_int32_t id)
894{ 910{
@@ -1370,6 +1386,55 @@ process_extended_fsync(u_int32_t id)
1370} 1386}
1371 1387
1372static void 1388static void
1389process_extended_lsetstat(u_int32_t id)
1390{
1391 Attrib a;
1392 char *name;
1393 int r, status = SSH2_FX_OK;
1394
1395 if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||
1396 (r = decode_attrib(iqueue, &a)) != 0)
1397 fatal("%s: buffer error: %s", __func__, ssh_err(r));
1398
1399 debug("request %u: lsetstat name \"%s\"", id, name);
1400 if (a.flags & SSH2_FILEXFER_ATTR_SIZE) {
1401 /* nonsensical for links */
1402 status = SSH2_FX_BAD_MESSAGE;
1403 goto out;
1404 }
1405 if (a.flags & SSH2_FILEXFER_ATTR_PERMISSIONS) {
1406 logit("set \"%s\" mode %04o", name, a.perm);
1407 r = fchmodat(AT_FDCWD, name,
1408 a.perm & 07777, AT_SYMLINK_NOFOLLOW);
1409 if (r == -1)
1410 status = errno_to_portable(errno);
1411 }
1412 if (a.flags & SSH2_FILEXFER_ATTR_ACMODTIME) {
1413 char buf[64];
1414 time_t t = a.mtime;
1415
1416 strftime(buf, sizeof(buf), "%Y%m%d-%H:%M:%S",
1417 localtime(&t));
1418 logit("set \"%s\" modtime %s", name, buf);
1419 r = utimensat(AT_FDCWD, name,
1420 attrib_to_ts(&a), AT_SYMLINK_NOFOLLOW);
1421 if (r == -1)
1422 status = errno_to_portable(errno);
1423 }
1424 if (a.flags & SSH2_FILEXFER_ATTR_UIDGID) {
1425 logit("set \"%s\" owner %lu group %lu", name,
1426 (u_long)a.uid, (u_long)a.gid);
1427 r = fchownat(AT_FDCWD, name, a.uid, a.gid,
1428 AT_SYMLINK_NOFOLLOW);
1429 if (r == -1)
1430 status = errno_to_portable(errno);
1431 }
1432 out:
1433 send_status(id, status);
1434 free(name);
1435}
1436
1437static void
1373process_extended(u_int32_t id) 1438process_extended(u_int32_t id)
1374{ 1439{
1375 char *request; 1440 char *request;
diff --git a/sftp.0 b/sftp.0
index ed98400d3..2342c2320 100644
--- a/sftp.0
+++ b/sftp.0
@@ -5,9 +5,10 @@ NAME
5 5
6SYNOPSIS 6SYNOPSIS
7 sftp [-46aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher] 7 sftp [-46aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher]
8 [-D sftp_server_path] [-F ssh_config] [-i identity_file] [-l limit] 8 [-D sftp_server_path] [-F ssh_config] [-i identity_file]
9 [-o ssh_option] [-P port] [-R num_requests] [-S program] 9 [-J destination] [-l limit] [-o ssh_option] [-P port]
10 [-s subsystem | sftp_server] destination 10 [-R num_requests] [-S program] [-s subsystem | sftp_server]
11 destination
11 12
12DESCRIPTION 13DESCRIPTION
13 sftp is a file transfer program, similar to ftp(1), which performs all 14 sftp is a file transfer program, similar to ftp(1), which performs all
@@ -52,13 +53,18 @@ DESCRIPTION
52 instead of stdin. Since it lacks user interaction it should be 53 instead of stdin. Since it lacks user interaction it should be
53 used in conjunction with non-interactive authentication to 54 used in conjunction with non-interactive authentication to
54 obviate the need to enter a password at connection time (see 55 obviate the need to enter a password at connection time (see
55 sshd(8) and ssh-keygen(1) for details). A batchfile of M-bM-^@M-^X-M-bM-^@M-^Y may 56 sshd(8) and ssh-keygen(1) for details).
56 be used to indicate standard input. sftp will abort if any of 57
57 the following commands fail: get, put, reget, reput, rename, ln, 58 A batchfile of M-bM-^@M-^X-M-bM-^@M-^Y may be used to indicate standard input. sftp
58 rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df, 59 will abort if any of the following commands fail: get, put,
59 symlink, and lmkdir. Termination on error can be suppressed on a 60 reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod,
60 command by command basis by prefixing the command with a M-bM-^@M-^X-M-bM-^@M-^Y 61 chown, chgrp, lpwd, df, symlink, and lmkdir.
61 character (for example, -rm /tmp/blah*). 62
63 Termination on error can be suppressed on a command by command
64 basis by prefixing the command with a M-bM-^@M-^X-M-bM-^@M-^Y character (for example,
65 -rm /tmp/blah*). Echo of the command may be suppressed by
66 prefixing the command with a M-bM-^@M-^X@M-bM-^@M-^Y character. These two prefixes
67 may be combined in any order, for example -@ls /bsd.
62 68
63 -C Enables compression (via ssh's -C flag). 69 -C Enables compression (via ssh's -C flag).
64 70
@@ -83,6 +89,14 @@ DESCRIPTION
83 key authentication is read. This option is directly passed to 89 key authentication is read. This option is directly passed to
84 ssh(1). 90 ssh(1).
85 91
92 -J destination
93 Connect to the target host by first making an sftp connection to
94 the jump host described by destination and then establishing a
95 TCP forwarding to the ultimate destination from there. Multiple
96 jump hops may be specified separated by comma characters. This
97 is a shortcut to specify a ProxyJump configuration directive.
98 This option is directly passed to ssh(1).
99
86 -l limit 100 -l limit
87 Limits the used bandwidth, specified in Kbit/s. 101 Limits the used bandwidth, specified in Kbit/s.
88 102
@@ -197,17 +211,20 @@ INTERACTIVE COMMANDS
197 Change remote directory to path. If path is not specified, then 211 Change remote directory to path. If path is not specified, then
198 change directory to the one the session started in. 212 change directory to the one the session started in.
199 213
200 chgrp grp path 214 chgrp [-h] grp path
201 Change group of file path to grp. path may contain glob(7) 215 Change group of file path to grp. If the -h flag is specified,
216 then symlinks will not be followed. path may contain glob(7)
202 characters and may match multiple files. grp must be a numeric 217 characters and may match multiple files. grp must be a numeric
203 GID. 218 GID.
204 219
205 chmod mode path 220 chmod [-h] mode path
206 Change permissions of file path to mode. path may contain 221 Change permissions of file path to mode. If the -h flag is
222 specified, then symlinks will not be followed. path may contain
207 glob(7) characters and may match multiple files. 223 glob(7) characters and may match multiple files.
208 224
209 chown own path 225 chown [-h] own path
210 Change owner of file path to own. path may contain glob(7) 226 Change owner of file path to own. If the -h flag is specified,
227 then symlinks will not be followed. path may contain glob(7)
211 characters and may match multiple files. own must be a numeric 228 characters and may match multiple files. own must be a numeric
212 UID. 229 UID.
213 230
@@ -376,4 +393,4 @@ SEE ALSO
376 T. Ylonen and S. Lehtinen, SSH File Transfer Protocol, draft-ietf-secsh- 393 T. Ylonen and S. Lehtinen, SSH File Transfer Protocol, draft-ietf-secsh-
377 filexfer-00.txt, January 2001, work in progress material. 394 filexfer-00.txt, January 2001, work in progress material.
378 395
379OpenBSD 6.4 September 20, 2018 OpenBSD 6.4 396OpenBSD 6.5 January 22, 2019 OpenBSD 6.5
diff --git a/sftp.1 b/sftp.1
index 0fd54cae0..259095885 100644
--- a/sftp.1
+++ b/sftp.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: sftp.1,v 1.120 2018/09/20 06:58:48 jmc Exp $ 1.\" $OpenBSD: sftp.1,v 1.125 2019/01/22 06:58:31 jmc Exp $
2.\" 2.\"
3.\" Copyright (c) 2001 Damien Miller. All rights reserved. 3.\" Copyright (c) 2001 Damien Miller. All rights reserved.
4.\" 4.\"
@@ -22,7 +22,7 @@
22.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 22.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24.\" 24.\"
25.Dd $Mdocdate: September 20 2018 $ 25.Dd $Mdocdate: January 22 2019 $
26.Dt SFTP 1 26.Dt SFTP 1
27.Os 27.Os
28.Sh NAME 28.Sh NAME
@@ -37,6 +37,7 @@
37.Op Fl D Ar sftp_server_path 37.Op Fl D Ar sftp_server_path
38.Op Fl F Ar ssh_config 38.Op Fl F Ar ssh_config
39.Op Fl i Ar identity_file 39.Op Fl i Ar identity_file
40.Op Fl J Ar destination
40.Op Fl l Ar limit 41.Op Fl l Ar limit
41.Op Fl o Ar ssh_option 42.Op Fl o Ar ssh_option
42.Op Fl P Ar port 43.Op Fl P Ar port
@@ -127,6 +128,7 @@ at connection time (see
127and 128and
128.Xr ssh-keygen 1 129.Xr ssh-keygen 1
129for details). 130for details).
131.Pp
130A 132A
131.Ar batchfile 133.Ar batchfile
132of 134of
@@ -135,17 +137,23 @@ may be used to indicate standard input.
135.Nm 137.Nm
136will abort if any of the following 138will abort if any of the following
137commands fail: 139commands fail:
138.Ic get , put , reget , reput, rename , ln , 140.Ic get , put , reget , reput , rename , ln ,
139.Ic rm , mkdir , chdir , ls , 141.Ic rm , mkdir , chdir , ls ,
140.Ic lchdir , chmod , chown , 142.Ic lchdir , chmod , chown ,
141.Ic chgrp , lpwd , df , symlink , 143.Ic chgrp , lpwd , df , symlink ,
142and 144and
143.Ic lmkdir . 145.Ic lmkdir .
146.Pp
144Termination on error can be suppressed on a command by command basis by 147Termination on error can be suppressed on a command by command basis by
145prefixing the command with a 148prefixing the command with a
146.Sq \- 149.Sq \-
147character (for example, 150character (for example,
148.Ic -rm /tmp/blah* ) . 151.Ic -rm /tmp/blah* ) .
152Echo of the command may be suppressed by prefixing the command with a
153.Sq @
154character.
155These two prefixes may be combined in any order, for example
156.Ic -@ls /bsd .
149.It Fl C 157.It Fl C
150Enables compression (via ssh's 158Enables compression (via ssh's
151.Fl C 159.Fl C
@@ -174,6 +182,19 @@ Selects the file from which the identity (private key) for public key
174authentication is read. 182authentication is read.
175This option is directly passed to 183This option is directly passed to
176.Xr ssh 1 . 184.Xr ssh 1 .
185.It Fl J Ar destination
186Connect to the target host by first making an
187.Nm
188connection to the jump host described by
189.Ar destination
190and then establishing a TCP forwarding to the ultimate destination from
191there.
192Multiple jump hops may be specified separated by comma characters.
193This is a shortcut to specify a
194.Cm ProxyJump
195configuration directive.
196This option is directly passed to
197.Xr ssh 1 .
177.It Fl l Ar limit 198.It Fl l Ar limit
178Limits the used bandwidth, specified in Kbit/s. 199Limits the used bandwidth, specified in Kbit/s.
179.It Fl o Ar ssh_option 200.It Fl o Ar ssh_option
@@ -309,31 +330,52 @@ Change remote directory to
309If 330If
310.Ar path 331.Ar path
311is not specified, then change directory to the one the session started in. 332is not specified, then change directory to the one the session started in.
312.It Ic chgrp Ar grp Ar path 333.It Xo Ic chgrp
334.Op Fl h
335.Ar grp
336.Ar path
337.Xc
313Change group of file 338Change group of file
314.Ar path 339.Ar path
315to 340to
316.Ar grp . 341.Ar grp .
342If the
343.Fl h
344flag is specified, then symlinks will not be followed.
317.Ar path 345.Ar path
318may contain 346may contain
319.Xr glob 7 347.Xr glob 7
320characters and may match multiple files. 348characters and may match multiple files.
321.Ar grp 349.Ar grp
322must be a numeric GID. 350must be a numeric GID.
323.It Ic chmod Ar mode Ar path 351.It Xo Ic chmod
352.Op Fl h
353.Ar mode
354.Ar path
355.Xc
324Change permissions of file 356Change permissions of file
325.Ar path 357.Ar path
326to 358to
327.Ar mode . 359.Ar mode .
360If the
361.Fl h
362flag is specified, then symlinks will not be followed.
328.Ar path 363.Ar path
329may contain 364may contain
330.Xr glob 7 365.Xr glob 7
331characters and may match multiple files. 366characters and may match multiple files.
332.It Ic chown Ar own Ar path 367.It Xo Ic chown
368.Op Fl h
369.Ar own
370.Ar path
371.Xc
333Change owner of file 372Change owner of file
334.Ar path 373.Ar path
335to 374to
336.Ar own . 375.Ar own .
376If the
377.Fl h
378flag is specified, then symlinks will not be followed.
337.Ar path 379.Ar path
338may contain 380may contain
339.Xr glob 7 381.Xr glob 7
diff --git a/sftp.c b/sftp.c
index 7db86c2d3..44aa19d96 100644
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp.c,v 1.186 2018/09/07 04:26:56 dtucker Exp $ */ 1/* $OpenBSD: sftp.c,v 1.190 2019/01/21 22:50:42 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org> 3 * Copyright (c) 2001-2004 Damien Miller <djm@openbsd.org>
4 * 4 *
@@ -278,9 +278,9 @@ help(void)
278 printf("Available commands:\n" 278 printf("Available commands:\n"
279 "bye Quit sftp\n" 279 "bye Quit sftp\n"
280 "cd path Change remote directory to 'path'\n" 280 "cd path Change remote directory to 'path'\n"
281 "chgrp grp path Change group of file 'path' to 'grp'\n" 281 "chgrp [-h] grp path Change group of file 'path' to 'grp'\n"
282 "chmod mode path Change permissions of file 'path' to 'mode'\n" 282 "chmod [-h] mode path Change permissions of file 'path' to 'mode'\n"
283 "chown own path Change owner of file 'path' to 'own'\n" 283 "chown [-h] own path Change owner of file 'path' to 'own'\n"
284 "df [-hi] [path] Display statistics for current directory or\n" 284 "df [-hi] [path] Display statistics for current directory or\n"
285 " filesystem containing 'path'\n" 285 " filesystem containing 'path'\n"
286 "exit Quit sftp\n" 286 "exit Quit sftp\n"
@@ -389,7 +389,7 @@ make_absolute(char *p, const char *pwd)
389 char *abs_str; 389 char *abs_str;
390 390
391 /* Derelativise */ 391 /* Derelativise */
392 if (p && p[0] != '/') { 392 if (p && !path_absolute(p)) {
393 abs_str = path_append(pwd, p); 393 abs_str = path_append(pwd, p);
394 free(p); 394 free(p);
395 return(abs_str); 395 return(abs_str);
@@ -562,6 +562,30 @@ parse_df_flags(const char *cmd, char **argv, int argc, int *hflag, int *iflag)
562} 562}
563 563
564static int 564static int
565parse_ch_flags(const char *cmd, char **argv, int argc, int *hflag)
566{
567 extern int opterr, optind, optopt, optreset;
568 int ch;
569
570 optind = optreset = 1;
571 opterr = 0;
572
573 *hflag = 0;
574 while ((ch = getopt(argc, argv, "h")) != -1) {
575 switch (ch) {
576 case 'h':
577 *hflag = 1;
578 break;
579 default:
580 error("%s: Invalid flag -%c", cmd, optopt);
581 return -1;
582 }
583 }
584
585 return optind;
586}
587
588static int
565parse_no_flags(const char *cmd, char **argv, int argc) 589parse_no_flags(const char *cmd, char **argv, int argc)
566{ 590{
567 extern int opterr, optind, optopt, optreset; 591 extern int opterr, optind, optopt, optreset;
@@ -1296,7 +1320,7 @@ makeargv(const char *arg, int *argcp, int sloppy, char *lastquote,
1296} 1320}
1297 1321
1298static int 1322static int
1299parse_args(const char **cpp, int *ignore_errors, int *aflag, 1323parse_args(const char **cpp, int *ignore_errors, int *disable_echo, int *aflag,
1300 int *fflag, int *hflag, int *iflag, int *lflag, int *pflag, 1324 int *fflag, int *hflag, int *iflag, int *lflag, int *pflag,
1301 int *rflag, int *sflag, 1325 int *rflag, int *sflag,
1302 unsigned long *n_arg, char **path1, char **path2) 1326 unsigned long *n_arg, char **path1, char **path2)
@@ -1310,13 +1334,23 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1310 /* Skip leading whitespace */ 1334 /* Skip leading whitespace */
1311 cp = cp + strspn(cp, WHITESPACE); 1335 cp = cp + strspn(cp, WHITESPACE);
1312 1336
1313 /* Check for leading '-' (disable error processing) */ 1337 /*
1338 * Check for leading '-' (disable error processing) and '@' (suppress
1339 * command echo)
1340 */
1314 *ignore_errors = 0; 1341 *ignore_errors = 0;
1315 if (*cp == '-') { 1342 *disable_echo = 0;
1316 *ignore_errors = 1; 1343 for (;*cp != '\0'; cp++) {
1317 cp++; 1344 if (*cp == '-') {
1318 cp = cp + strspn(cp, WHITESPACE); 1345 *ignore_errors = 1;
1346 } else if (*cp == '@') {
1347 *disable_echo = 1;
1348 } else {
1349 /* all other characters terminate prefix processing */
1350 break;
1351 }
1319 } 1352 }
1353 cp = cp + strspn(cp, WHITESPACE);
1320 1354
1321 /* Ignore blank lines and lines which begin with comment '#' char */ 1355 /* Ignore blank lines and lines which begin with comment '#' char */
1322 if (*cp == '\0' || *cp == '#') 1356 if (*cp == '\0' || *cp == '#')
@@ -1446,7 +1480,7 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1446 /* FALLTHROUGH */ 1480 /* FALLTHROUGH */
1447 case I_CHOWN: 1481 case I_CHOWN:
1448 case I_CHGRP: 1482 case I_CHGRP:
1449 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) 1483 if ((optidx = parse_ch_flags(cmd, argv, argc, hflag)) == -1)
1450 return -1; 1484 return -1;
1451 /* Get numeric arg (mandatory) */ 1485 /* Get numeric arg (mandatory) */
1452 if (argc - optidx < 1) 1486 if (argc - optidx < 1)
@@ -1491,11 +1525,12 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1491 1525
1492static int 1526static int
1493parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd, 1527parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1494 const char *startdir, int err_abort) 1528 const char *startdir, int err_abort, int echo_command)
1495{ 1529{
1530 const char *ocmd = cmd;
1496 char *path1, *path2, *tmp; 1531 char *path1, *path2, *tmp;
1497 int ignore_errors = 0, aflag = 0, fflag = 0, hflag = 0, 1532 int ignore_errors = 0, disable_echo = 1;
1498 iflag = 0; 1533 int aflag = 0, fflag = 0, hflag = 0, iflag = 0;
1499 int lflag = 0, pflag = 0, rflag = 0, sflag = 0; 1534 int lflag = 0, pflag = 0, rflag = 0, sflag = 0;
1500 int cmdnum, i; 1535 int cmdnum, i;
1501 unsigned long n_arg = 0; 1536 unsigned long n_arg = 0;
@@ -1505,11 +1540,15 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1505 glob_t g; 1540 glob_t g;
1506 1541
1507 path1 = path2 = NULL; 1542 path1 = path2 = NULL;
1508 cmdnum = parse_args(&cmd, &ignore_errors, &aflag, &fflag, &hflag, 1543 cmdnum = parse_args(&cmd, &ignore_errors, &disable_echo, &aflag, &fflag,
1509 &iflag, &lflag, &pflag, &rflag, &sflag, &n_arg, &path1, &path2); 1544 &hflag, &iflag, &lflag, &pflag, &rflag, &sflag, &n_arg,
1545 &path1, &path2);
1510 if (ignore_errors != 0) 1546 if (ignore_errors != 0)
1511 err_abort = 0; 1547 err_abort = 0;
1512 1548
1549 if (echo_command && !disable_echo)
1550 mprintf("sftp> %s\n", ocmd);
1551
1513 memset(&g, 0, sizeof(g)); 1552 memset(&g, 0, sizeof(g));
1514 1553
1515 /* Perform command */ 1554 /* Perform command */
@@ -1608,7 +1647,7 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1608 1647
1609 /* Strip pwd off beginning of non-absolute paths */ 1648 /* Strip pwd off beginning of non-absolute paths */
1610 tmp = NULL; 1649 tmp = NULL;
1611 if (*path1 != '/') 1650 if (!path_absolute(path1))
1612 tmp = *pwd; 1651 tmp = *pwd;
1613 1652
1614 path1 = make_absolute(path1, *pwd); 1653 path1 = make_absolute(path1, *pwd);
@@ -1660,7 +1699,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1660 if (!quiet) 1699 if (!quiet)
1661 mprintf("Changing mode on %s\n", 1700 mprintf("Changing mode on %s\n",
1662 g.gl_pathv[i]); 1701 g.gl_pathv[i]);
1663 err = do_setstat(conn, g.gl_pathv[i], &a); 1702 err = (hflag ? do_lsetstat : do_setstat)(conn,
1703 g.gl_pathv[i], &a);
1664 if (err != 0 && err_abort) 1704 if (err != 0 && err_abort)
1665 break; 1705 break;
1666 } 1706 }
@@ -1670,7 +1710,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1670 path1 = make_absolute(path1, *pwd); 1710 path1 = make_absolute(path1, *pwd);
1671 remote_glob(conn, path1, GLOB_NOCHECK, NULL, &g); 1711 remote_glob(conn, path1, GLOB_NOCHECK, NULL, &g);
1672 for (i = 0; g.gl_pathv[i] && !interrupted; i++) { 1712 for (i = 0; g.gl_pathv[i] && !interrupted; i++) {
1673 if (!(aa = do_stat(conn, g.gl_pathv[i], 0))) { 1713 if (!(aa = (hflag ? do_lstat : do_stat)(conn,
1714 g.gl_pathv[i], 0))) {
1674 if (err_abort) { 1715 if (err_abort) {
1675 err = -1; 1716 err = -1;
1676 break; 1717 break;
@@ -1698,7 +1739,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1698 g.gl_pathv[i]); 1739 g.gl_pathv[i]);
1699 aa->gid = n_arg; 1740 aa->gid = n_arg;
1700 } 1741 }
1701 err = do_setstat(conn, g.gl_pathv[i], aa); 1742 err = (hflag ? do_lsetstat : do_setstat)(conn,
1743 g.gl_pathv[i], aa);
1702 if (err != 0 && err_abort) 1744 if (err != 0 && err_abort)
1703 break; 1745 break;
1704 } 1746 }
@@ -1936,7 +1978,7 @@ complete_match(EditLine *el, struct sftp_conn *conn, char *remote_path,
1936 xasprintf(&tmp, "%s*", file); 1978 xasprintf(&tmp, "%s*", file);
1937 1979
1938 /* Check if the path is absolute. */ 1980 /* Check if the path is absolute. */
1939 isabs = tmp[0] == '/'; 1981 isabs = path_absolute(tmp);
1940 1982
1941 memset(&g, 0, sizeof(g)); 1983 memset(&g, 0, sizeof(g));
1942 if (remote != LOCAL) { 1984 if (remote != LOCAL) {
@@ -2169,7 +2211,7 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2169 mprintf("Changing to: %s\n", dir); 2211 mprintf("Changing to: %s\n", dir);
2170 snprintf(cmd, sizeof cmd, "cd \"%s\"", dir); 2212 snprintf(cmd, sizeof cmd, "cd \"%s\"", dir);
2171 if (parse_dispatch_command(conn, cmd, 2213 if (parse_dispatch_command(conn, cmd,
2172 &remote_path, startdir, 1) != 0) { 2214 &remote_path, startdir, 1, 0) != 0) {
2173 free(dir); 2215 free(dir);
2174 free(startdir); 2216 free(startdir);
2175 free(remote_path); 2217 free(remote_path);
@@ -2183,7 +2225,7 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2183 file2 == NULL ? "" : " ", 2225 file2 == NULL ? "" : " ",
2184 file2 == NULL ? "" : file2); 2226 file2 == NULL ? "" : file2);
2185 err = parse_dispatch_command(conn, cmd, 2227 err = parse_dispatch_command(conn, cmd,
2186 &remote_path, startdir, 1); 2228 &remote_path, startdir, 1, 0);
2187 free(dir); 2229 free(dir);
2188 free(startdir); 2230 free(startdir);
2189 free(remote_path); 2231 free(remote_path);
@@ -2199,8 +2241,6 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2199 interactive = !batchmode && isatty(STDIN_FILENO); 2241 interactive = !batchmode && isatty(STDIN_FILENO);
2200 err = 0; 2242 err = 0;
2201 for (;;) { 2243 for (;;) {
2202 char *cp;
2203
2204 signal(SIGINT, SIG_IGN); 2244 signal(SIGINT, SIG_IGN);
2205 2245
2206 if (el == NULL) { 2246 if (el == NULL) {
@@ -2211,12 +2251,6 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2211 printf("\n"); 2251 printf("\n");
2212 break; 2252 break;
2213 } 2253 }
2214 if (!interactive) { /* Echo command */
2215 mprintf("sftp> %s", cmd);
2216 if (strlen(cmd) > 0 &&
2217 cmd[strlen(cmd) - 1] != '\n')
2218 printf("\n");
2219 }
2220 } else { 2254 } else {
2221#ifdef USE_LIBEDIT 2255#ifdef USE_LIBEDIT
2222 const char *line; 2256 const char *line;
@@ -2235,16 +2269,14 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2235#endif /* USE_LIBEDIT */ 2269#endif /* USE_LIBEDIT */
2236 } 2270 }
2237 2271
2238 cp = strrchr(cmd, '\n'); 2272 cmd[strcspn(cmd, "\n")] = '\0';
2239 if (cp)
2240 *cp = '\0';
2241 2273
2242 /* Handle user interrupts gracefully during commands */ 2274 /* Handle user interrupts gracefully during commands */
2243 interrupted = 0; 2275 interrupted = 0;
2244 signal(SIGINT, cmd_interrupt); 2276 signal(SIGINT, cmd_interrupt);
2245 2277
2246 err = parse_dispatch_command(conn, cmd, &remote_path, 2278 err = parse_dispatch_command(conn, cmd, &remote_path,
2247 startdir, batchmode); 2279 startdir, batchmode, !interactive && el == NULL);
2248 if (err != 0) 2280 if (err != 0)
2249 break; 2281 break;
2250 } 2282 }
@@ -2330,11 +2362,10 @@ usage(void)
2330 2362
2331 fprintf(stderr, 2363 fprintf(stderr,
2332 "usage: %s [-46aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher]\n" 2364 "usage: %s [-46aCfpqrv] [-B buffer_size] [-b batchfile] [-c cipher]\n"
2333 " [-D sftp_server_path] [-F ssh_config] " 2365 " [-D sftp_server_path] [-F ssh_config] [-i identity_file]\n"
2334 "[-i identity_file] [-l limit]\n" 2366 " [-J destination] [-l limit] [-o ssh_option] [-P port]\n"
2335 " [-o ssh_option] [-P port] [-R num_requests] " 2367 " [-R num_requests] [-S program] [-s subsystem | sftp_server]\n"
2336 "[-S program]\n" 2368 " destination\n",
2337 " [-s subsystem | sftp_server] destination\n",
2338 __progname); 2369 __progname);
2339 exit(1); 2370 exit(1);
2340} 2371}
@@ -2362,6 +2393,8 @@ main(int argc, char **argv)
2362 sanitise_stdfd(); 2393 sanitise_stdfd();
2363 msetlocale(); 2394 msetlocale();
2364 2395
2396 seed_rng();
2397
2365 __progname = ssh_get_progname(argv[0]); 2398 __progname = ssh_get_progname(argv[0]);
2366 memset(&args, '\0', sizeof(args)); 2399 memset(&args, '\0', sizeof(args));
2367 args.list = NULL; 2400 args.list = NULL;
@@ -2375,7 +2408,7 @@ main(int argc, char **argv)
2375 infile = stdin; 2408 infile = stdin;
2376 2409
2377 while ((ch = getopt(argc, argv, 2410 while ((ch = getopt(argc, argv,
2378 "1246afhpqrvCc:D:i:l:o:s:S:b:B:F:P:R:")) != -1) { 2411 "1246afhpqrvCc:D:i:l:o:s:S:b:B:F:J:P:R:")) != -1) {
2379 switch (ch) { 2412 switch (ch) {
2380 /* Passed through to ssh(1) */ 2413 /* Passed through to ssh(1) */
2381 case '4': 2414 case '4':
@@ -2385,6 +2418,7 @@ main(int argc, char **argv)
2385 break; 2418 break;
2386 /* Passed through to ssh(1) with argument */ 2419 /* Passed through to ssh(1) with argument */
2387 case 'F': 2420 case 'F':
2421 case 'J':
2388 case 'c': 2422 case 'c':
2389 case 'i': 2423 case 'i':
2390 case 'o': 2424 case 'o':
diff --git a/sntrup4591761.c b/sntrup4591761.c
new file mode 100644
index 000000000..61fe2483f
--- /dev/null
+++ b/sntrup4591761.c
@@ -0,0 +1,1083 @@
1/* $OpenBSD: sntrup4591761.c,v 1.3 2019/01/30 19:51:15 markus Exp $ */
2
3/*
4 * Public Domain, Authors:
5 * - Daniel J. Bernstein
6 * - Chitchanok Chuengsatiansup
7 * - Tanja Lange
8 * - Christine van Vredendaal
9 */
10
11#include "includes.h"
12
13#include <string.h>
14#include "crypto_api.h"
15
16/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.h */
17#ifndef int32_sort_h
18#define int32_sort_h
19
20
21static void int32_sort(crypto_int32 *,int);
22
23#endif
24
25/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.c */
26/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
27
28
29static void minmax(crypto_int32 *x,crypto_int32 *y)
30{
31 crypto_uint32 xi = *x;
32 crypto_uint32 yi = *y;
33 crypto_uint32 xy = xi ^ yi;
34 crypto_uint32 c = yi - xi;
35 c ^= xy & (c ^ yi);
36 c >>= 31;
37 c = -c;
38 c &= xy;
39 *x = xi ^ c;
40 *y = yi ^ c;
41}
42
43static void int32_sort(crypto_int32 *x,int n)
44{
45 int top,p,q,i;
46
47 if (n < 2) return;
48 top = 1;
49 while (top < n - top) top += top;
50
51 for (p = top;p > 0;p >>= 1) {
52 for (i = 0;i < n - p;++i)
53 if (!(i & p))
54 minmax(x + i,x + i + p);
55 for (q = top;q > p;q >>= 1)
56 for (i = 0;i < n - q;++i)
57 if (!(i & p))
58 minmax(x + i + p,x + i + q);
59 }
60}
61
62/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.h */
63#ifndef small_h
64#define small_h
65
66
67typedef crypto_int8 small;
68
69static void small_encode(unsigned char *,const small *);
70
71static void small_decode(small *,const unsigned char *);
72
73
74static void small_random(small *);
75
76static void small_random_weightw(small *);
77
78#endif
79
80/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/mod3.h */
81#ifndef mod3_h
82#define mod3_h
83
84
85/* -1 if x is nonzero, 0 otherwise */
86static inline int mod3_nonzero_mask(small x)
87{
88 return -x*x;
89}
90
91/* input between -100000 and 100000 */
92/* output between -1 and 1 */
93static inline small mod3_freeze(crypto_int32 a)
94{
95 a -= 3 * ((10923 * a) >> 15);
96 a -= 3 * ((89478485 * a + 134217728) >> 28);
97 return a;
98}
99
100static inline small mod3_minusproduct(small a,small b,small c)
101{
102 crypto_int32 A = a;
103 crypto_int32 B = b;
104 crypto_int32 C = c;
105 return mod3_freeze(A - B * C);
106}
107
108static inline small mod3_plusproduct(small a,small b,small c)
109{
110 crypto_int32 A = a;
111 crypto_int32 B = b;
112 crypto_int32 C = c;
113 return mod3_freeze(A + B * C);
114}
115
116static inline small mod3_product(small a,small b)
117{
118 return a * b;
119}
120
121static inline small mod3_sum(small a,small b)
122{
123 crypto_int32 A = a;
124 crypto_int32 B = b;
125 return mod3_freeze(A + B);
126}
127
128static inline small mod3_reciprocal(small a1)
129{
130 return a1;
131}
132
133static inline small mod3_quotient(small num,small den)
134{
135 return mod3_product(num,mod3_reciprocal(den));
136}
137
138#endif
139
140/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/modq.h */
141#ifndef modq_h
142#define modq_h
143
144
145typedef crypto_int16 modq;
146
147/* -1 if x is nonzero, 0 otherwise */
148static inline int modq_nonzero_mask(modq x)
149{
150 crypto_int32 r = (crypto_uint16) x;
151 r = -r;
152 r >>= 30;
153 return r;
154}
155
156/* input between -9000000 and 9000000 */
157/* output between -2295 and 2295 */
158static inline modq modq_freeze(crypto_int32 a)
159{
160 a -= 4591 * ((228 * a) >> 20);
161 a -= 4591 * ((58470 * a + 134217728) >> 28);
162 return a;
163}
164
165static inline modq modq_minusproduct(modq a,modq b,modq c)
166{
167 crypto_int32 A = a;
168 crypto_int32 B = b;
169 crypto_int32 C = c;
170 return modq_freeze(A - B * C);
171}
172
173static inline modq modq_plusproduct(modq a,modq b,modq c)
174{
175 crypto_int32 A = a;
176 crypto_int32 B = b;
177 crypto_int32 C = c;
178 return modq_freeze(A + B * C);
179}
180
181static inline modq modq_product(modq a,modq b)
182{
183 crypto_int32 A = a;
184 crypto_int32 B = b;
185 return modq_freeze(A * B);
186}
187
188static inline modq modq_square(modq a)
189{
190 crypto_int32 A = a;
191 return modq_freeze(A * A);
192}
193
194static inline modq modq_sum(modq a,modq b)
195{
196 crypto_int32 A = a;
197 crypto_int32 B = b;
198 return modq_freeze(A + B);
199}
200
201static inline modq modq_reciprocal(modq a1)
202{
203 modq a2 = modq_square(a1);
204 modq a3 = modq_product(a2,a1);
205 modq a4 = modq_square(a2);
206 modq a8 = modq_square(a4);
207 modq a16 = modq_square(a8);
208 modq a32 = modq_square(a16);
209 modq a35 = modq_product(a32,a3);
210 modq a70 = modq_square(a35);
211 modq a140 = modq_square(a70);
212 modq a143 = modq_product(a140,a3);
213 modq a286 = modq_square(a143);
214 modq a572 = modq_square(a286);
215 modq a1144 = modq_square(a572);
216 modq a1147 = modq_product(a1144,a3);
217 modq a2294 = modq_square(a1147);
218 modq a4588 = modq_square(a2294);
219 modq a4589 = modq_product(a4588,a1);
220 return a4589;
221}
222
223static inline modq modq_quotient(modq num,modq den)
224{
225 return modq_product(num,modq_reciprocal(den));
226}
227
228#endif
229
230/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/params.h */
231#ifndef params_h
232#define params_h
233
234#define q 4591
235/* XXX: also built into modq in various ways */
236
237#define qshift 2295
238#define p 761
239#define w 286
240
241#define rq_encode_len 1218
242#define small_encode_len 191
243
244#endif
245
246/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3.h */
247#ifndef r3_h
248#define r3_h
249
250
251static void r3_mult(small *,const small *,const small *);
252
253extern int r3_recip(small *,const small *);
254
255#endif
256
257/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.h */
258#ifndef rq_h
259#define rq_h
260
261
262static void rq_encode(unsigned char *,const modq *);
263
264static void rq_decode(modq *,const unsigned char *);
265
266static void rq_encoderounded(unsigned char *,const modq *);
267
268static void rq_decoderounded(modq *,const unsigned char *);
269
270static void rq_round3(modq *,const modq *);
271
272static void rq_mult(modq *,const modq *,const small *);
273
274int rq_recip3(modq *,const small *);
275
276#endif
277
278/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.h */
279#ifndef swap_h
280#define swap_h
281
282static void swap(void *,void *,int,int);
283
284#endif
285
286/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/dec.c */
287/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
288
289#ifdef KAT
290#endif
291
292
293int crypto_kem_sntrup4591761_dec(
294 unsigned char *k,
295 const unsigned char *cstr,
296 const unsigned char *sk
297)
298{
299 small f[p];
300 modq h[p];
301 small grecip[p];
302 modq c[p];
303 modq t[p];
304 small t3[p];
305 small r[p];
306 modq hr[p];
307 unsigned char rstr[small_encode_len];
308 unsigned char hash[64];
309 int i;
310 int result = 0;
311 int weight;
312
313 small_decode(f,sk);
314 small_decode(grecip,sk + small_encode_len);
315 rq_decode(h,sk + 2 * small_encode_len);
316
317 rq_decoderounded(c,cstr + 32);
318
319 rq_mult(t,c,f);
320 for (i = 0;i < p;++i) t3[i] = mod3_freeze(modq_freeze(3*t[i]));
321
322 r3_mult(r,t3,grecip);
323
324#ifdef KAT
325 {
326 int j;
327 printf("decrypt r:");
328 for (j = 0;j < p;++j)
329 if (r[j] == 1) printf(" +%d",j);
330 else if (r[j] == -1) printf(" -%d",j);
331 printf("\n");
332 }
333#endif
334
335 weight = 0;
336 for (i = 0;i < p;++i) weight += (1 & r[i]);
337 weight -= w;
338 result |= modq_nonzero_mask(weight); /* XXX: puts limit on p */
339
340 rq_mult(hr,h,r);
341 rq_round3(hr,hr);
342 for (i = 0;i < p;++i) result |= modq_nonzero_mask(hr[i] - c[i]);
343
344 small_encode(rstr,r);
345 crypto_hash_sha512(hash,rstr,sizeof rstr);
346 result |= crypto_verify_32(hash,cstr);
347
348 for (i = 0;i < 32;++i) k[i] = (hash[32 + i] & ~result);
349 return result;
350}
351
352/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/enc.c */
353/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
354
355#ifdef KAT
356#endif
357
358
359int crypto_kem_sntrup4591761_enc(
360 unsigned char *cstr,
361 unsigned char *k,
362 const unsigned char *pk
363)
364{
365 small r[p];
366 modq h[p];
367 modq c[p];
368 unsigned char rstr[small_encode_len];
369 unsigned char hash[64];
370
371 small_random_weightw(r);
372
373#ifdef KAT
374 {
375 int i;
376 printf("encrypt r:");
377 for (i = 0;i < p;++i)
378 if (r[i] == 1) printf(" +%d",i);
379 else if (r[i] == -1) printf(" -%d",i);
380 printf("\n");
381 }
382#endif
383
384 small_encode(rstr,r);
385 crypto_hash_sha512(hash,rstr,sizeof rstr);
386
387 rq_decode(h,pk);
388 rq_mult(c,h,r);
389 rq_round3(c,c);
390
391 memcpy(k,hash + 32,32);
392 memcpy(cstr,hash,32);
393 rq_encoderounded(cstr + 32,c);
394
395 return 0;
396}
397
398/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/keypair.c */
399/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
400
401
402#if crypto_kem_sntrup4591761_PUBLICKEYBYTES != rq_encode_len
403#error "crypto_kem_sntrup4591761_PUBLICKEYBYTES must match rq_encode_len"
404#endif
405#if crypto_kem_sntrup4591761_SECRETKEYBYTES != rq_encode_len + 2 * small_encode_len
406#error "crypto_kem_sntrup4591761_SECRETKEYBYTES must match rq_encode_len + 2 * small_encode_len"
407#endif
408
409int crypto_kem_sntrup4591761_keypair(unsigned char *pk,unsigned char *sk)
410{
411 small g[p];
412 small grecip[p];
413 small f[p];
414 modq f3recip[p];
415 modq h[p];
416
417 do
418 small_random(g);
419 while (r3_recip(grecip,g) != 0);
420
421 small_random_weightw(f);
422 rq_recip3(f3recip,f);
423
424 rq_mult(h,f3recip,g);
425
426 rq_encode(pk,h);
427 small_encode(sk,f);
428 small_encode(sk + small_encode_len,grecip);
429 memcpy(sk + 2 * small_encode_len,pk,rq_encode_len);
430
431 return 0;
432}
433
434/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_mult.c */
435/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
436
437
438static void r3_mult(small *h,const small *f,const small *g)
439{
440 small fg[p + p - 1];
441 small result;
442 int i, j;
443
444 for (i = 0;i < p;++i) {
445 result = 0;
446 for (j = 0;j <= i;++j)
447 result = mod3_plusproduct(result,f[j],g[i - j]);
448 fg[i] = result;
449 }
450 for (i = p;i < p + p - 1;++i) {
451 result = 0;
452 for (j = i - p + 1;j < p;++j)
453 result = mod3_plusproduct(result,f[j],g[i - j]);
454 fg[i] = result;
455 }
456
457 for (i = p + p - 2;i >= p;--i) {
458 fg[i - p] = mod3_sum(fg[i - p],fg[i]);
459 fg[i - p + 1] = mod3_sum(fg[i - p + 1],fg[i]);
460 }
461
462 for (i = 0;i < p;++i)
463 h[i] = fg[i];
464}
465
466/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_recip.c */
467/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
468
469
470/* caller must ensure that x-y does not overflow */
471static int smaller_mask_r3_recip(int x,int y)
472{
473 return (x - y) >> 31;
474}
475
476static void vectormod3_product(small *z,int len,const small *x,const small c)
477{
478 int i;
479 for (i = 0;i < len;++i) z[i] = mod3_product(x[i],c);
480}
481
482static void vectormod3_minusproduct(small *z,int len,const small *x,const small *y,const small c)
483{
484 int i;
485 for (i = 0;i < len;++i) z[i] = mod3_minusproduct(x[i],y[i],c);
486}
487
488static void vectormod3_shift(small *z,int len)
489{
490 int i;
491 for (i = len - 1;i > 0;--i) z[i] = z[i - 1];
492 z[0] = 0;
493}
494
495/*
496r = s^(-1) mod m, returning 0, if s is invertible mod m
497or returning -1 if s is not invertible mod m
498r,s are polys of degree <p
499m is x^p-x-1
500*/
501int r3_recip(small *r,const small *s)
502{
503 const int loops = 2*p + 1;
504 int loop;
505 small f[p + 1];
506 small g[p + 1];
507 small u[2*p + 2];
508 small v[2*p + 2];
509 small c;
510 int i;
511 int d = p;
512 int e = p;
513 int swapmask;
514
515 for (i = 2;i < p;++i) f[i] = 0;
516 f[0] = -1;
517 f[1] = -1;
518 f[p] = 1;
519 /* generalization: can initialize f to any polynomial m */
520 /* requirements: m has degree exactly p, nonzero constant coefficient */
521
522 for (i = 0;i < p;++i) g[i] = s[i];
523 g[p] = 0;
524
525 for (i = 0;i <= loops;++i) u[i] = 0;
526
527 v[0] = 1;
528 for (i = 1;i <= loops;++i) v[i] = 0;
529
530 loop = 0;
531 for (;;) {
532 /* e == -1 or d + e + loop <= 2*p */
533
534 /* f has degree p: i.e., f[p]!=0 */
535 /* f[i]==0 for i < p-d */
536
537 /* g has degree <=p (so it fits in p+1 coefficients) */
538 /* g[i]==0 for i < p-e */
539
540 /* u has degree <=loop (so it fits in loop+1 coefficients) */
541 /* u[i]==0 for i < p-d */
542 /* if invertible: u[i]==0 for i < loop-p (so can look at just p+1 coefficients) */
543
544 /* v has degree <=loop (so it fits in loop+1 coefficients) */
545 /* v[i]==0 for i < p-e */
546 /* v[i]==0 for i < loop-p (so can look at just p+1 coefficients) */
547
548 if (loop >= loops) break;
549
550 c = mod3_quotient(g[p],f[p]);
551
552 vectormod3_minusproduct(g,p + 1,g,f,c);
553 vectormod3_shift(g,p + 1);
554
555#ifdef SIMPLER
556 vectormod3_minusproduct(v,loops + 1,v,u,c);
557 vectormod3_shift(v,loops + 1);
558#else
559 if (loop < p) {
560 vectormod3_minusproduct(v,loop + 1,v,u,c);
561 vectormod3_shift(v,loop + 2);
562 } else {
563 vectormod3_minusproduct(v + loop - p,p + 1,v + loop - p,u + loop - p,c);
564 vectormod3_shift(v + loop - p,p + 2);
565 }
566#endif
567
568 e -= 1;
569
570 ++loop;
571
572 swapmask = smaller_mask_r3_recip(e,d) & mod3_nonzero_mask(g[p]);
573 swap(&e,&d,sizeof e,swapmask);
574 swap(f,g,(p + 1) * sizeof(small),swapmask);
575
576#ifdef SIMPLER
577 swap(u,v,(loops + 1) * sizeof(small),swapmask);
578#else
579 if (loop < p) {
580 swap(u,v,(loop + 1) * sizeof(small),swapmask);
581 } else {
582 swap(u + loop - p,v + loop - p,(p + 1) * sizeof(small),swapmask);
583 }
584#endif
585 }
586
587 c = mod3_reciprocal(f[p]);
588 vectormod3_product(r,p,u + p,c);
589 return smaller_mask_r3_recip(0,d);
590}
591
592/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomsmall.c */
593/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
594
595
596static void small_random(small *g)
597{
598 int i;
599
600 for (i = 0;i < p;++i) {
601 crypto_uint32 r = small_random32();
602 g[i] = (small) (((1073741823 & r) * 3) >> 30) - 1;
603 }
604}
605
606/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomweightw.c */
607/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
608
609
610static void small_random_weightw(small *f)
611{
612 crypto_int32 r[p];
613 int i;
614
615 for (i = 0;i < p;++i) r[i] = small_random32();
616 for (i = 0;i < w;++i) r[i] &= -2;
617 for (i = w;i < p;++i) r[i] = (r[i] & -3) | 1;
618 int32_sort(r,p);
619 for (i = 0;i < p;++i) f[i] = ((small) (r[i] & 3)) - 1;
620}
621
622/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.c */
623/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
624
625
626static void rq_encode(unsigned char *c,const modq *f)
627{
628 crypto_int32 f0, f1, f2, f3, f4;
629 int i;
630
631 for (i = 0;i < p/5;++i) {
632 f0 = *f++ + qshift;
633 f1 = *f++ + qshift;
634 f2 = *f++ + qshift;
635 f3 = *f++ + qshift;
636 f4 = *f++ + qshift;
637 /* now want f0 + 6144*f1 + ... as a 64-bit integer */
638 f1 *= 3;
639 f2 *= 9;
640 f3 *= 27;
641 f4 *= 81;
642 /* now want f0 + f1<<11 + f2<<22 + f3<<33 + f4<<44 */
643 f0 += f1 << 11;
644 *c++ = f0; f0 >>= 8;
645 *c++ = f0; f0 >>= 8;
646 f0 += f2 << 6;
647 *c++ = f0; f0 >>= 8;
648 *c++ = f0; f0 >>= 8;
649 f0 += f3 << 1;
650 *c++ = f0; f0 >>= 8;
651 f0 += f4 << 4;
652 *c++ = f0; f0 >>= 8;
653 *c++ = f0; f0 >>= 8;
654 *c++ = f0;
655 }
656 /* XXX: using p mod 5 = 1 */
657 f0 = *f++ + qshift;
658 *c++ = f0; f0 >>= 8;
659 *c++ = f0;
660}
661
662static void rq_decode(modq *f,const unsigned char *c)
663{
664 crypto_uint32 c0, c1, c2, c3, c4, c5, c6, c7;
665 crypto_uint32 f0, f1, f2, f3, f4;
666 int i;
667
668 for (i = 0;i < p/5;++i) {
669 c0 = *c++;
670 c1 = *c++;
671 c2 = *c++;
672 c3 = *c++;
673 c4 = *c++;
674 c5 = *c++;
675 c6 = *c++;
676 c7 = *c++;
677
678 /* f0 + f1*6144 + f2*6144^2 + f3*6144^3 + f4*6144^4 */
679 /* = c0 + c1*256 + ... + c6*256^6 + c7*256^7 */
680 /* with each f between 0 and 4590 */
681
682 c6 += c7 << 8;
683 /* c6 <= 23241 = floor(4591*6144^4/2^48) */
684 /* f4 = (16/81)c6 + (1/1296)(c5+[0,1]) - [0,0.75] */
685 /* claim: 2^19 f4 < x < 2^19(f4+1) */
686 /* where x = 103564 c6 + 405(c5+1) */
687 /* proof: x - 2^19 f4 = (76/81)c6 + (37/81)c5 + 405 - (32768/81)[0,1] + 2^19[0,0.75] */
688 /* at least 405 - 32768/81 > 0 */
689 /* at most (76/81)23241 + (37/81)255 + 405 + 2^19 0.75 < 2^19 */
690 f4 = (103564*c6 + 405*(c5+1)) >> 19;
691
692 c5 += c6 << 8;
693 c5 -= (f4 * 81) << 4;
694 c4 += c5 << 8;
695
696 /* f0 + f1*6144 + f2*6144^2 + f3*6144^3 */
697 /* = c0 + c1*256 + c2*256^2 + c3*256^3 + c4*256^4 */
698 /* c4 <= 247914 = floor(4591*6144^3/2^32) */
699 /* f3 = (1/54)(c4+[0,1]) - [0,0.75] */
700 /* claim: 2^19 f3 < x < 2^19(f3+1) */
701 /* where x = 9709(c4+2) */
702 /* proof: x - 2^19 f3 = 19418 - (1/27)c4 - (262144/27)[0,1] + 2^19[0,0.75] */
703 /* at least 19418 - 247914/27 - 262144/27 > 0 */
704 /* at most 19418 + 2^19 0.75 < 2^19 */
705 f3 = (9709*(c4+2)) >> 19;
706
707 c4 -= (f3 * 27) << 1;
708 c3 += c4 << 8;
709 /* f0 + f1*6144 + f2*6144^2 */
710 /* = c0 + c1*256 + c2*256^2 + c3*256^3 */
711 /* c3 <= 10329 = floor(4591*6144^2/2^24) */
712 /* f2 = (4/9)c3 + (1/576)c2 + (1/147456)c1 + (1/37748736)c0 - [0,0.75] */
713 /* claim: 2^19 f2 < x < 2^19(f2+1) */
714 /* where x = 233017 c3 + 910(c2+2) */
715 /* proof: x - 2^19 f2 = 1820 + (1/9)c3 - (2/9)c2 - (32/9)c1 - (1/72)c0 + 2^19[0,0.75] */
716 /* at least 1820 - (2/9)255 - (32/9)255 - (1/72)255 > 0 */
717 /* at most 1820 + (1/9)10329 + 2^19 0.75 < 2^19 */
718 f2 = (233017*c3 + 910*(c2+2)) >> 19;
719
720 c2 += c3 << 8;
721 c2 -= (f2 * 9) << 6;
722 c1 += c2 << 8;
723 /* f0 + f1*6144 */
724 /* = c0 + c1*256 */
725 /* c1 <= 110184 = floor(4591*6144/2^8) */
726 /* f1 = (1/24)c1 + (1/6144)c0 - (1/6144)f0 */
727 /* claim: 2^19 f1 < x < 2^19(f1+1) */
728 /* where x = 21845(c1+2) + 85 c0 */
729 /* proof: x - 2^19 f1 = 43690 - (1/3)c1 - (1/3)c0 + 2^19 [0,0.75] */
730 /* at least 43690 - (1/3)110184 - (1/3)255 > 0 */
731 /* at most 43690 + 2^19 0.75 < 2^19 */
732 f1 = (21845*(c1+2) + 85*c0) >> 19;
733
734 c1 -= (f1 * 3) << 3;
735 c0 += c1 << 8;
736 f0 = c0;
737
738 *f++ = modq_freeze(f0 + q - qshift);
739 *f++ = modq_freeze(f1 + q - qshift);
740 *f++ = modq_freeze(f2 + q - qshift);
741 *f++ = modq_freeze(f3 + q - qshift);
742 *f++ = modq_freeze(f4 + q - qshift);
743 }
744
745 c0 = *c++;
746 c1 = *c++;
747 c0 += c1 << 8;
748 *f++ = modq_freeze(c0 + q - qshift);
749}
750
751/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_mult.c */
752/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
753
754
755static void rq_mult(modq *h,const modq *f,const small *g)
756{
757 modq fg[p + p - 1];
758 modq result;
759 int i, j;
760
761 for (i = 0;i < p;++i) {
762 result = 0;
763 for (j = 0;j <= i;++j)
764 result = modq_plusproduct(result,f[j],g[i - j]);
765 fg[i] = result;
766 }
767 for (i = p;i < p + p - 1;++i) {
768 result = 0;
769 for (j = i - p + 1;j < p;++j)
770 result = modq_plusproduct(result,f[j],g[i - j]);
771 fg[i] = result;
772 }
773
774 for (i = p + p - 2;i >= p;--i) {
775 fg[i - p] = modq_sum(fg[i - p],fg[i]);
776 fg[i - p + 1] = modq_sum(fg[i - p + 1],fg[i]);
777 }
778
779 for (i = 0;i < p;++i)
780 h[i] = fg[i];
781}
782
783/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_recip3.c */
784/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
785
786
787/* caller must ensure that x-y does not overflow */
788static int smaller_mask_rq_recip3(int x,int y)
789{
790 return (x - y) >> 31;
791}
792
793static void vectormodq_product(modq *z,int len,const modq *x,const modq c)
794{
795 int i;
796 for (i = 0;i < len;++i) z[i] = modq_product(x[i],c);
797}
798
799static void vectormodq_minusproduct(modq *z,int len,const modq *x,const modq *y,const modq c)
800{
801 int i;
802 for (i = 0;i < len;++i) z[i] = modq_minusproduct(x[i],y[i],c);
803}
804
805static void vectormodq_shift(modq *z,int len)
806{
807 int i;
808 for (i = len - 1;i > 0;--i) z[i] = z[i - 1];
809 z[0] = 0;
810}
811
812/*
813r = (3s)^(-1) mod m, returning 0, if s is invertible mod m
814or returning -1 if s is not invertible mod m
815r,s are polys of degree <p
816m is x^p-x-1
817*/
818int rq_recip3(modq *r,const small *s)
819{
820 const int loops = 2*p + 1;
821 int loop;
822 modq f[p + 1];
823 modq g[p + 1];
824 modq u[2*p + 2];
825 modq v[2*p + 2];
826 modq c;
827 int i;
828 int d = p;
829 int e = p;
830 int swapmask;
831
832 for (i = 2;i < p;++i) f[i] = 0;
833 f[0] = -1;
834 f[1] = -1;
835 f[p] = 1;
836 /* generalization: can initialize f to any polynomial m */
837 /* requirements: m has degree exactly p, nonzero constant coefficient */
838
839 for (i = 0;i < p;++i) g[i] = 3 * s[i];
840 g[p] = 0;
841
842 for (i = 0;i <= loops;++i) u[i] = 0;
843
844 v[0] = 1;
845 for (i = 1;i <= loops;++i) v[i] = 0;
846
847 loop = 0;
848 for (;;) {
849 /* e == -1 or d + e + loop <= 2*p */
850
851 /* f has degree p: i.e., f[p]!=0 */
852 /* f[i]==0 for i < p-d */
853
854 /* g has degree <=p (so it fits in p+1 coefficients) */
855 /* g[i]==0 for i < p-e */
856
857 /* u has degree <=loop (so it fits in loop+1 coefficients) */
858 /* u[i]==0 for i < p-d */
859 /* if invertible: u[i]==0 for i < loop-p (so can look at just p+1 coefficients) */
860
861 /* v has degree <=loop (so it fits in loop+1 coefficients) */
862 /* v[i]==0 for i < p-e */
863 /* v[i]==0 for i < loop-p (so can look at just p+1 coefficients) */
864
865 if (loop >= loops) break;
866
867 c = modq_quotient(g[p],f[p]);
868
869 vectormodq_minusproduct(g,p + 1,g,f,c);
870 vectormodq_shift(g,p + 1);
871
872#ifdef SIMPLER
873 vectormodq_minusproduct(v,loops + 1,v,u,c);
874 vectormodq_shift(v,loops + 1);
875#else
876 if (loop < p) {
877 vectormodq_minusproduct(v,loop + 1,v,u,c);
878 vectormodq_shift(v,loop + 2);
879 } else {
880 vectormodq_minusproduct(v + loop - p,p + 1,v + loop - p,u + loop - p,c);
881 vectormodq_shift(v + loop - p,p + 2);
882 }
883#endif
884
885 e -= 1;
886
887 ++loop;
888
889 swapmask = smaller_mask_rq_recip3(e,d) & modq_nonzero_mask(g[p]);
890 swap(&e,&d,sizeof e,swapmask);
891 swap(f,g,(p + 1) * sizeof(modq),swapmask);
892
893#ifdef SIMPLER
894 swap(u,v,(loops + 1) * sizeof(modq),swapmask);
895#else
896 if (loop < p) {
897 swap(u,v,(loop + 1) * sizeof(modq),swapmask);
898 } else {
899 swap(u + loop - p,v + loop - p,(p + 1) * sizeof(modq),swapmask);
900 }
901#endif
902 }
903
904 c = modq_reciprocal(f[p]);
905 vectormodq_product(r,p,u + p,c);
906 return smaller_mask_rq_recip3(0,d);
907}
908
909/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_round3.c */
910/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
911
912
913static void rq_round3(modq *h,const modq *f)
914{
915 int i;
916
917 for (i = 0;i < p;++i)
918 h[i] = ((21846 * (f[i] + 2295) + 32768) >> 16) * 3 - 2295;
919}
920
921/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_rounded.c */
922/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
923
924
925static void rq_encoderounded(unsigned char *c,const modq *f)
926{
927 crypto_int32 f0, f1, f2;
928 int i;
929
930 for (i = 0;i < p/3;++i) {
931 f0 = *f++ + qshift;
932 f1 = *f++ + qshift;
933 f2 = *f++ + qshift;
934 f0 = (21846 * f0) >> 16;
935 f1 = (21846 * f1) >> 16;
936 f2 = (21846 * f2) >> 16;
937 /* now want f0 + f1*1536 + f2*1536^2 as a 32-bit integer */
938 f2 *= 3;
939 f1 += f2 << 9;
940 f1 *= 3;
941 f0 += f1 << 9;
942 *c++ = f0; f0 >>= 8;
943 *c++ = f0; f0 >>= 8;
944 *c++ = f0; f0 >>= 8;
945 *c++ = f0;
946 }
947 /* XXX: using p mod 3 = 2 */
948 f0 = *f++ + qshift;
949 f1 = *f++ + qshift;
950 f0 = (21846 * f0) >> 16;
951 f1 = (21846 * f1) >> 16;
952 f1 *= 3;
953 f0 += f1 << 9;
954 *c++ = f0; f0 >>= 8;
955 *c++ = f0; f0 >>= 8;
956 *c++ = f0;
957}
958
959static void rq_decoderounded(modq *f,const unsigned char *c)
960{
961 crypto_uint32 c0, c1, c2, c3;
962 crypto_uint32 f0, f1, f2;
963 int i;
964
965 for (i = 0;i < p/3;++i) {
966 c0 = *c++;
967 c1 = *c++;
968 c2 = *c++;
969 c3 = *c++;
970
971 /* f0 + f1*1536 + f2*1536^2 */
972 /* = c0 + c1*256 + c2*256^2 + c3*256^3 */
973 /* with each f between 0 and 1530 */
974
975 /* f2 = (64/9)c3 + (1/36)c2 + (1/9216)c1 + (1/2359296)c0 - [0,0.99675] */
976 /* claim: 2^21 f2 < x < 2^21(f2+1) */
977 /* where x = 14913081*c3 + 58254*c2 + 228*(c1+2) */
978 /* proof: x - 2^21 f2 = 456 - (8/9)c0 + (4/9)c1 - (2/9)c2 + (1/9)c3 + 2^21 [0,0.99675] */
979 /* at least 456 - (8/9)255 - (2/9)255 > 0 */
980 /* at most 456 + (4/9)255 + (1/9)255 + 2^21 0.99675 < 2^21 */
981 f2 = (14913081*c3 + 58254*c2 + 228*(c1+2)) >> 21;
982
983 c2 += c3 << 8;
984 c2 -= (f2 * 9) << 2;
985 /* f0 + f1*1536 */
986 /* = c0 + c1*256 + c2*256^2 */
987 /* c2 <= 35 = floor((1530+1530*1536)/256^2) */
988 /* f1 = (128/3)c2 + (1/6)c1 + (1/1536)c0 - (1/1536)f0 */
989 /* claim: 2^21 f1 < x < 2^21(f1+1) */
990 /* where x = 89478485*c2 + 349525*c1 + 1365*(c0+1) */
991 /* proof: x - 2^21 f1 = 1365 - (1/3)c2 - (1/3)c1 - (1/3)c0 + (4096/3)f0 */
992 /* at least 1365 - (1/3)35 - (1/3)255 - (1/3)255 > 0 */
993 /* at most 1365 + (4096/3)1530 < 2^21 */
994 f1 = (89478485*c2 + 349525*c1 + 1365*(c0+1)) >> 21;
995
996 c1 += c2 << 8;
997 c1 -= (f1 * 3) << 1;
998
999 c0 += c1 << 8;
1000 f0 = c0;
1001
1002 *f++ = modq_freeze(f0 * 3 + q - qshift);
1003 *f++ = modq_freeze(f1 * 3 + q - qshift);
1004 *f++ = modq_freeze(f2 * 3 + q - qshift);
1005 }
1006
1007 c0 = *c++;
1008 c1 = *c++;
1009 c2 = *c++;
1010
1011 f1 = (89478485*c2 + 349525*c1 + 1365*(c0+1)) >> 21;
1012
1013 c1 += c2 << 8;
1014 c1 -= (f1 * 3) << 1;
1015
1016 c0 += c1 << 8;
1017 f0 = c0;
1018
1019 *f++ = modq_freeze(f0 * 3 + q - qshift);
1020 *f++ = modq_freeze(f1 * 3 + q - qshift);
1021}
1022
1023/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.c */
1024/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
1025
1026
1027/* XXX: these functions rely on p mod 4 = 1 */
1028
1029/* all coefficients in -1, 0, 1 */
1030static void small_encode(unsigned char *c,const small *f)
1031{
1032 small c0;
1033 int i;
1034
1035 for (i = 0;i < p/4;++i) {
1036 c0 = *f++ + 1;
1037 c0 += (*f++ + 1) << 2;
1038 c0 += (*f++ + 1) << 4;
1039 c0 += (*f++ + 1) << 6;
1040 *c++ = c0;
1041 }
1042 c0 = *f++ + 1;
1043 *c++ = c0;
1044}
1045
1046static void small_decode(small *f,const unsigned char *c)
1047{
1048 unsigned char c0;
1049 int i;
1050
1051 for (i = 0;i < p/4;++i) {
1052 c0 = *c++;
1053 *f++ = ((small) (c0 & 3)) - 1; c0 >>= 2;
1054 *f++ = ((small) (c0 & 3)) - 1; c0 >>= 2;
1055 *f++ = ((small) (c0 & 3)) - 1; c0 >>= 2;
1056 *f++ = ((small) (c0 & 3)) - 1;
1057 }
1058 c0 = *c++;
1059 *f++ = ((small) (c0 & 3)) - 1;
1060}
1061
1062/* from libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.c */
1063/* See https://ntruprime.cr.yp.to/software.html for detailed documentation. */
1064
1065
1066static void swap(void *x,void *y,int bytes,int mask)
1067{
1068 int i;
1069 char xi, yi, c, t;
1070
1071 c = mask;
1072
1073 for (i = 0;i < bytes;++i) {
1074 xi = i[(char *) x];
1075 yi = i[(char *) y];
1076 t = c & (xi ^ yi);
1077 xi ^= t;
1078 yi ^= t;
1079 i[(char *) x] = xi;
1080 i[(char *) y] = yi;
1081 }
1082}
1083
diff --git a/sntrup4591761.sh b/sntrup4591761.sh
new file mode 100644
index 000000000..e684c3329
--- /dev/null
+++ b/sntrup4591761.sh
@@ -0,0 +1,57 @@
1#!/bin/sh
2# $OpenBSD: sntrup4591761.sh,v 1.3 2019/01/30 19:51:15 markus Exp $
3# Placed in the Public Domain.
4#
5AUTHOR="libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/implementors"
6FILES="
7 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.h
8 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/int32_sort.c
9 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.h
10 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/mod3.h
11 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/modq.h
12 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/params.h
13 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3.h
14 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.h
15 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.h
16 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/dec.c
17 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/enc.c
18 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/keypair.c
19 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_mult.c
20 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/r3_recip.c
21 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomsmall.c
22 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/randomweightw.c
23 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq.c
24 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_mult.c
25 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_recip3.c
26 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_round3.c
27 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/rq_rounded.c
28 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/small.c
29 libpqcrypto-20180314/crypto_kem/sntrup4591761/ref/swap.c
30"
31###
32
33set -e
34cd $1
35echo -n '/* $'
36echo 'OpenBSD: $ */'
37echo
38echo '/*'
39echo ' * Public Domain, Authors:'
40sed -e '/Alphabetical order:/d' -e 's/^/ * - /' < $AUTHOR
41echo ' */'
42echo
43echo '#include <string.h>'
44echo '#include "crypto_api.h"'
45echo
46for i in $FILES; do
47 echo "/* from $i */"
48 b=$(basename $i .c)
49 grep \
50 -v '#include' $i | \
51 grep -v "extern crypto_int32 small_random32" |
52 sed -e "s/crypto_kem_/crypto_kem_sntrup4591761_/g" \
53 -e "s/smaller_mask/smaller_mask_${b}/g" \
54 -e "s/^extern void /static void /" \
55 -e "s/^void /static void /"
56 echo
57done
diff --git a/ssh-add.0 b/ssh-add.0
index d60ae715e..c614a2fe5 100644
--- a/ssh-add.0
+++ b/ssh-add.0
@@ -4,9 +4,10 @@ NAME
4 ssh-add M-bM-^@M-^S adds private key identities to the authentication agent 4 ssh-add M-bM-^@M-^S adds private key identities to the authentication agent
5 5
6SYNOPSIS 6SYNOPSIS
7 ssh-add [-cDdkLlqXx] [-E fingerprint_hash] [-t life] [file ...] 7 ssh-add [-cDdkLlqvXx] [-E fingerprint_hash] [-t life] [file ...]
8 ssh-add -s pkcs11 8 ssh-add -s pkcs11
9 ssh-add -e pkcs11 9 ssh-add -e pkcs11
10 ssh-add -T pubkey ...
10 11
11DESCRIPTION 12DESCRIPTION
12 ssh-add adds private key identities to the authentication agent, 13 ssh-add adds private key identities to the authentication agent,
@@ -65,11 +66,20 @@ DESCRIPTION
65 -s pkcs11 66 -s pkcs11
66 Add keys provided by the PKCS#11 shared library pkcs11. 67 Add keys provided by the PKCS#11 shared library pkcs11.
67 68
69 -T pubkey ...
70 Tests whether the private keys that correspond to the specified
71 pubkey files are usable by performing sign and verify operations
72 on each.
73
68 -t life 74 -t life
69 Set a maximum lifetime when adding identities to an agent. The 75 Set a maximum lifetime when adding identities to an agent. The
70 lifetime may be specified in seconds or in a time format 76 lifetime may be specified in seconds or in a time format
71 specified in sshd_config(5). 77 specified in sshd_config(5).
72 78
79 -v Verbose mode. Causes ssh-add to print debugging messages about
80 its progress. This is helpful in debugging problems. Multiple
81 -v options increase the verbosity. The maximum is 3.
82
73 -X Unlock the agent. 83 -X Unlock the agent.
74 84
75 -x Lock the agent with a password. 85 -x Lock the agent with a password.
@@ -120,4 +130,4 @@ AUTHORS
120 created OpenSSH. Markus Friedl contributed the support for SSH protocol 130 created OpenSSH. Markus Friedl contributed the support for SSH protocol
121 versions 1.5 and 2.0. 131 versions 1.5 and 2.0.
122 132
123OpenBSD 6.4 August 29, 2017 OpenBSD 6.4 133OpenBSD 6.5 January 21, 2019 OpenBSD 6.5
diff --git a/ssh-add.1 b/ssh-add.1
index d5da9279c..d4e1c603b 100644
--- a/ssh-add.1
+++ b/ssh-add.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-add.1,v 1.66 2017/08/29 13:05:58 jmc Exp $ 1.\" $OpenBSD: ssh-add.1,v 1.69 2019/01/21 12:53:35 djm Exp $
2.\" 2.\"
3.\" Author: Tatu Ylonen <ylo@cs.hut.fi> 3.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -35,7 +35,7 @@
35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37.\" 37.\"
38.Dd $Mdocdate: August 29 2017 $ 38.Dd $Mdocdate: January 21 2019 $
39.Dt SSH-ADD 1 39.Dt SSH-ADD 1
40.Os 40.Os
41.Sh NAME 41.Sh NAME
@@ -43,7 +43,7 @@
43.Nd adds private key identities to the authentication agent 43.Nd adds private key identities to the authentication agent
44.Sh SYNOPSIS 44.Sh SYNOPSIS
45.Nm ssh-add 45.Nm ssh-add
46.Op Fl cDdkLlqXx 46.Op Fl cDdkLlqvXx
47.Op Fl E Ar fingerprint_hash 47.Op Fl E Ar fingerprint_hash
48.Op Fl t Ar life 48.Op Fl t Ar life
49.Op Ar 49.Op Ar
@@ -51,6 +51,9 @@
51.Fl s Ar pkcs11 51.Fl s Ar pkcs11
52.Nm ssh-add 52.Nm ssh-add
53.Fl e Ar pkcs11 53.Fl e Ar pkcs11
54.Nm ssh-add
55.Fl T
56.Ar pubkey ...
54.Sh DESCRIPTION 57.Sh DESCRIPTION
55.Nm 58.Nm
56adds private key identities to the authentication agent, 59adds private key identities to the authentication agent,
@@ -131,11 +134,25 @@ Be quiet after a successful operation.
131.It Fl s Ar pkcs11 134.It Fl s Ar pkcs11
132Add keys provided by the PKCS#11 shared library 135Add keys provided by the PKCS#11 shared library
133.Ar pkcs11 . 136.Ar pkcs11 .
137.It Fl T Ar pubkey ...
138Tests whether the private keys that correspond to the specified
139.Ar pubkey
140files are usable by performing sign and verify operations on each.
134.It Fl t Ar life 141.It Fl t Ar life
135Set a maximum lifetime when adding identities to an agent. 142Set a maximum lifetime when adding identities to an agent.
136The lifetime may be specified in seconds or in a time format 143The lifetime may be specified in seconds or in a time format
137specified in 144specified in
138.Xr sshd_config 5 . 145.Xr sshd_config 5 .
146.It Fl v
147Verbose mode.
148Causes
149.Nm
150to print debugging messages about its progress.
151This is helpful in debugging problems.
152Multiple
153.Fl v
154options increase the verbosity.
155The maximum is 3.
139.It Fl X 156.It Fl X
140Unlock the agent. 157Unlock the agent.
141.It Fl x 158.It Fl x
diff --git a/ssh-add.c b/ssh-add.c
index 627c02983..ac9c808dd 100644
--- a/ssh-add.c
+++ b/ssh-add.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-add.c,v 1.136 2018/09/19 02:03:02 djm Exp $ */ 1/* $OpenBSD: ssh-add.c,v 1.138 2019/01/21 12:53:35 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -418,6 +418,40 @@ update_card(int agent_fd, int add, const char *id, int qflag)
418} 418}
419 419
420static int 420static int
421test_key(int agent_fd, const char *filename)
422{
423 struct sshkey *key = NULL;
424 u_char *sig = NULL;
425 size_t slen = 0;
426 int r, ret = -1;
427 char data[1024];
428
429 if ((r = sshkey_load_public(filename, &key, NULL)) != 0) {
430 error("Couldn't read public key %s: %s", filename, ssh_err(r));
431 return -1;
432 }
433 arc4random_buf(data, sizeof(data));
434 if ((r = ssh_agent_sign(agent_fd, key, &sig, &slen, data, sizeof(data),
435 NULL, 0)) != 0) {
436 error("Agent signature failed for %s: %s",
437 filename, ssh_err(r));
438 goto done;
439 }
440 if ((r = sshkey_verify(key, sig, slen, data, sizeof(data),
441 NULL, 0)) != 0) {
442 error("Signature verification failed for %s: %s",
443 filename, ssh_err(r));
444 goto done;
445 }
446 /* success */
447 ret = 0;
448 done:
449 free(sig);
450 sshkey_free(key);
451 return ret;
452}
453
454static int
421list_identities(int agent_fd, int do_fp) 455list_identities(int agent_fd, int do_fp)
422{ 456{
423 char *fp; 457 char *fp;
@@ -524,7 +558,9 @@ usage(void)
524 fprintf(stderr, " -X Unlock agent.\n"); 558 fprintf(stderr, " -X Unlock agent.\n");
525 fprintf(stderr, " -s pkcs11 Add keys from PKCS#11 provider.\n"); 559 fprintf(stderr, " -s pkcs11 Add keys from PKCS#11 provider.\n");
526 fprintf(stderr, " -e pkcs11 Remove keys provided by PKCS#11 provider.\n"); 560 fprintf(stderr, " -e pkcs11 Remove keys provided by PKCS#11 provider.\n");
561 fprintf(stderr, " -T pubkey Test if ssh-agent can access matching private key.\n");
527 fprintf(stderr, " -q Be quiet after a successful operation.\n"); 562 fprintf(stderr, " -q Be quiet after a successful operation.\n");
563 fprintf(stderr, " -v Be more verbose.\n");
528} 564}
529 565
530int 566int
@@ -535,7 +571,9 @@ main(int argc, char **argv)
535 int agent_fd; 571 int agent_fd;
536 char *pkcs11provider = NULL; 572 char *pkcs11provider = NULL;
537 int r, i, ch, deleting = 0, ret = 0, key_only = 0; 573 int r, i, ch, deleting = 0, ret = 0, key_only = 0;
538 int xflag = 0, lflag = 0, Dflag = 0, qflag = 0; 574 int xflag = 0, lflag = 0, Dflag = 0, qflag = 0, Tflag = 0;
575 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
576 LogLevel log_level = SYSLOG_LEVEL_INFO;
539 577
540 ssh_malloc_init(); /* must be called before any mallocs */ 578 ssh_malloc_init(); /* must be called before any mallocs */
541 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ 579 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
@@ -544,9 +582,7 @@ main(int argc, char **argv)
544 __progname = ssh_get_progname(argv[0]); 582 __progname = ssh_get_progname(argv[0]);
545 seed_rng(); 583 seed_rng();
546 584
547#ifdef WITH_OPENSSL 585 log_init(__progname, log_level, log_facility, 1);
548 OpenSSL_add_all_algorithms();
549#endif
550 586
551 setvbuf(stdout, NULL, _IOLBF, 0); 587 setvbuf(stdout, NULL, _IOLBF, 0);
552 588
@@ -563,8 +599,14 @@ main(int argc, char **argv)
563 exit(2); 599 exit(2);
564 } 600 }
565 601
566 while ((ch = getopt(argc, argv, "klLcdDxXE:e:M:m:qs:t:")) != -1) { 602 while ((ch = getopt(argc, argv, "vklLcdDTxXE:e:M:m:qs:t:")) != -1) {
567 switch (ch) { 603 switch (ch) {
604 case 'v':
605 if (log_level == SYSLOG_LEVEL_INFO)
606 log_level = SYSLOG_LEVEL_DEBUG1;
607 else if (log_level < SYSLOG_LEVEL_DEBUG3)
608 log_level++;
609 break;
568 case 'E': 610 case 'E':
569 fingerprint_hash = ssh_digest_alg_by_name(optarg); 611 fingerprint_hash = ssh_digest_alg_by_name(optarg);
570 if (fingerprint_hash == -1) 612 if (fingerprint_hash == -1)
@@ -627,12 +669,16 @@ main(int argc, char **argv)
627 case 'q': 669 case 'q':
628 qflag = 1; 670 qflag = 1;
629 break; 671 break;
672 case 'T':
673 Tflag = 1;
674 break;
630 default: 675 default:
631 usage(); 676 usage();
632 ret = 1; 677 ret = 1;
633 goto done; 678 goto done;
634 } 679 }
635 } 680 }
681 log_init(__progname, log_level, log_facility, 1);
636 682
637 if ((xflag != 0) + (lflag != 0) + (Dflag != 0) > 1) 683 if ((xflag != 0) + (lflag != 0) + (Dflag != 0) > 1)
638 fatal("Invalid combination of actions"); 684 fatal("Invalid combination of actions");
@@ -652,6 +698,14 @@ main(int argc, char **argv)
652 698
653 argc -= optind; 699 argc -= optind;
654 argv += optind; 700 argv += optind;
701 if (Tflag) {
702 if (argc <= 0)
703 fatal("no keys to test");
704 for (r = i = 0; i < argc; i++)
705 r |= test_key(agent_fd, argv[i]);
706 ret = r == 0 ? 0 : 1;
707 goto done;
708 }
655 if (pkcs11provider != NULL) { 709 if (pkcs11provider != NULL) {
656 if (update_card(agent_fd, !deleting, pkcs11provider, 710 if (update_card(agent_fd, !deleting, pkcs11provider,
657 qflag) == -1) 711 qflag) == -1)
diff --git a/ssh-agent.0 b/ssh-agent.0
index f4575d01b..9f140afb5 100644
--- a/ssh-agent.0
+++ b/ssh-agent.0
@@ -117,4 +117,4 @@ AUTHORS
117 created OpenSSH. Markus Friedl contributed the support for SSH protocol 117 created OpenSSH. Markus Friedl contributed the support for SSH protocol
118 versions 1.5 and 2.0. 118 versions 1.5 and 2.0.
119 119
120OpenBSD 6.4 November 30, 2016 OpenBSD 6.4 120OpenBSD 6.5 November 30, 2016 OpenBSD 6.5
diff --git a/ssh-agent.c b/ssh-agent.c
index d8a8260f9..d06ecfd98 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-agent.c,v 1.231 2018/05/11 03:38:51 djm Exp $ */ 1/* $OpenBSD: ssh-agent.c,v 1.233 2019/01/22 22:58:50 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -96,6 +96,8 @@
96 96
97/* Maximum accepted message length */ 97/* Maximum accepted message length */
98#define AGENT_MAX_LEN (256*1024) 98#define AGENT_MAX_LEN (256*1024)
99/* Maximum bytes to read from client socket */
100#define AGENT_RBUF_LEN (4096)
99 101
100typedef enum { 102typedef enum {
101 AUTH_UNUSED, 103 AUTH_UNUSED,
@@ -839,7 +841,7 @@ handle_socket_read(u_int socknum)
839static int 841static int
840handle_conn_read(u_int socknum) 842handle_conn_read(u_int socknum)
841{ 843{
842 char buf[1024]; 844 char buf[AGENT_RBUF_LEN];
843 ssize_t len; 845 ssize_t len;
844 int r; 846 int r;
845 847
@@ -946,6 +948,7 @@ prepare_poll(struct pollfd **pfdp, size_t *npfdp, int *timeoutp, u_int maxfds)
946 struct pollfd *pfd = *pfdp; 948 struct pollfd *pfd = *pfdp;
947 size_t i, j, npfd = 0; 949 size_t i, j, npfd = 0;
948 time_t deadline; 950 time_t deadline;
951 int r;
949 952
950 /* Count active sockets */ 953 /* Count active sockets */
951 for (i = 0; i < sockets_alloc; i++) { 954 for (i = 0; i < sockets_alloc; i++) {
@@ -983,8 +986,19 @@ prepare_poll(struct pollfd **pfdp, size_t *npfdp, int *timeoutp, u_int maxfds)
983 case AUTH_CONNECTION: 986 case AUTH_CONNECTION:
984 pfd[j].fd = sockets[i].fd; 987 pfd[j].fd = sockets[i].fd;
985 pfd[j].revents = 0; 988 pfd[j].revents = 0;
986 /* XXX backoff when input buffer full */ 989 /*
987 pfd[j].events = POLLIN; 990 * Only prepare to read if we can handle a full-size
991 * input read buffer and enqueue a max size reply..
992 */
993 if ((r = sshbuf_check_reserve(sockets[i].input,
994 AGENT_RBUF_LEN)) == 0 &&
995 (r = sshbuf_check_reserve(sockets[i].output,
996 AGENT_MAX_LEN)) == 0)
997 pfd[j].events = POLLIN;
998 else if (r != SSH_ERR_NO_BUFFER_SPACE) {
999 fatal("%s: buffer error: %s",
1000 __func__, ssh_err(r));
1001 }
988 if (sshbuf_len(sockets[i].output) > 0) 1002 if (sshbuf_len(sockets[i].output) > 0)
989 pfd[j].events |= POLLOUT; 1003 pfd[j].events |= POLLOUT;
990 j++; 1004 j++;
@@ -1095,10 +1109,6 @@ main(int ac, char **av)
1095 if (getrlimit(RLIMIT_NOFILE, &rlim) == -1) 1109 if (getrlimit(RLIMIT_NOFILE, &rlim) == -1)
1096 fatal("%s: getrlimit: %s", __progname, strerror(errno)); 1110 fatal("%s: getrlimit: %s", __progname, strerror(errno));
1097 1111
1098#ifdef WITH_OPENSSL
1099 OpenSSL_add_all_algorithms();
1100#endif
1101
1102 __progname = ssh_get_progname(av[0]); 1112 __progname = ssh_get_progname(av[0]);
1103 seed_rng(); 1113 seed_rng();
1104 1114
@@ -1199,7 +1209,7 @@ main(int ac, char **av)
1199 */ 1209 */
1200#define SSH_AGENT_MIN_FDS (3+1+1+1+4) 1210#define SSH_AGENT_MIN_FDS (3+1+1+1+4)
1201 if (rlim.rlim_cur < SSH_AGENT_MIN_FDS) 1211 if (rlim.rlim_cur < SSH_AGENT_MIN_FDS)
1202 fatal("%s: file descriptior rlimit %lld too low (minimum %u)", 1212 fatal("%s: file descriptor rlimit %lld too low (minimum %u)",
1203 __progname, (long long)rlim.rlim_cur, SSH_AGENT_MIN_FDS); 1213 __progname, (long long)rlim.rlim_cur, SSH_AGENT_MIN_FDS);
1204 maxfds = rlim.rlim_cur - SSH_AGENT_MIN_FDS; 1214 maxfds = rlim.rlim_cur - SSH_AGENT_MIN_FDS;
1205 1215
diff --git a/ssh-ecdsa.c b/ssh-ecdsa.c
index 2f5531752..599c7199d 100644
--- a/ssh-ecdsa.c
+++ b/ssh-ecdsa.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-ecdsa.c,v 1.14 2018/02/07 02:06:51 jsing Exp $ */ 1/* $OpenBSD: ssh-ecdsa.c,v 1.16 2019/01/21 09:54:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -151,15 +151,13 @@ ssh_ecdsa_verify(const struct sshkey *key,
151 } 151 }
152 152
153 /* parse signature */ 153 /* parse signature */
154 if ((sig = ECDSA_SIG_new()) == NULL || 154 if (sshbuf_get_bignum2(sigbuf, &sig_r) != 0 ||
155 (sig_r = BN_new()) == NULL || 155 sshbuf_get_bignum2(sigbuf, &sig_s) != 0) {
156 (sig_s = BN_new()) == NULL) { 156 ret = SSH_ERR_INVALID_FORMAT;
157 ret = SSH_ERR_ALLOC_FAIL;
158 goto out; 157 goto out;
159 } 158 }
160 if (sshbuf_get_bignum2(sigbuf, sig_r) != 0 || 159 if ((sig = ECDSA_SIG_new()) == NULL) {
161 sshbuf_get_bignum2(sigbuf, sig_s) != 0) { 160 ret = SSH_ERR_ALLOC_FAIL;
162 ret = SSH_ERR_INVALID_FORMAT;
163 goto out; 161 goto out;
164 } 162 }
165 if (!ECDSA_SIG_set0(sig, sig_r, sig_s)) { 163 if (!ECDSA_SIG_set0(sig, sig_r, sig_s)) {
diff --git a/ssh-keygen.0 b/ssh-keygen.0
index 906a338c4..1fe19f0b6 100644
--- a/ssh-keygen.0
+++ b/ssh-keygen.0
@@ -6,7 +6,9 @@ NAME
6SYNOPSIS 6SYNOPSIS
7 ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa] 7 ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa]
8 [-N new_passphrase] [-C comment] [-f output_keyfile] 8 [-N new_passphrase] [-C comment] [-f output_keyfile]
9 [-m format]
9 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile] 10 ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]
11 [-m format]
10 ssh-keygen -i [-m key_format] [-f input_keyfile] 12 ssh-keygen -i [-m key_format] [-f input_keyfile]
11 ssh-keygen -e [-m key_format] [-f input_keyfile] 13 ssh-keygen -e [-m key_format] [-f input_keyfile]
12 ssh-keygen -y [-f input_keyfile] 14 ssh-keygen -y [-f input_keyfile]
@@ -68,11 +70,17 @@ DESCRIPTION
68 or forgotten, a new key must be generated and the corresponding public 70 or forgotten, a new key must be generated and the corresponding public
69 key copied to other machines. 71 key copied to other machines.
70 72
71 For keys stored in the newer OpenSSH format, there is also a comment 73 ssh-keygen will by default write keys in an OpenSSH-specific format.
72 field in the key file that is only for convenience to the user to help 74 This format is preferred as it offers better protection for keys at rest
73 identify the key. The comment can tell what the key is for, or whatever 75 as well as allowing storage of key comments within the private key file
74 is useful. The comment is initialized to M-bM-^@M-^\user@hostM-bM-^@M-^] when the key is 76 itself. The key comment may be useful to help identify the key. The
75 created, but can be changed using the -c option. 77 comment is initialized to M-bM-^@M-^\user@hostM-bM-^@M-^] when the key is created, but can be
78 changed using the -c option.
79
80 It is still possible for ssh-keygen to write the previously-used PEM
81 format private keys using the -m flag. This may be used when generating
82 new keys, and existing new-format keys may be converted using this option
83 in conjunction with the -p (change passphrase) flag.
76 84
77 After a key is generated, instructions below detail where the keys should 85 After a key is generated, instructions below detail where the keys should
78 be placed to be activated. 86 be placed to be activated.
@@ -119,10 +127,10 @@ DESCRIPTION
119 new comment. 127 new comment.
120 128
121 -D pkcs11 129 -D pkcs11
122 Download the RSA public keys provided by the PKCS#11 shared 130 Download the public keys provided by the PKCS#11 shared library
123 library pkcs11. When used in combination with -s, this option 131 pkcs11. When used in combination with -s, this option indicates
124 indicates that a CA key resides in a PKCS#11 token (see the 132 that a CA key resides in a PKCS#11 token (see the CERTIFICATES
125 CERTIFICATES section for details). 133 section for details).
126 134
127 -E fingerprint_hash 135 -E fingerprint_hash
128 Specifies the hash algorithm used when displaying key 136 Specifies the hash algorithm used when displaying key
@@ -130,16 +138,17 @@ DESCRIPTION
130 default is M-bM-^@M-^\sha256M-bM-^@M-^]. 138 default is M-bM-^@M-^\sha256M-bM-^@M-^].
131 139
132 -e This option will read a private or public OpenSSH key file and 140 -e This option will read a private or public OpenSSH key file and
133 print to stdout the key in one of the formats specified by the -m 141 print to stdout a public key in one of the formats specified by
134 option. The default export format is M-bM-^@M-^\RFC4716M-bM-^@M-^]. This option 142 the -m option. The default export format is M-bM-^@M-^\RFC4716M-bM-^@M-^]. This
135 allows exporting OpenSSH keys for use by other programs, 143 option allows exporting OpenSSH keys for use by other programs,
136 including several commercial SSH implementations. 144 including several commercial SSH implementations.
137 145
138 -F hostname 146 -F hostname | [hostname]:port
139 Search for the specified hostname in a known_hosts file, listing 147 Search for the specified hostname (with optional port number) in
140 any occurrences found. This option is useful to find hashed host 148 a known_hosts file, listing any occurrences found. This option
141 names or addresses and may also be used in conjunction with the 149 is useful to find hashed host names or addresses and may also be
142 -H option to print found keys in a hashed format. 150 used in conjunction with the -H option to print found keys in a
151 hashed format.
143 152
144 -f filename 153 -f filename
145 Specifies the filename of the key file. 154 Specifies the filename of the key file.
@@ -206,13 +215,16 @@ DESCRIPTION
206 generating candidate moduli for DH-GEX. 215 generating candidate moduli for DH-GEX.
207 216
208 -m key_format 217 -m key_format
209 Specify a key format for the -i (import) or -e (export) 218 Specify a key format for key generation, the -i (import), -e
210 conversion options. The supported key formats are: M-bM-^@M-^\RFC4716M-bM-^@M-^] 219 (export) conversion options, and the -p change passphrase
211 (RFC 4716/SSH2 public or private key), M-bM-^@M-^\PKCS8M-bM-^@M-^] (PEM PKCS8 public 220 operation. The latter may be used to convert between OpenSSH
212 key) or M-bM-^@M-^\PEMM-bM-^@M-^] (PEM public key). The default conversion format is 221 private key and PEM private key formats. The supported key
213 M-bM-^@M-^\RFC4716M-bM-^@M-^]. Setting a format of M-bM-^@M-^\PEMM-bM-^@M-^] when generating or updating 222 formats are: M-bM-^@M-^\RFC4716M-bM-^@M-^] (RFC 4716/SSH2 public or private key),
214 a supported private key type will cause the key to be stored in 223 M-bM-^@M-^\PKCS8M-bM-^@M-^] (PEM PKCS8 public key) or M-bM-^@M-^\PEMM-bM-^@M-^] (PEM public key). The
215 the legacy PEM private key format. 224 default conversion format is M-bM-^@M-^\RFC4716M-bM-^@M-^]. Setting a format of
225 M-bM-^@M-^\PEMM-bM-^@M-^] when generating or updating a supported private key type
226 will cause the key to be stored in the legacy PEM private key
227 format.
216 228
217 -N new_passphrase 229 -N new_passphrase
218 Provides the new passphrase. 230 Provides the new passphrase.
@@ -301,10 +313,10 @@ DESCRIPTION
301 313
302 -q Silence ssh-keygen. 314 -q Silence ssh-keygen.
303 315
304 -R hostname 316 -R hostname | [hostname]:port
305 Removes all keys belonging to hostname from a known_hosts file. 317 Removes all keys belonging to the specified hostname (with
306 This option is useful to delete hashed hosts (see the -H option 318 optional port number) from a known_hosts file. This option is
307 above). 319 useful to delete hashed hosts (see the -H option above).
308 320
309 -r hostname 321 -r hostname
310 Print the SSHFP fingerprint resource record named hostname for 322 Print the SSHFP fingerprint resource record named hostname for
@@ -378,8 +390,10 @@ DESCRIPTION
378 390
379 -z serial_number 391 -z serial_number
380 Specifies a serial number to be embedded in the certificate to 392 Specifies a serial number to be embedded in the certificate to
381 distinguish this certificate from others from the same CA. The 393 distinguish this certificate from others from the same CA. If
382 default serial number is zero. 394 the serial_number is prefixed with a M-bM-^@M-^X+M-bM-^@M-^Y character, then the
395 serial number will be incremented for each certificate signed on
396 a single command-line. The default serial number is zero.
383 397
384 When generating a KRL, the -z flag is used to specify a KRL 398 When generating a KRL, the -z flag is used to specify a KRL
385 version number. 399 version number.
@@ -582,4 +596,4 @@ AUTHORS
582 created OpenSSH. Markus Friedl contributed the support for SSH protocol 596 created OpenSSH. Markus Friedl contributed the support for SSH protocol
583 versions 1.5 and 2.0. 597 versions 1.5 and 2.0.
584 598
585OpenBSD 6.4 September 12, 2018 OpenBSD 6.4 599OpenBSD 6.5 March 5, 2019 OpenBSD 6.5
diff --git a/ssh-keygen.1 b/ssh-keygen.1
index bfa2eb5f3..124456577 100644
--- a/ssh-keygen.1
+++ b/ssh-keygen.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-keygen.1,v 1.150 2018/09/12 06:18:59 djm Exp $ 1.\" $OpenBSD: ssh-keygen.1,v 1.157 2019/03/05 16:17:12 naddy Exp $
2.\" 2.\"
3.\" Author: Tatu Ylonen <ylo@cs.hut.fi> 3.\" Author: Tatu Ylonen <ylo@cs.hut.fi>
4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4.\" Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -35,7 +35,7 @@
35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 35.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 36.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37.\" 37.\"
38.Dd $Mdocdate: September 12 2018 $ 38.Dd $Mdocdate: March 5 2019 $
39.Dt SSH-KEYGEN 1 39.Dt SSH-KEYGEN 1
40.Os 40.Os
41.Sh NAME 41.Sh NAME
@@ -50,11 +50,13 @@
50.Op Fl N Ar new_passphrase 50.Op Fl N Ar new_passphrase
51.Op Fl C Ar comment 51.Op Fl C Ar comment
52.Op Fl f Ar output_keyfile 52.Op Fl f Ar output_keyfile
53.Op Fl m Ar format
53.Nm ssh-keygen 54.Nm ssh-keygen
54.Fl p 55.Fl p
55.Op Fl P Ar old_passphrase 56.Op Fl P Ar old_passphrase
56.Op Fl N Ar new_passphrase 57.Op Fl N Ar new_passphrase
57.Op Fl f Ar keyfile 58.Op Fl f Ar keyfile
59.Op Fl m Ar format
58.Nm ssh-keygen 60.Nm ssh-keygen
59.Fl i 61.Fl i
60.Op Fl m Ar key_format 62.Op Fl m Ar key_format
@@ -205,16 +207,28 @@ There is no way to recover a lost passphrase.
205If the passphrase is lost or forgotten, a new key must be generated 207If the passphrase is lost or forgotten, a new key must be generated
206and the corresponding public key copied to other machines. 208and the corresponding public key copied to other machines.
207.Pp 209.Pp
208For keys stored in the newer OpenSSH format, 210.Nm
209there is also a comment field in the key file that is only for 211will by default write keys in an OpenSSH-specific format.
210convenience to the user to help identify the key. 212This format is preferred as it offers better protection for
211The comment can tell what the key is for, or whatever is useful. 213keys at rest as well as allowing storage of key comments within
214the private key file itself.
215The key comment may be useful to help identify the key.
212The comment is initialized to 216The comment is initialized to
213.Dq user@host 217.Dq user@host
214when the key is created, but can be changed using the 218when the key is created, but can be changed using the
215.Fl c 219.Fl c
216option. 220option.
217.Pp 221.Pp
222It is still possible for
223.Nm
224to write the previously-used PEM format private keys using the
225.Fl m
226flag.
227This may be used when generating new keys, and existing new-format
228keys may be converted using this option in conjunction with the
229.Fl p
230(change passphrase) flag.
231.Pp
218After a key is generated, instructions below detail where the keys 232After a key is generated, instructions below detail where the keys
219should be placed to be activated. 233should be placed to be activated.
220.Pp 234.Pp
@@ -265,7 +279,7 @@ Requests changing the comment in the private and public key files.
265The program will prompt for the file containing the private keys, for 279The program will prompt for the file containing the private keys, for
266the passphrase if the key has one, and for the new comment. 280the passphrase if the key has one, and for the new comment.
267.It Fl D Ar pkcs11 281.It Fl D Ar pkcs11
268Download the RSA public keys provided by the PKCS#11 shared library 282Download the public keys provided by the PKCS#11 shared library
269.Ar pkcs11 . 283.Ar pkcs11 .
270When used in combination with 284When used in combination with
271.Fl s , 285.Fl s ,
@@ -282,16 +296,17 @@ The default is
282.Dq sha256 . 296.Dq sha256 .
283.It Fl e 297.It Fl e
284This option will read a private or public OpenSSH key file and 298This option will read a private or public OpenSSH key file and
285print to stdout the key in one of the formats specified by the 299print to stdout a public key in one of the formats specified by the
286.Fl m 300.Fl m
287option. 301option.
288The default export format is 302The default export format is
289.Dq RFC4716 . 303.Dq RFC4716 .
290This option allows exporting OpenSSH keys for use by other programs, including 304This option allows exporting OpenSSH keys for use by other programs, including
291several commercial SSH implementations. 305several commercial SSH implementations.
292.It Fl F Ar hostname 306.It Fl F Ar hostname | [hostname]:port
293Search for the specified 307Search for the specified
294.Ar hostname 308.Ar hostname
309(with optional port number)
295in a 310in a
296.Pa known_hosts 311.Pa known_hosts
297file, listing any occurrences found. 312file, listing any occurrences found.
@@ -391,11 +406,15 @@ fingerprint.
391Specify the amount of memory to use (in megabytes) when generating 406Specify the amount of memory to use (in megabytes) when generating
392candidate moduli for DH-GEX. 407candidate moduli for DH-GEX.
393.It Fl m Ar key_format 408.It Fl m Ar key_format
394Specify a key format for the 409Specify a key format for key generation, the
395.Fl i 410.Fl i
396(import) or 411(import),
397.Fl e 412.Fl e
398(export) conversion options. 413(export) conversion options, and the
414.Fl p
415change passphrase operation.
416The latter may be used to convert between OpenSSH private key and PEM
417private key formats.
399The supported key formats are: 418The supported key formats are:
400.Dq RFC4716 419.Dq RFC4716
401(RFC 4716/SSH2 public or private key), 420(RFC 4716/SSH2 public or private key),
@@ -517,9 +536,10 @@ Test whether keys have been revoked in a KRL.
517.It Fl q 536.It Fl q
518Silence 537Silence
519.Nm ssh-keygen . 538.Nm ssh-keygen .
520.It Fl R Ar hostname 539.It Fl R Ar hostname | [hostname]:port
521Removes all keys belonging to 540Removes all keys belonging to the specified
522.Ar hostname 541.Ar hostname
542(with optional port number)
523from a 543from a
524.Pa known_hosts 544.Pa known_hosts
525file. 545file.
@@ -620,6 +640,12 @@ OpenSSH format file and print an OpenSSH public key to stdout.
620.It Fl z Ar serial_number 640.It Fl z Ar serial_number
621Specifies a serial number to be embedded in the certificate to distinguish 641Specifies a serial number to be embedded in the certificate to distinguish
622this certificate from others from the same CA. 642this certificate from others from the same CA.
643If the
644.Ar serial_number
645is prefixed with a
646.Sq +
647character, then the serial number will be incremented for each certificate
648signed on a single command-line.
623The default serial number is zero. 649The default serial number is zero.
624.Pp 650.Pp
625When generating a KRL, the 651When generating a KRL, the
diff --git a/ssh-keygen.c b/ssh-keygen.c
index 46b3af5a8..3898b281e 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keygen.c,v 1.322 2018/09/14 04:17:44 djm Exp $ */ 1/* $OpenBSD: ssh-keygen.c,v 1.329 2019/03/25 16:19:44 dtucker Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1994 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -67,79 +67,52 @@
67# define DEFAULT_KEY_TYPE_NAME "ed25519" 67# define DEFAULT_KEY_TYPE_NAME "ed25519"
68#endif 68#endif
69 69
70/* Number of bits in the RSA/DSA key. This value can be set on the command line. */
71#define DEFAULT_BITS 2048
72#define DEFAULT_BITS_DSA 1024
73#define DEFAULT_BITS_ECDSA 256
74u_int32_t bits = 0;
75
76/* 70/*
77 * Flag indicating that we just want to change the passphrase. This can be 71 * Default number of bits in the RSA, DSA and ECDSA keys. These value can be
78 * set on the command line. 72 * overridden on the command line.
79 */ 73 *
80int change_passphrase = 0; 74 * These values, with the exception of DSA, provide security equivalent to at
81 75 * least 128 bits of security according to NIST Special Publication 800-57:
82/* 76 * Recommendation for Key Management Part 1 rev 4 section 5.6.1.
83 * Flag indicating that we just want to change the comment. This can be set 77 * For DSA it (and FIPS-186-4 section 4.2) specifies that the only size for
84 * on the command line. 78 * which a 160bit hash is acceptable is 1kbit, and since ssh-dss specifies only
79 * SHA1 we limit the DSA key size 1k bits.
85 */ 80 */
86int change_comment = 0; 81#define DEFAULT_BITS 3072
87 82#define DEFAULT_BITS_DSA 1024
88int quiet = 0; 83#define DEFAULT_BITS_ECDSA 256
89
90int log_level = SYSLOG_LEVEL_INFO;
91
92/* Flag indicating that we want to hash a known_hosts file */
93int hash_hosts = 0;
94/* Flag indicating that we want lookup a host in known_hosts file */
95int find_host = 0;
96/* Flag indicating that we want to delete a host from a known_hosts file */
97int delete_host = 0;
98 84
99/* Flag indicating that we want to show the contents of a certificate */ 85static int quiet = 0;
100int show_cert = 0;
101 86
102/* Flag indicating that we just want to see the key fingerprint */ 87/* Flag indicating that we just want to see the key fingerprint */
103int print_fingerprint = 0; 88static int print_fingerprint = 0;
104int print_bubblebabble = 0; 89static int print_bubblebabble = 0;
105 90
106/* Hash algorithm to use for fingerprints. */ 91/* Hash algorithm to use for fingerprints. */
107int fingerprint_hash = SSH_FP_HASH_DEFAULT; 92static int fingerprint_hash = SSH_FP_HASH_DEFAULT;
108 93
109/* The identity file name, given on the command line or entered by the user. */ 94/* The identity file name, given on the command line or entered by the user. */
110char identity_file[1024]; 95static char identity_file[1024];
111int have_identity = 0; 96static int have_identity = 0;
112 97
113/* This is set to the passphrase if given on the command line. */ 98/* This is set to the passphrase if given on the command line. */
114char *identity_passphrase = NULL; 99static char *identity_passphrase = NULL;
115 100
116/* This is set to the new passphrase if given on the command line. */ 101/* This is set to the new passphrase if given on the command line. */
117char *identity_new_passphrase = NULL; 102static char *identity_new_passphrase = NULL;
118
119/* This is set to the new comment if given on the command line. */
120char *identity_comment = NULL;
121
122/* Path to CA key when certifying keys. */
123char *ca_key_path = NULL;
124
125/* Prefer to use agent keys for CA signing */
126int prefer_agent = 0;
127
128/* Certificate serial number */
129unsigned long long cert_serial = 0;
130 103
131/* Key type when certifying */ 104/* Key type when certifying */
132u_int cert_key_type = SSH2_CERT_TYPE_USER; 105static u_int cert_key_type = SSH2_CERT_TYPE_USER;
133 106
134/* "key ID" of signed key */ 107/* "key ID" of signed key */
135char *cert_key_id = NULL; 108static char *cert_key_id = NULL;
136 109
137/* Comma-separated list of principal names for certifying keys */ 110/* Comma-separated list of principal names for certifying keys */
138char *cert_principals = NULL; 111static char *cert_principals = NULL;
139 112
140/* Validity period for certificates */ 113/* Validity period for certificates */
141u_int64_t cert_valid_from = 0; 114static u_int64_t cert_valid_from = 0;
142u_int64_t cert_valid_to = ~0ULL; 115static u_int64_t cert_valid_to = ~0ULL;
143 116
144/* Certificate options */ 117/* Certificate options */
145#define CERTOPT_X_FWD (1) 118#define CERTOPT_X_FWD (1)
@@ -149,9 +122,9 @@ u_int64_t cert_valid_to = ~0ULL;
149#define CERTOPT_USER_RC (1<<4) 122#define CERTOPT_USER_RC (1<<4)
150#define CERTOPT_DEFAULT (CERTOPT_X_FWD|CERTOPT_AGENT_FWD| \ 123#define CERTOPT_DEFAULT (CERTOPT_X_FWD|CERTOPT_AGENT_FWD| \
151 CERTOPT_PORT_FWD|CERTOPT_PTY|CERTOPT_USER_RC) 124 CERTOPT_PORT_FWD|CERTOPT_PTY|CERTOPT_USER_RC)
152u_int32_t certflags_flags = CERTOPT_DEFAULT; 125static u_int32_t certflags_flags = CERTOPT_DEFAULT;
153char *certflags_command = NULL; 126static char *certflags_command = NULL;
154char *certflags_src_addr = NULL; 127static char *certflags_src_addr = NULL;
155 128
156/* Arbitrary extensions specified by user */ 129/* Arbitrary extensions specified by user */
157struct cert_userext { 130struct cert_userext {
@@ -159,41 +132,37 @@ struct cert_userext {
159 char *val; 132 char *val;
160 int crit; 133 int crit;
161}; 134};
162struct cert_userext *cert_userext; 135static struct cert_userext *cert_userext;
163size_t ncert_userext; 136static size_t ncert_userext;
164 137
165/* Conversion to/from various formats */ 138/* Conversion to/from various formats */
166int convert_to = 0;
167int convert_from = 0;
168enum { 139enum {
169 FMT_RFC4716, 140 FMT_RFC4716,
170 FMT_PKCS8, 141 FMT_PKCS8,
171 FMT_PEM 142 FMT_PEM
172} convert_format = FMT_RFC4716; 143} convert_format = FMT_RFC4716;
173int print_public = 0;
174int print_generic = 0;
175 144
176char *key_type_name = NULL; 145static char *key_type_name = NULL;
177 146
178/* Load key from this PKCS#11 provider */ 147/* Load key from this PKCS#11 provider */
179char *pkcs11provider = NULL; 148static char *pkcs11provider = NULL;
180 149
181/* Use new OpenSSH private key format when writing SSH2 keys instead of PEM */ 150/* Use new OpenSSH private key format when writing SSH2 keys instead of PEM */
182int use_new_format = 1; 151static int use_new_format = 1;
183 152
184/* Cipher for new-format private keys */ 153/* Cipher for new-format private keys */
185char *new_format_cipher = NULL; 154static char *new_format_cipher = NULL;
186 155
187/* 156/*
188 * Number of KDF rounds to derive new format keys / 157 * Number of KDF rounds to derive new format keys /
189 * number of primality trials when screening moduli. 158 * number of primality trials when screening moduli.
190 */ 159 */
191int rounds = 0; 160static int rounds = 0;
192 161
193/* argv0 */ 162/* argv0 */
194extern char *__progname; 163extern char *__progname;
195 164
196char hostname[NI_MAXHOST]; 165static char hostname[NI_MAXHOST];
197 166
198#ifdef WITH_OPENSSL 167#ifdef WITH_OPENSSL
199/* moduli.c */ 168/* moduli.c */
@@ -243,7 +212,11 @@ type_bits_valid(int type, const char *name, u_int32_t *bitsp)
243 case KEY_ECDSA: 212 case KEY_ECDSA:
244 if (sshkey_ecdsa_bits_to_nid(*bitsp) == -1) 213 if (sshkey_ecdsa_bits_to_nid(*bitsp) == -1)
245 fatal("Invalid ECDSA key length: valid lengths are " 214 fatal("Invalid ECDSA key length: valid lengths are "
215#ifdef OPENSSL_HAS_NISTP521
246 "256, 384 or 521 bits"); 216 "256, 384 or 521 bits");
217#else
218 "256 or 384 bits");
219#endif
247 } 220 }
248#endif 221#endif
249} 222}
@@ -806,7 +779,7 @@ do_download(struct passwd *pw)
806 fptype = print_bubblebabble ? SSH_DIGEST_SHA1 : fingerprint_hash; 779 fptype = print_bubblebabble ? SSH_DIGEST_SHA1 : fingerprint_hash;
807 rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_DEFAULT; 780 rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_DEFAULT;
808 781
809 pkcs11_init(0); 782 pkcs11_init(1);
810 nkeys = pkcs11_add_provider(pkcs11provider, NULL, &keys); 783 nkeys = pkcs11_add_provider(pkcs11provider, NULL, &keys);
811 if (nkeys <= 0) 784 if (nkeys <= 0)
812 fatal("cannot read public key from pkcs11"); 785 fatal("cannot read public key from pkcs11");
@@ -819,7 +792,7 @@ do_download(struct passwd *pw)
819 fatal("%s: sshkey_fingerprint fail", __func__); 792 fatal("%s: sshkey_fingerprint fail", __func__);
820 printf("%u %s %s (PKCS11 key)\n", sshkey_size(keys[i]), 793 printf("%u %s %s (PKCS11 key)\n", sshkey_size(keys[i]),
821 fp, sshkey_type(keys[i])); 794 fp, sshkey_type(keys[i]));
822 if (log_level >= SYSLOG_LEVEL_VERBOSE) 795 if (log_level_get() >= SYSLOG_LEVEL_VERBOSE)
823 printf("%s\n", ra); 796 printf("%s\n", ra);
824 free(ra); 797 free(ra);
825 free(fp); 798 free(fp);
@@ -867,7 +840,7 @@ fingerprint_one_key(const struct sshkey *public, const char *comment)
867 fatal("%s: sshkey_fingerprint failed", __func__); 840 fatal("%s: sshkey_fingerprint failed", __func__);
868 mprintf("%u %s %s (%s)\n", sshkey_size(public), fp, 841 mprintf("%u %s %s (%s)\n", sshkey_size(public), fp,
869 comment ? comment : "no comment", sshkey_type(public)); 842 comment ? comment : "no comment", sshkey_type(public));
870 if (log_level >= SYSLOG_LEVEL_VERBOSE) 843 if (log_level_get() >= SYSLOG_LEVEL_VERBOSE)
871 printf("%s\n", ra); 844 printf("%s\n", ra);
872 free(ra); 845 free(ra);
873 free(fp); 846 free(fp);
@@ -1015,6 +988,7 @@ do_gen_all_hostkeys(struct passwd *pw)
1015 { NULL, NULL, NULL } 988 { NULL, NULL, NULL }
1016 }; 989 };
1017 990
991 u_int bits = 0;
1018 int first = 0; 992 int first = 0;
1019 struct stat st; 993 struct stat st;
1020 struct sshkey *private, *public; 994 struct sshkey *private, *public;
@@ -1138,6 +1112,9 @@ struct known_hosts_ctx {
1138 int has_unhashed; /* When hashing, original had unhashed hosts */ 1112 int has_unhashed; /* When hashing, original had unhashed hosts */
1139 int found_key; /* For find/delete, host was found */ 1113 int found_key; /* For find/delete, host was found */
1140 int invalid; /* File contained invalid items; don't delete */ 1114 int invalid; /* File contained invalid items; don't delete */
1115 int hash_hosts; /* Hash hostnames as we go */
1116 int find_host; /* Search for specific hostname */
1117 int delete_host; /* Delete host from known_hosts */
1141}; 1118};
1142 1119
1143static int 1120static int
@@ -1157,7 +1134,7 @@ known_hosts_hash(struct hostkey_foreach_line *l, void *_ctx)
1157 */ 1134 */
1158 if (was_hashed || has_wild || l->marker != MRK_NONE) { 1135 if (was_hashed || has_wild || l->marker != MRK_NONE) {
1159 fprintf(ctx->out, "%s\n", l->line); 1136 fprintf(ctx->out, "%s\n", l->line);
1160 if (has_wild && !find_host) { 1137 if (has_wild && !ctx->find_host) {
1161 logit("%s:%lu: ignoring host name " 1138 logit("%s:%lu: ignoring host name "
1162 "with wildcard: %.64s", l->path, 1139 "with wildcard: %.64s", l->path,
1163 l->linenum, l->hosts); 1140 l->linenum, l->hosts);
@@ -1203,7 +1180,7 @@ known_hosts_find_delete(struct hostkey_foreach_line *l, void *_ctx)
1203 rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_DEFAULT; 1180 rep = print_bubblebabble ? SSH_FP_BUBBLEBABBLE : SSH_FP_DEFAULT;
1204 1181
1205 if (l->status == HKF_STATUS_MATCHED) { 1182 if (l->status == HKF_STATUS_MATCHED) {
1206 if (delete_host) { 1183 if (ctx->delete_host) {
1207 if (l->marker != MRK_NONE) { 1184 if (l->marker != MRK_NONE) {
1208 /* Don't remove CA and revocation lines */ 1185 /* Don't remove CA and revocation lines */
1209 fprintf(ctx->out, "%s\n", l->line); 1186 fprintf(ctx->out, "%s\n", l->line);
@@ -1219,7 +1196,7 @@ known_hosts_find_delete(struct hostkey_foreach_line *l, void *_ctx)
1219 ctx->host, l->linenum); 1196 ctx->host, l->linenum);
1220 } 1197 }
1221 return 0; 1198 return 0;
1222 } else if (find_host) { 1199 } else if (ctx->find_host) {
1223 ctx->found_key = 1; 1200 ctx->found_key = 1;
1224 if (!quiet) { 1201 if (!quiet) {
1225 printf("# Host %s found: line %lu %s\n", 1202 printf("# Host %s found: line %lu %s\n",
@@ -1227,7 +1204,7 @@ known_hosts_find_delete(struct hostkey_foreach_line *l, void *_ctx)
1227 l->linenum, l->marker == MRK_CA ? "CA" : 1204 l->linenum, l->marker == MRK_CA ? "CA" :
1228 (l->marker == MRK_REVOKE ? "REVOKED" : "")); 1205 (l->marker == MRK_REVOKE ? "REVOKED" : ""));
1229 } 1206 }
1230 if (hash_hosts) 1207 if (ctx->hash_hosts)
1231 known_hosts_hash(l, ctx); 1208 known_hosts_hash(l, ctx);
1232 else if (print_fingerprint) { 1209 else if (print_fingerprint) {
1233 fp = sshkey_fingerprint(l->key, fptype, rep); 1210 fp = sshkey_fingerprint(l->key, fptype, rep);
@@ -1238,7 +1215,7 @@ known_hosts_find_delete(struct hostkey_foreach_line *l, void *_ctx)
1238 fprintf(ctx->out, "%s\n", l->line); 1215 fprintf(ctx->out, "%s\n", l->line);
1239 return 0; 1216 return 0;
1240 } 1217 }
1241 } else if (delete_host) { 1218 } else if (ctx->delete_host) {
1242 /* Retain non-matching hosts when deleting */ 1219 /* Retain non-matching hosts when deleting */
1243 if (l->status == HKF_STATUS_INVALID) { 1220 if (l->status == HKF_STATUS_INVALID) {
1244 ctx->invalid = 1; 1221 ctx->invalid = 1;
@@ -1250,7 +1227,8 @@ known_hosts_find_delete(struct hostkey_foreach_line *l, void *_ctx)
1250} 1227}
1251 1228
1252static void 1229static void
1253do_known_hosts(struct passwd *pw, const char *name) 1230do_known_hosts(struct passwd *pw, const char *name, int find_host,
1231 int delete_host, int hash_hosts)
1254{ 1232{
1255 char *cp, tmp[PATH_MAX], old[PATH_MAX]; 1233 char *cp, tmp[PATH_MAX], old[PATH_MAX];
1256 int r, fd, oerrno, inplace = 0; 1234 int r, fd, oerrno, inplace = 0;
@@ -1269,6 +1247,9 @@ do_known_hosts(struct passwd *pw, const char *name)
1269 memset(&ctx, 0, sizeof(ctx)); 1247 memset(&ctx, 0, sizeof(ctx));
1270 ctx.out = stdout; 1248 ctx.out = stdout;
1271 ctx.host = name; 1249 ctx.host = name;
1250 ctx.hash_hosts = hash_hosts;
1251 ctx.find_host = find_host;
1252 ctx.delete_host = delete_host;
1272 1253
1273 /* 1254 /*
1274 * Find hosts goes to stdout, hash and deletions happen in-place 1255 * Find hosts goes to stdout, hash and deletions happen in-place
@@ -1433,7 +1414,8 @@ do_change_passphrase(struct passwd *pw)
1433 * Print the SSHFP RR. 1414 * Print the SSHFP RR.
1434 */ 1415 */
1435static int 1416static int
1436do_print_resource_record(struct passwd *pw, char *fname, char *hname) 1417do_print_resource_record(struct passwd *pw, char *fname, char *hname,
1418 int print_generic)
1437{ 1419{
1438 struct sshkey *public; 1420 struct sshkey *public;
1439 char *comment = NULL; 1421 char *comment = NULL;
@@ -1460,7 +1442,7 @@ do_print_resource_record(struct passwd *pw, char *fname, char *hname)
1460 * Change the comment of a private key file. 1442 * Change the comment of a private key file.
1461 */ 1443 */
1462static void 1444static void
1463do_change_comment(struct passwd *pw) 1445do_change_comment(struct passwd *pw, const char *identity_comment)
1464{ 1446{
1465 char new_comment[1024], *comment, *passphrase; 1447 char new_comment[1024], *comment, *passphrase;
1466 struct sshkey *private; 1448 struct sshkey *private;
@@ -1672,7 +1654,9 @@ agent_signer(const struct sshkey *key, u_char **sigp, size_t *lenp,
1672} 1654}
1673 1655
1674static void 1656static void
1675do_ca_sign(struct passwd *pw, int argc, char **argv) 1657do_ca_sign(struct passwd *pw, const char *ca_key_path, int prefer_agent,
1658 unsigned long long cert_serial, int cert_serial_autoinc,
1659 int argc, char **argv)
1676{ 1660{
1677 int r, i, fd, found, agent_fd = -1; 1661 int r, i, fd, found, agent_fd = -1;
1678 u_int n; 1662 u_int n;
@@ -1812,6 +1796,8 @@ do_ca_sign(struct passwd *pw, int argc, char **argv)
1812 1796
1813 sshkey_free(public); 1797 sshkey_free(public);
1814 free(out); 1798 free(out);
1799 if (cert_serial_autoinc)
1800 cert_serial++;
1815 } 1801 }
1816#ifdef ENABLE_PKCS11 1802#ifdef ENABLE_PKCS11
1817 pkcs11_terminate(); 1803 pkcs11_terminate();
@@ -2003,8 +1989,9 @@ print_cert(struct sshkey *key)
2003 printf(" Type: %s %s certificate\n", sshkey_ssh_name(key), 1989 printf(" Type: %s %s certificate\n", sshkey_ssh_name(key),
2004 sshkey_cert_type(key)); 1990 sshkey_cert_type(key));
2005 printf(" Public key: %s %s\n", sshkey_type(key), key_fp); 1991 printf(" Public key: %s %s\n", sshkey_type(key), key_fp);
2006 printf(" Signing CA: %s %s\n", 1992 printf(" Signing CA: %s %s (using %s)\n",
2007 sshkey_type(key->cert->signature_key), ca_fp); 1993 sshkey_type(key->cert->signature_key), ca_fp,
1994 key->cert->signature_type);
2008 printf(" Key ID: \"%s\"\n", key->cert->key_id); 1995 printf(" Key ID: \"%s\"\n", key->cert->key_id);
2009 printf(" Serial: %llu\n", (unsigned long long)key->cert->serial); 1996 printf(" Serial: %llu\n", (unsigned long long)key->cert->serial);
2010 printf(" Valid: %s\n", valid); 1997 printf(" Valid: %s\n", valid);
@@ -2297,7 +2284,9 @@ update_krl_from_file(struct passwd *pw, const char *file, int wild_ca,
2297} 2284}
2298 2285
2299static void 2286static void
2300do_gen_krl(struct passwd *pw, int updating, int argc, char **argv) 2287do_gen_krl(struct passwd *pw, int updating, const char *ca_key_path,
2288 unsigned long long krl_version, const char *krl_comment,
2289 int argc, char **argv)
2301{ 2290{
2302 struct ssh_krl *krl; 2291 struct ssh_krl *krl;
2303 struct stat sb; 2292 struct stat sb;
@@ -2332,10 +2321,10 @@ do_gen_krl(struct passwd *pw, int updating, int argc, char **argv)
2332 else if ((krl = ssh_krl_init()) == NULL) 2321 else if ((krl = ssh_krl_init()) == NULL)
2333 fatal("couldn't create KRL"); 2322 fatal("couldn't create KRL");
2334 2323
2335 if (cert_serial != 0) 2324 if (krl_version != 0)
2336 ssh_krl_set_version(krl, cert_serial); 2325 ssh_krl_set_version(krl, krl_version);
2337 if (identity_comment != NULL) 2326 if (krl_comment != NULL)
2338 ssh_krl_set_comment(krl, identity_comment); 2327 ssh_krl_set_comment(krl, krl_comment);
2339 2328
2340 for (i = 0; i < argc; i++) 2329 for (i = 0; i < argc; i++)
2341 update_krl_from_file(pw, argv[i], wild_ca, ca, krl); 2330 update_krl_from_file(pw, argv[i], wild_ca, ca, krl);
@@ -2387,9 +2376,10 @@ static void
2387usage(void) 2376usage(void)
2388{ 2377{
2389 fprintf(stderr, 2378 fprintf(stderr,
2390 "usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa]\n" 2379 "usage: ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa] [-m format]\n"
2391 " [-N new_passphrase] [-C comment] [-f output_keyfile]\n" 2380 " [-N new_passphrase] [-C comment] [-f output_keyfile]\n"
2392 " ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]\n" 2381 " ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-m format]\n"
2382 " [-f keyfile]\n"
2393 " ssh-keygen -i [-m key_format] [-f input_keyfile]\n" 2383 " ssh-keygen -i [-m key_format] [-f input_keyfile]\n"
2394 " ssh-keygen -e [-m key_format] [-f input_keyfile]\n" 2384 " ssh-keygen -e [-m key_format] [-f input_keyfile]\n"
2395 " ssh-keygen -y [-f input_keyfile]\n" 2385 " ssh-keygen -y [-f input_keyfile]\n"
@@ -2433,9 +2423,17 @@ main(int argc, char **argv)
2433 struct passwd *pw; 2423 struct passwd *pw;
2434 struct stat st; 2424 struct stat st;
2435 int r, opt, type, fd; 2425 int r, opt, type, fd;
2426 int change_passphrase = 0, change_comment = 0, show_cert = 0;
2427 int find_host = 0, delete_host = 0, hash_hosts = 0;
2436 int gen_all_hostkeys = 0, gen_krl = 0, update_krl = 0, check_krl = 0; 2428 int gen_all_hostkeys = 0, gen_krl = 0, update_krl = 0, check_krl = 0;
2429 int prefer_agent = 0, convert_to = 0, convert_from = 0;
2430 int print_public = 0, print_generic = 0, cert_serial_autoinc = 0;
2431 unsigned long long cert_serial = 0;
2432 char *identity_comment = NULL, *ca_key_path = NULL;
2433 u_int bits = 0;
2437 FILE *f; 2434 FILE *f;
2438 const char *errstr; 2435 const char *errstr;
2436 int log_level = SYSLOG_LEVEL_INFO;
2439#ifdef WITH_OPENSSL 2437#ifdef WITH_OPENSSL
2440 /* Moduli generation/screening */ 2438 /* Moduli generation/screening */
2441 char out_file[PATH_MAX], *checkpoint = NULL; 2439 char out_file[PATH_MAX], *checkpoint = NULL;
@@ -2454,13 +2452,10 @@ main(int argc, char **argv)
2454 2452
2455 __progname = ssh_get_progname(argv[0]); 2453 __progname = ssh_get_progname(argv[0]);
2456 2454
2457#ifdef WITH_OPENSSL
2458 OpenSSL_add_all_algorithms();
2459#endif
2460 log_init(argv[0], SYSLOG_LEVEL_INFO, SYSLOG_FACILITY_USER, 1);
2461
2462 seed_rng(); 2455 seed_rng();
2463 2456
2457 log_init(argv[0], SYSLOG_LEVEL_INFO, SYSLOG_FACILITY_USER, 1);
2458
2464 msetlocale(); 2459 msetlocale();
2465 2460
2466 /* we need this for the home * directory. */ 2461 /* we need this for the home * directory. */
@@ -2628,6 +2623,10 @@ main(int argc, char **argv)
2628 break; 2623 break;
2629 case 'z': 2624 case 'z':
2630 errno = 0; 2625 errno = 0;
2626 if (*optarg == '+') {
2627 cert_serial_autoinc = 1;
2628 optarg++;
2629 }
2631 cert_serial = strtoull(optarg, &ep, 10); 2630 cert_serial = strtoull(optarg, &ep, 10);
2632 if (*optarg < '0' || *optarg > '9' || *ep != '\0' || 2631 if (*optarg < '0' || *optarg > '9' || *ep != '\0' ||
2633 (errno == ERANGE && cert_serial == ULLONG_MAX)) 2632 (errno == ERANGE && cert_serial == ULLONG_MAX))
@@ -2707,7 +2706,8 @@ main(int argc, char **argv)
2707 usage(); 2706 usage();
2708 } 2707 }
2709 if (gen_krl) { 2708 if (gen_krl) {
2710 do_gen_krl(pw, update_krl, argc, argv); 2709 do_gen_krl(pw, update_krl, ca_key_path,
2710 cert_serial, identity_comment, argc, argv);
2711 return (0); 2711 return (0);
2712 } 2712 }
2713 if (check_krl) { 2713 if (check_krl) {
@@ -2717,12 +2717,15 @@ main(int argc, char **argv)
2717 if (ca_key_path != NULL) { 2717 if (ca_key_path != NULL) {
2718 if (cert_key_id == NULL) 2718 if (cert_key_id == NULL)
2719 fatal("Must specify key id (-I) when certifying"); 2719 fatal("Must specify key id (-I) when certifying");
2720 do_ca_sign(pw, argc, argv); 2720 do_ca_sign(pw, ca_key_path, prefer_agent,
2721 cert_serial, cert_serial_autoinc, argc, argv);
2721 } 2722 }
2722 if (show_cert) 2723 if (show_cert)
2723 do_show_cert(pw); 2724 do_show_cert(pw);
2724 if (delete_host || hash_hosts || find_host) 2725 if (delete_host || hash_hosts || find_host) {
2725 do_known_hosts(pw, rr_hostname); 2726 do_known_hosts(pw, rr_hostname, find_host,
2727 delete_host, hash_hosts);
2728 }
2726 if (pkcs11provider != NULL) 2729 if (pkcs11provider != NULL)
2727 do_download(pw); 2730 do_download(pw);
2728 if (print_fingerprint || print_bubblebabble) 2731 if (print_fingerprint || print_bubblebabble)
@@ -2730,7 +2733,7 @@ main(int argc, char **argv)
2730 if (change_passphrase) 2733 if (change_passphrase)
2731 do_change_passphrase(pw); 2734 do_change_passphrase(pw);
2732 if (change_comment) 2735 if (change_comment)
2733 do_change_comment(pw); 2736 do_change_comment(pw, identity_comment);
2734#ifdef WITH_OPENSSL 2737#ifdef WITH_OPENSSL
2735 if (convert_to) 2738 if (convert_to)
2736 do_convert_to(pw); 2739 do_convert_to(pw);
@@ -2743,23 +2746,28 @@ main(int argc, char **argv)
2743 unsigned int n = 0; 2746 unsigned int n = 0;
2744 2747
2745 if (have_identity) { 2748 if (have_identity) {
2746 n = do_print_resource_record(pw, 2749 n = do_print_resource_record(pw, identity_file,
2747 identity_file, rr_hostname); 2750 rr_hostname, print_generic);
2748 if (n == 0) 2751 if (n == 0)
2749 fatal("%s: %s", identity_file, strerror(errno)); 2752 fatal("%s: %s", identity_file, strerror(errno));
2750 exit(0); 2753 exit(0);
2751 } else { 2754 } else {
2752 2755
2753 n += do_print_resource_record(pw, 2756 n += do_print_resource_record(pw,
2754 _PATH_HOST_RSA_KEY_FILE, rr_hostname); 2757 _PATH_HOST_RSA_KEY_FILE, rr_hostname,
2758 print_generic);
2755 n += do_print_resource_record(pw, 2759 n += do_print_resource_record(pw,
2756 _PATH_HOST_DSA_KEY_FILE, rr_hostname); 2760 _PATH_HOST_DSA_KEY_FILE, rr_hostname,
2761 print_generic);
2757 n += do_print_resource_record(pw, 2762 n += do_print_resource_record(pw,
2758 _PATH_HOST_ECDSA_KEY_FILE, rr_hostname); 2763 _PATH_HOST_ECDSA_KEY_FILE, rr_hostname,
2764 print_generic);
2759 n += do_print_resource_record(pw, 2765 n += do_print_resource_record(pw,
2760 _PATH_HOST_ED25519_KEY_FILE, rr_hostname); 2766 _PATH_HOST_ED25519_KEY_FILE, rr_hostname,
2767 print_generic);
2761 n += do_print_resource_record(pw, 2768 n += do_print_resource_record(pw,
2762 _PATH_HOST_XMSS_KEY_FILE, rr_hostname); 2769 _PATH_HOST_XMSS_KEY_FILE, rr_hostname,
2770 print_generic);
2763 if (n == 0) 2771 if (n == 0)
2764 fatal("no keys found."); 2772 fatal("no keys found.");
2765 exit(0); 2773 exit(0);
diff --git a/ssh-keyscan.0 b/ssh-keyscan.0
index 497ac0d9e..d372f7c7a 100644
--- a/ssh-keyscan.0
+++ b/ssh-keyscan.0
@@ -93,4 +93,4 @@ AUTHORS
93 Davison <wayned@users.sourceforge.net> added support for protocol version 93 Davison <wayned@users.sourceforge.net> added support for protocol version
94 2. 94 2.
95 95
96OpenBSD 6.4 March 5, 2018 OpenBSD 6.4 96OpenBSD 6.5 March 5, 2018 OpenBSD 6.5
diff --git a/ssh-keyscan.c b/ssh-keyscan.c
index 38b1c548b..2ed041559 100644
--- a/ssh-keyscan.c
+++ b/ssh-keyscan.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keyscan.c,v 1.120 2018/06/06 18:29:18 markus Exp $ */ 1/* $OpenBSD: ssh-keyscan.c,v 1.126 2019/01/26 22:35:01 djm Exp $ */
2/* 2/*
3 * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>. 3 * Copyright 1995, 1996 by David Mazieres <dm@lcs.mit.edu>.
4 * 4 *
@@ -70,6 +70,8 @@ int hash_hosts = 0; /* Hash hostname on output */
70 70
71int print_sshfp = 0; /* Print SSHFP records instead of known_hosts */ 71int print_sshfp = 0; /* Print SSHFP records instead of known_hosts */
72 72
73int found_one = 0; /* Successfully found a key */
74
73#define MAXMAXFD 256 75#define MAXMAXFD 256
74 76
75/* The number of seconds after which to give up on a TCP connection */ 77/* The number of seconds after which to give up on a TCP connection */
@@ -83,8 +85,6 @@ fd_set *read_wait;
83size_t read_wait_nfdset; 85size_t read_wait_nfdset;
84int ncon; 86int ncon;
85 87
86struct ssh *active_state = NULL; /* XXX needed for linking */
87
88/* 88/*
89 * Keep a connection structure for each file descriptor. The state 89 * Keep a connection structure for each file descriptor. The state
90 * associated with file descriptor n is held in fdcon[n]. 90 * associated with file descriptor n is held in fdcon[n].
@@ -262,18 +262,19 @@ keygrab_ssh2(con *c)
262 exit(1); 262 exit(1);
263 } 263 }
264#ifdef WITH_OPENSSL 264#ifdef WITH_OPENSSL
265 c->c_ssh->kex->kex[KEX_DH_GRP1_SHA1] = kexdh_client; 265 c->c_ssh->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_client;
266 c->c_ssh->kex->kex[KEX_DH_GRP14_SHA1] = kexdh_client; 266 c->c_ssh->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_client;
267 c->c_ssh->kex->kex[KEX_DH_GRP14_SHA256] = kexdh_client; 267 c->c_ssh->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_client;
268 c->c_ssh->kex->kex[KEX_DH_GRP16_SHA512] = kexdh_client; 268 c->c_ssh->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_client;
269 c->c_ssh->kex->kex[KEX_DH_GRP18_SHA512] = kexdh_client; 269 c->c_ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_client;
270 c->c_ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client; 270 c->c_ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client;
271 c->c_ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client; 271 c->c_ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client;
272# ifdef OPENSSL_HAS_ECC 272# ifdef OPENSSL_HAS_ECC
273 c->c_ssh->kex->kex[KEX_ECDH_SHA2] = kexecdh_client; 273 c->c_ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_client;
274# endif 274# endif
275#endif 275#endif
276 c->c_ssh->kex->kex[KEX_C25519_SHA256] = kexc25519_client; 276 c->c_ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
277 c->c_ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_client;
277 ssh_set_verify_host_key_callback(c->c_ssh, key_print_wrapper); 278 ssh_set_verify_host_key_callback(c->c_ssh, key_print_wrapper);
278 /* 279 /*
279 * do the key-exchange until an error occurs or until 280 * do the key-exchange until an error occurs or until
@@ -288,6 +289,8 @@ keyprint_one(const char *host, struct sshkey *key)
288 char *hostport; 289 char *hostport;
289 const char *known_host, *hashed; 290 const char *known_host, *hashed;
290 291
292 found_one = 1;
293
291 if (print_sshfp) { 294 if (print_sshfp) {
292 export_dns_rr(host, key, stdout, 0); 295 export_dns_rr(host, key, stdout, 0);
293 return; 296 return;
@@ -803,5 +806,5 @@ main(int argc, char **argv)
803 while (ncon > 0) 806 while (ncon > 0)
804 conloop(); 807 conloop();
805 808
806 return (0); 809 return found_one ? 0 : 1;
807} 810}
diff --git a/ssh-keysign.0 b/ssh-keysign.0
index db4355d29..172739ebd 100644
--- a/ssh-keysign.0
+++ b/ssh-keysign.0
@@ -49,4 +49,4 @@ HISTORY
49AUTHORS 49AUTHORS
50 Markus Friedl <markus@openbsd.org> 50 Markus Friedl <markus@openbsd.org>
51 51
52OpenBSD 6.4 February 17, 2016 OpenBSD 6.4 52OpenBSD 6.5 February 17, 2016 OpenBSD 6.5
diff --git a/ssh-keysign.c b/ssh-keysign.c
index 744ecb4f9..601f6ca72 100644
--- a/ssh-keysign.c
+++ b/ssh-keysign.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keysign.c,v 1.55 2018/07/27 05:34:42 dtucker Exp $ */ 1/* $OpenBSD: ssh-keysign.c,v 1.56 2018/11/23 05:08:07 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2002 Markus Friedl. All rights reserved. 3 * Copyright (c) 2002 Markus Friedl. All rights reserved.
4 * 4 *
@@ -40,6 +40,7 @@
40#include <openssl/evp.h> 40#include <openssl/evp.h>
41#include <openssl/rand.h> 41#include <openssl/rand.h>
42#include <openssl/rsa.h> 42#include <openssl/rsa.h>
43#include "openbsd-compat/openssl-compat.h"
43#endif 44#endif
44 45
45#include "xmalloc.h" 46#include "xmalloc.h"
@@ -58,8 +59,6 @@
58#include "sshkey.h" 59#include "sshkey.h"
59#include "ssherr.h" 60#include "ssherr.h"
60 61
61struct ssh *active_state = NULL; /* XXX needed for linking */
62
63extern char *__progname; 62extern char *__progname;
64 63
65static int 64static int
@@ -173,9 +172,6 @@ main(int argc, char **argv)
173 u_char *signature, *data, rver; 172 u_char *signature, *data, rver;
174 char *host, *fp; 173 char *host, *fp;
175 size_t slen, dlen; 174 size_t slen, dlen;
176#ifdef WITH_OPENSSL
177 u_int32_t rnd[256];
178#endif
179 175
180 ssh_malloc_init(); /* must be called before any mallocs */ 176 ssh_malloc_init(); /* must be called before any mallocs */
181 if (pledge("stdio rpath getpw dns id", NULL) != 0) 177 if (pledge("stdio rpath getpw dns id", NULL) != 0)
@@ -210,7 +206,8 @@ main(int argc, char **argv)
210 206
211 /* verify that ssh-keysign is enabled by the admin */ 207 /* verify that ssh-keysign is enabled by the admin */
212 initialize_options(&options); 208 initialize_options(&options);
213 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw, "", "", &options, 0); 209 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw, "", "",
210 &options, 0, NULL);
214 fill_default_options(&options); 211 fill_default_options(&options);
215 if (options.enable_ssh_keysign != 1) 212 if (options.enable_ssh_keysign != 1)
216 fatal("ssh-keysign not enabled in %s", 213 fatal("ssh-keysign not enabled in %s",
@@ -223,12 +220,6 @@ main(int argc, char **argv)
223 if (found == 0) 220 if (found == 0)
224 fatal("could not open any host key"); 221 fatal("could not open any host key");
225 222
226#ifdef WITH_OPENSSL
227 OpenSSL_add_all_algorithms();
228 arc4random_buf(rnd, sizeof(rnd));
229 RAND_seed(rnd, sizeof(rnd));
230#endif
231
232 found = 0; 223 found = 0;
233 for (i = 0; i < NUM_KEYTYPES; i++) { 224 for (i = 0; i < NUM_KEYTYPES; i++) {
234 keys[i] = NULL; 225 keys[i] = NULL;
diff --git a/ssh-pkcs11-client.c b/ssh-pkcs11-client.c
index d1241ce67..e7860de89 100644
--- a/ssh-pkcs11-client.c
+++ b/ssh-pkcs11-client.c
@@ -1,6 +1,7 @@
1/* $OpenBSD: ssh-pkcs11-client.c,v 1.10 2018/07/09 21:59:10 markus Exp $ */ 1/* $OpenBSD: ssh-pkcs11-client.c,v 1.15 2019/01/21 12:53:35 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * Copyright (c) 2014 Pedro Martelletto. All rights reserved.
4 * 5 *
5 * Permission to use, copy, modify, and distribute this software for any 6 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above 7 * purpose with or without fee is hereby granted, provided that the above
@@ -30,6 +31,7 @@
30#include <unistd.h> 31#include <unistd.h>
31#include <errno.h> 32#include <errno.h>
32 33
34#include <openssl/ecdsa.h>
33#include <openssl/rsa.h> 35#include <openssl/rsa.h>
34 36
35#include "openbsd-compat/openssl-compat.h" 37#include "openbsd-compat/openssl-compat.h"
@@ -47,8 +49,8 @@
47 49
48/* borrows code from sftp-server and ssh-agent */ 50/* borrows code from sftp-server and ssh-agent */
49 51
50int fd = -1; 52static int fd = -1;
51pid_t pid = -1; 53static pid_t pid = -1;
52 54
53static void 55static void
54send_msg(struct sshbuf *m) 56send_msg(struct sshbuf *m)
@@ -113,22 +115,27 @@ pkcs11_terminate(void)
113} 115}
114 116
115static int 117static int
116pkcs11_rsa_private_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa, 118rsa_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa, int padding)
117 int padding)
118{ 119{
119 struct sshkey key; /* XXX */ 120 struct sshkey *key = NULL;
120 u_char *blob, *signature = NULL; 121 struct sshbuf *msg = NULL;
122 u_char *blob = NULL, *signature = NULL;
121 size_t blen, slen = 0; 123 size_t blen, slen = 0;
122 int r, ret = -1; 124 int r, ret = -1;
123 struct sshbuf *msg;
124 125
125 if (padding != RSA_PKCS1_PADDING) 126 if (padding != RSA_PKCS1_PADDING)
126 return (-1); 127 goto fail;
127 key.type = KEY_RSA; 128 key = sshkey_new(KEY_UNSPEC);
128 key.rsa = rsa; 129 if (key == NULL) {
129 if ((r = sshkey_to_blob(&key, &blob, &blen)) != 0) { 130 error("%s: sshkey_new failed", __func__);
131 goto fail;
132 }
133 key->type = KEY_RSA;
134 RSA_up_ref(rsa);
135 key->rsa = rsa;
136 if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) {
130 error("%s: sshkey_to_blob: %s", __func__, ssh_err(r)); 137 error("%s: sshkey_to_blob: %s", __func__, ssh_err(r));
131 return -1; 138 goto fail;
132 } 139 }
133 if ((msg = sshbuf_new()) == NULL) 140 if ((msg = sshbuf_new()) == NULL)
134 fatal("%s: sshbuf_new failed", __func__); 141 fatal("%s: sshbuf_new failed", __func__);
@@ -137,7 +144,6 @@ pkcs11_rsa_private_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa,
137 (r = sshbuf_put_string(msg, from, flen)) != 0 || 144 (r = sshbuf_put_string(msg, from, flen)) != 0 ||
138 (r = sshbuf_put_u32(msg, 0)) != 0) 145 (r = sshbuf_put_u32(msg, 0)) != 0)
139 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 146 fatal("%s: buffer error: %s", __func__, ssh_err(r));
140 free(blob);
141 send_msg(msg); 147 send_msg(msg);
142 sshbuf_reset(msg); 148 sshbuf_reset(msg);
143 149
@@ -150,22 +156,115 @@ pkcs11_rsa_private_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa,
150 } 156 }
151 free(signature); 157 free(signature);
152 } 158 }
159 fail:
160 free(blob);
161 sshkey_free(key);
162 sshbuf_free(msg);
163 return (ret);
164}
165
166#ifdef HAVE_EC_KEY_METHOD_NEW
167static ECDSA_SIG *
168ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv,
169 const BIGNUM *rp, EC_KEY *ec)
170{
171 struct sshkey *key = NULL;
172 struct sshbuf *msg = NULL;
173 ECDSA_SIG *ret = NULL;
174 const u_char *cp;
175 u_char *blob = NULL, *signature = NULL;
176 size_t blen, slen = 0;
177 int r, nid;
178
179 nid = sshkey_ecdsa_key_to_nid(ec);
180 if (nid < 0) {
181 error("%s: couldn't get curve nid", __func__);
182 goto fail;
183 }
184
185 key = sshkey_new(KEY_UNSPEC);
186 if (key == NULL) {
187 error("%s: sshkey_new failed", __func__);
188 goto fail;
189 }
190 key->ecdsa = ec;
191 key->ecdsa_nid = nid;
192 key->type = KEY_ECDSA;
193 EC_KEY_up_ref(ec);
194
195 if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) {
196 error("%s: sshkey_to_blob: %s", __func__, ssh_err(r));
197 goto fail;
198 }
199 if ((msg = sshbuf_new()) == NULL)
200 fatal("%s: sshbuf_new failed", __func__);
201 if ((r = sshbuf_put_u8(msg, SSH2_AGENTC_SIGN_REQUEST)) != 0 ||
202 (r = sshbuf_put_string(msg, blob, blen)) != 0 ||
203 (r = sshbuf_put_string(msg, dgst, dgst_len)) != 0 ||
204 (r = sshbuf_put_u32(msg, 0)) != 0)
205 fatal("%s: buffer error: %s", __func__, ssh_err(r));
206 send_msg(msg);
207 sshbuf_reset(msg);
208
209 if (recv_msg(msg) == SSH2_AGENT_SIGN_RESPONSE) {
210 if ((r = sshbuf_get_string(msg, &signature, &slen)) != 0)
211 fatal("%s: buffer error: %s", __func__, ssh_err(r));
212 cp = signature;
213 ret = d2i_ECDSA_SIG(NULL, &cp, slen);
214 free(signature);
215 }
216
217 fail:
218 free(blob);
219 sshkey_free(key);
153 sshbuf_free(msg); 220 sshbuf_free(msg);
154 return (ret); 221 return (ret);
155} 222}
223#endif /* HAVE_EC_KEY_METHOD_NEW */
224
225static RSA_METHOD *helper_rsa;
226#ifdef HAVE_EC_KEY_METHOD_NEW
227static EC_KEY_METHOD *helper_ecdsa;
228#endif /* HAVE_EC_KEY_METHOD_NEW */
229
230/* redirect private key crypto operations to the ssh-pkcs11-helper */
231static void
232wrap_key(struct sshkey *k)
233{
234 if (k->type == KEY_RSA)
235 RSA_set_method(k->rsa, helper_rsa);
236#ifdef HAVE_EC_KEY_METHOD_NEW
237 else if (k->type == KEY_ECDSA)
238 EC_KEY_set_method(k->ecdsa, helper_ecdsa);
239#endif /* HAVE_EC_KEY_METHOD_NEW */
240 else
241 fatal("%s: unknown key type", __func__);
242}
156 243
157/* redirect the private key encrypt operation to the ssh-pkcs11-helper */
158static int 244static int
159wrap_key(RSA *rsa) 245pkcs11_start_helper_methods(void)
160{ 246{
161 static RSA_METHOD *helper_rsa; 247 if (helper_rsa != NULL)
248 return (0);
249
250#ifdef HAVE_EC_KEY_METHOD_NEW
251 int (*orig_sign)(int, const unsigned char *, int, unsigned char *,
252 unsigned int *, const BIGNUM *, const BIGNUM *, EC_KEY *) = NULL;
253 if (helper_ecdsa != NULL)
254 return (0);
255 helper_ecdsa = EC_KEY_METHOD_new(EC_KEY_OpenSSL());
256 if (helper_ecdsa == NULL)
257 return (-1);
258 EC_KEY_METHOD_get_sign(helper_ecdsa, &orig_sign, NULL, NULL);
259 EC_KEY_METHOD_set_sign(helper_ecdsa, orig_sign, NULL, ecdsa_do_sign);
260#endif /* HAVE_EC_KEY_METHOD_NEW */
162 261
163 if ((helper_rsa = RSA_meth_dup(RSA_get_default_method())) == NULL) 262 if ((helper_rsa = RSA_meth_dup(RSA_get_default_method())) == NULL)
164 fatal("%s: RSA_meth_dup failed", __func__); 263 fatal("%s: RSA_meth_dup failed", __func__);
165 if (!RSA_meth_set1_name(helper_rsa, "ssh-pkcs11-helper") || 264 if (!RSA_meth_set1_name(helper_rsa, "ssh-pkcs11-helper") ||
166 !RSA_meth_set_priv_enc(helper_rsa, pkcs11_rsa_private_encrypt)) 265 !RSA_meth_set_priv_enc(helper_rsa, rsa_encrypt))
167 fatal("%s: failed to prepare method", __func__); 266 fatal("%s: failed to prepare method", __func__);
168 RSA_set_method(rsa, helper_rsa); 267
169 return (0); 268 return (0);
170} 269}
171 270
@@ -173,6 +272,15 @@ static int
173pkcs11_start_helper(void) 272pkcs11_start_helper(void)
174{ 273{
175 int pair[2]; 274 int pair[2];
275 char *helper, *verbosity = NULL;
276
277 if (log_level_get() >= SYSLOG_LEVEL_DEBUG1)
278 verbosity = "-vvv";
279
280 if (pkcs11_start_helper_methods() == -1) {
281 error("pkcs11_start_helper_methods failed");
282 return (-1);
283 }
176 284
177 if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) { 285 if (socketpair(AF_UNIX, SOCK_STREAM, 0, pair) == -1) {
178 error("socketpair: %s", strerror(errno)); 286 error("socketpair: %s", strerror(errno));
@@ -189,10 +297,13 @@ pkcs11_start_helper(void)
189 } 297 }
190 close(pair[0]); 298 close(pair[0]);
191 close(pair[1]); 299 close(pair[1]);
192 execlp(_PATH_SSH_PKCS11_HELPER, _PATH_SSH_PKCS11_HELPER, 300 helper = getenv("SSH_PKCS11_HELPER");
193 (char *)NULL); 301 if (helper == NULL || strlen(helper) == 0)
194 fprintf(stderr, "exec: %s: %s\n", _PATH_SSH_PKCS11_HELPER, 302 helper = _PATH_SSH_PKCS11_HELPER;
195 strerror(errno)); 303 debug("%s: starting %s %s", __func__, helper,
304 verbosity == NULL ? "" : verbosity);
305 execlp(helper, helper, verbosity, (char *)NULL);
306 fprintf(stderr, "exec: %s: %s\n", helper, strerror(errno));
196 _exit(1); 307 _exit(1);
197 } 308 }
198 close(pair[1]); 309 close(pair[1]);
@@ -204,7 +315,7 @@ int
204pkcs11_add_provider(char *name, char *pin, struct sshkey ***keysp) 315pkcs11_add_provider(char *name, char *pin, struct sshkey ***keysp)
205{ 316{
206 struct sshkey *k; 317 struct sshkey *k;
207 int r; 318 int r, type;
208 u_char *blob; 319 u_char *blob;
209 size_t blen; 320 size_t blen;
210 u_int nkeys, i; 321 u_int nkeys, i;
@@ -222,7 +333,8 @@ pkcs11_add_provider(char *name, char *pin, struct sshkey ***keysp)
222 send_msg(msg); 333 send_msg(msg);
223 sshbuf_reset(msg); 334 sshbuf_reset(msg);
224 335
225 if (recv_msg(msg) == SSH2_AGENT_IDENTITIES_ANSWER) { 336 type = recv_msg(msg);
337 if (type == SSH2_AGENT_IDENTITIES_ANSWER) {
226 if ((r = sshbuf_get_u32(msg, &nkeys)) != 0) 338 if ((r = sshbuf_get_u32(msg, &nkeys)) != 0)
227 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 339 fatal("%s: buffer error: %s", __func__, ssh_err(r));
228 *keysp = xcalloc(nkeys, sizeof(struct sshkey *)); 340 *keysp = xcalloc(nkeys, sizeof(struct sshkey *));
@@ -234,10 +346,13 @@ pkcs11_add_provider(char *name, char *pin, struct sshkey ***keysp)
234 __func__, ssh_err(r)); 346 __func__, ssh_err(r));
235 if ((r = sshkey_from_blob(blob, blen, &k)) != 0) 347 if ((r = sshkey_from_blob(blob, blen, &k)) != 0)
236 fatal("%s: bad key: %s", __func__, ssh_err(r)); 348 fatal("%s: bad key: %s", __func__, ssh_err(r));
237 wrap_key(k->rsa); 349 wrap_key(k);
238 (*keysp)[i] = k; 350 (*keysp)[i] = k;
239 free(blob); 351 free(blob);
240 } 352 }
353 } else if (type == SSH2_AGENT_FAILURE) {
354 if ((r = sshbuf_get_u32(msg, &nkeys)) != 0)
355 nkeys = -1;
241 } else { 356 } else {
242 nkeys = -1; 357 nkeys = -1;
243 } 358 }
diff --git a/ssh-pkcs11-helper.0 b/ssh-pkcs11-helper.0
index 4d5c9843b..22f690717 100644
--- a/ssh-pkcs11-helper.0
+++ b/ssh-pkcs11-helper.0
@@ -4,7 +4,7 @@ NAME
4 ssh-pkcs11-helper M-bM-^@M-^S ssh-agent helper program for PKCS#11 support 4 ssh-pkcs11-helper M-bM-^@M-^S ssh-agent helper program for PKCS#11 support
5 5
6SYNOPSIS 6SYNOPSIS
7 ssh-pkcs11-helper 7 ssh-pkcs11-helper [-v]
8 8
9DESCRIPTION 9DESCRIPTION
10 ssh-pkcs11-helper is used by ssh-agent(1) to access keys provided by a 10 ssh-pkcs11-helper is used by ssh-agent(1) to access keys provided by a
@@ -13,6 +13,16 @@ DESCRIPTION
13 ssh-pkcs11-helper is not intended to be invoked by the user, but from 13 ssh-pkcs11-helper is not intended to be invoked by the user, but from
14 ssh-agent(1). 14 ssh-agent(1).
15 15
16 A single option is supported:
17
18 -v Verbose mode. Causes ssh-pkcs11-helper to print debugging
19 messages about its progress. This is helpful in debugging
20 problems. Multiple -v options increase the verbosity. The
21 maximum is 3.
22
23 Note that ssh-agent(1) will automatically pass the -v flag to
24 ssh-pkcs11-helper when it has itself been placed in debug mode.
25
16SEE ALSO 26SEE ALSO
17 ssh(1), ssh-add(1), ssh-agent(1) 27 ssh(1), ssh-add(1), ssh-agent(1)
18 28
@@ -22,4 +32,4 @@ HISTORY
22AUTHORS 32AUTHORS
23 Markus Friedl <markus@openbsd.org> 33 Markus Friedl <markus@openbsd.org>
24 34
25OpenBSD 6.4 July 16, 2013 OpenBSD 6.4 35OpenBSD 6.5 January 21, 2019 OpenBSD 6.5
diff --git a/ssh-pkcs11-helper.8 b/ssh-pkcs11-helper.8
index 3728c4e4e..ba5c30fa0 100644
--- a/ssh-pkcs11-helper.8
+++ b/ssh-pkcs11-helper.8
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-pkcs11-helper.8,v 1.4 2013/07/16 00:07:52 schwarze Exp $ 1.\" $OpenBSD: ssh-pkcs11-helper.8,v 1.5 2019/01/21 12:53:35 djm Exp $
2.\" 2.\"
3.\" Copyright (c) 2010 Markus Friedl. All rights reserved. 3.\" Copyright (c) 2010 Markus Friedl. All rights reserved.
4.\" 4.\"
@@ -14,7 +14,7 @@
14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16.\" 16.\"
17.Dd $Mdocdate: July 16 2013 $ 17.Dd $Mdocdate: January 21 2019 $
18.Dt SSH-PKCS11-HELPER 8 18.Dt SSH-PKCS11-HELPER 8
19.Os 19.Os
20.Sh NAME 20.Sh NAME
@@ -22,6 +22,7 @@
22.Nd ssh-agent helper program for PKCS#11 support 22.Nd ssh-agent helper program for PKCS#11 support
23.Sh SYNOPSIS 23.Sh SYNOPSIS
24.Nm 24.Nm
25.Op Fl v
25.Sh DESCRIPTION 26.Sh DESCRIPTION
26.Nm 27.Nm
27is used by 28is used by
@@ -31,6 +32,28 @@ to access keys provided by a PKCS#11 token.
31.Nm 32.Nm
32is not intended to be invoked by the user, but from 33is not intended to be invoked by the user, but from
33.Xr ssh-agent 1 . 34.Xr ssh-agent 1 .
35.Pp
36A single option is supported:
37.Bl -tag -width Ds
38.It Fl v
39Verbose mode.
40Causes
41.Nm
42to print debugging messages about its progress.
43This is helpful in debugging problems.
44Multiple
45.Fl v
46options increase the verbosity.
47The maximum is 3.
48.Pp
49Note that
50.Xr ssh-agent 1
51will automatically pass the
52.Fl v
53flag to
54.Nm
55when it has itself been placed in debug mode.
56.El
34.Sh SEE ALSO 57.Sh SEE ALSO
35.Xr ssh 1 , 58.Xr ssh 1 ,
36.Xr ssh-add 1 , 59.Xr ssh-add 1 ,
diff --git a/ssh-pkcs11-helper.c b/ssh-pkcs11-helper.c
index 6301033c5..97fb1212c 100644
--- a/ssh-pkcs11-helper.c
+++ b/ssh-pkcs11-helper.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11-helper.c,v 1.14 2018/01/08 15:18:46 markus Exp $ */ 1/* $OpenBSD: ssh-pkcs11-helper.c,v 1.17 2019/01/23 02:01:10 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -24,10 +24,11 @@
24 24
25#include "openbsd-compat/sys-queue.h" 25#include "openbsd-compat/sys-queue.h"
26 26
27#include <errno.h>
28#include <poll.h>
27#include <stdarg.h> 29#include <stdarg.h>
28#include <string.h> 30#include <string.h>
29#include <unistd.h> 31#include <unistd.h>
30#include <errno.h>
31 32
32#include "xmalloc.h" 33#include "xmalloc.h"
33#include "sshbuf.h" 34#include "sshbuf.h"
@@ -110,7 +111,7 @@ static void
110process_add(void) 111process_add(void)
111{ 112{
112 char *name, *pin; 113 char *name, *pin;
113 struct sshkey **keys; 114 struct sshkey **keys = NULL;
114 int r, i, nkeys; 115 int r, i, nkeys;
115 u_char *blob; 116 u_char *blob;
116 size_t blen; 117 size_t blen;
@@ -139,11 +140,13 @@ process_add(void)
139 free(blob); 140 free(blob);
140 add_key(keys[i], name); 141 add_key(keys[i], name);
141 } 142 }
142 free(keys);
143 } else { 143 } else {
144 if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0) 144 if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0)
145 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 145 fatal("%s: buffer error: %s", __func__, ssh_err(r));
146 if ((r = sshbuf_put_u32(msg, -nkeys)) != 0)
147 fatal("%s: buffer error: %s", __func__, ssh_err(r));
146 } 148 }
149 free(keys);
147 free(pin); 150 free(pin);
148 free(name); 151 free(name);
149 send_msg(msg); 152 send_msg(msg);
@@ -192,15 +195,33 @@ process_sign(void)
192 else { 195 else {
193 if ((found = lookup_key(key)) != NULL) { 196 if ((found = lookup_key(key)) != NULL) {
194#ifdef WITH_OPENSSL 197#ifdef WITH_OPENSSL
198 u_int xslen;
195 int ret; 199 int ret;
196 200
197 slen = RSA_size(key->rsa); 201 if (key->type == KEY_RSA) {
198 signature = xmalloc(slen); 202 slen = RSA_size(key->rsa);
199 if ((ret = RSA_private_encrypt(dlen, data, signature, 203 signature = xmalloc(slen);
200 found->rsa, RSA_PKCS1_PADDING)) != -1) { 204 ret = RSA_private_encrypt(dlen, data, signature,
201 slen = ret; 205 found->rsa, RSA_PKCS1_PADDING);
202 ok = 0; 206 if (ret != -1) {
203 } 207 slen = ret;
208 ok = 0;
209 }
210 } else if (key->type == KEY_ECDSA) {
211 xslen = ECDSA_size(key->ecdsa);
212 signature = xmalloc(xslen);
213 /* "The parameter type is ignored." */
214 ret = ECDSA_sign(-1, data, dlen, signature,
215 &xslen, found->ecdsa);
216 if (ret != 0)
217 ok = 0;
218 else
219 error("%s: ECDSA_sign"
220 " returns %d", __func__, ret);
221 slen = xslen;
222 } else
223 error("%s: don't know how to sign with key "
224 "type %d", __func__, (int)key->type);
204#endif /* WITH_OPENSSL */ 225#endif /* WITH_OPENSSL */
205 } 226 }
206 sshkey_free(key); 227 sshkey_free(key);
@@ -287,27 +308,44 @@ cleanup_exit(int i)
287 _exit(i); 308 _exit(i);
288} 309}
289 310
311
290int 312int
291main(int argc, char **argv) 313main(int argc, char **argv)
292{ 314{
293 fd_set *rset, *wset; 315 int r, ch, in, out, max, log_stderr = 0;
294 int r, in, out, max, log_stderr = 0; 316 ssize_t len;
295 ssize_t len, olen, set_size;
296 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH; 317 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
297 LogLevel log_level = SYSLOG_LEVEL_ERROR; 318 LogLevel log_level = SYSLOG_LEVEL_ERROR;
298 char buf[4*4096]; 319 char buf[4*4096];
299
300 extern char *__progname; 320 extern char *__progname;
321 struct pollfd pfd[2];
301 322
302 ssh_malloc_init(); /* must be called before any mallocs */ 323 ssh_malloc_init(); /* must be called before any mallocs */
324 __progname = ssh_get_progname(argv[0]);
325 seed_rng();
303 TAILQ_INIT(&pkcs11_keylist); 326 TAILQ_INIT(&pkcs11_keylist);
304 pkcs11_init(0);
305 327
306 seed_rng(); 328 log_init(__progname, log_level, log_facility, log_stderr);
307 __progname = ssh_get_progname(argv[0]); 329
330 while ((ch = getopt(argc, argv, "v")) != -1) {
331 switch (ch) {
332 case 'v':
333 log_stderr = 1;
334 if (log_level == SYSLOG_LEVEL_ERROR)
335 log_level = SYSLOG_LEVEL_DEBUG1;
336 else if (log_level < SYSLOG_LEVEL_DEBUG3)
337 log_level++;
338 break;
339 default:
340 fprintf(stderr, "usage: %s [-v]\n", __progname);
341 exit(1);
342 }
343 }
308 344
309 log_init(__progname, log_level, log_facility, log_stderr); 345 log_init(__progname, log_level, log_facility, log_stderr);
310 346
347 pkcs11_init(0);
348
311 in = STDIN_FILENO; 349 in = STDIN_FILENO;
312 out = STDOUT_FILENO; 350 out = STDOUT_FILENO;
313 351
@@ -322,13 +360,10 @@ main(int argc, char **argv)
322 if ((oqueue = sshbuf_new()) == NULL) 360 if ((oqueue = sshbuf_new()) == NULL)
323 fatal("%s: sshbuf_new failed", __func__); 361 fatal("%s: sshbuf_new failed", __func__);
324 362
325 set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask); 363 while (1) {
326 rset = xmalloc(set_size); 364 memset(pfd, 0, sizeof(pfd));
327 wset = xmalloc(set_size); 365 pfd[0].fd = in;
328 366 pfd[1].fd = out;
329 for (;;) {
330 memset(rset, 0, set_size);
331 memset(wset, 0, set_size);
332 367
333 /* 368 /*
334 * Ensure that we can read a full buffer and handle 369 * Ensure that we can read a full buffer and handle
@@ -337,23 +372,21 @@ main(int argc, char **argv)
337 */ 372 */
338 if ((r = sshbuf_check_reserve(iqueue, sizeof(buf))) == 0 && 373 if ((r = sshbuf_check_reserve(iqueue, sizeof(buf))) == 0 &&
339 (r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0) 374 (r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0)
340 FD_SET(in, rset); 375 pfd[0].events = POLLIN;
341 else if (r != SSH_ERR_NO_BUFFER_SPACE) 376 else if (r != SSH_ERR_NO_BUFFER_SPACE)
342 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 377 fatal("%s: buffer error: %s", __func__, ssh_err(r));
343 378
344 olen = sshbuf_len(oqueue); 379 if (sshbuf_len(oqueue) > 0)
345 if (olen > 0) 380 pfd[1].events = POLLOUT;
346 FD_SET(out, wset);
347 381
348 if (select(max+1, rset, wset, NULL, NULL) < 0) { 382 if ((r = poll(pfd, 2, -1 /* INFTIM */)) <= 0) {
349 if (errno == EINTR) 383 if (r == 0 || errno == EINTR)
350 continue; 384 continue;
351 error("select: %s", strerror(errno)); 385 fatal("poll: %s", strerror(errno));
352 cleanup_exit(2);
353 } 386 }
354 387
355 /* copy stdin to iqueue */ 388 /* copy stdin to iqueue */
356 if (FD_ISSET(in, rset)) { 389 if ((pfd[0].revents & (POLLIN|POLLERR)) != 0) {
357 len = read(in, buf, sizeof buf); 390 len = read(in, buf, sizeof buf);
358 if (len == 0) { 391 if (len == 0) {
359 debug("read eof"); 392 debug("read eof");
@@ -367,8 +400,9 @@ main(int argc, char **argv)
367 } 400 }
368 } 401 }
369 /* send oqueue to stdout */ 402 /* send oqueue to stdout */
370 if (FD_ISSET(out, wset)) { 403 if ((pfd[1].revents & (POLLOUT|POLLHUP)) != 0) {
371 len = write(out, sshbuf_ptr(oqueue), olen); 404 len = write(out, sshbuf_ptr(oqueue),
405 sshbuf_len(oqueue));
372 if (len < 0) { 406 if (len < 0) {
373 error("write: %s", strerror(errno)); 407 error("write: %s", strerror(errno));
374 cleanup_exit(1); 408 cleanup_exit(1);
diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c
index 775de9642..70f06bffe 100644
--- a/ssh-pkcs11.c
+++ b/ssh-pkcs11.c
@@ -1,6 +1,7 @@
1/* $OpenBSD: ssh-pkcs11.c,v 1.26 2018/02/07 02:06:51 jsing Exp $ */ 1/* $OpenBSD: ssh-pkcs11.c,v 1.43 2019/03/08 17:24:43 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * Copyright (c) 2014 Pedro Martelletto. All rights reserved.
4 * 5 *
5 * Permission to use, copy, modify, and distribute this software for any 6 * Permission to use, copy, modify, and distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above 7 * purpose with or without fee is hereby granted, provided that the above
@@ -19,20 +20,24 @@
19 20
20#ifdef ENABLE_PKCS11 21#ifdef ENABLE_PKCS11
21 22
22#include <sys/types.h>
23#ifdef HAVE_SYS_TIME_H 23#ifdef HAVE_SYS_TIME_H
24# include <sys/time.h> 24# include <sys/time.h>
25#endif 25#endif
26
27#include <sys/types.h>
26#include <stdarg.h> 28#include <stdarg.h>
27#include <stdio.h> 29#include <stdio.h>
28 30
31#include <ctype.h>
29#include <string.h> 32#include <string.h>
30#include <dlfcn.h> 33#include <dlfcn.h>
31 34
32#include "openbsd-compat/sys-queue.h" 35#include "openbsd-compat/sys-queue.h"
33#include "openbsd-compat/openssl-compat.h" 36#include "openbsd-compat/openssl-compat.h"
34 37
38#include <openssl/ecdsa.h>
35#include <openssl/x509.h> 39#include <openssl/x509.h>
40#include <openssl/err.h>
36 41
37#define CRYPTOKI_COMPAT 42#define CRYPTOKI_COMPAT
38#include "pkcs11.h" 43#include "pkcs11.h"
@@ -67,14 +72,25 @@ TAILQ_HEAD(, pkcs11_provider) pkcs11_providers;
67struct pkcs11_key { 72struct pkcs11_key {
68 struct pkcs11_provider *provider; 73 struct pkcs11_provider *provider;
69 CK_ULONG slotidx; 74 CK_ULONG slotidx;
70 int (*orig_finish)(RSA *rsa);
71 RSA_METHOD *rsa_method;
72 char *keyid; 75 char *keyid;
73 int keyid_len; 76 int keyid_len;
74}; 77};
75 78
76int pkcs11_interactive = 0; 79int pkcs11_interactive = 0;
77 80
81#ifdef HAVE_EC_KEY_METHOD_NEW
82static void
83ossl_error(const char *msg)
84{
85 unsigned long e;
86
87 error("%s: %s", __func__, msg);
88 while ((e = ERR_get_error()) != 0)
89 error("%s: libcrypto error: %.100s", __func__,
90 ERR_error_string(e, NULL));
91}
92#endif /* HAVE_EC_KEY_METHOD_NEW */
93
78int 94int
79pkcs11_init(int interactive) 95pkcs11_init(int interactive)
80{ 96{
@@ -84,9 +100,9 @@ pkcs11_init(int interactive)
84} 100}
85 101
86/* 102/*
87 * finalize a provider shared libarary, it's no longer usable. 103 * finalize a provider shared library, it's no longer usable.
88 * however, there might still be keys referencing this provider, 104 * however, there might still be keys referencing this provider,
89 * so the actuall freeing of memory is handled by pkcs11_provider_unref(). 105 * so the actual freeing of memory is handled by pkcs11_provider_unref().
90 * this is called when a provider gets unregistered. 106 * this is called when a provider gets unregistered.
91 */ 107 */
92static void 108static void
@@ -123,6 +139,7 @@ pkcs11_provider_unref(struct pkcs11_provider *p)
123 if (--p->refcount <= 0) { 139 if (--p->refcount <= 0) {
124 if (p->valid) 140 if (p->valid)
125 error("pkcs11_provider_unref: %p still valid", p); 141 error("pkcs11_provider_unref: %p still valid", p);
142 free(p->name);
126 free(p->slotlist); 143 free(p->slotlist);
127 free(p->slotinfo); 144 free(p->slotinfo);
128 free(p); 145 free(p);
@@ -171,23 +188,27 @@ pkcs11_del_provider(char *provider_id)
171 return (-1); 188 return (-1);
172} 189}
173 190
174/* openssl callback for freeing an RSA key */ 191static RSA_METHOD *rsa_method;
175static int 192static int rsa_idx = 0;
176pkcs11_rsa_finish(RSA *rsa) 193#ifdef HAVE_EC_KEY_METHOD_NEW
194static EC_KEY_METHOD *ec_key_method;
195static int ec_key_idx = 0;
196#endif
197
198/* release a wrapped object */
199static void
200pkcs11_k11_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad, int idx,
201 long argl, void *argp)
177{ 202{
178 struct pkcs11_key *k11; 203 struct pkcs11_key *k11 = ptr;
179 int rv = -1;
180 204
181 if ((k11 = RSA_get_app_data(rsa)) != NULL) { 205 debug("%s: parent %p ptr %p idx %d", __func__, parent, ptr, idx);
182 if (k11->orig_finish) 206 if (k11 == NULL)
183 rv = k11->orig_finish(rsa); 207 return;
184 if (k11->provider) 208 if (k11->provider)
185 pkcs11_provider_unref(k11->provider); 209 pkcs11_provider_unref(k11->provider);
186 RSA_meth_free(k11->rsa_method); 210 free(k11->keyid);
187 free(k11->keyid); 211 free(k11);
188 free(k11);
189 }
190 return (rv);
191} 212}
192 213
193/* find a single 'obj' for given attributes */ 214/* find a single 'obj' for given attributes */
@@ -218,88 +239,193 @@ pkcs11_find(struct pkcs11_provider *p, CK_ULONG slotidx, CK_ATTRIBUTE *attr,
218 return (ret); 239 return (ret);
219} 240}
220 241
221/* openssl callback doing the actual signing operation */
222static int 242static int
223pkcs11_rsa_private_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa, 243pkcs11_login(struct pkcs11_key *k11, CK_USER_TYPE type)
224 int padding)
225{ 244{
226 struct pkcs11_key *k11;
227 struct pkcs11_slotinfo *si; 245 struct pkcs11_slotinfo *si;
228 CK_FUNCTION_LIST *f; 246 CK_FUNCTION_LIST *f;
229 CK_OBJECT_HANDLE obj;
230 CK_ULONG tlen = 0;
231 CK_RV rv;
232 CK_OBJECT_CLASS private_key_class = CKO_PRIVATE_KEY;
233 CK_BBOOL true_val = CK_TRUE;
234 CK_MECHANISM mech = {
235 CKM_RSA_PKCS, NULL_PTR, 0
236 };
237 CK_ATTRIBUTE key_filter[] = {
238 {CKA_CLASS, NULL, sizeof(private_key_class) },
239 {CKA_ID, NULL, 0},
240 {CKA_SIGN, NULL, sizeof(true_val) }
241 };
242 char *pin = NULL, prompt[1024]; 247 char *pin = NULL, prompt[1024];
243 int rval = -1; 248 CK_RV rv;
244 249
245 key_filter[0].pValue = &private_key_class; 250 if (!k11->provider || !k11->provider->valid) {
246 key_filter[2].pValue = &true_val; 251 error("no pkcs11 (valid) provider found");
252 return (-1);
253 }
254
255 f = k11->provider->function_list;
256 si = &k11->provider->slotinfo[k11->slotidx];
257
258 if (!pkcs11_interactive) {
259 error("need pin entry%s",
260 (si->token.flags & CKF_PROTECTED_AUTHENTICATION_PATH) ?
261 " on reader keypad" : "");
262 return (-1);
263 }
264 if (si->token.flags & CKF_PROTECTED_AUTHENTICATION_PATH)
265 verbose("Deferring PIN entry to reader keypad.");
266 else {
267 snprintf(prompt, sizeof(prompt), "Enter PIN for '%s': ",
268 si->token.label);
269 if ((pin = read_passphrase(prompt, RP_ALLOW_EOF)) == NULL) {
270 debug("%s: no pin specified", __func__);
271 return (-1); /* bail out */
272 }
273 }
274 rv = f->C_Login(si->session, type, (u_char *)pin,
275 (pin != NULL) ? strlen(pin) : 0);
276 if (pin != NULL)
277 freezero(pin, strlen(pin));
278 if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
279 error("C_Login failed: %lu", rv);
280 return (-1);
281 }
282 si->logged_in = 1;
283 return (0);
284}
285
286static int
287pkcs11_check_obj_bool_attrib(struct pkcs11_key *k11, CK_OBJECT_HANDLE obj,
288 CK_ATTRIBUTE_TYPE type, int *val)
289{
290 struct pkcs11_slotinfo *si;
291 CK_FUNCTION_LIST *f;
292 CK_BBOOL flag = 0;
293 CK_ATTRIBUTE attr;
294 CK_RV rv;
295
296 *val = 0;
247 297
248 if ((k11 = RSA_get_app_data(rsa)) == NULL) { 298 if (!k11->provider || !k11->provider->valid) {
249 error("RSA_get_app_data failed for rsa %p", rsa); 299 error("no pkcs11 (valid) provider found");
250 return (-1); 300 return (-1);
251 } 301 }
302
303 f = k11->provider->function_list;
304 si = &k11->provider->slotinfo[k11->slotidx];
305
306 attr.type = type;
307 attr.pValue = &flag;
308 attr.ulValueLen = sizeof(flag);
309
310 rv = f->C_GetAttributeValue(si->session, obj, &attr, 1);
311 if (rv != CKR_OK) {
312 error("C_GetAttributeValue failed: %lu", rv);
313 return (-1);
314 }
315 *val = flag != 0;
316 debug("%s: provider %p slot %lu object %lu: attrib %lu = %d",
317 __func__, k11->provider, k11->slotidx, obj, type, *val);
318 return (0);
319}
320
321static int
322pkcs11_get_key(struct pkcs11_key *k11, CK_MECHANISM_TYPE mech_type)
323{
324 struct pkcs11_slotinfo *si;
325 CK_FUNCTION_LIST *f;
326 CK_OBJECT_HANDLE obj;
327 CK_RV rv;
328 CK_OBJECT_CLASS private_key_class;
329 CK_BBOOL true_val;
330 CK_MECHANISM mech;
331 CK_ATTRIBUTE key_filter[3];
332 int always_auth = 0;
333 int did_login = 0;
334
252 if (!k11->provider || !k11->provider->valid) { 335 if (!k11->provider || !k11->provider->valid) {
253 error("no pkcs11 (valid) provider for rsa %p", rsa); 336 error("no pkcs11 (valid) provider found");
254 return (-1); 337 return (-1);
255 } 338 }
339
256 f = k11->provider->function_list; 340 f = k11->provider->function_list;
257 si = &k11->provider->slotinfo[k11->slotidx]; 341 si = &k11->provider->slotinfo[k11->slotidx];
342
258 if ((si->token.flags & CKF_LOGIN_REQUIRED) && !si->logged_in) { 343 if ((si->token.flags & CKF_LOGIN_REQUIRED) && !si->logged_in) {
259 if (!pkcs11_interactive) { 344 if (pkcs11_login(k11, CKU_USER) < 0) {
260 error("need pin entry%s", (si->token.flags & 345 error("login failed");
261 CKF_PROTECTED_AUTHENTICATION_PATH) ?
262 " on reader keypad" : "");
263 return (-1);
264 }
265 if (si->token.flags & CKF_PROTECTED_AUTHENTICATION_PATH)
266 verbose("Deferring PIN entry to reader keypad.");
267 else {
268 snprintf(prompt, sizeof(prompt),
269 "Enter PIN for '%s': ", si->token.label);
270 pin = read_passphrase(prompt, RP_ALLOW_EOF);
271 if (pin == NULL)
272 return (-1); /* bail out */
273 }
274 rv = f->C_Login(si->session, CKU_USER, (u_char *)pin,
275 (pin != NULL) ? strlen(pin) : 0);
276 if (pin != NULL) {
277 explicit_bzero(pin, strlen(pin));
278 free(pin);
279 }
280 if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
281 error("C_Login failed: %lu", rv);
282 return (-1); 346 return (-1);
283 } 347 }
284 si->logged_in = 1; 348 did_login = 1;
285 } 349 }
350
351 memset(&key_filter, 0, sizeof(key_filter));
352 private_key_class = CKO_PRIVATE_KEY;
353 key_filter[0].type = CKA_CLASS;
354 key_filter[0].pValue = &private_key_class;
355 key_filter[0].ulValueLen = sizeof(private_key_class);
356
357 key_filter[1].type = CKA_ID;
286 key_filter[1].pValue = k11->keyid; 358 key_filter[1].pValue = k11->keyid;
287 key_filter[1].ulValueLen = k11->keyid_len; 359 key_filter[1].ulValueLen = k11->keyid_len;
360
361 true_val = CK_TRUE;
362 key_filter[2].type = CKA_SIGN;
363 key_filter[2].pValue = &true_val;
364 key_filter[2].ulValueLen = sizeof(true_val);
365
288 /* try to find object w/CKA_SIGN first, retry w/o */ 366 /* try to find object w/CKA_SIGN first, retry w/o */
289 if (pkcs11_find(k11->provider, k11->slotidx, key_filter, 3, &obj) < 0 && 367 if (pkcs11_find(k11->provider, k11->slotidx, key_filter, 3, &obj) < 0 &&
290 pkcs11_find(k11->provider, k11->slotidx, key_filter, 2, &obj) < 0) { 368 pkcs11_find(k11->provider, k11->slotidx, key_filter, 2, &obj) < 0) {
291 error("cannot find private key"); 369 error("cannot find private key");
292 } else if ((rv = f->C_SignInit(si->session, &mech, obj)) != CKR_OK) { 370 return (-1);
371 }
372
373 memset(&mech, 0, sizeof(mech));
374 mech.mechanism = mech_type;
375 mech.pParameter = NULL_PTR;
376 mech.ulParameterLen = 0;
377
378 if ((rv = f->C_SignInit(si->session, &mech, obj)) != CKR_OK) {
293 error("C_SignInit failed: %lu", rv); 379 error("C_SignInit failed: %lu", rv);
294 } else { 380 return (-1);
295 /* XXX handle CKR_BUFFER_TOO_SMALL */
296 tlen = RSA_size(rsa);
297 rv = f->C_Sign(si->session, (CK_BYTE *)from, flen, to, &tlen);
298 if (rv == CKR_OK)
299 rval = tlen;
300 else
301 error("C_Sign failed: %lu", rv);
302 } 381 }
382
383 pkcs11_check_obj_bool_attrib(k11, obj, CKA_ALWAYS_AUTHENTICATE,
384 &always_auth); /* ignore errors here */
385 if (always_auth && !did_login) {
386 debug("%s: always-auth key", __func__);
387 if (pkcs11_login(k11, CKU_CONTEXT_SPECIFIC) < 0) {
388 error("login failed for always-auth key");
389 return (-1);
390 }
391 }
392
393 return (0);
394}
395
396/* openssl callback doing the actual signing operation */
397static int
398pkcs11_rsa_private_encrypt(int flen, const u_char *from, u_char *to, RSA *rsa,
399 int padding)
400{
401 struct pkcs11_key *k11;
402 struct pkcs11_slotinfo *si;
403 CK_FUNCTION_LIST *f;
404 CK_ULONG tlen = 0;
405 CK_RV rv;
406 int rval = -1;
407
408 if ((k11 = RSA_get_ex_data(rsa, rsa_idx)) == NULL) {
409 error("RSA_get_ex_data failed for rsa %p", rsa);
410 return (-1);
411 }
412
413 if (pkcs11_get_key(k11, CKM_RSA_PKCS) == -1) {
414 error("pkcs11_get_key failed");
415 return (-1);
416 }
417
418 f = k11->provider->function_list;
419 si = &k11->provider->slotinfo[k11->slotidx];
420 tlen = RSA_size(rsa);
421
422 /* XXX handle CKR_BUFFER_TOO_SMALL */
423 rv = f->C_Sign(si->session, (CK_BYTE *)from, flen, to, &tlen);
424 if (rv == CKR_OK)
425 rval = tlen;
426 else
427 error("C_Sign failed: %lu", rv);
428
303 return (rval); 429 return (rval);
304} 430}
305 431
@@ -310,13 +436,36 @@ pkcs11_rsa_private_decrypt(int flen, const u_char *from, u_char *to, RSA *rsa,
310 return (-1); 436 return (-1);
311} 437}
312 438
439static int
440pkcs11_rsa_start_wrapper(void)
441{
442 if (rsa_method != NULL)
443 return (0);
444 rsa_method = RSA_meth_dup(RSA_get_default_method());
445 if (rsa_method == NULL)
446 return (-1);
447 rsa_idx = RSA_get_ex_new_index(0, "ssh-pkcs11-rsa",
448 NULL, NULL, pkcs11_k11_free);
449 if (rsa_idx == -1)
450 return (-1);
451 if (!RSA_meth_set1_name(rsa_method, "pkcs11") ||
452 !RSA_meth_set_priv_enc(rsa_method, pkcs11_rsa_private_encrypt) ||
453 !RSA_meth_set_priv_dec(rsa_method, pkcs11_rsa_private_decrypt)) {
454 error("%s: setup pkcs11 method failed", __func__);
455 return (-1);
456 }
457 return (0);
458}
459
313/* redirect private key operations for rsa key to pkcs11 token */ 460/* redirect private key operations for rsa key to pkcs11 token */
314static int 461static int
315pkcs11_rsa_wrap(struct pkcs11_provider *provider, CK_ULONG slotidx, 462pkcs11_rsa_wrap(struct pkcs11_provider *provider, CK_ULONG slotidx,
316 CK_ATTRIBUTE *keyid_attrib, RSA *rsa) 463 CK_ATTRIBUTE *keyid_attrib, RSA *rsa)
317{ 464{
318 struct pkcs11_key *k11; 465 struct pkcs11_key *k11;
319 const RSA_METHOD *def = RSA_get_default_method(); 466
467 if (pkcs11_rsa_start_wrapper() == -1)
468 return (-1);
320 469
321 k11 = xcalloc(1, sizeof(*k11)); 470 k11 = xcalloc(1, sizeof(*k11));
322 k11->provider = provider; 471 k11->provider = provider;
@@ -328,22 +477,126 @@ pkcs11_rsa_wrap(struct pkcs11_provider *provider, CK_ULONG slotidx,
328 k11->keyid = xmalloc(k11->keyid_len); 477 k11->keyid = xmalloc(k11->keyid_len);
329 memcpy(k11->keyid, keyid_attrib->pValue, k11->keyid_len); 478 memcpy(k11->keyid, keyid_attrib->pValue, k11->keyid_len);
330 } 479 }
331 k11->rsa_method = RSA_meth_dup(def); 480
332 if (k11->rsa_method == NULL) 481 RSA_set_method(rsa, rsa_method);
333 fatal("%s: RSA_meth_dup failed", __func__); 482 RSA_set_ex_data(rsa, rsa_idx, k11);
334 k11->orig_finish = RSA_meth_get_finish(def);
335 if (!RSA_meth_set1_name(k11->rsa_method, "pkcs11") ||
336 !RSA_meth_set_priv_enc(k11->rsa_method,
337 pkcs11_rsa_private_encrypt) ||
338 !RSA_meth_set_priv_dec(k11->rsa_method,
339 pkcs11_rsa_private_decrypt) ||
340 !RSA_meth_set_finish(k11->rsa_method, pkcs11_rsa_finish))
341 fatal("%s: setup pkcs11 method failed", __func__);
342 RSA_set_method(rsa, k11->rsa_method);
343 RSA_set_app_data(rsa, k11);
344 return (0); 483 return (0);
345} 484}
346 485
486#ifdef HAVE_EC_KEY_METHOD_NEW
487/* openssl callback doing the actual signing operation */
488static ECDSA_SIG *
489ecdsa_do_sign(const unsigned char *dgst, int dgst_len, const BIGNUM *inv,
490 const BIGNUM *rp, EC_KEY *ec)
491{
492 struct pkcs11_key *k11;
493 struct pkcs11_slotinfo *si;
494 CK_FUNCTION_LIST *f;
495 CK_ULONG siglen = 0, bnlen;
496 CK_RV rv;
497 ECDSA_SIG *ret = NULL;
498 u_char *sig;
499 BIGNUM *r = NULL, *s = NULL;
500
501 if ((k11 = EC_KEY_get_ex_data(ec, ec_key_idx)) == NULL) {
502 ossl_error("EC_KEY_get_key_method_data failed for ec");
503 return (NULL);
504 }
505
506 if (pkcs11_get_key(k11, CKM_ECDSA) == -1) {
507 error("pkcs11_get_key failed");
508 return (NULL);
509 }
510
511 f = k11->provider->function_list;
512 si = &k11->provider->slotinfo[k11->slotidx];
513
514 siglen = ECDSA_size(ec);
515 sig = xmalloc(siglen);
516
517 /* XXX handle CKR_BUFFER_TOO_SMALL */
518 rv = f->C_Sign(si->session, (CK_BYTE *)dgst, dgst_len, sig, &siglen);
519 if (rv != CKR_OK) {
520 error("C_Sign failed: %lu", rv);
521 goto done;
522 }
523 if (siglen < 64 || siglen > 132 || siglen % 2) {
524 ossl_error("d2i_ECDSA_SIG failed");
525 goto done;
526 }
527 bnlen = siglen/2;
528 if ((ret = ECDSA_SIG_new()) == NULL) {
529 error("ECDSA_SIG_new failed");
530 goto done;
531 }
532 if ((r = BN_bin2bn(sig, bnlen, NULL)) == NULL ||
533 (s = BN_bin2bn(sig+bnlen, bnlen, NULL)) == NULL) {
534 ossl_error("d2i_ECDSA_SIG failed");
535 ECDSA_SIG_free(ret);
536 ret = NULL;
537 goto done;
538 }
539 if (!ECDSA_SIG_set0(ret, r, s)) {
540 error("%s: ECDSA_SIG_set0 failed", __func__);
541 ECDSA_SIG_free(ret);
542 ret = NULL;
543 goto done;
544 }
545 r = s = NULL; /* now owned by ret */
546 /* success */
547 done:
548 BN_free(r);
549 BN_free(s);
550 free(sig);
551
552 return (ret);
553}
554
555static int
556pkcs11_ecdsa_start_wrapper(void)
557{
558 int (*orig_sign)(int, const unsigned char *, int, unsigned char *,
559 unsigned int *, const BIGNUM *, const BIGNUM *, EC_KEY *) = NULL;
560
561 if (ec_key_method != NULL)
562 return (0);
563 ec_key_idx = EC_KEY_get_ex_new_index(0, "ssh-pkcs11-ecdsa",
564 NULL, NULL, pkcs11_k11_free);
565 if (ec_key_idx == -1)
566 return (-1);
567 ec_key_method = EC_KEY_METHOD_new(EC_KEY_OpenSSL());
568 if (ec_key_method == NULL)
569 return (-1);
570 EC_KEY_METHOD_get_sign(ec_key_method, &orig_sign, NULL, NULL);
571 EC_KEY_METHOD_set_sign(ec_key_method, orig_sign, NULL, ecdsa_do_sign);
572 return (0);
573}
574
575static int
576pkcs11_ecdsa_wrap(struct pkcs11_provider *provider, CK_ULONG slotidx,
577 CK_ATTRIBUTE *keyid_attrib, EC_KEY *ec)
578{
579 struct pkcs11_key *k11;
580
581 if (pkcs11_ecdsa_start_wrapper() == -1)
582 return (-1);
583
584 k11 = xcalloc(1, sizeof(*k11));
585 k11->provider = provider;
586 provider->refcount++; /* provider referenced by ECDSA key */
587 k11->slotidx = slotidx;
588 /* identify key object on smartcard */
589 k11->keyid_len = keyid_attrib->ulValueLen;
590 k11->keyid = xmalloc(k11->keyid_len);
591 memcpy(k11->keyid, keyid_attrib->pValue, k11->keyid_len);
592
593 EC_KEY_set_method(ec, ec_key_method);
594 EC_KEY_set_ex_data(ec, ec_key_idx, k11);
595
596 return (0);
597}
598#endif /* HAVE_EC_KEY_METHOD_NEW */
599
347/* remove trailing spaces */ 600/* remove trailing spaces */
348static void 601static void
349rmspace(u_char *buf, size_t len) 602rmspace(u_char *buf, size_t len)
@@ -364,79 +617,66 @@ rmspace(u_char *buf, size_t len)
364 * if pin == NULL we delay login until key use 617 * if pin == NULL we delay login until key use
365 */ 618 */
366static int 619static int
367pkcs11_open_session(struct pkcs11_provider *p, CK_ULONG slotidx, char *pin) 620pkcs11_open_session(struct pkcs11_provider *p, CK_ULONG slotidx, char *pin,
621 CK_ULONG user)
368{ 622{
369 CK_RV rv; 623 struct pkcs11_slotinfo *si;
370 CK_FUNCTION_LIST *f; 624 CK_FUNCTION_LIST *f;
625 CK_RV rv;
371 CK_SESSION_HANDLE session; 626 CK_SESSION_HANDLE session;
372 int login_required; 627 int login_required, have_pinpad, ret;
628 char prompt[1024], *xpin = NULL;
373 629
374 f = p->function_list; 630 f = p->function_list;
375 login_required = p->slotinfo[slotidx].token.flags & CKF_LOGIN_REQUIRED; 631 si = &p->slotinfo[slotidx];
376 if (pin && login_required && !strlen(pin)) { 632
633 have_pinpad = si->token.flags & CKF_PROTECTED_AUTHENTICATION_PATH;
634 login_required = si->token.flags & CKF_LOGIN_REQUIRED;
635
636 /* fail early before opening session */
637 if (login_required && !have_pinpad && !pkcs11_interactive &&
638 (pin == NULL || strlen(pin) == 0)) {
377 error("pin required"); 639 error("pin required");
378 return (-1); 640 return (-SSH_PKCS11_ERR_PIN_REQUIRED);
379 } 641 }
380 if ((rv = f->C_OpenSession(p->slotlist[slotidx], CKF_RW_SESSION| 642 if ((rv = f->C_OpenSession(p->slotlist[slotidx], CKF_RW_SESSION|
381 CKF_SERIAL_SESSION, NULL, NULL, &session)) 643 CKF_SERIAL_SESSION, NULL, NULL, &session)) != CKR_OK) {
382 != CKR_OK) {
383 error("C_OpenSession failed: %lu", rv); 644 error("C_OpenSession failed: %lu", rv);
384 return (-1); 645 return (-1);
385 } 646 }
386 if (login_required && pin) { 647 if (login_required) {
387 rv = f->C_Login(session, CKU_USER, 648 if (have_pinpad && (pin == NULL || strlen(pin) == 0)) {
388 (u_char *)pin, strlen(pin)); 649 /* defer PIN entry to the reader keypad */
650 rv = f->C_Login(session, CKU_USER, NULL_PTR, 0);
651 } else {
652 if (pkcs11_interactive) {
653 snprintf(prompt, sizeof(prompt),
654 "Enter PIN for '%s': ", si->token.label);
655 if ((xpin = read_passphrase(prompt,
656 RP_ALLOW_EOF)) == NULL) {
657 debug("%s: no pin specified",
658 __func__);
659 return (-SSH_PKCS11_ERR_PIN_REQUIRED);
660 }
661 pin = xpin;
662 }
663 rv = f->C_Login(session, CKU_USER,
664 (u_char *)pin, strlen(pin));
665 if (xpin != NULL)
666 freezero(xpin, strlen(xpin));
667 }
389 if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) { 668 if (rv != CKR_OK && rv != CKR_USER_ALREADY_LOGGED_IN) {
390 error("C_Login failed: %lu", rv); 669 error("C_Login failed: %lu", rv);
670 ret = (rv == CKR_PIN_LOCKED) ?
671 -SSH_PKCS11_ERR_PIN_LOCKED :
672 -SSH_PKCS11_ERR_LOGIN_FAIL;
391 if ((rv = f->C_CloseSession(session)) != CKR_OK) 673 if ((rv = f->C_CloseSession(session)) != CKR_OK)
392 error("C_CloseSession failed: %lu", rv); 674 error("C_CloseSession failed: %lu", rv);
393 return (-1); 675 return (ret);
394 } 676 }
395 p->slotinfo[slotidx].logged_in = 1; 677 si->logged_in = 1;
396 } 678 }
397 p->slotinfo[slotidx].session = session; 679 si->session = session;
398 return (0);
399}
400
401/*
402 * lookup public keys for token in slot identified by slotidx,
403 * add 'wrapped' public keys to the 'keysp' array and increment nkeys.
404 * keysp points to an (possibly empty) array with *nkeys keys.
405 */
406static int pkcs11_fetch_keys_filter(struct pkcs11_provider *, CK_ULONG,
407 CK_ATTRIBUTE [], CK_ATTRIBUTE [3], struct sshkey ***, int *)
408 __attribute__((__bounded__(__minbytes__,4, 3 * sizeof(CK_ATTRIBUTE))));
409
410static int
411pkcs11_fetch_keys(struct pkcs11_provider *p, CK_ULONG slotidx,
412 struct sshkey ***keysp, int *nkeys)
413{
414 CK_OBJECT_CLASS pubkey_class = CKO_PUBLIC_KEY;
415 CK_OBJECT_CLASS cert_class = CKO_CERTIFICATE;
416 CK_ATTRIBUTE pubkey_filter[] = {
417 { CKA_CLASS, NULL, sizeof(pubkey_class) }
418 };
419 CK_ATTRIBUTE cert_filter[] = {
420 { CKA_CLASS, NULL, sizeof(cert_class) }
421 };
422 CK_ATTRIBUTE pubkey_attribs[] = {
423 { CKA_ID, NULL, 0 },
424 { CKA_MODULUS, NULL, 0 },
425 { CKA_PUBLIC_EXPONENT, NULL, 0 }
426 };
427 CK_ATTRIBUTE cert_attribs[] = {
428 { CKA_ID, NULL, 0 },
429 { CKA_SUBJECT, NULL, 0 },
430 { CKA_VALUE, NULL, 0 }
431 };
432 pubkey_filter[0].pValue = &pubkey_class;
433 cert_filter[0].pValue = &cert_class;
434
435 if (pkcs11_fetch_keys_filter(p, slotidx, pubkey_filter, pubkey_attribs,
436 keysp, nkeys) < 0 ||
437 pkcs11_fetch_keys_filter(p, slotidx, cert_filter, cert_attribs,
438 keysp, nkeys) < 0)
439 return (-1);
440 return (0); 680 return (0);
441} 681}
442 682
@@ -451,6 +691,364 @@ pkcs11_key_included(struct sshkey ***keysp, int *nkeys, struct sshkey *key)
451 return (0); 691 return (0);
452} 692}
453 693
694#ifdef HAVE_EC_KEY_METHOD_NEW
695static struct sshkey *
696pkcs11_fetch_ecdsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
697 CK_OBJECT_HANDLE *obj)
698{
699 CK_ATTRIBUTE key_attr[3];
700 CK_SESSION_HANDLE session;
701 CK_FUNCTION_LIST *f = NULL;
702 CK_RV rv;
703 ASN1_OCTET_STRING *octet = NULL;
704 EC_KEY *ec = NULL;
705 EC_GROUP *group = NULL;
706 struct sshkey *key = NULL;
707 const unsigned char *attrp = NULL;
708 int i;
709 int nid;
710
711 memset(&key_attr, 0, sizeof(key_attr));
712 key_attr[0].type = CKA_ID;
713 key_attr[1].type = CKA_EC_POINT;
714 key_attr[2].type = CKA_EC_PARAMS;
715
716 session = p->slotinfo[slotidx].session;
717 f = p->function_list;
718
719 /* figure out size of the attributes */
720 rv = f->C_GetAttributeValue(session, *obj, key_attr, 3);
721 if (rv != CKR_OK) {
722 error("C_GetAttributeValue failed: %lu", rv);
723 return (NULL);
724 }
725
726 /*
727 * Allow CKA_ID (always first attribute) to be empty, but
728 * ensure that none of the others are zero length.
729 * XXX assumes CKA_ID is always first.
730 */
731 if (key_attr[1].ulValueLen == 0 ||
732 key_attr[2].ulValueLen == 0) {
733 error("invalid attribute length");
734 return (NULL);
735 }
736
737 /* allocate buffers for attributes */
738 for (i = 0; i < 3; i++)
739 if (key_attr[i].ulValueLen > 0)
740 key_attr[i].pValue = xcalloc(1, key_attr[i].ulValueLen);
741
742 /* retrieve ID, public point and curve parameters of EC key */
743 rv = f->C_GetAttributeValue(session, *obj, key_attr, 3);
744 if (rv != CKR_OK) {
745 error("C_GetAttributeValue failed: %lu", rv);
746 goto fail;
747 }
748
749 ec = EC_KEY_new();
750 if (ec == NULL) {
751 error("EC_KEY_new failed");
752 goto fail;
753 }
754
755 attrp = key_attr[2].pValue;
756 group = d2i_ECPKParameters(NULL, &attrp, key_attr[2].ulValueLen);
757 if (group == NULL) {
758 ossl_error("d2i_ECPKParameters failed");
759 goto fail;
760 }
761
762 if (EC_KEY_set_group(ec, group) == 0) {
763 ossl_error("EC_KEY_set_group failed");
764 goto fail;
765 }
766
767 if (key_attr[1].ulValueLen <= 2) {
768 error("CKA_EC_POINT too small");
769 goto fail;
770 }
771
772 attrp = key_attr[1].pValue;
773 octet = d2i_ASN1_OCTET_STRING(NULL, &attrp, key_attr[1].ulValueLen);
774 if (octet == NULL) {
775 ossl_error("d2i_ASN1_OCTET_STRING failed");
776 goto fail;
777 }
778 attrp = octet->data;
779 if (o2i_ECPublicKey(&ec, &attrp, octet->length) == NULL) {
780 ossl_error("o2i_ECPublicKey failed");
781 goto fail;
782 }
783
784 nid = sshkey_ecdsa_key_to_nid(ec);
785 if (nid < 0) {
786 error("couldn't get curve nid");
787 goto fail;
788 }
789
790 if (pkcs11_ecdsa_wrap(p, slotidx, &key_attr[0], ec))
791 goto fail;
792
793 key = sshkey_new(KEY_UNSPEC);
794 if (key == NULL) {
795 error("sshkey_new failed");
796 goto fail;
797 }
798
799 key->ecdsa = ec;
800 key->ecdsa_nid = nid;
801 key->type = KEY_ECDSA;
802 key->flags |= SSHKEY_FLAG_EXT;
803 ec = NULL; /* now owned by key */
804
805fail:
806 for (i = 0; i < 3; i++)
807 free(key_attr[i].pValue);
808 if (ec)
809 EC_KEY_free(ec);
810 if (group)
811 EC_GROUP_free(group);
812 if (octet)
813 ASN1_OCTET_STRING_free(octet);
814
815 return (key);
816}
817#endif /* HAVE_EC_KEY_METHOD_NEW */
818
819static struct sshkey *
820pkcs11_fetch_rsa_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
821 CK_OBJECT_HANDLE *obj)
822{
823 CK_ATTRIBUTE key_attr[3];
824 CK_SESSION_HANDLE session;
825 CK_FUNCTION_LIST *f = NULL;
826 CK_RV rv;
827 RSA *rsa = NULL;
828 BIGNUM *rsa_n, *rsa_e;
829 struct sshkey *key = NULL;
830 int i;
831
832 memset(&key_attr, 0, sizeof(key_attr));
833 key_attr[0].type = CKA_ID;
834 key_attr[1].type = CKA_MODULUS;
835 key_attr[2].type = CKA_PUBLIC_EXPONENT;
836
837 session = p->slotinfo[slotidx].session;
838 f = p->function_list;
839
840 /* figure out size of the attributes */
841 rv = f->C_GetAttributeValue(session, *obj, key_attr, 3);
842 if (rv != CKR_OK) {
843 error("C_GetAttributeValue failed: %lu", rv);
844 return (NULL);
845 }
846
847 /*
848 * Allow CKA_ID (always first attribute) to be empty, but
849 * ensure that none of the others are zero length.
850 * XXX assumes CKA_ID is always first.
851 */
852 if (key_attr[1].ulValueLen == 0 ||
853 key_attr[2].ulValueLen == 0) {
854 error("invalid attribute length");
855 return (NULL);
856 }
857
858 /* allocate buffers for attributes */
859 for (i = 0; i < 3; i++)
860 if (key_attr[i].ulValueLen > 0)
861 key_attr[i].pValue = xcalloc(1, key_attr[i].ulValueLen);
862
863 /* retrieve ID, modulus and public exponent of RSA key */
864 rv = f->C_GetAttributeValue(session, *obj, key_attr, 3);
865 if (rv != CKR_OK) {
866 error("C_GetAttributeValue failed: %lu", rv);
867 goto fail;
868 }
869
870 rsa = RSA_new();
871 if (rsa == NULL) {
872 error("RSA_new failed");
873 goto fail;
874 }
875
876 rsa_n = BN_bin2bn(key_attr[1].pValue, key_attr[1].ulValueLen, NULL);
877 rsa_e = BN_bin2bn(key_attr[2].pValue, key_attr[2].ulValueLen, NULL);
878 if (rsa_n == NULL || rsa_e == NULL) {
879 error("BN_bin2bn failed");
880 goto fail;
881 }
882 if (!RSA_set0_key(rsa, rsa_n, rsa_e, NULL))
883 fatal("%s: set key", __func__);
884 rsa_n = rsa_e = NULL; /* transferred */
885
886 if (pkcs11_rsa_wrap(p, slotidx, &key_attr[0], rsa))
887 goto fail;
888
889 key = sshkey_new(KEY_UNSPEC);
890 if (key == NULL) {
891 error("sshkey_new failed");
892 goto fail;
893 }
894
895 key->rsa = rsa;
896 key->type = KEY_RSA;
897 key->flags |= SSHKEY_FLAG_EXT;
898 rsa = NULL; /* now owned by key */
899
900fail:
901 for (i = 0; i < 3; i++)
902 free(key_attr[i].pValue);
903 RSA_free(rsa);
904
905 return (key);
906}
907
908static struct sshkey *
909pkcs11_fetch_x509_pubkey(struct pkcs11_provider *p, CK_ULONG slotidx,
910 CK_OBJECT_HANDLE *obj)
911{
912 CK_ATTRIBUTE cert_attr[3];
913 CK_SESSION_HANDLE session;
914 CK_FUNCTION_LIST *f = NULL;
915 CK_RV rv;
916 X509 *x509 = NULL;
917 EVP_PKEY *evp;
918 RSA *rsa = NULL;
919 EC_KEY *ec = NULL;
920 struct sshkey *key = NULL;
921 int i;
922#ifdef HAVE_EC_KEY_METHOD_NEW
923 int nid;
924#endif
925 const u_char *cp;
926
927 memset(&cert_attr, 0, sizeof(cert_attr));
928 cert_attr[0].type = CKA_ID;
929 cert_attr[1].type = CKA_SUBJECT;
930 cert_attr[2].type = CKA_VALUE;
931
932 session = p->slotinfo[slotidx].session;
933 f = p->function_list;
934
935 /* figure out size of the attributes */
936 rv = f->C_GetAttributeValue(session, *obj, cert_attr, 3);
937 if (rv != CKR_OK) {
938 error("C_GetAttributeValue failed: %lu", rv);
939 return (NULL);
940 }
941
942 /*
943 * Allow CKA_ID (always first attribute) to be empty, but
944 * ensure that none of the others are zero length.
945 * XXX assumes CKA_ID is always first.
946 */
947 if (cert_attr[1].ulValueLen == 0 ||
948 cert_attr[2].ulValueLen == 0) {
949 error("invalid attribute length");
950 return (NULL);
951 }
952
953 /* allocate buffers for attributes */
954 for (i = 0; i < 3; i++)
955 if (cert_attr[i].ulValueLen > 0)
956 cert_attr[i].pValue = xcalloc(1, cert_attr[i].ulValueLen);
957
958 /* retrieve ID, subject and value of certificate */
959 rv = f->C_GetAttributeValue(session, *obj, cert_attr, 3);
960 if (rv != CKR_OK) {
961 error("C_GetAttributeValue failed: %lu", rv);
962 goto fail;
963 }
964
965 x509 = X509_new();
966 if (x509 == NULL) {
967 error("x509_new failed");
968 goto fail;
969 }
970
971 cp = cert_attr[2].pValue;
972 if (d2i_X509(&x509, &cp, cert_attr[2].ulValueLen) == NULL) {
973 error("d2i_x509 failed");
974 goto fail;
975 }
976
977 evp = X509_get_pubkey(x509);
978 if (evp == NULL) {
979 error("X509_get_pubkey failed");
980 goto fail;
981 }
982
983 if (EVP_PKEY_base_id(evp) == EVP_PKEY_RSA) {
984 if (EVP_PKEY_get0_RSA(evp) == NULL) {
985 error("invalid x509; no rsa key");
986 goto fail;
987 }
988 if ((rsa = RSAPublicKey_dup(EVP_PKEY_get0_RSA(evp))) == NULL) {
989 error("RSAPublicKey_dup failed");
990 goto fail;
991 }
992
993 if (pkcs11_rsa_wrap(p, slotidx, &cert_attr[0], rsa))
994 goto fail;
995
996 key = sshkey_new(KEY_UNSPEC);
997 if (key == NULL) {
998 error("sshkey_new failed");
999 goto fail;
1000 }
1001
1002 key->rsa = rsa;
1003 key->type = KEY_RSA;
1004 key->flags |= SSHKEY_FLAG_EXT;
1005 rsa = NULL; /* now owned by key */
1006#ifdef HAVE_EC_KEY_METHOD_NEW
1007 } else if (EVP_PKEY_base_id(evp) == EVP_PKEY_EC) {
1008 if (EVP_PKEY_get0_EC_KEY(evp) == NULL) {
1009 error("invalid x509; no ec key");
1010 goto fail;
1011 }
1012 if ((ec = EC_KEY_dup(EVP_PKEY_get0_EC_KEY(evp))) == NULL) {
1013 error("EC_KEY_dup failed");
1014 goto fail;
1015 }
1016
1017 nid = sshkey_ecdsa_key_to_nid(ec);
1018 if (nid < 0) {
1019 error("couldn't get curve nid");
1020 goto fail;
1021 }
1022
1023 if (pkcs11_ecdsa_wrap(p, slotidx, &cert_attr[0], ec))
1024 goto fail;
1025
1026 key = sshkey_new(KEY_UNSPEC);
1027 if (key == NULL) {
1028 error("sshkey_new failed");
1029 goto fail;
1030 }
1031
1032 key->ecdsa = ec;
1033 key->ecdsa_nid = nid;
1034 key->type = KEY_ECDSA;
1035 key->flags |= SSHKEY_FLAG_EXT;
1036 ec = NULL; /* now owned by key */
1037#endif /* HAVE_EC_KEY_METHOD_NEW */
1038 } else
1039 error("unknown certificate key type");
1040
1041fail:
1042 for (i = 0; i < 3; i++)
1043 free(cert_attr[i].pValue);
1044 X509_free(x509);
1045 RSA_free(rsa);
1046 EC_KEY_free(ec);
1047
1048 return (key);
1049}
1050
1051#if 0
454static int 1052static int
455have_rsa_key(const RSA *rsa) 1053have_rsa_key(const RSA *rsa)
456{ 1054{
@@ -459,140 +1057,402 @@ have_rsa_key(const RSA *rsa)
459 RSA_get0_key(rsa, &rsa_n, &rsa_e, NULL); 1057 RSA_get0_key(rsa, &rsa_n, &rsa_e, NULL);
460 return rsa_n != NULL && rsa_e != NULL; 1058 return rsa_n != NULL && rsa_e != NULL;
461} 1059}
1060#endif
462 1061
1062/*
1063 * lookup certificates for token in slot identified by slotidx,
1064 * add 'wrapped' public keys to the 'keysp' array and increment nkeys.
1065 * keysp points to an (possibly empty) array with *nkeys keys.
1066 */
463static int 1067static int
464pkcs11_fetch_keys_filter(struct pkcs11_provider *p, CK_ULONG slotidx, 1068pkcs11_fetch_certs(struct pkcs11_provider *p, CK_ULONG slotidx,
465 CK_ATTRIBUTE filter[], CK_ATTRIBUTE attribs[3],
466 struct sshkey ***keysp, int *nkeys) 1069 struct sshkey ***keysp, int *nkeys)
467{ 1070{
468 struct sshkey *key; 1071 struct sshkey *key = NULL;
469 RSA *rsa; 1072 CK_OBJECT_CLASS key_class;
470 X509 *x509; 1073 CK_ATTRIBUTE key_attr[1];
471 EVP_PKEY *evp; 1074 CK_SESSION_HANDLE session;
472 int i; 1075 CK_FUNCTION_LIST *f = NULL;
473 const u_char *cp; 1076 CK_RV rv;
474 CK_RV rv; 1077 CK_OBJECT_HANDLE obj;
475 CK_OBJECT_HANDLE obj; 1078 CK_ULONG n = 0;
476 CK_ULONG nfound; 1079 int ret = -1;
477 CK_SESSION_HANDLE session; 1080
478 CK_FUNCTION_LIST *f; 1081 memset(&key_attr, 0, sizeof(key_attr));
1082 memset(&obj, 0, sizeof(obj));
1083
1084 key_class = CKO_CERTIFICATE;
1085 key_attr[0].type = CKA_CLASS;
1086 key_attr[0].pValue = &key_class;
1087 key_attr[0].ulValueLen = sizeof(key_class);
479 1088
480 f = p->function_list;
481 session = p->slotinfo[slotidx].session; 1089 session = p->slotinfo[slotidx].session;
482 /* setup a filter the looks for public keys */ 1090 f = p->function_list;
483 if ((rv = f->C_FindObjectsInit(session, filter, 1)) != CKR_OK) { 1091
1092 rv = f->C_FindObjectsInit(session, key_attr, 1);
1093 if (rv != CKR_OK) {
484 error("C_FindObjectsInit failed: %lu", rv); 1094 error("C_FindObjectsInit failed: %lu", rv);
485 return (-1); 1095 goto fail;
486 } 1096 }
1097
487 while (1) { 1098 while (1) {
488 /* XXX 3 attributes in attribs[] */ 1099 CK_CERTIFICATE_TYPE ck_cert_type;
489 for (i = 0; i < 3; i++) { 1100
490 attribs[i].pValue = NULL; 1101 rv = f->C_FindObjects(session, &obj, 1, &n);
491 attribs[i].ulValueLen = 0; 1102 if (rv != CKR_OK) {
1103 error("C_FindObjects failed: %lu", rv);
1104 goto fail;
492 } 1105 }
493 if ((rv = f->C_FindObjects(session, &obj, 1, &nfound)) != CKR_OK 1106 if (n == 0)
494 || nfound == 0)
495 break; 1107 break;
496 /* found a key, so figure out size of the attributes */ 1108
497 if ((rv = f->C_GetAttributeValue(session, obj, attribs, 3)) 1109 memset(&ck_cert_type, 0, sizeof(ck_cert_type));
498 != CKR_OK) { 1110 memset(&key_attr, 0, sizeof(key_attr));
1111 key_attr[0].type = CKA_CERTIFICATE_TYPE;
1112 key_attr[0].pValue = &ck_cert_type;
1113 key_attr[0].ulValueLen = sizeof(ck_cert_type);
1114
1115 rv = f->C_GetAttributeValue(session, obj, key_attr, 1);
1116 if (rv != CKR_OK) {
499 error("C_GetAttributeValue failed: %lu", rv); 1117 error("C_GetAttributeValue failed: %lu", rv);
500 continue; 1118 goto fail;
501 } 1119 }
502 /* 1120
503 * Allow CKA_ID (always first attribute) to be empty, but 1121 switch (ck_cert_type) {
504 * ensure that none of the others are zero length. 1122 case CKC_X_509:
505 * XXX assumes CKA_ID is always first. 1123 key = pkcs11_fetch_x509_pubkey(p, slotidx, &obj);
506 */ 1124 break;
507 if (attribs[1].ulValueLen == 0 || 1125 default:
508 attribs[2].ulValueLen == 0) { 1126 /* XXX print key type? */
1127 key = NULL;
1128 error("skipping unsupported certificate type");
1129 }
1130
1131 if (key == NULL) {
1132 error("failed to fetch key");
509 continue; 1133 continue;
510 } 1134 }
511 /* allocate buffers for attributes */ 1135
512 for (i = 0; i < 3; i++) { 1136 if (pkcs11_key_included(keysp, nkeys, key)) {
513 if (attribs[i].ulValueLen > 0) { 1137 sshkey_free(key);
514 attribs[i].pValue = xmalloc( 1138 } else {
515 attribs[i].ulValueLen); 1139 /* expand key array and add key */
516 } 1140 *keysp = xrecallocarray(*keysp, *nkeys,
1141 *nkeys + 1, sizeof(struct sshkey *));
1142 (*keysp)[*nkeys] = key;
1143 *nkeys = *nkeys + 1;
1144 debug("have %d keys", *nkeys);
517 } 1145 }
1146 }
518 1147
519 /* 1148 ret = 0;
520 * retrieve ID, modulus and public exponent of RSA key, 1149fail:
521 * or ID, subject and value for certificates. 1150 rv = f->C_FindObjectsFinal(session);
522 */ 1151 if (rv != CKR_OK) {
523 rsa = NULL; 1152 error("C_FindObjectsFinal failed: %lu", rv);
524 if ((rv = f->C_GetAttributeValue(session, obj, attribs, 3)) 1153 ret = -1;
525 != CKR_OK) { 1154 }
1155
1156 return (ret);
1157}
1158
1159/*
1160 * lookup public keys for token in slot identified by slotidx,
1161 * add 'wrapped' public keys to the 'keysp' array and increment nkeys.
1162 * keysp points to an (possibly empty) array with *nkeys keys.
1163 */
1164static int
1165pkcs11_fetch_keys(struct pkcs11_provider *p, CK_ULONG slotidx,
1166 struct sshkey ***keysp, int *nkeys)
1167{
1168 struct sshkey *key = NULL;
1169 CK_OBJECT_CLASS key_class;
1170 CK_ATTRIBUTE key_attr[1];
1171 CK_SESSION_HANDLE session;
1172 CK_FUNCTION_LIST *f = NULL;
1173 CK_RV rv;
1174 CK_OBJECT_HANDLE obj;
1175 CK_ULONG n = 0;
1176 int ret = -1;
1177
1178 memset(&key_attr, 0, sizeof(key_attr));
1179 memset(&obj, 0, sizeof(obj));
1180
1181 key_class = CKO_PUBLIC_KEY;
1182 key_attr[0].type = CKA_CLASS;
1183 key_attr[0].pValue = &key_class;
1184 key_attr[0].ulValueLen = sizeof(key_class);
1185
1186 session = p->slotinfo[slotidx].session;
1187 f = p->function_list;
1188
1189 rv = f->C_FindObjectsInit(session, key_attr, 1);
1190 if (rv != CKR_OK) {
1191 error("C_FindObjectsInit failed: %lu", rv);
1192 goto fail;
1193 }
1194
1195 while (1) {
1196 CK_KEY_TYPE ck_key_type;
1197
1198 rv = f->C_FindObjects(session, &obj, 1, &n);
1199 if (rv != CKR_OK) {
1200 error("C_FindObjects failed: %lu", rv);
1201 goto fail;
1202 }
1203 if (n == 0)
1204 break;
1205
1206 memset(&ck_key_type, 0, sizeof(ck_key_type));
1207 memset(&key_attr, 0, sizeof(key_attr));
1208 key_attr[0].type = CKA_KEY_TYPE;
1209 key_attr[0].pValue = &ck_key_type;
1210 key_attr[0].ulValueLen = sizeof(ck_key_type);
1211
1212 rv = f->C_GetAttributeValue(session, obj, key_attr, 1);
1213 if (rv != CKR_OK) {
526 error("C_GetAttributeValue failed: %lu", rv); 1214 error("C_GetAttributeValue failed: %lu", rv);
527 } else if (attribs[1].type == CKA_MODULUS ) { 1215 goto fail;
528 if ((rsa = RSA_new()) == NULL) {
529 error("RSA_new failed");
530 } else {
531 BIGNUM *rsa_n, *rsa_e;
532
533 rsa_n = BN_bin2bn(attribs[1].pValue,
534 attribs[1].ulValueLen, NULL);
535 rsa_e = BN_bin2bn(attribs[2].pValue,
536 attribs[2].ulValueLen, NULL);
537 if (rsa_n != NULL && rsa_e != NULL) {
538 if (!RSA_set0_key(rsa,
539 rsa_n, rsa_e, NULL))
540 fatal("%s: set key", __func__);
541 rsa_n = rsa_e = NULL; /* transferred */
542 }
543 BN_free(rsa_n);
544 BN_free(rsa_e);
545 }
546 } else {
547 cp = attribs[2].pValue;
548 if ((x509 = X509_new()) == NULL) {
549 error("X509_new failed");
550 } else if (d2i_X509(&x509, &cp, attribs[2].ulValueLen)
551 == NULL) {
552 error("d2i_X509 failed");
553 } else if ((evp = X509_get_pubkey(x509)) == NULL ||
554 EVP_PKEY_base_id(evp) != EVP_PKEY_RSA ||
555 EVP_PKEY_get0_RSA(evp) == NULL) {
556 debug("X509_get_pubkey failed or no rsa");
557 } else if ((rsa = RSAPublicKey_dup(
558 EVP_PKEY_get0_RSA(evp))) == NULL) {
559 error("RSAPublicKey_dup");
560 }
561 X509_free(x509);
562 } 1216 }
563 if (rsa && have_rsa_key(rsa) && 1217
564 pkcs11_rsa_wrap(p, slotidx, &attribs[0], rsa) == 0) { 1218 switch (ck_key_type) {
565 if ((key = sshkey_new(KEY_UNSPEC)) == NULL) 1219 case CKK_RSA:
566 fatal("sshkey_new failed"); 1220 key = pkcs11_fetch_rsa_pubkey(p, slotidx, &obj);
567 key->rsa = rsa; 1221 break;
568 key->type = KEY_RSA; 1222#ifdef HAVE_EC_KEY_METHOD_NEW
569 key->flags |= SSHKEY_FLAG_EXT; 1223 case CKK_ECDSA:
570 if (pkcs11_key_included(keysp, nkeys, key)) { 1224 key = pkcs11_fetch_ecdsa_pubkey(p, slotidx, &obj);
571 sshkey_free(key); 1225 break;
572 } else { 1226#endif /* HAVE_EC_KEY_METHOD_NEW */
573 /* expand key array and add key */ 1227 default:
574 *keysp = xrecallocarray(*keysp, *nkeys, 1228 /* XXX print key type? */
575 *nkeys + 1, sizeof(struct sshkey *)); 1229 key = NULL;
576 (*keysp)[*nkeys] = key; 1230 error("skipping unsupported key type");
577 *nkeys = *nkeys + 1; 1231 }
578 debug("have %d keys", *nkeys); 1232
579 } 1233 if (key == NULL) {
580 } else if (rsa) { 1234 error("failed to fetch key");
581 RSA_free(rsa); 1235 continue;
1236 }
1237
1238 if (pkcs11_key_included(keysp, nkeys, key)) {
1239 sshkey_free(key);
1240 } else {
1241 /* expand key array and add key */
1242 *keysp = xrecallocarray(*keysp, *nkeys,
1243 *nkeys + 1, sizeof(struct sshkey *));
1244 (*keysp)[*nkeys] = key;
1245 *nkeys = *nkeys + 1;
1246 debug("have %d keys", *nkeys);
582 } 1247 }
583 for (i = 0; i < 3; i++)
584 free(attribs[i].pValue);
585 } 1248 }
586 if ((rv = f->C_FindObjectsFinal(session)) != CKR_OK) 1249
1250 ret = 0;
1251fail:
1252 rv = f->C_FindObjectsFinal(session);
1253 if (rv != CKR_OK) {
587 error("C_FindObjectsFinal failed: %lu", rv); 1254 error("C_FindObjectsFinal failed: %lu", rv);
588 return (0); 1255 ret = -1;
1256 }
1257
1258 return (ret);
589} 1259}
590 1260
591/* register a new provider, fails if provider already exists */ 1261#ifdef WITH_PKCS11_KEYGEN
592int 1262#define FILL_ATTR(attr, idx, typ, val, len) \
593pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp) 1263 { (attr[idx]).type=(typ); (attr[idx]).pValue=(val); (attr[idx]).ulValueLen=len; idx++; }
1264
1265static struct sshkey *
1266pkcs11_rsa_generate_private_key(struct pkcs11_provider *p, CK_ULONG slotidx,
1267 char *label, CK_ULONG bits, CK_BYTE keyid, u_int32_t *err)
1268{
1269 struct pkcs11_slotinfo *si;
1270 char *plabel = label ? label : "";
1271 int npub = 0, npriv = 0;
1272 CK_RV rv;
1273 CK_FUNCTION_LIST *f;
1274 CK_SESSION_HANDLE session;
1275 CK_BBOOL true_val = CK_TRUE, false_val = CK_FALSE;
1276 CK_OBJECT_HANDLE pubKey, privKey;
1277 CK_ATTRIBUTE tpub[16], tpriv[16];
1278 CK_MECHANISM mech = {
1279 CKM_RSA_PKCS_KEY_PAIR_GEN, NULL_PTR, 0
1280 };
1281 CK_BYTE pubExponent[] = {
1282 0x01, 0x00, 0x01 /* RSA_F4 in bytes */
1283 };
1284 pubkey_filter[0].pValue = &pubkey_class;
1285 cert_filter[0].pValue = &cert_class;
1286
1287 *err = 0;
1288
1289 FILL_ATTR(tpub, npub, CKA_TOKEN, &true_val, sizeof(true_val));
1290 FILL_ATTR(tpub, npub, CKA_LABEL, plabel, strlen(plabel));
1291 FILL_ATTR(tpub, npub, CKA_ENCRYPT, &false_val, sizeof(false_val));
1292 FILL_ATTR(tpub, npub, CKA_VERIFY, &true_val, sizeof(true_val));
1293 FILL_ATTR(tpub, npub, CKA_VERIFY_RECOVER, &false_val,
1294 sizeof(false_val));
1295 FILL_ATTR(tpub, npub, CKA_WRAP, &false_val, sizeof(false_val));
1296 FILL_ATTR(tpub, npub, CKA_DERIVE, &false_val, sizeof(false_val));
1297 FILL_ATTR(tpub, npub, CKA_MODULUS_BITS, &bits, sizeof(bits));
1298 FILL_ATTR(tpub, npub, CKA_PUBLIC_EXPONENT, pubExponent,
1299 sizeof(pubExponent));
1300 FILL_ATTR(tpub, npub, CKA_ID, &keyid, sizeof(keyid));
1301
1302 FILL_ATTR(tpriv, npriv, CKA_TOKEN, &true_val, sizeof(true_val));
1303 FILL_ATTR(tpriv, npriv, CKA_LABEL, plabel, strlen(plabel));
1304 FILL_ATTR(tpriv, npriv, CKA_PRIVATE, &true_val, sizeof(true_val));
1305 FILL_ATTR(tpriv, npriv, CKA_SENSITIVE, &true_val, sizeof(true_val));
1306 FILL_ATTR(tpriv, npriv, CKA_DECRYPT, &false_val, sizeof(false_val));
1307 FILL_ATTR(tpriv, npriv, CKA_SIGN, &true_val, sizeof(true_val));
1308 FILL_ATTR(tpriv, npriv, CKA_SIGN_RECOVER, &false_val,
1309 sizeof(false_val));
1310 FILL_ATTR(tpriv, npriv, CKA_UNWRAP, &false_val, sizeof(false_val));
1311 FILL_ATTR(tpriv, npriv, CKA_DERIVE, &false_val, sizeof(false_val));
1312 FILL_ATTR(tpriv, npriv, CKA_ID, &keyid, sizeof(keyid));
1313
1314 f = p->function_list;
1315 si = &p->slotinfo[slotidx];
1316 session = si->session;
1317
1318 if ((rv = f->C_GenerateKeyPair(session, &mech, tpub, npub, tpriv, npriv,
1319 &pubKey, &privKey)) != CKR_OK) {
1320 error("%s: key generation failed: error 0x%lx", __func__, rv);
1321 *err = rv;
1322 return NULL;
1323 }
1324
1325 return pkcs11_fetch_rsa_pubkey(p, slotidx, &pubKey);
1326}
1327
1328static int
1329pkcs11_decode_hex(const char *hex, unsigned char **dest, size_t *rlen)
1330{
1331 size_t i, len;
1332 char ptr[3];
1333
1334 if (dest)
1335 *dest = NULL;
1336 if (rlen)
1337 *rlen = 0;
1338
1339 if ((len = strlen(hex)) % 2)
1340 return -1;
1341 len /= 2;
1342
1343 *dest = xmalloc(len);
1344
1345 ptr[2] = '\0';
1346 for (i = 0; i < len; i++) {
1347 ptr[0] = hex[2 * i];
1348 ptr[1] = hex[(2 * i) + 1];
1349 if (!isxdigit(ptr[0]) || !isxdigit(ptr[1]))
1350 return -1;
1351 (*dest)[i] = (unsigned char)strtoul(ptr, NULL, 16);
1352 }
1353
1354 if (rlen)
1355 *rlen = len;
1356
1357 return 0;
1358}
1359
1360static struct ec_curve_info {
1361 const char *name;
1362 const char *oid;
1363 const char *oid_encoded;
1364 size_t size;
1365} ec_curve_infos[] = {
1366 {"prime256v1", "1.2.840.10045.3.1.7", "06082A8648CE3D030107", 256},
1367 {"secp384r1", "1.3.132.0.34", "06052B81040022", 384},
1368 {"secp521r1", "1.3.132.0.35", "06052B81040023", 521},
1369 {NULL, NULL, NULL, 0},
1370};
1371
1372static struct sshkey *
1373pkcs11_ecdsa_generate_private_key(struct pkcs11_provider *p, CK_ULONG slotidx,
1374 char *label, CK_ULONG bits, CK_BYTE keyid, u_int32_t *err)
1375{
1376 struct pkcs11_slotinfo *si;
1377 char *plabel = label ? label : "";
1378 int i;
1379 size_t ecparams_size;
1380 unsigned char *ecparams = NULL;
1381 int npub = 0, npriv = 0;
1382 CK_RV rv;
1383 CK_FUNCTION_LIST *f;
1384 CK_SESSION_HANDLE session;
1385 CK_BBOOL true_val = CK_TRUE, false_val = CK_FALSE;
1386 CK_OBJECT_HANDLE pubKey, privKey;
1387 CK_MECHANISM mech = {
1388 CKM_EC_KEY_PAIR_GEN, NULL_PTR, 0
1389 };
1390 CK_ATTRIBUTE tpub[16], tpriv[16];
1391
1392 *err = 0;
1393
1394 for (i = 0; ec_curve_infos[i].name; i++) {
1395 if (ec_curve_infos[i].size == bits)
1396 break;
1397 }
1398 if (!ec_curve_infos[i].name) {
1399 error("%s: invalid key size %lu", __func__, bits);
1400 return NULL;
1401 }
1402 if (pkcs11_decode_hex(ec_curve_infos[i].oid_encoded, &ecparams,
1403 &ecparams_size) == -1) {
1404 error("%s: invalid oid", __func__);
1405 return NULL;
1406 }
1407
1408 FILL_ATTR(tpub, npub, CKA_TOKEN, &true_val, sizeof(true_val));
1409 FILL_ATTR(tpub, npub, CKA_LABEL, plabel, strlen(plabel));
1410 FILL_ATTR(tpub, npub, CKA_ENCRYPT, &false_val, sizeof(false_val));
1411 FILL_ATTR(tpub, npub, CKA_VERIFY, &true_val, sizeof(true_val));
1412 FILL_ATTR(tpub, npub, CKA_VERIFY_RECOVER, &false_val,
1413 sizeof(false_val));
1414 FILL_ATTR(tpub, npub, CKA_WRAP, &false_val, sizeof(false_val));
1415 FILL_ATTR(tpub, npub, CKA_DERIVE, &false_val, sizeof(false_val));
1416 FILL_ATTR(tpub, npub, CKA_EC_PARAMS, ecparams, ecparams_size);
1417 FILL_ATTR(tpub, npub, CKA_ID, &keyid, sizeof(keyid));
1418
1419 FILL_ATTR(tpriv, npriv, CKA_TOKEN, &true_val, sizeof(true_val));
1420 FILL_ATTR(tpriv, npriv, CKA_LABEL, plabel, strlen(plabel));
1421 FILL_ATTR(tpriv, npriv, CKA_PRIVATE, &true_val, sizeof(true_val));
1422 FILL_ATTR(tpriv, npriv, CKA_SENSITIVE, &true_val, sizeof(true_val));
1423 FILL_ATTR(tpriv, npriv, CKA_DECRYPT, &false_val, sizeof(false_val));
1424 FILL_ATTR(tpriv, npriv, CKA_SIGN, &true_val, sizeof(true_val));
1425 FILL_ATTR(tpriv, npriv, CKA_SIGN_RECOVER, &false_val,
1426 sizeof(false_val));
1427 FILL_ATTR(tpriv, npriv, CKA_UNWRAP, &false_val, sizeof(false_val));
1428 FILL_ATTR(tpriv, npriv, CKA_DERIVE, &false_val, sizeof(false_val));
1429 FILL_ATTR(tpriv, npriv, CKA_ID, &keyid, sizeof(keyid));
1430
1431 f = p->function_list;
1432 si = &p->slotinfo[slotidx];
1433 session = si->session;
1434
1435 if ((rv = f->C_GenerateKeyPair(session, &mech, tpub, npub, tpriv, npriv,
1436 &pubKey, &privKey)) != CKR_OK) {
1437 error("%s: key generation failed: error 0x%lx", __func__, rv);
1438 *err = rv;
1439 return NULL;
1440 }
1441
1442 return pkcs11_fetch_ecdsa_pubkey(p, slotidx, &pubKey);
1443}
1444#endif /* WITH_PKCS11_KEYGEN */
1445
1446/*
1447 * register a new provider, fails if provider already exists. if
1448 * keyp is provided, fetch keys.
1449 */
1450static int
1451pkcs11_register_provider(char *provider_id, char *pin, struct sshkey ***keyp,
1452 struct pkcs11_provider **providerp, CK_ULONG user)
594{ 1453{
595 int nkeys, need_finalize = 0; 1454 int nkeys, need_finalize = 0;
1455 int ret = -1;
596 struct pkcs11_provider *p = NULL; 1456 struct pkcs11_provider *p = NULL;
597 void *handle = NULL; 1457 void *handle = NULL;
598 CK_RV (*getfunctionlist)(CK_FUNCTION_LIST **); 1458 CK_RV (*getfunctionlist)(CK_FUNCTION_LIST **);
@@ -601,13 +1461,19 @@ pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp)
601 CK_TOKEN_INFO *token; 1461 CK_TOKEN_INFO *token;
602 CK_ULONG i; 1462 CK_ULONG i;
603 1463
604 *keyp = NULL; 1464 if (providerp == NULL)
1465 goto fail;
1466 *providerp = NULL;
1467
1468 if (keyp != NULL)
1469 *keyp = NULL;
1470
605 if (pkcs11_provider_lookup(provider_id) != NULL) { 1471 if (pkcs11_provider_lookup(provider_id) != NULL) {
606 debug("%s: provider already registered: %s", 1472 debug("%s: provider already registered: %s",
607 __func__, provider_id); 1473 __func__, provider_id);
608 goto fail; 1474 goto fail;
609 } 1475 }
610 /* open shared pkcs11-libarary */ 1476 /* open shared pkcs11-library */
611 if ((handle = dlopen(provider_id, RTLD_NOW)) == NULL) { 1477 if ((handle = dlopen(provider_id, RTLD_NOW)) == NULL) {
612 error("dlopen %s failed: %s", provider_id, dlerror()); 1478 error("dlopen %s failed: %s", provider_id, dlerror());
613 goto fail; 1479 goto fail;
@@ -653,8 +1519,9 @@ pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp)
653 goto fail; 1519 goto fail;
654 } 1520 }
655 if (p->nslots == 0) { 1521 if (p->nslots == 0) {
656 debug("%s: provider %s returned no slots", __func__, 1522 error("%s: provider %s returned no slots", __func__,
657 provider_id); 1523 provider_id);
1524 ret = -SSH_PKCS11_ERR_NO_SLOTS;
658 goto fail; 1525 goto fail;
659 } 1526 }
660 p->slotlist = xcalloc(p->nslots, sizeof(CK_SLOT_ID)); 1527 p->slotlist = xcalloc(p->nslots, sizeof(CK_SLOT_ID));
@@ -690,43 +1557,251 @@ pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp)
690 provider_id, (unsigned long)i, 1557 provider_id, (unsigned long)i,
691 token->label, token->manufacturerID, token->model, 1558 token->label, token->manufacturerID, token->model,
692 token->serialNumber, token->flags); 1559 token->serialNumber, token->flags);
693 /* open session, login with pin and retrieve public keys */ 1560 /*
694 if (pkcs11_open_session(p, i, pin) == 0) 1561 * open session, login with pin and retrieve public
1562 * keys (if keyp is provided)
1563 */
1564 if ((ret = pkcs11_open_session(p, i, pin, user)) == 0) {
1565 if (keyp == NULL)
1566 continue;
695 pkcs11_fetch_keys(p, i, keyp, &nkeys); 1567 pkcs11_fetch_keys(p, i, keyp, &nkeys);
1568 pkcs11_fetch_certs(p, i, keyp, &nkeys);
1569 }
696 } 1570 }
697 if (nkeys > 0) { 1571
698 TAILQ_INSERT_TAIL(&pkcs11_providers, p, next); 1572 /* now owned by caller */
699 p->refcount++; /* add to provider list */ 1573 *providerp = p;
700 return (nkeys); 1574
701 } 1575 TAILQ_INSERT_TAIL(&pkcs11_providers, p, next);
702 debug("%s: provider %s returned no keys", __func__, provider_id); 1576 p->refcount++; /* add to provider list */
703 /* don't add the provider, since it does not have any keys */ 1577
1578 return (nkeys);
704fail: 1579fail:
705 if (need_finalize && (rv = f->C_Finalize(NULL)) != CKR_OK) 1580 if (need_finalize && (rv = f->C_Finalize(NULL)) != CKR_OK)
706 error("C_Finalize for provider %s failed: %lu", 1581 error("C_Finalize for provider %s failed: %lu",
707 provider_id, rv); 1582 provider_id, rv);
708 if (p) { 1583 if (p) {
1584 free(p->name);
709 free(p->slotlist); 1585 free(p->slotlist);
710 free(p->slotinfo); 1586 free(p->slotinfo);
711 free(p); 1587 free(p);
712 } 1588 }
713 if (handle) 1589 if (handle)
714 dlclose(handle); 1590 dlclose(handle);
715 return (-1); 1591 return (ret);
1592}
1593
1594/*
1595 * register a new provider and get number of keys hold by the token,
1596 * fails if provider already exists
1597 */
1598int
1599pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp)
1600{
1601 struct pkcs11_provider *p = NULL;
1602 int nkeys;
1603
1604 nkeys = pkcs11_register_provider(provider_id, pin, keyp, &p, CKU_USER);
1605
1606 /* no keys found or some other error, de-register provider */
1607 if (nkeys <= 0 && p != NULL) {
1608 TAILQ_REMOVE(&pkcs11_providers, p, next);
1609 pkcs11_provider_finalize(p);
1610 pkcs11_provider_unref(p);
1611 }
1612 if (nkeys == 0)
1613 debug("%s: provider %s returned no keys", __func__,
1614 provider_id);
1615
1616 return (nkeys);
716} 1617}
717 1618
718#else 1619#ifdef WITH_PKCS11_KEYGEN
1620struct sshkey *
1621pkcs11_gakp(char *provider_id, char *pin, unsigned int slotidx, char *label,
1622 unsigned int type, unsigned int bits, unsigned char keyid, u_int32_t *err)
1623{
1624 struct pkcs11_provider *p = NULL;
1625 struct pkcs11_slotinfo *si;
1626 CK_FUNCTION_LIST *f;
1627 CK_SESSION_HANDLE session;
1628 struct sshkey *k = NULL;
1629 int ret = -1, reset_pin = 0, reset_provider = 0;
1630 CK_RV rv;
1631
1632 *err = 0;
719 1633
1634 if ((p = pkcs11_provider_lookup(provider_id)) != NULL)
1635 debug("%s: provider \"%s\" available", __func__, provider_id);
1636 else if ((ret = pkcs11_register_provider(provider_id, pin, NULL, &p,
1637 CKU_SO)) < 0) {
1638 debug("%s: could not register provider %s", __func__,
1639 provider_id);
1640 goto out;
1641 } else
1642 reset_provider = 1;
1643
1644 f = p->function_list;
1645 si = &p->slotinfo[slotidx];
1646 session = si->session;
1647
1648 if ((rv = f->C_SetOperationState(session , pin, strlen(pin),
1649 CK_INVALID_HANDLE, CK_INVALID_HANDLE)) != CKR_OK) {
1650 debug("%s: could not supply SO pin: %lu", __func__, rv);
1651 reset_pin = 0;
1652 } else
1653 reset_pin = 1;
1654
1655 switch (type) {
1656 case KEY_RSA:
1657 if ((k = pkcs11_rsa_generate_private_key(p, slotidx, label,
1658 bits, keyid, err)) == NULL) {
1659 debug("%s: failed to generate RSA key", __func__);
1660 goto out;
1661 }
1662 break;
1663 case KEY_ECDSA:
1664 if ((k = pkcs11_ecdsa_generate_private_key(p, slotidx, label,
1665 bits, keyid, err)) == NULL) {
1666 debug("%s: failed to generate ECDSA key", __func__);
1667 goto out;
1668 }
1669 break;
1670 default:
1671 *err = SSH_PKCS11_ERR_GENERIC;
1672 debug("%s: unknown type %d", __func__, type);
1673 goto out;
1674 }
1675
1676out:
1677 if (reset_pin)
1678 f->C_SetOperationState(session , NULL, 0, CK_INVALID_HANDLE,
1679 CK_INVALID_HANDLE);
1680
1681 if (reset_provider)
1682 pkcs11_del_provider(provider_id);
1683
1684 return (k);
1685}
1686
1687struct sshkey *
1688pkcs11_destroy_keypair(char *provider_id, char *pin, unsigned long slotidx,
1689 unsigned char keyid, u_int32_t *err)
1690{
1691 struct pkcs11_provider *p = NULL;
1692 struct pkcs11_slotinfo *si;
1693 struct sshkey *k = NULL;
1694 int reset_pin = 0, reset_provider = 0;
1695 CK_ULONG nattrs;
1696 CK_FUNCTION_LIST *f;
1697 CK_SESSION_HANDLE session;
1698 CK_ATTRIBUTE attrs[16];
1699 CK_OBJECT_CLASS key_class;
1700 CK_KEY_TYPE key_type;
1701 CK_OBJECT_HANDLE obj = CK_INVALID_HANDLE;
1702 CK_RV rv;
1703
1704 *err = 0;
1705
1706 if ((p = pkcs11_provider_lookup(provider_id)) != NULL) {
1707 debug("%s: using provider \"%s\"", __func__, provider_id);
1708 } else if (pkcs11_register_provider(provider_id, pin, NULL, &p,
1709 CKU_SO) < 0) {
1710 debug("%s: could not register provider %s", __func__,
1711 provider_id);
1712 goto out;
1713 } else
1714 reset_provider = 1;
1715
1716 f = p->function_list;
1717 si = &p->slotinfo[slotidx];
1718 session = si->session;
1719
1720 if ((rv = f->C_SetOperationState(session , pin, strlen(pin),
1721 CK_INVALID_HANDLE, CK_INVALID_HANDLE)) != CKR_OK) {
1722 debug("%s: could not supply SO pin: %lu", __func__, rv);
1723 reset_pin = 0;
1724 } else
1725 reset_pin = 1;
1726
1727 /* private key */
1728 nattrs = 0;
1729 key_class = CKO_PRIVATE_KEY;
1730 FILL_ATTR(attrs, nattrs, CKA_CLASS, &key_class, sizeof(key_class));
1731 FILL_ATTR(attrs, nattrs, CKA_ID, &keyid, sizeof(keyid));
1732
1733 if (pkcs11_find(p, slotidx, attrs, nattrs, &obj) == 0 &&
1734 obj != CK_INVALID_HANDLE) {
1735 if ((rv = f->C_DestroyObject(session, obj)) != CKR_OK) {
1736 debug("%s: could not destroy private key 0x%hhx",
1737 __func__, keyid);
1738 *err = rv;
1739 goto out;
1740 }
1741 }
1742
1743 /* public key */
1744 nattrs = 0;
1745 key_class = CKO_PUBLIC_KEY;
1746 FILL_ATTR(attrs, nattrs, CKA_CLASS, &key_class, sizeof(key_class));
1747 FILL_ATTR(attrs, nattrs, CKA_ID, &keyid, sizeof(keyid));
1748
1749 if (pkcs11_find(p, slotidx, attrs, nattrs, &obj) == 0 &&
1750 obj != CK_INVALID_HANDLE) {
1751
1752 /* get key type */
1753 nattrs = 0;
1754 FILL_ATTR(attrs, nattrs, CKA_KEY_TYPE, &key_type,
1755 sizeof(key_type));
1756 rv = f->C_GetAttributeValue(session, obj, attrs, nattrs);
1757 if (rv != CKR_OK) {
1758 debug("%s: could not get key type of public key 0x%hhx",
1759 __func__, keyid);
1760 *err = rv;
1761 key_type = -1;
1762 }
1763 if (key_type == CKK_RSA)
1764 k = pkcs11_fetch_rsa_pubkey(p, slotidx, &obj);
1765 else if (key_type == CKK_ECDSA)
1766 k = pkcs11_fetch_ecdsa_pubkey(p, slotidx, &obj);
1767
1768 if ((rv = f->C_DestroyObject(session, obj)) != CKR_OK) {
1769 debug("%s: could not destroy public key 0x%hhx",
1770 __func__, keyid);
1771 *err = rv;
1772 goto out;
1773 }
1774 }
1775
1776out:
1777 if (reset_pin)
1778 f->C_SetOperationState(session , NULL, 0, CK_INVALID_HANDLE,
1779 CK_INVALID_HANDLE);
1780
1781 if (reset_provider)
1782 pkcs11_del_provider(provider_id);
1783
1784 return (k);
1785}
1786#endif /* WITH_PKCS11_KEYGEN */
1787#else /* ENABLE_PKCS11 */
720int 1788int
721pkcs11_init(int interactive) 1789pkcs11_init(int interactive)
722{ 1790{
723 return (0); 1791 error("%s: dlopen() not supported", __func__);
1792 return (-1);
1793}
1794
1795int
1796pkcs11_add_provider(char *provider_id, char *pin, struct sshkey ***keyp)
1797{
1798 error("%s: dlopen() not supported", __func__);
1799 return (-1);
724} 1800}
725 1801
726void 1802void
727pkcs11_terminate(void) 1803pkcs11_terminate(void)
728{ 1804{
729 return; 1805 error("%s: dlopen() not supported", __func__);
730} 1806}
731
732#endif /* ENABLE_PKCS11 */ 1807#endif /* ENABLE_PKCS11 */
diff --git a/ssh-pkcs11.h b/ssh-pkcs11.h
index 0ced74f29..b9038450d 100644
--- a/ssh-pkcs11.h
+++ b/ssh-pkcs11.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11.h,v 1.4 2015/01/15 09:40:00 djm Exp $ */ 1/* $OpenBSD: ssh-pkcs11.h,v 1.5 2019/01/20 22:51:37 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -14,10 +14,26 @@
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */ 16 */
17
18/* Errors for pkcs11_add_provider() */
19#define SSH_PKCS11_ERR_GENERIC 1
20#define SSH_PKCS11_ERR_LOGIN_FAIL 2
21#define SSH_PKCS11_ERR_NO_SLOTS 3
22#define SSH_PKCS11_ERR_PIN_REQUIRED 4
23#define SSH_PKCS11_ERR_PIN_LOCKED 5
24
17int pkcs11_init(int); 25int pkcs11_init(int);
18void pkcs11_terminate(void); 26void pkcs11_terminate(void);
19int pkcs11_add_provider(char *, char *, struct sshkey ***); 27int pkcs11_add_provider(char *, char *, struct sshkey ***);
20int pkcs11_del_provider(char *); 28int pkcs11_del_provider(char *);
29#ifdef WITH_PKCS11_KEYGEN
30struct sshkey *
31 pkcs11_gakp(char *, char *, unsigned int, char *, unsigned int,
32 unsigned int, unsigned char, u_int32_t *);
33struct sshkey *
34 pkcs11_destroy_keypair(char *, char *, unsigned long, unsigned char,
35 u_int32_t *);
36#endif
21 37
22#if !defined(WITH_OPENSSL) && defined(ENABLE_PKCS11) 38#if !defined(WITH_OPENSSL) && defined(ENABLE_PKCS11)
23#undef ENABLE_PKCS11 39#undef ENABLE_PKCS11
diff --git a/ssh.0 b/ssh.0
index 2d8994ffc..f53bda666 100644
--- a/ssh.0
+++ b/ssh.0
@@ -130,7 +130,7 @@ DESCRIPTION
130 130
131 -I pkcs11 131 -I pkcs11
132 Specify the PKCS#11 shared library ssh should use to communicate 132 Specify the PKCS#11 shared library ssh should use to communicate
133 with a PKCS#11 token providing the user's private RSA key. 133 with a PKCS#11 token providing keys for user authentication.
134 134
135 -i identity_file 135 -i identity_file
136 Selects a file from which the identity (private key) for public 136 Selects a file from which the identity (private key) for public
@@ -150,6 +150,10 @@ DESCRIPTION
150 TCP forwarding to the ultimate destination from there. Multiple 150 TCP forwarding to the ultimate destination from there. Multiple
151 jump hops may be specified separated by comma characters. This 151 jump hops may be specified separated by comma characters. This
152 is a shortcut to specify a ProxyJump configuration directive. 152 is a shortcut to specify a ProxyJump configuration directive.
153 Note that configuration directives supplied on the command-line
154 generally apply to the destination host and not any specified
155 jump hosts. Use ~/.ssh/config to specify configuration for jump
156 hosts.
153 157
154 -K Enables GSSAPI-based authentication and forwarding (delegation) 158 -K Enables GSSAPI-based authentication and forwarding (delegation)
155 of GSSAPI credentials to the server. 159 of GSSAPI credentials to the server.
@@ -594,36 +598,30 @@ ESCAPE CHARACTERS
594 to stderr. 598 to stderr.
595 599
596TCP FORWARDING 600TCP FORWARDING
597 Forwarding of arbitrary TCP connections over the secure channel can be 601 Forwarding of arbitrary TCP connections over a secure channel can be
598 specified either on the command line or in a configuration file. One 602 specified either on the command line or in a configuration file. One
599 possible application of TCP forwarding is a secure connection to a mail 603 possible application of TCP forwarding is a secure connection to a mail
600 server; another is going through firewalls. 604 server; another is going through firewalls.
601 605
602 In the example below, we look at encrypting communication between an IRC 606 In the example below, we look at encrypting communication for an IRC
603 client and server, even though the IRC server does not directly support 607 client, even though the IRC server it connects to does not directly
604 encrypted communications. This works as follows: the user connects to 608 support encrypted communication. This works as follows: the user
605 the remote host using ssh, specifying a port to be used to forward 609 connects to the remote host using ssh, specifying the ports to be used to
606 connections to the remote server. After that it is possible to start the 610 forward the connection. After that it is possible to start the program
607 service which is to be encrypted on the client machine, connecting to the 611 locally, and ssh will encrypt and forward the connection to the remote
608 same local port, and ssh will encrypt and forward the connection. 612 server.
609 613
610 The following example tunnels an IRC session from client machine 614 The following example tunnels an IRC session from the client to an IRC
611 M-bM-^@M-^\127.0.0.1M-bM-^@M-^] (localhost) to remote server M-bM-^@M-^\server.example.comM-bM-^@M-^]: 615 server at M-bM-^@M-^\server.example.comM-bM-^@M-^], joining channel M-bM-^@M-^\#usersM-bM-^@M-^], nickname
616 M-bM-^@M-^\pinkyM-bM-^@M-^], using the standard IRC port, 6667:
612 617
613 $ ssh -f -L 1234:localhost:6667 server.example.com sleep 10 618 $ ssh -f -L 6667:localhost:6667 server.example.com sleep 10
614 $ irc -c '#users' -p 1234 pinky 127.0.0.1 619 $ irc -c '#users' pinky IRC/127.0.0.1
615
616 This tunnels a connection to IRC server M-bM-^@M-^\server.example.comM-bM-^@M-^], joining
617 channel M-bM-^@M-^\#usersM-bM-^@M-^], nickname M-bM-^@M-^\pinkyM-bM-^@M-^], using port 1234. It doesn't matter
618 which port is used, as long as it's greater than 1023 (remember, only
619 root can open sockets on privileged ports) and doesn't conflict with any
620 ports already in use. The connection is forwarded to port 6667 on the
621 remote server, since that's the standard port for IRC services.
622 620
623 The -f option backgrounds ssh and the remote command M-bM-^@M-^\sleep 10M-bM-^@M-^] is 621 The -f option backgrounds ssh and the remote command M-bM-^@M-^\sleep 10M-bM-^@M-^] is
624 specified to allow an amount of time (10 seconds, in the example) to 622 specified to allow an amount of time (10 seconds, in the example) to
625 start the service which is to be tunnelled. If no connections are made 623 start the program which is going to use the tunnel. If no connections
626 within the time specified, ssh will exit. 624 are made within the time specified, ssh will exit.
627 625
628X11 FORWARDING 626X11 FORWARDING
629 If the ForwardX11 variable is set to M-bM-^@M-^\yesM-bM-^@M-^] (or see the description of the 627 If the ForwardX11 variable is set to M-bM-^@M-^\yesM-bM-^@M-^] (or see the description of the
@@ -979,4 +977,4 @@ AUTHORS
979 created OpenSSH. Markus Friedl contributed the support for SSH protocol 977 created OpenSSH. Markus Friedl contributed the support for SSH protocol
980 versions 1.5 and 2.0. 978 versions 1.5 and 2.0.
981 979
982OpenBSD 6.4 September 20, 2018 OpenBSD 6.4 980OpenBSD 6.5 March 16, 2019 OpenBSD 6.5
diff --git a/ssh.1 b/ssh.1
index 7760c3075..9480eba8d 100644
--- a/ssh.1
+++ b/ssh.1
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: ssh.1,v 1.399 2018/09/20 06:58:48 jmc Exp $ 36.\" $OpenBSD: ssh.1,v 1.402 2019/03/16 19:14:21 jmc Exp $
37.Dd $Mdocdate: September 20 2018 $ 37.Dd $Mdocdate: March 16 2019 $
38.Dt SSH 1 38.Dt SSH 1
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -270,8 +270,8 @@ on the master process.
270.It Fl I Ar pkcs11 270.It Fl I Ar pkcs11
271Specify the PKCS#11 shared library 271Specify the PKCS#11 shared library
272.Nm 272.Nm
273should use to communicate with a PKCS#11 token providing the user's 273should use to communicate with a PKCS#11 token providing keys for user
274private RSA key. 274authentication.
275.Pp 275.Pp
276.It Fl i Ar identity_file 276.It Fl i Ar identity_file
277Selects a file from which the identity (private key) for 277Selects a file from which the identity (private key) for
@@ -308,6 +308,11 @@ Multiple jump hops may be specified separated by comma characters.
308This is a shortcut to specify a 308This is a shortcut to specify a
309.Cm ProxyJump 309.Cm ProxyJump
310configuration directive. 310configuration directive.
311Note that configuration directives supplied on the command-line generally
312apply to the destination host and not any specified jump hosts.
313Use
314.Pa ~/.ssh/config
315to specify configuration for jump hosts.
311.Pp 316.Pp
312.It Fl K 317.It Fl K
313Enables GSSAPI-based authentication and forwarding (delegation) of GSSAPI 318Enables GSSAPI-based authentication and forwarding (delegation) of GSSAPI
@@ -1085,49 +1090,35 @@ Increase the verbosity
1085when errors are being written to stderr. 1090when errors are being written to stderr.
1086.El 1091.El
1087.Sh TCP FORWARDING 1092.Sh TCP FORWARDING
1088Forwarding of arbitrary TCP connections over the secure channel can 1093Forwarding of arbitrary TCP connections over a secure channel
1089be specified either on the command line or in a configuration file. 1094can be specified either on the command line or in a configuration file.
1090One possible application of TCP forwarding is a secure connection to a 1095One possible application of TCP forwarding is a secure connection to a
1091mail server; another is going through firewalls. 1096mail server; another is going through firewalls.
1092.Pp 1097.Pp
1093In the example below, we look at encrypting communication between 1098In the example below, we look at encrypting communication for an IRC client,
1094an IRC client and server, even though the IRC server does not directly 1099even though the IRC server it connects to does not directly
1095support encrypted communications. 1100support encrypted communication.
1096This works as follows: 1101This works as follows:
1097the user connects to the remote host using 1102the user connects to the remote host using
1098.Nm , 1103.Nm ,
1099specifying a port to be used to forward connections 1104specifying the ports to be used to forward the connection.
1100to the remote server. 1105After that it is possible to start the program locally,
1101After that it is possible to start the service which is to be encrypted
1102on the client machine,
1103connecting to the same local port,
1104and 1106and
1105.Nm 1107.Nm
1106will encrypt and forward the connection. 1108will encrypt and forward the connection to the remote server.
1107.Pp 1109.Pp
1108The following example tunnels an IRC session from client machine 1110The following example tunnels an IRC session from the client
1109.Dq 127.0.0.1 1111to an IRC server at
1110(localhost)
1111to remote server
1112.Dq server.example.com :
1113.Bd -literal -offset 4n
1114$ ssh -f -L 1234:localhost:6667 server.example.com sleep 10
1115$ irc -c '#users' -p 1234 pinky 127.0.0.1
1116.Ed
1117.Pp
1118This tunnels a connection to IRC server
1119.Dq server.example.com , 1112.Dq server.example.com ,
1120joining channel 1113joining channel
1121.Dq #users , 1114.Dq #users ,
1122nickname 1115nickname
1123.Dq pinky , 1116.Dq pinky ,
1124using port 1234. 1117using the standard IRC port, 6667:
1125It doesn't matter which port is used, 1118.Bd -literal -offset 4n
1126as long as it's greater than 1023 1119$ ssh -f -L 6667:localhost:6667 server.example.com sleep 10
1127(remember, only root can open sockets on privileged ports) 1120$ irc -c '#users' pinky IRC/127.0.0.1
1128and doesn't conflict with any ports already in use. 1121.Ed
1129The connection is forwarded to port 6667 on the remote server,
1130since that's the standard port for IRC services.
1131.Pp 1122.Pp
1132The 1123The
1133.Fl f 1124.Fl f
@@ -1137,7 +1128,7 @@ and the remote command
1137.Dq sleep 10 1128.Dq sleep 10
1138is specified to allow an amount of time 1129is specified to allow an amount of time
1139(10 seconds, in the example) 1130(10 seconds, in the example)
1140to start the service which is to be tunnelled. 1131to start the program which is going to use the tunnel.
1141If no connections are made within the time specified, 1132If no connections are made within the time specified,
1142.Nm 1133.Nm
1143will exit. 1134will exit.
diff --git a/ssh.c b/ssh.c
index 0777c31e4..91e7c3511 100644
--- a/ssh.c
+++ b/ssh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh.c,v 1.494 2018/10/03 06:38:35 djm Exp $ */ 1/* $OpenBSD: ssh.c,v 1.500 2019/01/19 21:43:56 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -527,7 +527,8 @@ check_load(int r, const char *path, const char *message)
527 * file if the user specifies a config file on the command line. 527 * file if the user specifies a config file on the command line.
528 */ 528 */
529static void 529static void
530process_config_files(const char *host_name, struct passwd *pw, int post_canon) 530process_config_files(const char *host_name, struct passwd *pw, int final_pass,
531 int *want_final_pass)
531{ 532{
532 char buf[PATH_MAX]; 533 char buf[PATH_MAX];
533 int r; 534 int r;
@@ -535,7 +536,8 @@ process_config_files(const char *host_name, struct passwd *pw, int post_canon)
535 if (config != NULL) { 536 if (config != NULL) {
536 if (strcasecmp(config, "none") != 0 && 537 if (strcasecmp(config, "none") != 0 &&
537 !read_config_file(config, pw, host, host_name, &options, 538 !read_config_file(config, pw, host, host_name, &options,
538 SSHCONF_USERCONF | (post_canon ? SSHCONF_POSTCANON : 0))) 539 SSHCONF_USERCONF | (final_pass ? SSHCONF_FINAL : 0),
540 want_final_pass))
539 fatal("Can't open user config file %.100s: " 541 fatal("Can't open user config file %.100s: "
540 "%.100s", config, strerror(errno)); 542 "%.100s", config, strerror(errno));
541 } else { 543 } else {
@@ -544,12 +546,12 @@ process_config_files(const char *host_name, struct passwd *pw, int post_canon)
544 if (r > 0 && (size_t)r < sizeof(buf)) 546 if (r > 0 && (size_t)r < sizeof(buf))
545 (void)read_config_file(buf, pw, host, host_name, 547 (void)read_config_file(buf, pw, host, host_name,
546 &options, SSHCONF_CHECKPERM | SSHCONF_USERCONF | 548 &options, SSHCONF_CHECKPERM | SSHCONF_USERCONF |
547 (post_canon ? SSHCONF_POSTCANON : 0)); 549 (final_pass ? SSHCONF_FINAL : 0), want_final_pass);
548 550
549 /* Read systemwide configuration file after user config. */ 551 /* Read systemwide configuration file after user config. */
550 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw, 552 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw,
551 host, host_name, &options, 553 host, host_name, &options,
552 post_canon ? SSHCONF_POSTCANON : 0); 554 final_pass ? SSHCONF_FINAL : 0, want_final_pass);
553 } 555 }
554} 556}
555 557
@@ -581,7 +583,7 @@ main(int ac, char **av)
581{ 583{
582 struct ssh *ssh = NULL; 584 struct ssh *ssh = NULL;
583 int i, r, opt, exit_status, use_syslog, direct, timeout_ms; 585 int i, r, opt, exit_status, use_syslog, direct, timeout_ms;
584 int was_addr, config_test = 0, opt_terminated = 0; 586 int was_addr, config_test = 0, opt_terminated = 0, want_final_pass = 0;
585 char *p, *cp, *line, *argv0, buf[PATH_MAX], *logfile; 587 char *p, *cp, *line, *argv0, buf[PATH_MAX], *logfile;
586 char cname[NI_MAXHOST]; 588 char cname[NI_MAXHOST];
587 struct stat st; 589 struct stat st;
@@ -610,6 +612,8 @@ main(int ac, char **av)
610 av = saved_av; 612 av = saved_av;
611#endif 613#endif
612 614
615 seed_rng();
616
613 /* 617 /*
614 * Discard other fds that are hanging around. These can cause problem 618 * Discard other fds that are hanging around. These can cause problem
615 * with backgrounded ssh processes started by ControlPersist. 619 * with backgrounded ssh processes started by ControlPersist.
@@ -647,7 +651,6 @@ main(int ac, char **av)
647 if ((ssh = ssh_alloc_session_state()) == NULL) 651 if ((ssh = ssh_alloc_session_state()) == NULL)
648 fatal("Couldn't allocate session state"); 652 fatal("Couldn't allocate session state");
649 channel_init_channels(ssh); 653 channel_init_channels(ssh);
650 active_state = ssh; /* XXX legacy API compat */
651 654
652 /* Parse command-line arguments. */ 655 /* Parse command-line arguments. */
653 host = NULL; 656 host = NULL;
@@ -816,7 +819,7 @@ main(int ac, char **av)
816 fprintf(stderr, "%s, %s\n", 819 fprintf(stderr, "%s, %s\n",
817 SSH_RELEASE, 820 SSH_RELEASE,
818#ifdef WITH_OPENSSL 821#ifdef WITH_OPENSSL
819 SSLeay_version(SSLEAY_VERSION) 822 OpenSSL_version(OPENSSL_VERSION)
820#else 823#else
821 "without OpenSSL" 824 "without OpenSSL"
822#endif 825#endif
@@ -1036,11 +1039,6 @@ main(int ac, char **av)
1036 1039
1037 host_arg = xstrdup(host); 1040 host_arg = xstrdup(host);
1038 1041
1039#ifdef WITH_OPENSSL
1040 OpenSSL_add_all_algorithms();
1041 ERR_load_crypto_strings();
1042#endif
1043
1044 /* Initialize the command to execute on remote host. */ 1042 /* Initialize the command to execute on remote host. */
1045 if ((command = sshbuf_new()) == NULL) 1043 if ((command = sshbuf_new()) == NULL)
1046 fatal("sshbuf_new failed"); 1044 fatal("sshbuf_new failed");
@@ -1085,14 +1083,16 @@ main(int ac, char **av)
1085 if (debug_flag) 1083 if (debug_flag)
1086 logit("%s, %s", SSH_RELEASE, 1084 logit("%s, %s", SSH_RELEASE,
1087#ifdef WITH_OPENSSL 1085#ifdef WITH_OPENSSL
1088 SSLeay_version(SSLEAY_VERSION) 1086 OpenSSL_version(OPENSSL_VERSION)
1089#else 1087#else
1090 "without OpenSSL" 1088 "without OpenSSL"
1091#endif 1089#endif
1092 ); 1090 );
1093 1091
1094 /* Parse the configuration files */ 1092 /* Parse the configuration files */
1095 process_config_files(host_arg, pw, 0); 1093 process_config_files(host_arg, pw, 0, &want_final_pass);
1094 if (want_final_pass)
1095 debug("configuration requests final Match pass");
1096 1096
1097 /* Hostname canonicalisation needs a few options filled. */ 1097 /* Hostname canonicalisation needs a few options filled. */
1098 fill_default_options_for_canonicalization(&options); 1098 fill_default_options_for_canonicalization(&options);
@@ -1149,12 +1149,17 @@ main(int ac, char **av)
1149 * If canonicalisation is enabled then re-parse the configuration 1149 * If canonicalisation is enabled then re-parse the configuration
1150 * files as new stanzas may match. 1150 * files as new stanzas may match.
1151 */ 1151 */
1152 if (options.canonicalize_hostname != 0) { 1152 if (options.canonicalize_hostname != 0 && !want_final_pass) {
1153 debug("Re-reading configuration after hostname " 1153 debug("hostname canonicalisation enabled, "
1154 "canonicalisation"); 1154 "will re-parse configuration");
1155 want_final_pass = 1;
1156 }
1157
1158 if (want_final_pass) {
1159 debug("re-parsing configuration");
1155 free(options.hostname); 1160 free(options.hostname);
1156 options.hostname = xstrdup(host); 1161 options.hostname = xstrdup(host);
1157 process_config_files(host_arg, pw, 1); 1162 process_config_files(host_arg, pw, 1, NULL);
1158 /* 1163 /*
1159 * Address resolution happens early with canonicalisation 1164 * Address resolution happens early with canonicalisation
1160 * enabled and the port number may have changed since, so 1165 * enabled and the port number may have changed since, so
@@ -1264,8 +1269,6 @@ main(int ac, char **av)
1264 tty_flag = 0; 1269 tty_flag = 0;
1265 } 1270 }
1266 1271
1267 seed_rng();
1268
1269 if (options.user == NULL) 1272 if (options.user == NULL)
1270 options.user = xstrdup(pw->pw_name); 1273 options.user = xstrdup(pw->pw_name);
1271 1274
@@ -1344,7 +1347,7 @@ main(int ac, char **av)
1344 int sock; 1347 int sock;
1345 if ((sock = muxclient(options.control_path)) >= 0) { 1348 if ((sock = muxclient(options.control_path)) >= 0) {
1346 ssh_packet_set_connection(ssh, sock, sock); 1349 ssh_packet_set_connection(ssh, sock, sock);
1347 packet_set_mux(); 1350 ssh_packet_set_mux(ssh);
1348 goto skip_connect; 1351 goto skip_connect;
1349 } 1352 }
1350 } 1353 }
@@ -1371,11 +1374,9 @@ main(int ac, char **av)
1371 if (addrs != NULL) 1374 if (addrs != NULL)
1372 freeaddrinfo(addrs); 1375 freeaddrinfo(addrs);
1373 1376
1374 packet_set_timeout(options.server_alive_interval, 1377 ssh_packet_set_timeout(ssh, options.server_alive_interval,
1375 options.server_alive_count_max); 1378 options.server_alive_count_max);
1376 1379
1377 ssh = active_state; /* XXX */
1378
1379 if (timeout_ms > 0) 1380 if (timeout_ms > 0)
1380 debug3("timeout: %d ms remain after connect", timeout_ms); 1381 debug3("timeout: %d ms remain after connect", timeout_ms);
1381 1382
@@ -1486,10 +1487,10 @@ main(int ac, char **av)
1486 signal(SIGCHLD, main_sigchld_handler); 1487 signal(SIGCHLD, main_sigchld_handler);
1487 1488
1488 /* Log into the remote system. Never returns if the login fails. */ 1489 /* Log into the remote system. Never returns if the login fails. */
1489 ssh_login(&sensitive_data, host, (struct sockaddr *)&hostaddr, 1490 ssh_login(ssh, &sensitive_data, host, (struct sockaddr *)&hostaddr,
1490 options.port, pw, timeout_ms); 1491 options.port, pw, timeout_ms);
1491 1492
1492 if (packet_connection_is_on_socket()) { 1493 if (ssh_packet_connection_is_on_socket(ssh)) {
1493 verbose("Authenticated to %s ([%s]:%d).", host, 1494 verbose("Authenticated to %s ([%s]:%d).", host,
1494 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh)); 1495 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
1495 } else { 1496 } else {
@@ -1523,7 +1524,7 @@ main(int ac, char **av)
1523 1524
1524 skip_connect: 1525 skip_connect:
1525 exit_status = ssh_session2(ssh, pw); 1526 exit_status = ssh_session2(ssh, pw);
1526 packet_close(); 1527 ssh_packet_close(ssh);
1527 1528
1528 if (options.control_path != NULL && muxserver_sock != -1) 1529 if (options.control_path != NULL && muxserver_sock != -1)
1529 unlink(options.control_path); 1530 unlink(options.control_path);
@@ -1598,6 +1599,8 @@ static void
1598ssh_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt) 1599ssh_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt)
1599{ 1600{
1600 struct Forward *rfwd = (struct Forward *)ctxt; 1601 struct Forward *rfwd = (struct Forward *)ctxt;
1602 u_int port;
1603 int r;
1601 1604
1602 /* XXX verbose() on failure? */ 1605 /* XXX verbose() on failure? */
1603 debug("remote forward %s for: listen %s%s%d, connect %s:%d", 1606 debug("remote forward %s for: listen %s%s%d, connect %s:%d",
@@ -1609,12 +1612,25 @@ ssh_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt)
1609 rfwd->connect_host, rfwd->connect_port); 1612 rfwd->connect_host, rfwd->connect_port);
1610 if (rfwd->listen_path == NULL && rfwd->listen_port == 0) { 1613 if (rfwd->listen_path == NULL && rfwd->listen_port == 0) {
1611 if (type == SSH2_MSG_REQUEST_SUCCESS) { 1614 if (type == SSH2_MSG_REQUEST_SUCCESS) {
1612 rfwd->allocated_port = packet_get_int(); 1615 if ((r = sshpkt_get_u32(ssh, &port)) != 0)
1613 logit("Allocated port %u for remote forward to %s:%d", 1616 fatal("%s: %s", __func__, ssh_err(r));
1614 rfwd->allocated_port, 1617 if (port > 65535) {
1615 rfwd->connect_host, rfwd->connect_port); 1618 error("Invalid allocated port %u for remote "
1616 channel_update_permission(ssh, 1619 "forward to %s:%d", port,
1617 rfwd->handle, rfwd->allocated_port); 1620 rfwd->connect_host, rfwd->connect_port);
1621 /* Ensure failure processing runs below */
1622 type = SSH2_MSG_REQUEST_FAILURE;
1623 channel_update_permission(ssh,
1624 rfwd->handle, -1);
1625 } else {
1626 rfwd->allocated_port = (int)port;
1627 logit("Allocated port %u for remote "
1628 "forward to %s:%d",
1629 rfwd->allocated_port, rfwd->connect_host,
1630 rfwd->connect_port);
1631 channel_update_permission(ssh,
1632 rfwd->handle, rfwd->allocated_port);
1633 }
1618 } else { 1634 } else {
1619 channel_update_permission(ssh, rfwd->handle, -1); 1635 channel_update_permission(ssh, rfwd->handle, -1);
1620 } 1636 }
@@ -1771,7 +1787,7 @@ ssh_session2_setup(struct ssh *ssh, int id, int success, void *arg)
1771{ 1787{
1772 extern char **environ; 1788 extern char **environ;
1773 const char *display; 1789 const char *display;
1774 int interactive = tty_flag; 1790 int r, interactive = tty_flag;
1775 char *proto = NULL, *data = NULL; 1791 char *proto = NULL, *data = NULL;
1776 1792
1777 if (!success) 1793 if (!success)
@@ -1797,11 +1813,12 @@ ssh_session2_setup(struct ssh *ssh, int id, int success, void *arg)
1797 if (options.forward_agent) { 1813 if (options.forward_agent) {
1798 debug("Requesting authentication agent forwarding."); 1814 debug("Requesting authentication agent forwarding.");
1799 channel_request_start(ssh, id, "auth-agent-req@openssh.com", 0); 1815 channel_request_start(ssh, id, "auth-agent-req@openssh.com", 0);
1800 packet_send(); 1816 if ((r = sshpkt_send(ssh)) != 0)
1817 fatal("%s: %s", __func__, ssh_err(r));
1801 } 1818 }
1802 1819
1803 /* Tell the packet module whether this is an interactive session. */ 1820 /* Tell the packet module whether this is an interactive session. */
1804 packet_set_interactive(interactive, 1821 ssh_packet_set_interactive(ssh, interactive,
1805 options.ip_qos_interactive, options.ip_qos_bulk); 1822 options.ip_qos_interactive, options.ip_qos_bulk);
1806 1823
1807 client_session2_setup(ssh, id, tty_flag, subsystem_flag, getenv("TERM"), 1824 client_session2_setup(ssh, id, tty_flag, subsystem_flag, getenv("TERM"),
@@ -1858,7 +1875,7 @@ ssh_session2_open(struct ssh *ssh)
1858static int 1875static int
1859ssh_session2(struct ssh *ssh, struct passwd *pw) 1876ssh_session2(struct ssh *ssh, struct passwd *pw)
1860{ 1877{
1861 int devnull, id = -1; 1878 int r, devnull, id = -1;
1862 char *cp, *tun_fwd_ifname = NULL; 1879 char *cp, *tun_fwd_ifname = NULL;
1863 1880
1864 /* XXX should be pre-session */ 1881 /* XXX should be pre-session */
@@ -1888,7 +1905,7 @@ ssh_session2(struct ssh *ssh, struct passwd *pw)
1888 } 1905 }
1889 1906
1890 /* Start listening for multiplex clients */ 1907 /* Start listening for multiplex clients */
1891 if (!packet_get_mux()) 1908 if (!ssh_packet_get_mux(ssh))
1892 muxserver_listen(ssh); 1909 muxserver_listen(ssh);
1893 1910
1894 /* 1911 /*
@@ -1922,7 +1939,7 @@ ssh_session2(struct ssh *ssh, struct passwd *pw)
1922 if (!no_shell_flag) 1939 if (!no_shell_flag)
1923 id = ssh_session2_open(ssh); 1940 id = ssh_session2_open(ssh);
1924 else { 1941 else {
1925 packet_set_interactive( 1942 ssh_packet_set_interactive(ssh,
1926 options.control_master == SSHCTL_MASTER_NO, 1943 options.control_master == SSHCTL_MASTER_NO,
1927 options.ip_qos_interactive, options.ip_qos_bulk); 1944 options.ip_qos_interactive, options.ip_qos_bulk);
1928 } 1945 }
@@ -1931,10 +1948,12 @@ ssh_session2(struct ssh *ssh, struct passwd *pw)
1931 if (options.control_master == SSHCTL_MASTER_NO && 1948 if (options.control_master == SSHCTL_MASTER_NO &&
1932 (datafellows & SSH_NEW_OPENSSH)) { 1949 (datafellows & SSH_NEW_OPENSSH)) {
1933 debug("Requesting no-more-sessions@openssh.com"); 1950 debug("Requesting no-more-sessions@openssh.com");
1934 packet_start(SSH2_MSG_GLOBAL_REQUEST); 1951 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 ||
1935 packet_put_cstring("no-more-sessions@openssh.com"); 1952 (r = sshpkt_put_cstring(ssh,
1936 packet_put_char(0); 1953 "no-more-sessions@openssh.com")) != 0 ||
1937 packet_send(); 1954 (r = sshpkt_put_u8(ssh, 0)) != 0 ||
1955 (r = sshpkt_send(ssh)) != 0)
1956 fatal("%s: %s", __func__, ssh_err(r));
1938 } 1957 }
1939 1958
1940 /* Execute a local command */ 1959 /* Execute a local command */
diff --git a/ssh.h b/ssh.h
index 5abfd7a68..dda6f617e 100644
--- a/ssh.h
+++ b/ssh.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh.h,v 1.88 2018/06/06 18:29:18 markus Exp $ */ 1/* $OpenBSD: ssh.h,v 1.89 2018/12/27 03:25:25 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -93,3 +93,7 @@
93 93
94/* Listen backlog for sshd, ssh-agent and forwarding sockets */ 94/* Listen backlog for sshd, ssh-agent and forwarding sockets */
95#define SSH_LISTEN_BACKLOG 128 95#define SSH_LISTEN_BACKLOG 128
96
97/* Limits for banner exchange */
98#define SSH_MAX_BANNER_LEN 8192
99#define SSH_MAX_PRE_BANNER_LINES 1024
diff --git a/ssh_api.c b/ssh_api.c
index c84b4e713..57509973b 100644
--- a/ssh_api.c
+++ b/ssh_api.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh_api.c,v 1.8 2017/04/30 23:13:25 djm Exp $ */ 1/* $OpenBSD: ssh_api.c,v 1.15 2019/01/21 10:38:54 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2012 Markus Friedl. All rights reserved. 3 * Copyright (c) 2012 Markus Friedl. All rights reserved.
4 * 4 *
@@ -29,17 +29,19 @@
29#include "ssherr.h" 29#include "ssherr.h"
30#include "sshbuf.h" 30#include "sshbuf.h"
31 31
32#include "openbsd-compat/openssl-compat.h"
33
32#include <string.h> 34#include <string.h>
33 35
34int _ssh_exchange_banner(struct ssh *); 36int _ssh_exchange_banner(struct ssh *);
35int _ssh_send_banner(struct ssh *, char **); 37int _ssh_send_banner(struct ssh *, struct sshbuf *);
36int _ssh_read_banner(struct ssh *, char **); 38int _ssh_read_banner(struct ssh *, struct sshbuf *);
37int _ssh_order_hostkeyalgs(struct ssh *); 39int _ssh_order_hostkeyalgs(struct ssh *);
38int _ssh_verify_host_key(struct sshkey *, struct ssh *); 40int _ssh_verify_host_key(struct sshkey *, struct ssh *);
39struct sshkey *_ssh_host_public_key(int, int, struct ssh *); 41struct sshkey *_ssh_host_public_key(int, int, struct ssh *);
40struct sshkey *_ssh_host_private_key(int, int, struct ssh *); 42struct sshkey *_ssh_host_private_key(int, int, struct ssh *);
41int _ssh_host_key_sign(struct sshkey *, struct sshkey *, 43int _ssh_host_key_sign(struct ssh *, struct sshkey *, struct sshkey *,
42 u_char **, size_t *, const u_char *, size_t, const char *, u_int); 44 u_char **, size_t *, const u_char *, size_t, const char *);
43 45
44/* 46/*
45 * stubs for the server side implementation of kex. 47 * stubs for the server side implementation of kex.
@@ -79,9 +81,7 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params)
79 int r; 81 int r;
80 82
81 if (!called) { 83 if (!called) {
82#ifdef WITH_OPENSSL 84 seed_rng();
83 OpenSSL_add_all_algorithms();
84#endif /* WITH_OPENSSL */
85 called = 1; 85 called = 1;
86 } 86 }
87 87
@@ -92,42 +92,44 @@ ssh_init(struct ssh **sshp, int is_server, struct kex_params *kex_params)
92 92
93 /* Initialize key exchange */ 93 /* Initialize key exchange */
94 proposal = kex_params ? kex_params->proposal : myproposal; 94 proposal = kex_params ? kex_params->proposal : myproposal;
95 if ((r = kex_new(ssh, proposal, &ssh->kex)) != 0) { 95 if ((r = kex_ready(ssh, proposal)) != 0) {
96 ssh_free(ssh); 96 ssh_free(ssh);
97 return r; 97 return r;
98 } 98 }
99 ssh->kex->server = is_server; 99 ssh->kex->server = is_server;
100 if (is_server) { 100 if (is_server) {
101#ifdef WITH_OPENSSL 101#ifdef WITH_OPENSSL
102 ssh->kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; 102 ssh->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server;
103 ssh->kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; 103 ssh->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server;
104 ssh->kex->kex[KEX_DH_GRP14_SHA256] = kexdh_server; 104 ssh->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server;
105 ssh->kex->kex[KEX_DH_GRP16_SHA512] = kexdh_server; 105 ssh->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server;
106 ssh->kex->kex[KEX_DH_GRP18_SHA512] = kexdh_server; 106 ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
107 ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; 107 ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
108 ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; 108 ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
109# ifdef OPENSSL_HAS_ECC 109# ifdef OPENSSL_HAS_ECC
110 ssh->kex->kex[KEX_ECDH_SHA2] = kexecdh_server; 110 ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
111# endif 111# endif
112#endif /* WITH_OPENSSL */ 112#endif /* WITH_OPENSSL */
113 ssh->kex->kex[KEX_C25519_SHA256] = kexc25519_server; 113 ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_server;
114 ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_server;
114 ssh->kex->load_host_public_key=&_ssh_host_public_key; 115 ssh->kex->load_host_public_key=&_ssh_host_public_key;
115 ssh->kex->load_host_private_key=&_ssh_host_private_key; 116 ssh->kex->load_host_private_key=&_ssh_host_private_key;
116 ssh->kex->sign=&_ssh_host_key_sign; 117 ssh->kex->sign=&_ssh_host_key_sign;
117 } else { 118 } else {
118#ifdef WITH_OPENSSL 119#ifdef WITH_OPENSSL
119 ssh->kex->kex[KEX_DH_GRP1_SHA1] = kexdh_client; 120 ssh->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_client;
120 ssh->kex->kex[KEX_DH_GRP14_SHA1] = kexdh_client; 121 ssh->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_client;
121 ssh->kex->kex[KEX_DH_GRP14_SHA256] = kexdh_client; 122 ssh->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_client;
122 ssh->kex->kex[KEX_DH_GRP16_SHA512] = kexdh_client; 123 ssh->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_client;
123 ssh->kex->kex[KEX_DH_GRP18_SHA512] = kexdh_client; 124 ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_client;
124 ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client; 125 ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client;
125 ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client; 126 ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client;
126# ifdef OPENSSL_HAS_ECC 127# ifdef OPENSSL_HAS_ECC
127 ssh->kex->kex[KEX_ECDH_SHA2] = kexecdh_client; 128 ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_client;
128# endif 129# endif
129#endif /* WITH_OPENSSL */ 130#endif /* WITH_OPENSSL */
130 ssh->kex->kex[KEX_C25519_SHA256] = kexc25519_client; 131 ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
132 ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_client;
131 ssh->kex->verify_host_key =&_ssh_verify_host_key; 133 ssh->kex->verify_host_key =&_ssh_verify_host_key;
132 } 134 }
133 *sshp = ssh; 135 *sshp = ssh;
@@ -236,8 +238,8 @@ ssh_packet_next(struct ssh *ssh, u_char *typep)
236 * enough data. 238 * enough data.
237 */ 239 */
238 *typep = SSH_MSG_NONE; 240 *typep = SSH_MSG_NONE;
239 if (ssh->kex->client_version_string == NULL || 241 if (sshbuf_len(ssh->kex->client_version) == 0 ||
240 ssh->kex->server_version_string == NULL) 242 sshbuf_len(ssh->kex->server_version) == 0)
241 return _ssh_exchange_banner(ssh); 243 return _ssh_exchange_banner(ssh);
242 /* 244 /*
243 * If we enough data and a dispatch function then 245 * If we enough data and a dispatch function then
@@ -312,39 +314,46 @@ ssh_input_space(struct ssh *ssh, size_t len)
312 314
313/* Read other side's version identification. */ 315/* Read other side's version identification. */
314int 316int
315_ssh_read_banner(struct ssh *ssh, char **bannerp) 317_ssh_read_banner(struct ssh *ssh, struct sshbuf *banner)
316{ 318{
317 struct sshbuf *input; 319 struct sshbuf *input = ssh_packet_get_input(ssh);
318 const char *s;
319 char buf[256], remote_version[256]; /* must be same size! */
320 const char *mismatch = "Protocol mismatch.\r\n"; 320 const char *mismatch = "Protocol mismatch.\r\n";
321 int r, remote_major, remote_minor; 321 const u_char *s = sshbuf_ptr(input);
322 size_t i, n, j, len; 322 u_char c;
323 char *cp, *remote_version;
324 int r, remote_major, remote_minor, expect_nl;
325 size_t n, j;
323 326
324 *bannerp = NULL;
325 input = ssh_packet_get_input(ssh);
326 len = sshbuf_len(input);
327 s = (const char *)sshbuf_ptr(input);
328 for (j = n = 0;;) { 327 for (j = n = 0;;) {
329 for (i = 0; i < sizeof(buf) - 1; i++) { 328 sshbuf_reset(banner);
330 if (j >= len) 329 expect_nl = 0;
331 return (0); 330 for (;;) {
332 buf[i] = s[j++]; 331 if (j >= sshbuf_len(input))
333 if (buf[i] == '\r') { 332 return 0; /* insufficient data in input buf */
334 buf[i] = '\n'; 333 c = s[j++];
335 buf[i + 1] = 0; 334 if (c == '\r') {
336 continue; /**XXX wait for \n */ 335 expect_nl = 1;
336 continue;
337 } 337 }
338 if (buf[i] == '\n') { 338 if (c == '\n')
339 buf[i + 1] = 0;
340 break; 339 break;
341 } 340 if (expect_nl)
341 goto bad;
342 if ((r = sshbuf_put_u8(banner, c)) != 0)
343 return r;
344 if (sshbuf_len(banner) > SSH_MAX_BANNER_LEN)
345 goto bad;
342 } 346 }
343 buf[sizeof(buf) - 1] = 0; 347 if (sshbuf_len(banner) >= 4 &&
344 if (strncmp(buf, "SSH-", 4) == 0) 348 memcmp(sshbuf_ptr(banner), "SSH-", 4) == 0)
345 break; 349 break;
346 debug("ssh_exchange_identification: %s", buf); 350 if ((cp = sshbuf_dup_string(banner)) == NULL)
347 if (ssh->kex->server || ++n > 65536) { 351 return SSH_ERR_ALLOC_FAIL;
352 debug("%s: %s", __func__, cp);
353 free(cp);
354 /* Accept lines before banner only on client */
355 if (ssh->kex->server || ++n > SSH_MAX_PRE_BANNER_LINES) {
356 bad:
348 if ((r = sshbuf_put(ssh_packet_get_output(ssh), 357 if ((r = sshbuf_put(ssh_packet_get_output(ssh),
349 mismatch, strlen(mismatch))) != 0) 358 mismatch, strlen(mismatch))) != 0)
350 return r; 359 return r;
@@ -354,11 +363,17 @@ _ssh_read_banner(struct ssh *ssh, char **bannerp)
354 if ((r = sshbuf_consume(input, j)) != 0) 363 if ((r = sshbuf_consume(input, j)) != 0)
355 return r; 364 return r;
356 365
366 if ((cp = sshbuf_dup_string(banner)) == NULL)
367 return SSH_ERR_ALLOC_FAIL;
368 /* XXX remote version must be the same size as banner for sscanf */
369 if ((remote_version = calloc(1, sshbuf_len(banner))) == NULL)
370 return SSH_ERR_ALLOC_FAIL;
371
357 /* 372 /*
358 * Check that the versions match. In future this might accept 373 * Check that the versions match. In future this might accept
359 * several versions and set appropriate flags to handle them. 374 * several versions and set appropriate flags to handle them.
360 */ 375 */
361 if (sscanf(buf, "SSH-%d.%d-%[^\n]\n", 376 if (sscanf(cp, "SSH-%d.%d-%[^\n]\n",
362 &remote_major, &remote_minor, remote_version) != 3) 377 &remote_major, &remote_minor, remote_version) != 3)
363 return SSH_ERR_INVALID_FORMAT; 378 return SSH_ERR_INVALID_FORMAT;
364 debug("Remote protocol version %d.%d, remote software version %.100s", 379 debug("Remote protocol version %d.%d, remote software version %.100s",
@@ -371,27 +386,29 @@ _ssh_read_banner(struct ssh *ssh, char **bannerp)
371 } 386 }
372 if (remote_major != 2) 387 if (remote_major != 2)
373 return SSH_ERR_PROTOCOL_MISMATCH; 388 return SSH_ERR_PROTOCOL_MISMATCH;
374 chop(buf); 389 debug("Remote version string %.100s", cp);
375 debug("Remote version string %.100s", buf); 390 free(cp);
376 if ((*bannerp = strdup(buf)) == NULL)
377 return SSH_ERR_ALLOC_FAIL;
378 return 0; 391 return 0;
379} 392}
380 393
381/* Send our own protocol version identification. */ 394/* Send our own protocol version identification. */
382int 395int
383_ssh_send_banner(struct ssh *ssh, char **bannerp) 396_ssh_send_banner(struct ssh *ssh, struct sshbuf *banner)
384{ 397{
385 char buf[256]; 398 char *cp;
386 int r; 399 int r;
387 400
388 snprintf(buf, sizeof buf, "SSH-2.0-%.100s\r\n", SSH_VERSION); 401 if ((r = sshbuf_putf(banner, "SSH-2.0-%.100s\r\n", SSH_VERSION)) != 0)
389 if ((r = sshbuf_put(ssh_packet_get_output(ssh), buf, strlen(buf))) != 0) 402 return r;
403 if ((r = sshbuf_putb(ssh_packet_get_output(ssh), banner)) != 0)
404 return r;
405 /* Remove trailing \r\n */
406 if ((r = sshbuf_consume_end(banner, 2)) != 0)
390 return r; 407 return r;
391 chop(buf); 408 if ((cp = sshbuf_dup_string(banner)) == NULL)
392 debug("Local version string %.100s", buf);
393 if ((*bannerp = strdup(buf)) == NULL)
394 return SSH_ERR_ALLOC_FAIL; 409 return SSH_ERR_ALLOC_FAIL;
410 debug("Local version string %.100s", cp);
411 free(cp);
395 return 0; 412 return 0;
396} 413}
397 414
@@ -408,25 +425,25 @@ _ssh_exchange_banner(struct ssh *ssh)
408 425
409 r = 0; 426 r = 0;
410 if (kex->server) { 427 if (kex->server) {
411 if (kex->server_version_string == NULL) 428 if (sshbuf_len(ssh->kex->server_version) == 0)
412 r = _ssh_send_banner(ssh, &kex->server_version_string); 429 r = _ssh_send_banner(ssh, ssh->kex->server_version);
413 if (r == 0 && 430 if (r == 0 &&
414 kex->server_version_string != NULL && 431 sshbuf_len(ssh->kex->server_version) != 0 &&
415 kex->client_version_string == NULL) 432 sshbuf_len(ssh->kex->client_version) == 0)
416 r = _ssh_read_banner(ssh, &kex->client_version_string); 433 r = _ssh_read_banner(ssh, ssh->kex->client_version);
417 } else { 434 } else {
418 if (kex->server_version_string == NULL) 435 if (sshbuf_len(ssh->kex->server_version) == 0)
419 r = _ssh_read_banner(ssh, &kex->server_version_string); 436 r = _ssh_read_banner(ssh, ssh->kex->server_version);
420 if (r == 0 && 437 if (r == 0 &&
421 kex->server_version_string != NULL && 438 sshbuf_len(ssh->kex->server_version) != 0 &&
422 kex->client_version_string == NULL) 439 sshbuf_len(ssh->kex->client_version) == 0)
423 r = _ssh_send_banner(ssh, &kex->client_version_string); 440 r = _ssh_send_banner(ssh, ssh->kex->client_version);
424 } 441 }
425 if (r != 0) 442 if (r != 0)
426 return r; 443 return r;
427 /* start initial kex as soon as we have exchanged the banners */ 444 /* start initial kex as soon as we have exchanged the banners */
428 if (kex->server_version_string != NULL && 445 if (sshbuf_len(ssh->kex->server_version) != 0 &&
429 kex->client_version_string != NULL) { 446 sshbuf_len(ssh->kex->client_version) != 0) {
430 if ((r = _ssh_order_hostkeyalgs(ssh)) != 0 || 447 if ((r = _ssh_order_hostkeyalgs(ssh)) != 0 ||
431 (r = kex_send_kexinit(ssh)) != 0) 448 (r = kex_send_kexinit(ssh)) != 0)
432 return r; 449 return r;
@@ -532,9 +549,10 @@ _ssh_order_hostkeyalgs(struct ssh *ssh)
532} 549}
533 550
534int 551int
535_ssh_host_key_sign(struct sshkey *privkey, struct sshkey *pubkey, 552_ssh_host_key_sign(struct ssh *ssh, struct sshkey *privkey,
536 u_char **signature, size_t *slen, const u_char *data, size_t dlen, 553 struct sshkey *pubkey, u_char **signature, size_t *slen,
537 const char *alg, u_int compat) 554 const u_char *data, size_t dlen, const char *alg)
538{ 555{
539 return sshkey_sign(privkey, signature, slen, data, dlen, alg, compat); 556 return sshkey_sign(privkey, signature, slen, data, dlen,
557 alg, ssh->compat);
540} 558}
diff --git a/ssh_config b/ssh_config
index c12f5ef52..5e8ef548b 100644
--- a/ssh_config
+++ b/ssh_config
@@ -1,4 +1,4 @@
1# $OpenBSD: ssh_config,v 1.33 2017/05/07 23:12:57 djm Exp $ 1# $OpenBSD: ssh_config,v 1.34 2019/02/04 02:39:42 dtucker Exp $
2 2
3# This is the ssh client system-wide configuration file. See 3# This is the ssh client system-wide configuration file. See
4# ssh_config(5) for more information. This file provides defaults for 4# ssh_config(5) for more information. This file provides defaults for
@@ -34,7 +34,6 @@
34# IdentityFile ~/.ssh/id_ecdsa 34# IdentityFile ~/.ssh/id_ecdsa
35# IdentityFile ~/.ssh/id_ed25519 35# IdentityFile ~/.ssh/id_ed25519
36# Port 22 36# Port 22
37# Protocol 2
38# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc 37# Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
39# MACs hmac-md5,hmac-sha1,umac-64@openssh.com 38# MACs hmac-md5,hmac-sha1,umac-64@openssh.com
40# EscapeChar ~ 39# EscapeChar ~
diff --git a/ssh_config.0 b/ssh_config.0
index eb7f929e6..10f1c2e9d 100644
--- a/ssh_config.0
+++ b/ssh_config.0
@@ -54,22 +54,28 @@ DESCRIPTION
54 Match keyword) to be used only when the conditions following the 54 Match keyword) to be used only when the conditions following the
55 Match keyword are satisfied. Match conditions are specified 55 Match keyword are satisfied. Match conditions are specified
56 using one or more criteria or the single token all which always 56 using one or more criteria or the single token all which always
57 matches. The available criteria keywords are: canonical, exec, 57 matches. The available criteria keywords are: canonical, final,
58 host, originalhost, user, and localuser. The all criteria must 58 exec, host, originalhost, user, and localuser. The all criteria
59 appear alone or immediately after canonical. Other criteria may 59 must appear alone or immediately after canonical or final. Other
60 be combined arbitrarily. All criteria but all and canonical 60 criteria may be combined arbitrarily. All criteria but all,
61 require an argument. Criteria may be negated by prepending an 61 canonical, and final require an argument. Criteria may be
62 exclamation mark (M-bM-^@M-^X!M-bM-^@M-^Y). 62 negated by prepending an exclamation mark (M-bM-^@M-^X!M-bM-^@M-^Y).
63 63
64 The canonical keyword matches only when the configuration file is 64 The canonical keyword matches only when the configuration file is
65 being re-parsed after hostname canonicalization (see the 65 being re-parsed after hostname canonicalization (see the
66 CanonicalizeHostname option.) This may be useful to specify 66 CanonicalizeHostname option). This may be useful to specify
67 conditions that work with canonical host names only. The exec 67 conditions that work with canonical host names only.
68 keyword executes the specified command under the user's shell. 68
69 If the command returns a zero exit status then the condition is 69 The final keyword requests that the configuration be re-parsed
70 considered true. Commands containing whitespace characters must 70 (regardless of whether CanonicalizeHostname is enabled), and
71 be quoted. Arguments to exec accept the tokens described in the 71 matches only during this final pass. If CanonicalizeHostname is
72 TOKENS section. 72 enabled, then canonical and final match during the same pass.
73
74 The exec keyword executes the specified command under the user's
75 shell. If the command returns a zero exit status then the
76 condition is considered true. Commands containing whitespace
77 characters must be quoted. Arguments to exec accept the tokens
78 described in the TOKENS section.
73 79
74 The other keywords' criteria must be single entries or comma- 80 The other keywords' criteria must be single entries or comma-
75 separated lists and may use the wildcard and negation operators 81 separated lists and may use the wildcard and negation operators
@@ -603,7 +609,6 @@ DESCRIPTION
603 diffie-hellman-group-exchange-sha256, 609 diffie-hellman-group-exchange-sha256,
604 diffie-hellman-group16-sha512, 610 diffie-hellman-group16-sha512,
605 diffie-hellman-group18-sha512, 611 diffie-hellman-group18-sha512,
606 diffie-hellman-group-exchange-sha1,
607 diffie-hellman-group14-sha256, 612 diffie-hellman-group14-sha256,
608 diffie-hellman-group14-sha1 613 diffie-hellman-group14-sha1
609 614
@@ -690,10 +695,11 @@ DESCRIPTION
690 be yes or no (the default). 695 be yes or no (the default).
691 696
692 PKCS11Provider 697 PKCS11Provider
693 Specifies which PKCS#11 provider to use. The argument to this 698 Specifies which PKCS#11 provider to use or none to indicate that
694 keyword is the PKCS#11 shared library ssh(1) should use to 699 no provider should be used (the default). The argument to this
695 communicate with a PKCS#11 token providing the user's private RSA 700 keyword is a path to the PKCS#11 shared library ssh(1) should use
696 key. 701 to communicate with a PKCS#11 token providing keys for user
702 authentication.
697 703
698 Port Specifies the port number to connect on the remote host. The 704 Port Specifies the port number to connect on the remote host. The
699 default is 22. 705 default is 22.
@@ -741,6 +747,11 @@ DESCRIPTION
741 whichever is specified first will prevent later instances of the 747 whichever is specified first will prevent later instances of the
742 other from taking effect. 748 other from taking effect.
743 749
750 Note also that the configuration for the destination host (either
751 supplied via the command-line or the configuration file) is not
752 generally applied to jump hosts. ~/.ssh/config should be used if
753 specific configuration is required for jump hosts.
754
744 ProxyUseFdpass 755 ProxyUseFdpass
745 Specifies that ProxyCommand will pass a connected file descriptor 756 Specifies that ProxyCommand will pass a connected file descriptor
746 back to ssh(1) instead of continuing to execute and pass data. 757 back to ssh(1) instead of continuing to execute and pass data.
@@ -1087,8 +1098,7 @@ FILES
1087 This is the per-user configuration file. The format of this file 1098 This is the per-user configuration file. The format of this file
1088 is described above. This file is used by the SSH client. 1099 is described above. This file is used by the SSH client.
1089 Because of the potential for abuse, this file must have strict 1100 Because of the potential for abuse, this file must have strict
1090 permissions: read/write for the user, and not accessible by 1101 permissions: read/write for the user, and not writable by others.
1091 others.
1092 1102
1093 /etc/ssh/ssh_config 1103 /etc/ssh/ssh_config
1094 Systemwide configuration file. This file provides defaults for 1104 Systemwide configuration file. This file provides defaults for
@@ -1106,4 +1116,4 @@ AUTHORS
1106 created OpenSSH. Markus Friedl contributed the support for SSH protocol 1116 created OpenSSH. Markus Friedl contributed the support for SSH protocol
1107 versions 1.5 and 2.0. 1117 versions 1.5 and 2.0.
1108 1118
1109OpenBSD 6.4 October 3, 2018 OpenBSD 6.4 1119OpenBSD 6.5 March 1, 2019 OpenBSD 6.5
diff --git a/ssh_config.5 b/ssh_config.5
index 4d5b01d3e..412629637 100644
--- a/ssh_config.5
+++ b/ssh_config.5
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: ssh_config.5,v 1.286 2018/10/03 06:38:35 djm Exp $ 36.\" $OpenBSD: ssh_config.5,v 1.292 2019/03/01 02:16:47 djm Exp $
37.Dd $Mdocdate: October 3 2018 $ 37.Dd $Mdocdate: March 1 2019 $
38.Dt SSH_CONFIG 5 38.Dt SSH_CONFIG 5
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -139,6 +139,7 @@ or the single token
139which always matches. 139which always matches.
140The available criteria keywords are: 140The available criteria keywords are:
141.Cm canonical , 141.Cm canonical ,
142.Cm final ,
142.Cm exec , 143.Cm exec ,
143.Cm host , 144.Cm host ,
144.Cm originalhost , 145.Cm originalhost ,
@@ -148,12 +149,15 @@ and
148The 149The
149.Cm all 150.Cm all
150criteria must appear alone or immediately after 151criteria must appear alone or immediately after
151.Cm canonical . 152.Cm canonical
153or
154.Cm final .
152Other criteria may be combined arbitrarily. 155Other criteria may be combined arbitrarily.
153All criteria but 156All criteria but
154.Cm all 157.Cm all ,
158.Cm canonical ,
155and 159and
156.Cm canonical 160.Cm final
157require an argument. 161require an argument.
158Criteria may be negated by prepending an exclamation mark 162Criteria may be negated by prepending an exclamation mark
159.Pq Sq !\& . 163.Pq Sq !\& .
@@ -163,9 +167,23 @@ The
163keyword matches only when the configuration file is being re-parsed 167keyword matches only when the configuration file is being re-parsed
164after hostname canonicalization (see the 168after hostname canonicalization (see the
165.Cm CanonicalizeHostname 169.Cm CanonicalizeHostname
166option.) 170option).
167This may be useful to specify conditions that work with canonical host 171This may be useful to specify conditions that work with canonical host
168names only. 172names only.
173.Pp
174The
175.Cm final
176keyword requests that the configuration be re-parsed (regardless of whether
177.Cm CanonicalizeHostname
178is enabled), and matches only during this final pass.
179If
180.Cm CanonicalizeHostname
181is enabled, then
182.Cm canonical
183and
184.Cm final
185match during the same pass.
186.Pp
169The 187The
170.Cm exec 188.Cm exec
171keyword executes the specified command under the user's shell. 189keyword executes the specified command under the user's shell.
@@ -1040,7 +1058,6 @@ ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
1040diffie-hellman-group-exchange-sha256, 1058diffie-hellman-group-exchange-sha256,
1041diffie-hellman-group16-sha512, 1059diffie-hellman-group16-sha512,
1042diffie-hellman-group18-sha512, 1060diffie-hellman-group18-sha512,
1043diffie-hellman-group-exchange-sha1,
1044diffie-hellman-group14-sha256, 1061diffie-hellman-group14-sha256,
1045diffie-hellman-group14-sha1 1062diffie-hellman-group14-sha1
1046.Ed 1063.Ed
@@ -1163,11 +1180,13 @@ or
1163.Cm no 1180.Cm no
1164(the default). 1181(the default).
1165.It Cm PKCS11Provider 1182.It Cm PKCS11Provider
1166Specifies which PKCS#11 provider to use. 1183Specifies which PKCS#11 provider to use or
1167The argument to this keyword is the PKCS#11 shared library 1184.Cm none
1185to indicate that no provider should be used (the default).
1186The argument to this keyword is a path to the PKCS#11 shared library
1168.Xr ssh 1 1187.Xr ssh 1
1169should use to communicate with a PKCS#11 token providing the user's 1188should use to communicate with a PKCS#11 token providing keys for user
1170private RSA key. 1189authentication.
1171.It Cm Port 1190.It Cm Port
1172Specifies the port number to connect on the remote host. 1191Specifies the port number to connect on the remote host.
1173The default is 22. 1192The default is 22.
@@ -1245,6 +1264,12 @@ Note that this option will compete with the
1245.Cm ProxyCommand 1264.Cm ProxyCommand
1246option - whichever is specified first will prevent later instances of the 1265option - whichever is specified first will prevent later instances of the
1247other from taking effect. 1266other from taking effect.
1267.Pp
1268Note also that the configuration for the destination host (either supplied
1269via the command-line or the configuration file) is not generally applied
1270to jump hosts.
1271.Pa ~/.ssh/config
1272should be used if specific configuration is required for jump hosts.
1248.It Cm ProxyUseFdpass 1273.It Cm ProxyUseFdpass
1249Specifies that 1274Specifies that
1250.Cm ProxyCommand 1275.Cm ProxyCommand
@@ -1785,7 +1810,7 @@ This is the per-user configuration file.
1785The format of this file is described above. 1810The format of this file is described above.
1786This file is used by the SSH client. 1811This file is used by the SSH client.
1787Because of the potential for abuse, this file must have strict permissions: 1812Because of the potential for abuse, this file must have strict permissions:
1788read/write for the user, and not accessible by others. 1813read/write for the user, and not writable by others.
1789.It Pa /etc/ssh/ssh_config 1814.It Pa /etc/ssh/ssh_config
1790Systemwide configuration file. 1815Systemwide configuration file.
1791This file provides defaults for those 1816This file provides defaults for those
diff --git a/sshbuf-getput-crypto.c b/sshbuf-getput-crypto.c
index d0d791b50..3dd1e1446 100644
--- a/sshbuf-getput-crypto.c
+++ b/sshbuf-getput-crypto.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshbuf-getput-crypto.c,v 1.5 2016/01/12 23:42:54 djm Exp $ */ 1/* $OpenBSD: sshbuf-getput-crypto.c,v 1.7 2019/01/21 09:54:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller 3 * Copyright (c) 2011 Damien Miller
4 * 4 *
@@ -32,41 +32,24 @@
32#include "sshbuf.h" 32#include "sshbuf.h"
33 33
34int 34int
35sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM *v) 35sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM **valp)
36{ 36{
37 BIGNUM *v;
37 const u_char *d; 38 const u_char *d;
38 size_t len; 39 size_t len;
39 int r; 40 int r;
40 41
42 if (valp != NULL)
43 *valp = NULL;
41 if ((r = sshbuf_get_bignum2_bytes_direct(buf, &d, &len)) != 0) 44 if ((r = sshbuf_get_bignum2_bytes_direct(buf, &d, &len)) != 0)
42 return r; 45 return r;
43 if (v != NULL && BN_bin2bn(d, len, v) == NULL) 46 if (valp != NULL) {
44 return SSH_ERR_ALLOC_FAIL; 47 if ((v = BN_new()) == NULL ||
45 return 0; 48 BN_bin2bn(d, len, v) == NULL) {
46} 49 BN_clear_free(v);
47 50 return SSH_ERR_ALLOC_FAIL;
48int 51 }
49sshbuf_get_bignum1(struct sshbuf *buf, BIGNUM *v) 52 *valp = v;
50{
51 const u_char *d = sshbuf_ptr(buf);
52 u_int16_t len_bits;
53 size_t len_bytes;
54
55 /* Length in bits */
56 if (sshbuf_len(buf) < 2)
57 return SSH_ERR_MESSAGE_INCOMPLETE;
58 len_bits = PEEK_U16(d);
59 len_bytes = (len_bits + 7) >> 3;
60 if (len_bytes > SSHBUF_MAX_BIGNUM)
61 return SSH_ERR_BIGNUM_TOO_LARGE;
62 if (sshbuf_len(buf) < 2 + len_bytes)
63 return SSH_ERR_MESSAGE_INCOMPLETE;
64 if (v != NULL && BN_bin2bn(d + 2, len_bytes, v) == NULL)
65 return SSH_ERR_ALLOC_FAIL;
66 if (sshbuf_consume(buf, 2 + len_bytes) != 0) {
67 SSHBUF_DBG(("SSH_ERR_INTERNAL_ERROR"));
68 SSHBUF_ABORT();
69 return SSH_ERR_INTERNAL_ERROR;
70 } 53 }
71 return 0; 54 return 0;
72} 55}
@@ -165,28 +148,6 @@ sshbuf_put_bignum2(struct sshbuf *buf, const BIGNUM *v)
165 return 0; 148 return 0;
166} 149}
167 150
168int
169sshbuf_put_bignum1(struct sshbuf *buf, const BIGNUM *v)
170{
171 int r, len_bits = BN_num_bits(v);
172 size_t len_bytes = (len_bits + 7) / 8;
173 u_char d[SSHBUF_MAX_BIGNUM], *dp;
174
175 if (len_bits < 0 || len_bytes > SSHBUF_MAX_BIGNUM)
176 return SSH_ERR_INVALID_ARGUMENT;
177 if (BN_bn2bin(v, d) != (int)len_bytes)
178 return SSH_ERR_INTERNAL_ERROR; /* Shouldn't happen */
179 if ((r = sshbuf_reserve(buf, len_bytes + 2, &dp)) < 0) {
180 explicit_bzero(d, sizeof(d));
181 return r;
182 }
183 POKE_U16(dp, len_bits);
184 if (len_bytes != 0)
185 memcpy(dp + 2, d, len_bytes);
186 explicit_bzero(d, sizeof(d));
187 return 0;
188}
189
190#ifdef OPENSSL_HAS_ECC 151#ifdef OPENSSL_HAS_ECC
191int 152int
192sshbuf_put_ec(struct sshbuf *buf, const EC_POINT *v, const EC_GROUP *g) 153sshbuf_put_ec(struct sshbuf *buf, const EC_POINT *v, const EC_GROUP *g)
diff --git a/sshbuf.c b/sshbuf.c
index 20ddf9eb6..adfddf775 100644
--- a/sshbuf.c
+++ b/sshbuf.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshbuf.c,v 1.12 2018/07/09 21:56:06 markus Exp $ */ 1/* $OpenBSD: sshbuf.c,v 1.13 2018/11/16 06:10:29 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller 3 * Copyright (c) 2011 Damien Miller
4 * 4 *
@@ -143,12 +143,7 @@ sshbuf_free(struct sshbuf *buf)
143 */ 143 */
144 if (sshbuf_check_sanity(buf) != 0) 144 if (sshbuf_check_sanity(buf) != 0)
145 return; 145 return;
146 /* 146
147 * If we are a child, the free our parent to decrement its reference
148 * count and possibly free it.
149 */
150 sshbuf_free(buf->parent);
151 buf->parent = NULL;
152 /* 147 /*
153 * If we are a parent with still-extant children, then don't free just 148 * If we are a parent with still-extant children, then don't free just
154 * yet. The last child's call to sshbuf_free should decrement our 149 * yet. The last child's call to sshbuf_free should decrement our
@@ -157,6 +152,14 @@ sshbuf_free(struct sshbuf *buf)
157 buf->refcount--; 152 buf->refcount--;
158 if (buf->refcount > 0) 153 if (buf->refcount > 0)
159 return; 154 return;
155
156 /*
157 * If we are a child, the free our parent to decrement its reference
158 * count and possibly free it.
159 */
160 sshbuf_free(buf->parent);
161 buf->parent = NULL;
162
160 if (!buf->readonly) { 163 if (!buf->readonly) {
161 explicit_bzero(buf->d, buf->alloc); 164 explicit_bzero(buf->d, buf->alloc);
162 free(buf->d); 165 free(buf->d);
diff --git a/sshbuf.h b/sshbuf.h
index a43598cac..7900b82ba 100644
--- a/sshbuf.h
+++ b/sshbuf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshbuf.h,v 1.11 2018/07/09 21:56:06 markus Exp $ */ 1/* $OpenBSD: sshbuf.h,v 1.13 2019/01/21 09:54:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller 3 * Copyright (c) 2011 Damien Miller
4 * 4 *
@@ -212,10 +212,8 @@ int sshbuf_put_bignum2_bytes(struct sshbuf *buf, const void *v, size_t len);
212int sshbuf_get_bignum2_bytes_direct(struct sshbuf *buf, 212int sshbuf_get_bignum2_bytes_direct(struct sshbuf *buf,
213 const u_char **valp, size_t *lenp); 213 const u_char **valp, size_t *lenp);
214#ifdef WITH_OPENSSL 214#ifdef WITH_OPENSSL
215int sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM *v); 215int sshbuf_get_bignum2(struct sshbuf *buf, BIGNUM **valp);
216int sshbuf_get_bignum1(struct sshbuf *buf, BIGNUM *v);
217int sshbuf_put_bignum2(struct sshbuf *buf, const BIGNUM *v); 216int sshbuf_put_bignum2(struct sshbuf *buf, const BIGNUM *v);
218int sshbuf_put_bignum1(struct sshbuf *buf, const BIGNUM *v);
219# ifdef OPENSSL_HAS_ECC 217# ifdef OPENSSL_HAS_ECC
220int sshbuf_get_ec(struct sshbuf *buf, EC_POINT *v, const EC_GROUP *g); 218int sshbuf_get_ec(struct sshbuf *buf, EC_POINT *v, const EC_GROUP *g);
221int sshbuf_get_eckey(struct sshbuf *buf, EC_KEY *v); 219int sshbuf_get_eckey(struct sshbuf *buf, EC_KEY *v);
diff --git a/sshconnect.c b/sshconnect.c
index 6d819279e..fdcdcd855 100644
--- a/sshconnect.c
+++ b/sshconnect.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect.c,v 1.305 2018/09/20 03:30:44 djm Exp $ */ 1/* $OpenBSD: sshconnect.c,v 1.314 2019/02/27 19:37:01 markus Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -68,9 +68,8 @@
68#include "authfile.h" 68#include "authfile.h"
69#include "ssherr.h" 69#include "ssherr.h"
70#include "authfd.h" 70#include "authfd.h"
71#include "kex.h"
71 72
72char *client_version_string = NULL;
73char *server_version_string = NULL;
74struct sshkey *previous_host_key = NULL; 73struct sshkey *previous_host_key = NULL;
75 74
76static int matching_host_key_dns = 0; 75static int matching_host_key_dns = 0;
@@ -78,6 +77,7 @@ static int matching_host_key_dns = 0;
78static pid_t proxy_command_pid = 0; 77static pid_t proxy_command_pid = 0;
79 78
80/* import */ 79/* import */
80extern int debug_flag;
81extern Options options; 81extern Options options;
82extern char *__progname; 82extern char *__progname;
83 83
@@ -99,6 +99,24 @@ expand_proxy_command(const char *proxy_command, const char *user,
99 return ret; 99 return ret;
100} 100}
101 101
102static void
103stderr_null(void)
104{
105 int devnull;
106
107 if ((devnull = open(_PATH_DEVNULL, O_WRONLY)) == -1) {
108 error("Can't open %s for stderr redirection: %s",
109 _PATH_DEVNULL, strerror(errno));
110 return;
111 }
112 if (devnull == STDERR_FILENO)
113 return;
114 if (dup2(devnull, STDERR_FILENO) == -1)
115 error("Cannot redirect stderr to %s", _PATH_DEVNULL);
116 if (devnull > STDERR_FILENO)
117 close(devnull);
118}
119
102/* 120/*
103 * Connect to the given ssh server using a proxy command that passes a 121 * Connect to the given ssh server using a proxy command that passes a
104 * a connected fd back to us. 122 * a connected fd back to us.
@@ -141,9 +159,13 @@ ssh_proxy_fdpass_connect(struct ssh *ssh, const char *host, u_short port,
141 close(sp[0]); 159 close(sp[0]);
142 160
143 /* 161 /*
144 * Stderr is left as it is so that error messages get 162 * Stderr is left for non-ControlPersist connections is so
145 * printed on the user's terminal. 163 * error messages may be printed on the user's terminal.
146 */ 164 */
165 if (!debug_flag && options.control_path != NULL &&
166 options.control_persist)
167 stderr_null();
168
147 argv[0] = shell; 169 argv[0] = shell;
148 argv[1] = "-c"; 170 argv[1] = "-c";
149 argv[2] = command_string; 171 argv[2] = command_string;
@@ -219,8 +241,14 @@ ssh_proxy_connect(struct ssh *ssh, const char *host, u_short port,
219 /* Cannot be 1 because pin allocated two descriptors. */ 241 /* Cannot be 1 because pin allocated two descriptors. */
220 close(pout[1]); 242 close(pout[1]);
221 243
222 /* Stderr is left as it is so that error messages get 244 /*
223 printed on the user's terminal. */ 245 * Stderr is left for non-ControlPersist connections is so
246 * error messages may be printed on the user's terminal.
247 */
248 if (!debug_flag && options.control_path != NULL &&
249 options.control_persist)
250 stderr_null();
251
224 argv[0] = shell; 252 argv[0] = shell;
225 argv[1] = "-c"; 253 argv[1] = "-c";
226 argv[2] = command_string; 254 argv[2] = command_string;
@@ -369,10 +397,6 @@ ssh_create_socket(struct addrinfo *ai)
369 error("getaddrinfo: no addrs"); 397 error("getaddrinfo: no addrs");
370 goto fail; 398 goto fail;
371 } 399 }
372 if (res->ai_addrlen > sizeof(bindaddr)) {
373 error("%s: addr doesn't fit", __func__);
374 goto fail;
375 }
376 memcpy(&bindaddr, res->ai_addr, res->ai_addrlen); 400 memcpy(&bindaddr, res->ai_addr, res->ai_addrlen);
377 bindaddrlen = res->ai_addrlen; 401 bindaddrlen = res->ai_addrlen;
378 } else if (options.bind_interface != NULL) { 402 } else if (options.bind_interface != NULL) {
@@ -420,73 +444,6 @@ fail:
420} 444}
421 445
422/* 446/*
423 * Wait up to *timeoutp milliseconds for fd to be readable. Updates
424 * *timeoutp with time remaining.
425 * Returns 0 if fd ready or -1 on timeout or error (see errno).
426 */
427static int
428waitrfd(int fd, int *timeoutp)
429{
430 struct pollfd pfd;
431 struct timeval t_start;
432 int oerrno, r;
433
434 monotime_tv(&t_start);
435 pfd.fd = fd;
436 pfd.events = POLLIN;
437 for (; *timeoutp >= 0;) {
438 r = poll(&pfd, 1, *timeoutp);
439 oerrno = errno;
440 ms_subtract_diff(&t_start, timeoutp);
441 errno = oerrno;
442 if (r > 0)
443 return 0;
444 else if (r == -1 && errno != EAGAIN)
445 return -1;
446 else if (r == 0)
447 break;
448 }
449 /* timeout */
450 errno = ETIMEDOUT;
451 return -1;
452}
453
454static int
455timeout_connect(int sockfd, const struct sockaddr *serv_addr,
456 socklen_t addrlen, int *timeoutp)
457{
458 int optval = 0;
459 socklen_t optlen = sizeof(optval);
460
461 /* No timeout: just do a blocking connect() */
462 if (*timeoutp <= 0)
463 return connect(sockfd, serv_addr, addrlen);
464
465 set_nonblock(sockfd);
466 if (connect(sockfd, serv_addr, addrlen) == 0) {
467 /* Succeeded already? */
468 unset_nonblock(sockfd);
469 return 0;
470 } else if (errno != EINPROGRESS)
471 return -1;
472
473 if (waitrfd(sockfd, timeoutp) == -1)
474 return -1;
475
476 /* Completed or failed */
477 if (getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &optval, &optlen) == -1) {
478 debug("getsockopt: %s", strerror(errno));
479 return -1;
480 }
481 if (optval != 0) {
482 errno = optval;
483 return -1;
484 }
485 unset_nonblock(sockfd);
486 return 0;
487}
488
489/*
490 * Opens a TCP/IP connection to the remote server on the given host. 447 * Opens a TCP/IP connection to the remote server on the given host.
491 * The address of the remote host will be returned in hostaddr. 448 * The address of the remote host will be returned in hostaddr.
492 * If port is 0, the default port will be used. 449 * If port is 0, the default port will be used.
@@ -500,7 +457,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
500 struct sockaddr_storage *hostaddr, u_short port, int family, 457 struct sockaddr_storage *hostaddr, u_short port, int family,
501 int connection_attempts, int *timeout_ms, int want_keepalive) 458 int connection_attempts, int *timeout_ms, int want_keepalive)
502{ 459{
503 int on = 1; 460 int on = 1, saved_timeout_ms = *timeout_ms;
504 int oerrno, sock = -1, attempt; 461 int oerrno, sock = -1, attempt;
505 char ntop[NI_MAXHOST], strport[NI_MAXSERV]; 462 char ntop[NI_MAXHOST], strport[NI_MAXSERV];
506 struct addrinfo *ai; 463 struct addrinfo *ai;
@@ -544,6 +501,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
544 continue; 501 continue;
545 } 502 }
546 503
504 *timeout_ms = saved_timeout_ms;
547 if (timeout_connect(sock, ai->ai_addr, ai->ai_addrlen, 505 if (timeout_connect(sock, ai->ai_addr, ai->ai_addrlen,
548 timeout_ms) >= 0) { 506 timeout_ms) >= 0) {
549 /* Successful connection. */ 507 /* Successful connection. */
@@ -589,12 +547,20 @@ ssh_connect(struct ssh *ssh, const char *host, struct addrinfo *addrs,
589 struct sockaddr_storage *hostaddr, u_short port, int family, 547 struct sockaddr_storage *hostaddr, u_short port, int family,
590 int connection_attempts, int *timeout_ms, int want_keepalive) 548 int connection_attempts, int *timeout_ms, int want_keepalive)
591{ 549{
550 int in, out;
551
592 if (options.proxy_command == NULL) { 552 if (options.proxy_command == NULL) {
593 return ssh_connect_direct(ssh, host, addrs, hostaddr, port, 553 return ssh_connect_direct(ssh, host, addrs, hostaddr, port,
594 family, connection_attempts, timeout_ms, want_keepalive); 554 family, connection_attempts, timeout_ms, want_keepalive);
595 } else if (strcmp(options.proxy_command, "-") == 0) { 555 } else if (strcmp(options.proxy_command, "-") == 0) {
596 if ((ssh_packet_set_connection(ssh, 556 if ((in = dup(STDIN_FILENO)) < 0 ||
597 STDIN_FILENO, STDOUT_FILENO)) == NULL) 557 (out = dup(STDOUT_FILENO)) < 0) {
558 if (in >= 0)
559 close(in);
560 error("%s: dup() in/out failed", __func__);
561 return -1; /* ssh_packet_set_connection logs error */
562 }
563 if ((ssh_packet_set_connection(ssh, in, out)) == NULL)
598 return -1; /* ssh_packet_set_connection logs error */ 564 return -1; /* ssh_packet_set_connection logs error */
599 return 0; 565 return 0;
600 } else if (options.proxy_use_fdpass) { 566 } else if (options.proxy_use_fdpass) {
@@ -604,128 +570,26 @@ ssh_connect(struct ssh *ssh, const char *host, struct addrinfo *addrs,
604 return ssh_proxy_connect(ssh, host, port, options.proxy_command); 570 return ssh_proxy_connect(ssh, host, port, options.proxy_command);
605} 571}
606 572
607static void
608send_client_banner(int connection_out, int minor1)
609{
610 /* Send our own protocol version identification. */
611 xasprintf(&client_version_string, "SSH-%d.%d-%.100s\r\n",
612 PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION);
613 if (atomicio(vwrite, connection_out, client_version_string,
614 strlen(client_version_string)) != strlen(client_version_string))
615 fatal("write: %.100s", strerror(errno));
616 chop(client_version_string);
617 debug("Local version string %.100s", client_version_string);
618}
619
620/*
621 * Waits for the server identification string, and sends our own
622 * identification string.
623 */
624void
625ssh_exchange_identification(int timeout_ms)
626{
627 char buf[256], remote_version[256]; /* must be same size! */
628 int remote_major, remote_minor, mismatch;
629 int connection_in = packet_get_connection_in();
630 int connection_out = packet_get_connection_out();
631 u_int i, n;
632 size_t len;
633 int rc;
634
635 send_client_banner(connection_out, 0);
636
637 /* Read other side's version identification. */
638 for (n = 0;;) {
639 for (i = 0; i < sizeof(buf) - 1; i++) {
640 if (timeout_ms > 0) {
641 rc = waitrfd(connection_in, &timeout_ms);
642 if (rc == -1 && errno == ETIMEDOUT) {
643 fatal("Connection timed out during "
644 "banner exchange");
645 } else if (rc == -1) {
646 fatal("%s: %s",
647 __func__, strerror(errno));
648 }
649 }
650
651 len = atomicio(read, connection_in, &buf[i], 1);
652 if (len != 1 && errno == EPIPE)
653 fatal("ssh_exchange_identification: "
654 "Connection closed by remote host");
655 else if (len != 1)
656 fatal("ssh_exchange_identification: "
657 "read: %.100s", strerror(errno));
658 if (buf[i] == '\r') {
659 buf[i] = '\n';
660 buf[i + 1] = 0;
661 continue; /**XXX wait for \n */
662 }
663 if (buf[i] == '\n') {
664 buf[i + 1] = 0;
665 break;
666 }
667 if (++n > 65536)
668 fatal("ssh_exchange_identification: "
669 "No banner received");
670 }
671 buf[sizeof(buf) - 1] = 0;
672 if (strncmp(buf, "SSH-", 4) == 0)
673 break;
674 debug("ssh_exchange_identification: %s", buf);
675 }
676 server_version_string = xstrdup(buf);
677
678 /*
679 * Check that the versions match. In future this might accept
680 * several versions and set appropriate flags to handle them.
681 */
682 if (sscanf(server_version_string, "SSH-%d.%d-%[^\n]\n",
683 &remote_major, &remote_minor, remote_version) != 3)
684 fatal("Bad remote protocol version identification: '%.100s'", buf);
685 debug("Remote protocol version %d.%d, remote software version %.100s",
686 remote_major, remote_minor, remote_version);
687
688 active_state->compat = compat_datafellows(remote_version);
689 mismatch = 0;
690
691 switch (remote_major) {
692 case 2:
693 break;
694 case 1:
695 if (remote_minor != 99)
696 mismatch = 1;
697 break;
698 default:
699 mismatch = 1;
700 break;
701 }
702 if (mismatch)
703 fatal("Protocol major versions differ: %d vs. %d",
704 PROTOCOL_MAJOR_2, remote_major);
705 if ((datafellows & SSH_BUG_RSASIGMD5) != 0)
706 logit("Server version \"%.100s\" uses unsafe RSA signature "
707 "scheme; disabling use of RSA keys", remote_version);
708 chop(server_version_string);
709}
710
711/* defaults to 'no' */ 573/* defaults to 'no' */
712static int 574static int
713confirm(const char *prompt) 575confirm(const char *prompt, const char *fingerprint)
714{ 576{
715 const char *msg, *again = "Please type 'yes' or 'no': "; 577 const char *msg, *again = "Please type 'yes' or 'no': ";
578 const char *again_fp = "Please type 'yes', 'no' or the fingerprint: ";
716 char *p; 579 char *p;
717 int ret = -1; 580 int ret = -1;
718 581
719 if (options.batch_mode) 582 if (options.batch_mode)
720 return 0; 583 return 0;
721 for (msg = prompt;;msg = again) { 584 for (msg = prompt;;msg = fingerprint ? again_fp : again) {
722 p = read_passphrase(msg, RP_ECHO); 585 p = read_passphrase(msg, RP_ECHO);
723 if (p == NULL) 586 if (p == NULL)
724 return 0; 587 return 0;
725 p[strcspn(p, "\n")] = '\0'; 588 p[strcspn(p, "\n")] = '\0';
726 if (p[0] == '\0' || strcasecmp(p, "no") == 0) 589 if (p[0] == '\0' || strcasecmp(p, "no") == 0)
727 ret = 0; 590 ret = 0;
728 else if (strcasecmp(p, "yes") == 0) 591 else if (strcasecmp(p, "yes") == 0 || (fingerprint != NULL &&
592 strcasecmp(p, fingerprint) == 0))
729 ret = 1; 593 ret = 1;
730 free(p); 594 free(p);
731 if (ret != -1) 595 if (ret != -1)
@@ -853,7 +717,7 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
853 char msg[1024]; 717 char msg[1024];
854 const char *type; 718 const char *type;
855 const struct hostkey_entry *host_found, *ip_found; 719 const struct hostkey_entry *host_found, *ip_found;
856 int len, cancelled_forwarding = 0; 720 int len, cancelled_forwarding = 0, confirmed;
857 int local = sockaddr_is_local(hostaddr); 721 int local = sockaddr_is_local(hostaddr);
858 int r, want_cert = sshkey_is_cert(host_key), host_ip_differ = 0; 722 int r, want_cert = sshkey_is_cert(host_key), host_ip_differ = 0;
859 int hostkey_trusted = 0; /* Known or explicitly accepted by user */ 723 int hostkey_trusted = 0; /* Known or explicitly accepted by user */
@@ -1028,14 +892,15 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
1028 "established%s\n" 892 "established%s\n"
1029 "%s key fingerprint is %s.%s%s\n%s" 893 "%s key fingerprint is %s.%s%s\n%s"
1030 "Are you sure you want to continue connecting " 894 "Are you sure you want to continue connecting "
1031 "(yes/no)? ", 895 "(yes/no/[fingerprint])? ",
1032 host, ip, msg1, type, fp, 896 host, ip, msg1, type, fp,
1033 options.visual_host_key ? "\n" : "", 897 options.visual_host_key ? "\n" : "",
1034 options.visual_host_key ? ra : "", 898 options.visual_host_key ? ra : "",
1035 msg2); 899 msg2);
1036 free(ra); 900 free(ra);
901 confirmed = confirm(msg, fp);
1037 free(fp); 902 free(fp);
1038 if (!confirm(msg)) 903 if (!confirmed)
1039 goto fail; 904 goto fail;
1040 hostkey_trusted = 1; /* user explicitly confirmed */ 905 hostkey_trusted = 1; /* user explicitly confirmed */
1041 } 906 }
@@ -1229,7 +1094,7 @@ check_host_key(char *hostname, struct sockaddr *hostaddr, u_short port,
1229 SSH_STRICT_HOSTKEY_ASK) { 1094 SSH_STRICT_HOSTKEY_ASK) {
1230 strlcat(msg, "\nAre you sure you want " 1095 strlcat(msg, "\nAre you sure you want "
1231 "to continue connecting (yes/no)? ", sizeof(msg)); 1096 "to continue connecting (yes/no)? ", sizeof(msg));
1232 if (!confirm(msg)) 1097 if (!confirm(msg, NULL))
1233 goto fail; 1098 goto fail;
1234 } else if (options.strict_host_key_checking != 1099 } else if (options.strict_host_key_checking !=
1235 SSH_STRICT_HOSTKEY_OFF) { 1100 SSH_STRICT_HOSTKEY_OFF) {
@@ -1401,7 +1266,7 @@ out:
1401 * This function does not require super-user privileges. 1266 * This function does not require super-user privileges.
1402 */ 1267 */
1403void 1268void
1404ssh_login(Sensitive *sensitive, const char *orighost, 1269ssh_login(struct ssh *ssh, Sensitive *sensitive, const char *orighost,
1405 struct sockaddr *hostaddr, u_short port, struct passwd *pw, int timeout_ms) 1270 struct sockaddr *hostaddr, u_short port, struct passwd *pw, int timeout_ms)
1406{ 1271{
1407 char *host; 1272 char *host;
@@ -1415,37 +1280,20 @@ ssh_login(Sensitive *sensitive, const char *orighost,
1415 lowercase(host); 1280 lowercase(host);
1416 1281
1417 /* Exchange protocol version identification strings with the server. */ 1282 /* Exchange protocol version identification strings with the server. */
1418 ssh_exchange_identification(timeout_ms); 1283 if (kex_exchange_identification(ssh, timeout_ms, NULL) != 0)
1284 cleanup_exit(255); /* error already logged */
1419 1285
1420 /* Put the connection into non-blocking mode. */ 1286 /* Put the connection into non-blocking mode. */
1421 packet_set_nonblocking(); 1287 ssh_packet_set_nonblocking(ssh);
1422 1288
1423 /* key exchange */ 1289 /* key exchange */
1424 /* authenticate user */ 1290 /* authenticate user */
1425 debug("Authenticating to %s:%d as '%s'", host, port, server_user); 1291 debug("Authenticating to %s:%d as '%s'", host, port, server_user);
1426 ssh_kex2(host, hostaddr, port); 1292 ssh_kex2(ssh, host, hostaddr, port);
1427 ssh_userauth2(local_user, server_user, host, sensitive); 1293 ssh_userauth2(ssh, local_user, server_user, host, sensitive);
1428 free(local_user); 1294 free(local_user);
1429} 1295}
1430 1296
1431void
1432ssh_put_password(char *password)
1433{
1434 int size;
1435 char *padded;
1436
1437 if (datafellows & SSH_BUG_PASSWORDPAD) {
1438 packet_put_cstring(password);
1439 return;
1440 }
1441 size = ROUNDUP(strlen(password) + 1, 32);
1442 padded = xcalloc(1, size);
1443 strlcpy(padded, password, size);
1444 packet_put_string(padded, size);
1445 explicit_bzero(padded, size);
1446 free(padded);
1447}
1448
1449/* print all known host keys for a given host, but skip keys of given type */ 1297/* print all known host keys for a given host, but skip keys of given type */
1450static int 1298static int
1451show_other_keys(struct hostkeys *hostkeys, struct sshkey *key) 1299show_other_keys(struct hostkeys *hostkeys, struct sshkey *key)
diff --git a/sshconnect.h b/sshconnect.h
index 890d85733..6e8989b27 100644
--- a/sshconnect.h
+++ b/sshconnect.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect.h,v 1.35 2018/07/19 10:28:47 dtucker Exp $ */ 1/* $OpenBSD: sshconnect.h,v 1.37 2019/01/19 21:36:38 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -37,23 +37,19 @@ int ssh_connect(struct ssh *, const char *, struct addrinfo *,
37 struct sockaddr_storage *, u_short, int, int, int *, int); 37 struct sockaddr_storage *, u_short, int, int, int *, int);
38void ssh_kill_proxy_command(void); 38void ssh_kill_proxy_command(void);
39 39
40void ssh_login(Sensitive *, const char *, struct sockaddr *, u_short, 40void ssh_login(struct ssh *, Sensitive *, const char *,
41 struct passwd *, int); 41 struct sockaddr *, u_short, struct passwd *, int);
42
43void ssh_exchange_identification(int);
44 42
45int verify_host_key(char *, struct sockaddr *, struct sshkey *); 43int verify_host_key(char *, struct sockaddr *, struct sshkey *);
46 44
47void get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short, 45void get_hostfile_hostname_ipaddr(char *, struct sockaddr *, u_short,
48 char **, char **); 46 char **, char **);
49 47
50void ssh_kex(char *, struct sockaddr *); 48void ssh_kex2(struct ssh *ssh, char *, struct sockaddr *, u_short);
51void ssh_kex2(char *, struct sockaddr *, u_short);
52 49
53void ssh_userauth1(const char *, const char *, char *, Sensitive *); 50void ssh_userauth2(struct ssh *ssh, const char *, const char *,
54void ssh_userauth2(const char *, const char *, char *, Sensitive *); 51 char *, Sensitive *);
55 52
56void ssh_put_password(char *);
57int ssh_local_cmd(const char *); 53int ssh_local_cmd(const char *);
58 54
59void maybe_add_key_to_agent(char *, const struct sshkey *, char *, char *); 55void maybe_add_key_to_agent(char *, const struct sshkey *, char *, char *);
diff --git a/sshconnect2.c b/sshconnect2.c
index 1675f3935..dffee90b1 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect2.c,v 1.288 2018/10/11 03:48:04 djm Exp $ */ 1/* $OpenBSD: sshconnect2.c,v 1.303 2019/02/12 23:53:10 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * Copyright (c) 2008 Damien Miller. All rights reserved. 4 * Copyright (c) 2008 Damien Miller. All rights reserved.
@@ -155,11 +155,10 @@ order_hostkeyalgs(char *host, struct sockaddr *hostaddr, u_short port)
155} 155}
156 156
157void 157void
158ssh_kex2(char *host, struct sockaddr *hostaddr, u_short port) 158ssh_kex2(struct ssh *ssh, char *host, struct sockaddr *hostaddr, u_short port)
159{ 159{
160 char *myproposal[PROPOSAL_MAX] = { KEX_CLIENT }; 160 char *myproposal[PROPOSAL_MAX] = { KEX_CLIENT };
161 char *s, *all_key; 161 char *s, *all_key;
162 struct kex *kex;
163 int r; 162 int r;
164 163
165 xxx_host = host; 164 xxx_host = host;
@@ -195,40 +194,38 @@ ssh_kex2(char *host, struct sockaddr *hostaddr, u_short port)
195 } 194 }
196 195
197 if (options.rekey_limit || options.rekey_interval) 196 if (options.rekey_limit || options.rekey_interval)
198 packet_set_rekey_limits(options.rekey_limit, 197 ssh_packet_set_rekey_limits(ssh, options.rekey_limit,
199 options.rekey_interval); 198 options.rekey_interval);
200 199
201 /* start key exchange */ 200 /* start key exchange */
202 if ((r = kex_setup(active_state, myproposal)) != 0) 201 if ((r = kex_setup(ssh, myproposal)) != 0)
203 fatal("kex_setup: %s", ssh_err(r)); 202 fatal("kex_setup: %s", ssh_err(r));
204 kex = active_state->kex;
205#ifdef WITH_OPENSSL 203#ifdef WITH_OPENSSL
206 kex->kex[KEX_DH_GRP1_SHA1] = kexdh_client; 204 ssh->kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_client;
207 kex->kex[KEX_DH_GRP14_SHA1] = kexdh_client; 205 ssh->kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_client;
208 kex->kex[KEX_DH_GRP14_SHA256] = kexdh_client; 206 ssh->kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_client;
209 kex->kex[KEX_DH_GRP16_SHA512] = kexdh_client; 207 ssh->kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_client;
210 kex->kex[KEX_DH_GRP18_SHA512] = kexdh_client; 208 ssh->kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_client;
211 kex->kex[KEX_DH_GEX_SHA1] = kexgex_client; 209 ssh->kex->kex[KEX_DH_GEX_SHA1] = kexgex_client;
212 kex->kex[KEX_DH_GEX_SHA256] = kexgex_client; 210 ssh->kex->kex[KEX_DH_GEX_SHA256] = kexgex_client;
213# ifdef OPENSSL_HAS_ECC 211# ifdef OPENSSL_HAS_ECC
214 kex->kex[KEX_ECDH_SHA2] = kexecdh_client; 212 ssh->kex->kex[KEX_ECDH_SHA2] = kex_gen_client;
215# endif 213# endif
216#endif 214#endif
217 kex->kex[KEX_C25519_SHA256] = kexc25519_client; 215 ssh->kex->kex[KEX_C25519_SHA256] = kex_gen_client;
218 kex->client_version_string=client_version_string; 216 ssh->kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_client;
219 kex->server_version_string=server_version_string; 217 ssh->kex->verify_host_key=&verify_host_key_callback;
220 kex->verify_host_key=&verify_host_key_callback;
221 218
222 ssh_dispatch_run_fatal(active_state, DISPATCH_BLOCK, &kex->done); 219 ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &ssh->kex->done);
223 220
224 /* remove ext-info from the KEX proposals for rekeying */ 221 /* remove ext-info from the KEX proposals for rekeying */
225 myproposal[PROPOSAL_KEX_ALGS] = 222 myproposal[PROPOSAL_KEX_ALGS] =
226 compat_kex_proposal(options.kex_algorithms); 223 compat_kex_proposal(options.kex_algorithms);
227 if ((r = kex_prop2buf(kex->my, myproposal)) != 0) 224 if ((r = kex_prop2buf(ssh->kex->my, myproposal)) != 0)
228 fatal("kex_prop2buf: %s", ssh_err(r)); 225 fatal("kex_prop2buf: %s", ssh_err(r));
229 226
230 session_id2 = kex->session_id; 227 session_id2 = ssh->kex->session_id;
231 session_id2_len = kex->session_id_len; 228 session_id2_len = ssh->kex->session_id_len;
232 229
233#ifdef DEBUG_KEXDH 230#ifdef DEBUG_KEXDH
234 /* send 1st encrypted/maced/compressed message */ 231 /* send 1st encrypted/maced/compressed message */
@@ -268,7 +265,11 @@ struct cauthctxt {
268 struct cauthmethod *method; 265 struct cauthmethod *method;
269 sig_atomic_t success; 266 sig_atomic_t success;
270 char *authlist; 267 char *authlist;
271 int attempt; 268#ifdef GSSAPI
269 /* gssapi */
270 gss_OID_set gss_supported_mechs;
271 u_int mech_tried;
272#endif
272 /* pubkey */ 273 /* pubkey */
273 struct idlist keys; 274 struct idlist keys;
274 int agent_fd; 275 int agent_fd;
@@ -278,49 +279,51 @@ struct cauthctxt {
278 const char *active_ktype; 279 const char *active_ktype;
279 /* kbd-interactive */ 280 /* kbd-interactive */
280 int info_req_seen; 281 int info_req_seen;
282 int attempt_kbdint;
283 /* password */
284 int attempt_passwd;
281 /* generic */ 285 /* generic */
282 void *methoddata; 286 void *methoddata;
283}; 287};
284 288
285struct cauthmethod { 289struct cauthmethod {
286 char *name; /* string to compare against server's list */ 290 char *name; /* string to compare against server's list */
287 int (*userauth)(Authctxt *authctxt); 291 int (*userauth)(struct ssh *ssh);
288 void (*cleanup)(Authctxt *authctxt); 292 void (*cleanup)(struct ssh *ssh);
289 int *enabled; /* flag in option struct that enables method */ 293 int *enabled; /* flag in option struct that enables method */
290 int *batch_flag; /* flag in option struct that disables method */ 294 int *batch_flag; /* flag in option struct that disables method */
291}; 295};
292 296
293int input_userauth_service_accept(int, u_int32_t, struct ssh *); 297static int input_userauth_service_accept(int, u_int32_t, struct ssh *);
294int input_userauth_ext_info(int, u_int32_t, struct ssh *); 298static int input_userauth_ext_info(int, u_int32_t, struct ssh *);
295int input_userauth_success(int, u_int32_t, struct ssh *); 299static int input_userauth_success(int, u_int32_t, struct ssh *);
296int input_userauth_success_unexpected(int, u_int32_t, struct ssh *); 300static int input_userauth_failure(int, u_int32_t, struct ssh *);
297int input_userauth_failure(int, u_int32_t, struct ssh *); 301static int input_userauth_banner(int, u_int32_t, struct ssh *);
298int input_userauth_banner(int, u_int32_t, struct ssh *); 302static int input_userauth_error(int, u_int32_t, struct ssh *);
299int input_userauth_error(int, u_int32_t, struct ssh *); 303static int input_userauth_info_req(int, u_int32_t, struct ssh *);
300int input_userauth_info_req(int, u_int32_t, struct ssh *); 304static int input_userauth_pk_ok(int, u_int32_t, struct ssh *);
301int input_userauth_pk_ok(int, u_int32_t, struct ssh *); 305static int input_userauth_passwd_changereq(int, u_int32_t, struct ssh *);
302int input_userauth_passwd_changereq(int, u_int32_t, struct ssh *); 306
303 307static int userauth_none(struct ssh *);
304int userauth_none(Authctxt *); 308static int userauth_pubkey(struct ssh *);
305int userauth_pubkey(Authctxt *); 309static int userauth_passwd(struct ssh *);
306int userauth_passwd(Authctxt *); 310static int userauth_kbdint(struct ssh *);
307int userauth_kbdint(Authctxt *); 311static int userauth_hostbased(struct ssh *);
308int userauth_hostbased(Authctxt *);
309 312
310#ifdef GSSAPI 313#ifdef GSSAPI
311int userauth_gssapi(Authctxt *authctxt); 314static int userauth_gssapi(struct ssh *);
312int input_gssapi_response(int type, u_int32_t, struct ssh *); 315static void userauth_gssapi_cleanup(struct ssh *);
313int input_gssapi_token(int type, u_int32_t, struct ssh *); 316static int input_gssapi_response(int type, u_int32_t, struct ssh *);
314int input_gssapi_hash(int type, u_int32_t, struct ssh *); 317static int input_gssapi_token(int type, u_int32_t, struct ssh *);
315int input_gssapi_error(int, u_int32_t, struct ssh *); 318static int input_gssapi_error(int, u_int32_t, struct ssh *);
316int input_gssapi_errtok(int, u_int32_t, struct ssh *); 319static int input_gssapi_errtok(int, u_int32_t, struct ssh *);
317#endif 320#endif
318 321
319void userauth(Authctxt *, char *); 322void userauth(struct ssh *, char *);
320 323
321static int sign_and_send_pubkey(struct ssh *ssh, Authctxt *, Identity *); 324static void pubkey_cleanup(struct ssh *);
325static int sign_and_send_pubkey(struct ssh *ssh, Identity *);
322static void pubkey_prepare(Authctxt *); 326static void pubkey_prepare(Authctxt *);
323static void pubkey_cleanup(Authctxt *);
324static void pubkey_reset(Authctxt *); 327static void pubkey_reset(Authctxt *);
325static struct sshkey *load_identity_file(Identity *); 328static struct sshkey *load_identity_file(Identity *);
326 329
@@ -332,7 +335,7 @@ Authmethod authmethods[] = {
332#ifdef GSSAPI 335#ifdef GSSAPI
333 {"gssapi-with-mic", 336 {"gssapi-with-mic",
334 userauth_gssapi, 337 userauth_gssapi,
335 NULL, 338 userauth_gssapi_cleanup,
336 &options.gss_authentication, 339 &options.gss_authentication,
337 NULL}, 340 NULL},
338#endif 341#endif
@@ -365,10 +368,9 @@ Authmethod authmethods[] = {
365}; 368};
366 369
367void 370void
368ssh_userauth2(const char *local_user, const char *server_user, char *host, 371ssh_userauth2(struct ssh *ssh, const char *local_user,
369 Sensitive *sensitive) 372 const char *server_user, char *host, Sensitive *sensitive)
370{ 373{
371 struct ssh *ssh = active_state;
372 Authctxt authctxt; 374 Authctxt authctxt;
373 int r; 375 int r;
374 376
@@ -379,7 +381,6 @@ ssh_userauth2(const char *local_user, const char *server_user, char *host,
379 381
380 /* setup authentication context */ 382 /* setup authentication context */
381 memset(&authctxt, 0, sizeof(authctxt)); 383 memset(&authctxt, 0, sizeof(authctxt));
382 pubkey_prepare(&authctxt);
383 authctxt.server_user = server_user; 384 authctxt.server_user = server_user;
384 authctxt.local_user = local_user; 385 authctxt.local_user = local_user;
385 authctxt.host = host; 386 authctxt.host = host;
@@ -391,9 +392,18 @@ ssh_userauth2(const char *local_user, const char *server_user, char *host,
391 authctxt.sensitive = sensitive; 392 authctxt.sensitive = sensitive;
392 authctxt.active_ktype = authctxt.oktypes = authctxt.ktypes = NULL; 393 authctxt.active_ktype = authctxt.oktypes = authctxt.ktypes = NULL;
393 authctxt.info_req_seen = 0; 394 authctxt.info_req_seen = 0;
395 authctxt.attempt_kbdint = 0;
396 authctxt.attempt_passwd = 0;
397#if GSSAPI
398 authctxt.gss_supported_mechs = NULL;
399 authctxt.mech_tried = 0;
400#endif
394 authctxt.agent_fd = -1; 401 authctxt.agent_fd = -1;
395 if (authctxt.method == NULL) 402 pubkey_prepare(&authctxt);
396 fatal("ssh_userauth2: internal error: cannot send userauth none request"); 403 if (authctxt.method == NULL) {
404 fatal("%s: internal error: cannot send userauth none request",
405 __func__);
406 }
397 407
398 if ((r = sshpkt_start(ssh, SSH2_MSG_SERVICE_REQUEST)) != 0 || 408 if ((r = sshpkt_start(ssh, SSH2_MSG_SERVICE_REQUEST)) != 0 ||
399 (r = sshpkt_put_cstring(ssh, "ssh-userauth")) != 0 || 409 (r = sshpkt_put_cstring(ssh, "ssh-userauth")) != 0 ||
@@ -405,9 +415,9 @@ ssh_userauth2(const char *local_user, const char *server_user, char *host,
405 ssh_dispatch_set(ssh, SSH2_MSG_EXT_INFO, &input_userauth_ext_info); 415 ssh_dispatch_set(ssh, SSH2_MSG_EXT_INFO, &input_userauth_ext_info);
406 ssh_dispatch_set(ssh, SSH2_MSG_SERVICE_ACCEPT, &input_userauth_service_accept); 416 ssh_dispatch_set(ssh, SSH2_MSG_SERVICE_ACCEPT, &input_userauth_service_accept);
407 ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &authctxt.success); /* loop until success */ 417 ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &authctxt.success); /* loop until success */
418 pubkey_cleanup(ssh);
408 ssh->authctxt = NULL; 419 ssh->authctxt = NULL;
409 420
410 pubkey_cleanup(&authctxt);
411 ssh_dispatch_range(ssh, SSH2_MSG_USERAUTH_MIN, SSH2_MSG_USERAUTH_MAX, NULL); 421 ssh_dispatch_range(ssh, SSH2_MSG_USERAUTH_MIN, SSH2_MSG_USERAUTH_MAX, NULL);
412 422
413 if (!authctxt.success) 423 if (!authctxt.success)
@@ -416,10 +426,9 @@ ssh_userauth2(const char *local_user, const char *server_user, char *host,
416} 426}
417 427
418/* ARGSUSED */ 428/* ARGSUSED */
419int 429static int
420input_userauth_service_accept(int type, u_int32_t seq, struct ssh *ssh) 430input_userauth_service_accept(int type, u_int32_t seq, struct ssh *ssh)
421{ 431{
422 Authctxt *authctxt = ssh->authctxt;
423 int r; 432 int r;
424 433
425 if (ssh_packet_remaining(ssh) > 0) { 434 if (ssh_packet_remaining(ssh) > 0) {
@@ -437,7 +446,7 @@ input_userauth_service_accept(int type, u_int32_t seq, struct ssh *ssh)
437 debug("SSH2_MSG_SERVICE_ACCEPT received"); 446 debug("SSH2_MSG_SERVICE_ACCEPT received");
438 447
439 /* initial userauth request */ 448 /* initial userauth request */
440 userauth_none(authctxt); 449 userauth_none(ssh);
441 450
442 ssh_dispatch_set(ssh, SSH2_MSG_EXT_INFO, &input_userauth_error); 451 ssh_dispatch_set(ssh, SSH2_MSG_EXT_INFO, &input_userauth_error);
443 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_SUCCESS, &input_userauth_success); 452 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_SUCCESS, &input_userauth_success);
@@ -449,19 +458,19 @@ input_userauth_service_accept(int type, u_int32_t seq, struct ssh *ssh)
449} 458}
450 459
451/* ARGSUSED */ 460/* ARGSUSED */
452int 461static int
453input_userauth_ext_info(int type, u_int32_t seqnr, struct ssh *ssh) 462input_userauth_ext_info(int type, u_int32_t seqnr, struct ssh *ssh)
454{ 463{
455 return kex_input_ext_info(type, seqnr, ssh); 464 return kex_input_ext_info(type, seqnr, ssh);
456} 465}
457 466
458void 467void
459userauth(Authctxt *authctxt, char *authlist) 468userauth(struct ssh *ssh, char *authlist)
460{ 469{
461 struct ssh *ssh = active_state; /* XXX */ 470 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
462 471
463 if (authctxt->method != NULL && authctxt->method->cleanup != NULL) 472 if (authctxt->method != NULL && authctxt->method->cleanup != NULL)
464 authctxt->method->cleanup(authctxt); 473 authctxt->method->cleanup(ssh);
465 474
466 free(authctxt->methoddata); 475 free(authctxt->methoddata);
467 authctxt->methoddata = NULL; 476 authctxt->methoddata = NULL;
@@ -483,7 +492,7 @@ userauth(Authctxt *authctxt, char *authlist)
483 SSH2_MSG_USERAUTH_PER_METHOD_MAX, NULL); 492 SSH2_MSG_USERAUTH_PER_METHOD_MAX, NULL);
484 493
485 /* and try new method */ 494 /* and try new method */
486 if (method->userauth(authctxt) != 0) { 495 if (method->userauth(ssh) != 0) {
487 debug2("we sent a %s packet, wait for reply", method->name); 496 debug2("we sent a %s packet, wait for reply", method->name);
488 break; 497 break;
489 } else { 498 } else {
@@ -494,50 +503,53 @@ userauth(Authctxt *authctxt, char *authlist)
494} 503}
495 504
496/* ARGSUSED */ 505/* ARGSUSED */
497int 506static int
498input_userauth_error(int type, u_int32_t seq, struct ssh *ssh) 507input_userauth_error(int type, u_int32_t seq, struct ssh *ssh)
499{ 508{
500 fatal("input_userauth_error: bad message during authentication: " 509 fatal("%s: bad message during authentication: type %d", __func__, type);
501 "type %d", type);
502 return 0; 510 return 0;
503} 511}
504 512
505/* ARGSUSED */ 513/* ARGSUSED */
506int 514static int
507input_userauth_banner(int type, u_int32_t seq, struct ssh *ssh) 515input_userauth_banner(int type, u_int32_t seq, struct ssh *ssh)
508{ 516{
509 char *msg, *lang; 517 char *msg = NULL;
510 u_int len; 518 size_t len;
519 int r;
511 520
512 debug3("%s", __func__); 521 debug3("%s", __func__);
513 msg = packet_get_string(&len); 522 if ((r = sshpkt_get_cstring(ssh, &msg, &len)) != 0 ||
514 lang = packet_get_string(NULL); 523 (r = sshpkt_get_cstring(ssh, NULL, NULL)) != 0)
524 goto out;
515 if (len > 0 && options.log_level >= SYSLOG_LEVEL_INFO) 525 if (len > 0 && options.log_level >= SYSLOG_LEVEL_INFO)
516 fmprintf(stderr, "%s", msg); 526 fmprintf(stderr, "%s", msg);
527 r = 0;
528 out:
517 free(msg); 529 free(msg);
518 free(lang); 530 return r;
519 return 0;
520} 531}
521 532
522/* ARGSUSED */ 533/* ARGSUSED */
523int 534static int
524input_userauth_success(int type, u_int32_t seq, struct ssh *ssh) 535input_userauth_success(int type, u_int32_t seq, struct ssh *ssh)
525{ 536{
526 Authctxt *authctxt = ssh->authctxt; 537 Authctxt *authctxt = ssh->authctxt;
527 538
528 if (authctxt == NULL) 539 if (authctxt == NULL)
529 fatal("input_userauth_success: no authentication context"); 540 fatal("%s: no authentication context", __func__);
530 free(authctxt->authlist); 541 free(authctxt->authlist);
531 authctxt->authlist = NULL; 542 authctxt->authlist = NULL;
532 if (authctxt->method != NULL && authctxt->method->cleanup != NULL) 543 if (authctxt->method != NULL && authctxt->method->cleanup != NULL)
533 authctxt->method->cleanup(authctxt); 544 authctxt->method->cleanup(ssh);
534 free(authctxt->methoddata); 545 free(authctxt->methoddata);
535 authctxt->methoddata = NULL; 546 authctxt->methoddata = NULL;
536 authctxt->success = 1; /* break out */ 547 authctxt->success = 1; /* break out */
537 return 0; 548 return 0;
538} 549}
539 550
540int 551#if 0
552static int
541input_userauth_success_unexpected(int type, u_int32_t seq, struct ssh *ssh) 553input_userauth_success_unexpected(int type, u_int32_t seq, struct ssh *ssh)
542{ 554{
543 Authctxt *authctxt = ssh->authctxt; 555 Authctxt *authctxt = ssh->authctxt;
@@ -549,9 +561,10 @@ input_userauth_success_unexpected(int type, u_int32_t seq, struct ssh *ssh)
549 authctxt->method->name); 561 authctxt->method->name);
550 return 0; 562 return 0;
551} 563}
564#endif
552 565
553/* ARGSUSED */ 566/* ARGSUSED */
554int 567static int
555input_userauth_failure(int type, u_int32_t seq, struct ssh *ssh) 568input_userauth_failure(int type, u_int32_t seq, struct ssh *ssh)
556{ 569{
557 Authctxt *authctxt = ssh->authctxt; 570 Authctxt *authctxt = ssh->authctxt;
@@ -574,7 +587,7 @@ input_userauth_failure(int type, u_int32_t seq, struct ssh *ssh)
574 } 587 }
575 debug("Authentications that can continue: %s", authlist); 588 debug("Authentications that can continue: %s", authlist);
576 589
577 userauth(authctxt, authlist); 590 userauth(ssh, authlist);
578 authlist = NULL; 591 authlist = NULL;
579 out: 592 out:
580 free(authlist); 593 free(authlist);
@@ -606,7 +619,7 @@ format_identity(Identity *id)
606} 619}
607 620
608/* ARGSUSED */ 621/* ARGSUSED */
609int 622static int
610input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh) 623input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
611{ 624{
612 Authctxt *authctxt = ssh->authctxt; 625 Authctxt *authctxt = ssh->authctxt;
@@ -661,7 +674,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
661 } 674 }
662 ident = format_identity(id); 675 ident = format_identity(id);
663 debug("Server accepts key: %s", ident); 676 debug("Server accepts key: %s", ident);
664 sent = sign_and_send_pubkey(ssh, authctxt, id); 677 sent = sign_and_send_pubkey(ssh, id);
665 r = 0; 678 r = 0;
666 done: 679 done:
667 sshkey_free(key); 680 sshkey_free(key);
@@ -672,40 +685,41 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
672 685
673 /* try another method if we did not send a packet */ 686 /* try another method if we did not send a packet */
674 if (r == 0 && sent == 0) 687 if (r == 0 && sent == 0)
675 userauth(authctxt, NULL); 688 userauth(ssh, NULL);
676 return r; 689 return r;
677} 690}
678 691
679#ifdef GSSAPI 692#ifdef GSSAPI
680int 693static int
681userauth_gssapi(Authctxt *authctxt) 694userauth_gssapi(struct ssh *ssh)
682{ 695{
683 struct ssh *ssh = active_state; /* XXX */ 696 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
684 Gssctxt *gssctxt = NULL; 697 Gssctxt *gssctxt = NULL;
685 static gss_OID_set gss_supported = NULL;
686 static u_int mech = 0;
687 OM_uint32 min; 698 OM_uint32 min;
688 int r, ok = 0; 699 int r, ok = 0;
700 gss_OID mech = NULL;
689 701
690 /* Try one GSSAPI method at a time, rather than sending them all at 702 /* Try one GSSAPI method at a time, rather than sending them all at
691 * once. */ 703 * once. */
692 704
693 if (gss_supported == NULL) 705 if (authctxt->gss_supported_mechs == NULL)
694 gss_indicate_mechs(&min, &gss_supported); 706 gss_indicate_mechs(&min, &authctxt->gss_supported_mechs);
695 707
696 /* Check to see if the mechanism is usable before we offer it */ 708 /* Check to see whether the mechanism is usable before we offer it */
697 while (mech < gss_supported->count && !ok) { 709 while (authctxt->mech_tried < authctxt->gss_supported_mechs->count &&
710 !ok) {
711 mech = &authctxt->gss_supported_mechs->
712 elements[authctxt->mech_tried];
698 /* My DER encoding requires length<128 */ 713 /* My DER encoding requires length<128 */
699 if (gss_supported->elements[mech].length < 128 && 714 if (mech->length < 128 && ssh_gssapi_check_mechanism(&gssctxt,
700 ssh_gssapi_check_mechanism(&gssctxt, 715 mech, authctxt->host)) {
701 &gss_supported->elements[mech], authctxt->host)) {
702 ok = 1; /* Mechanism works */ 716 ok = 1; /* Mechanism works */
703 } else { 717 } else {
704 mech++; 718 authctxt->mech_tried++;
705 } 719 }
706 } 720 }
707 721
708 if (!ok) 722 if (!ok || mech == NULL)
709 return 0; 723 return 0;
710 724
711 authctxt->methoddata=(void *)gssctxt; 725 authctxt->methoddata=(void *)gssctxt;
@@ -715,14 +729,10 @@ userauth_gssapi(Authctxt *authctxt)
715 (r = sshpkt_put_cstring(ssh, authctxt->service)) != 0 || 729 (r = sshpkt_put_cstring(ssh, authctxt->service)) != 0 ||
716 (r = sshpkt_put_cstring(ssh, authctxt->method->name)) != 0 || 730 (r = sshpkt_put_cstring(ssh, authctxt->method->name)) != 0 ||
717 (r = sshpkt_put_u32(ssh, 1)) != 0 || 731 (r = sshpkt_put_u32(ssh, 1)) != 0 ||
718 (r = sshpkt_put_u32(ssh, 732 (r = sshpkt_put_u32(ssh, (mech->length) + 2)) != 0 ||
719 (gss_supported->elements[mech].length) + 2)) != 0 ||
720 (r = sshpkt_put_u8(ssh, SSH_GSS_OIDTYPE)) != 0 || 733 (r = sshpkt_put_u8(ssh, SSH_GSS_OIDTYPE)) != 0 ||
721 (r = sshpkt_put_u8(ssh, 734 (r = sshpkt_put_u8(ssh, mech->length)) != 0 ||
722 gss_supported->elements[mech].length)) != 0 || 735 (r = sshpkt_put(ssh, mech->elements, mech->length)) != 0 ||
723 (r = sshpkt_put(ssh,
724 gss_supported->elements[mech].elements,
725 gss_supported->elements[mech].length)) != 0 ||
726 (r = sshpkt_send(ssh)) != 0) 736 (r = sshpkt_send(ssh)) != 0)
727 fatal("%s: %s", __func__, ssh_err(r)); 737 fatal("%s: %s", __func__, ssh_err(r));
728 738
@@ -731,11 +741,24 @@ userauth_gssapi(Authctxt *authctxt)
731 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_ERROR, &input_gssapi_error); 741 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_ERROR, &input_gssapi_error);
732 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_ERRTOK, &input_gssapi_errtok); 742 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_GSSAPI_ERRTOK, &input_gssapi_errtok);
733 743
734 mech++; /* Move along to next candidate */ 744 authctxt->mech_tried++; /* Move along to next candidate */
735 745
736 return 1; 746 return 1;
737} 747}
738 748
749static void
750userauth_gssapi_cleanup(struct ssh *ssh)
751{
752 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
753 Gssctxt *gssctxt = (Gssctxt *)authctxt->methoddata;
754
755 ssh_gssapi_delete_ctx(&gssctxt);
756 authctxt->methoddata = NULL;
757
758 free(authctxt->gss_supported_mechs);
759 authctxt->gss_supported_mechs = NULL;
760}
761
739static OM_uint32 762static OM_uint32
740process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok) 763process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok)
741{ 764{
@@ -803,7 +826,7 @@ process_gssapi_token(struct ssh *ssh, gss_buffer_t recv_tok)
803} 826}
804 827
805/* ARGSUSED */ 828/* ARGSUSED */
806int 829static int
807input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh) 830input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh)
808{ 831{
809 Authctxt *authctxt = ssh->authctxt; 832 Authctxt *authctxt = ssh->authctxt;
@@ -824,7 +847,7 @@ input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh)
824 oidv[0] != SSH_GSS_OIDTYPE || 847 oidv[0] != SSH_GSS_OIDTYPE ||
825 oidv[1] != oidlen - 2) { 848 oidv[1] != oidlen - 2) {
826 debug("Badly encoded mechanism OID received"); 849 debug("Badly encoded mechanism OID received");
827 userauth(authctxt, NULL); 850 userauth(ssh, NULL);
828 goto ok; 851 goto ok;
829 } 852 }
830 853
@@ -837,7 +860,7 @@ input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh)
837 if (GSS_ERROR(process_gssapi_token(ssh, GSS_C_NO_BUFFER))) { 860 if (GSS_ERROR(process_gssapi_token(ssh, GSS_C_NO_BUFFER))) {
838 /* Start again with next method on list */ 861 /* Start again with next method on list */
839 debug("Trying to start again"); 862 debug("Trying to start again");
840 userauth(authctxt, NULL); 863 userauth(ssh, NULL);
841 goto ok; 864 goto ok;
842 } 865 }
843 ok: 866 ok:
@@ -848,7 +871,7 @@ input_gssapi_response(int type, u_int32_t plen, struct ssh *ssh)
848} 871}
849 872
850/* ARGSUSED */ 873/* ARGSUSED */
851int 874static int
852input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh) 875input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh)
853{ 876{
854 Authctxt *authctxt = ssh->authctxt; 877 Authctxt *authctxt = ssh->authctxt;
@@ -871,7 +894,7 @@ input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh)
871 894
872 /* Start again with the next method in the list */ 895 /* Start again with the next method in the list */
873 if (GSS_ERROR(status)) { 896 if (GSS_ERROR(status)) {
874 userauth(authctxt, NULL); 897 userauth(ssh, NULL);
875 /* ok */ 898 /* ok */
876 } 899 }
877 r = 0; 900 r = 0;
@@ -881,7 +904,7 @@ input_gssapi_token(int type, u_int32_t plen, struct ssh *ssh)
881} 904}
882 905
883/* ARGSUSED */ 906/* ARGSUSED */
884int 907static int
885input_gssapi_errtok(int type, u_int32_t plen, struct ssh *ssh) 908input_gssapi_errtok(int type, u_int32_t plen, struct ssh *ssh)
886{ 909{
887 Authctxt *authctxt = ssh->authctxt; 910 Authctxt *authctxt = ssh->authctxt;
@@ -916,7 +939,7 @@ input_gssapi_errtok(int type, u_int32_t plen, struct ssh *ssh)
916} 939}
917 940
918/* ARGSUSED */ 941/* ARGSUSED */
919int 942static int
920input_gssapi_error(int type, u_int32_t plen, struct ssh *ssh) 943input_gssapi_error(int type, u_int32_t plen, struct ssh *ssh)
921{ 944{
922 char *msg = NULL; 945 char *msg = NULL;
@@ -937,10 +960,10 @@ input_gssapi_error(int type, u_int32_t plen, struct ssh *ssh)
937} 960}
938#endif /* GSSAPI */ 961#endif /* GSSAPI */
939 962
940int 963static int
941userauth_none(Authctxt *authctxt) 964userauth_none(struct ssh *ssh)
942{ 965{
943 struct ssh *ssh = active_state; /* XXX */ 966 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
944 int r; 967 int r;
945 968
946 /* initial userauth request */ 969 /* initial userauth request */
@@ -953,25 +976,22 @@ userauth_none(Authctxt *authctxt)
953 return 1; 976 return 1;
954} 977}
955 978
956int 979static int
957userauth_passwd(Authctxt *authctxt) 980userauth_passwd(struct ssh *ssh)
958{ 981{
959 struct ssh *ssh = active_state; /* XXX */ 982 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
960 static int attempt = 0; 983 char *password, *prompt = NULL;
961 char prompt[256];
962 char *password;
963 const char *host = options.host_key_alias ? options.host_key_alias : 984 const char *host = options.host_key_alias ? options.host_key_alias :
964 authctxt->host; 985 authctxt->host;
965 int r; 986 int r;
966 987
967 if (attempt++ >= options.number_of_password_prompts) 988 if (authctxt->attempt_passwd++ >= options.number_of_password_prompts)
968 return 0; 989 return 0;
969 990
970 if (attempt != 1) 991 if (authctxt->attempt_passwd != 1)
971 error("Permission denied, please try again."); 992 error("Permission denied, please try again.");
972 993
973 snprintf(prompt, sizeof(prompt), "%.30s@%.128s's password: ", 994 xasprintf(&prompt, "%s@%s's password: ", authctxt->server_user, host);
974 authctxt->server_user, host);
975 password = read_passphrase(prompt, 0); 995 password = read_passphrase(prompt, 0);
976 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 996 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
977 (r = sshpkt_put_cstring(ssh, authctxt->server_user)) != 0 || 997 (r = sshpkt_put_cstring(ssh, authctxt->server_user)) != 0 ||
@@ -983,7 +1003,8 @@ userauth_passwd(Authctxt *authctxt)
983 (r = sshpkt_send(ssh)) != 0) 1003 (r = sshpkt_send(ssh)) != 0)
984 fatal("%s: %s", __func__, ssh_err(r)); 1004 fatal("%s: %s", __func__, ssh_err(r));
985 1005
986 if (password) 1006 free(prompt);
1007 if (password != NULL)
987 freezero(password, strlen(password)); 1008 freezero(password, strlen(password));
988 1009
989 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ, 1010 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ,
@@ -996,7 +1017,7 @@ userauth_passwd(Authctxt *authctxt)
996 * parse PASSWD_CHANGEREQ, prompt user and send SSH2_MSG_USERAUTH_REQUEST 1017 * parse PASSWD_CHANGEREQ, prompt user and send SSH2_MSG_USERAUTH_REQUEST
997 */ 1018 */
998/* ARGSUSED */ 1019/* ARGSUSED */
999int 1020static int
1000input_userauth_passwd_changereq(int type, u_int32_t seqnr, struct ssh *ssh) 1021input_userauth_passwd_changereq(int type, u_int32_t seqnr, struct ssh *ssh)
1001{ 1022{
1002 Authctxt *authctxt = ssh->authctxt; 1023 Authctxt *authctxt = ssh->authctxt;
@@ -1180,8 +1201,9 @@ id_filename_matches(Identity *id, Identity *private_id)
1180} 1201}
1181 1202
1182static int 1203static int
1183sign_and_send_pubkey(struct ssh *ssh, Authctxt *authctxt, Identity *id) 1204sign_and_send_pubkey(struct ssh *ssh, Identity *id)
1184{ 1205{
1206 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1185 struct sshbuf *b = NULL; 1207 struct sshbuf *b = NULL;
1186 Identity *private_id, *sign_id = NULL; 1208 Identity *private_id, *sign_id = NULL;
1187 u_char *signature = NULL; 1209 u_char *signature = NULL;
@@ -1339,8 +1361,9 @@ sign_and_send_pubkey(struct ssh *ssh, Authctxt *authctxt, Identity *id)
1339} 1361}
1340 1362
1341static int 1363static int
1342send_pubkey_test(struct ssh *ssh, Authctxt *authctxt, Identity *id) 1364send_pubkey_test(struct ssh *ssh, Identity *id)
1343{ 1365{
1366 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1344 u_char *blob = NULL; 1367 u_char *blob = NULL;
1345 char *alg = NULL; 1368 char *alg = NULL;
1346 size_t bloblen; 1369 size_t bloblen;
@@ -1616,12 +1639,15 @@ pubkey_prepare(Authctxt *authctxt)
1616} 1639}
1617 1640
1618static void 1641static void
1619pubkey_cleanup(Authctxt *authctxt) 1642pubkey_cleanup(struct ssh *ssh)
1620{ 1643{
1644 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1621 Identity *id; 1645 Identity *id;
1622 1646
1623 if (authctxt->agent_fd != -1) 1647 if (authctxt->agent_fd != -1) {
1624 ssh_close_authentication_socket(authctxt->agent_fd); 1648 ssh_close_authentication_socket(authctxt->agent_fd);
1649 authctxt->agent_fd = -1;
1650 }
1625 for (id = TAILQ_FIRST(&authctxt->keys); id; 1651 for (id = TAILQ_FIRST(&authctxt->keys); id;
1626 id = TAILQ_FIRST(&authctxt->keys)) { 1652 id = TAILQ_FIRST(&authctxt->keys)) {
1627 TAILQ_REMOVE(&authctxt->keys, id, next); 1653 TAILQ_REMOVE(&authctxt->keys, id, next);
@@ -1654,10 +1680,10 @@ try_identity(Identity *id)
1654 return 1; 1680 return 1;
1655} 1681}
1656 1682
1657int 1683static int
1658userauth_pubkey(Authctxt *authctxt) 1684userauth_pubkey(struct ssh *ssh)
1659{ 1685{
1660 struct ssh *ssh = active_state; /* XXX */ 1686 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1661 Identity *id; 1687 Identity *id;
1662 int sent = 0; 1688 int sent = 0;
1663 char *ident; 1689 char *ident;
@@ -1678,7 +1704,7 @@ userauth_pubkey(Authctxt *authctxt)
1678 ident = format_identity(id); 1704 ident = format_identity(id);
1679 debug("Offering public key: %s", ident); 1705 debug("Offering public key: %s", ident);
1680 free(ident); 1706 free(ident);
1681 sent = send_pubkey_test(ssh, authctxt, id); 1707 sent = send_pubkey_test(ssh, id);
1682 } 1708 }
1683 } else { 1709 } else {
1684 debug("Trying private key: %s", id->filename); 1710 debug("Trying private key: %s", id->filename);
@@ -1686,8 +1712,7 @@ userauth_pubkey(Authctxt *authctxt)
1686 if (id->key != NULL) { 1712 if (id->key != NULL) {
1687 if (try_identity(id)) { 1713 if (try_identity(id)) {
1688 id->isprivate = 1; 1714 id->isprivate = 1;
1689 sent = sign_and_send_pubkey(ssh, 1715 sent = sign_and_send_pubkey(ssh, id);
1690 authctxt, id);
1691 } 1716 }
1692 sshkey_free(id->key); 1717 sshkey_free(id->key);
1693 id->key = NULL; 1718 id->key = NULL;
@@ -1703,17 +1728,16 @@ userauth_pubkey(Authctxt *authctxt)
1703/* 1728/*
1704 * Send userauth request message specifying keyboard-interactive method. 1729 * Send userauth request message specifying keyboard-interactive method.
1705 */ 1730 */
1706int 1731static int
1707userauth_kbdint(Authctxt *authctxt) 1732userauth_kbdint(struct ssh *ssh)
1708{ 1733{
1709 struct ssh *ssh = active_state; /* XXX */ 1734 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1710 static int attempt = 0;
1711 int r; 1735 int r;
1712 1736
1713 if (attempt++ >= options.number_of_password_prompts) 1737 if (authctxt->attempt_kbdint++ >= options.number_of_password_prompts)
1714 return 0; 1738 return 0;
1715 /* disable if no SSH2_MSG_USERAUTH_INFO_REQUEST has been seen */ 1739 /* disable if no SSH2_MSG_USERAUTH_INFO_REQUEST has been seen */
1716 if (attempt > 1 && !authctxt->info_req_seen) { 1740 if (authctxt->attempt_kbdint > 1 && !authctxt->info_req_seen) {
1717 debug3("userauth_kbdint: disable: no info_req_seen"); 1741 debug3("userauth_kbdint: disable: no info_req_seen");
1718 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_INFO_REQUEST, NULL); 1742 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_INFO_REQUEST, NULL);
1719 return 0; 1743 return 0;
@@ -1737,7 +1761,7 @@ userauth_kbdint(Authctxt *authctxt)
1737/* 1761/*
1738 * parse INFO_REQUEST, prompt user and send INFO_RESPONSE 1762 * parse INFO_REQUEST, prompt user and send INFO_RESPONSE
1739 */ 1763 */
1740int 1764static int
1741input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh) 1765input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh)
1742{ 1766{
1743 Authctxt *authctxt = ssh->authctxt; 1767 Authctxt *authctxt = ssh->authctxt;
@@ -1803,13 +1827,14 @@ input_userauth_info_req(int type, u_int32_t seq, struct ssh *ssh)
1803} 1827}
1804 1828
1805static int 1829static int
1806ssh_keysign(struct sshkey *key, u_char **sigp, size_t *lenp, 1830ssh_keysign(struct ssh *ssh, struct sshkey *key, u_char **sigp, size_t *lenp,
1807 const u_char *data, size_t datalen) 1831 const u_char *data, size_t datalen)
1808{ 1832{
1809 struct sshbuf *b; 1833 struct sshbuf *b;
1810 struct stat st; 1834 struct stat st;
1811 pid_t pid; 1835 pid_t pid;
1812 int i, r, to[2], from[2], status, sock = packet_get_connection_in(); 1836 int i, r, to[2], from[2], status;
1837 int sock = ssh_packet_get_connection_in(ssh);
1813 u_char rversion = 0, version = 2; 1838 u_char rversion = 0, version = 2;
1814 void (*osigchld)(int); 1839 void (*osigchld)(int);
1815 1840
@@ -1916,10 +1941,10 @@ ssh_keysign(struct sshkey *key, u_char **sigp, size_t *lenp,
1916 return 0; 1941 return 0;
1917} 1942}
1918 1943
1919int 1944static int
1920userauth_hostbased(Authctxt *authctxt) 1945userauth_hostbased(struct ssh *ssh)
1921{ 1946{
1922 struct ssh *ssh = active_state; /* XXX */ 1947 Authctxt *authctxt = (Authctxt *)ssh->authctxt;
1923 struct sshkey *private = NULL; 1948 struct sshkey *private = NULL;
1924 struct sshbuf *b = NULL; 1949 struct sshbuf *b = NULL;
1925 u_char *sig = NULL, *keyblob = NULL; 1950 u_char *sig = NULL, *keyblob = NULL;
@@ -1983,7 +2008,8 @@ userauth_hostbased(Authctxt *authctxt)
1983 __func__, sshkey_ssh_name(private), fp); 2008 __func__, sshkey_ssh_name(private), fp);
1984 2009
1985 /* figure out a name for the client host */ 2010 /* figure out a name for the client host */
1986 if ((lname = get_local_name(packet_get_connection_in())) == NULL) { 2011 lname = get_local_name(ssh_packet_get_connection_in(ssh));
2012 if (lname == NULL) {
1987 error("%s: cannot get local ipaddr/name", __func__); 2013 error("%s: cannot get local ipaddr/name", __func__);
1988 goto out; 2014 goto out;
1989 } 2015 }
@@ -2017,9 +2043,8 @@ userauth_hostbased(Authctxt *authctxt)
2017#ifdef DEBUG_PK 2043#ifdef DEBUG_PK
2018 sshbuf_dump(b, stderr); 2044 sshbuf_dump(b, stderr);
2019#endif 2045#endif
2020 r = ssh_keysign(private, &sig, &siglen, 2046 if ((r = ssh_keysign(ssh, private, &sig, &siglen,
2021 sshbuf_ptr(b), sshbuf_len(b)); 2047 sshbuf_ptr(b), sshbuf_len(b))) != 0) {
2022 if (r != 0) {
2023 error("sign using hostkey %s %s failed", 2048 error("sign using hostkey %s %s failed",
2024 sshkey_ssh_name(private), fp); 2049 sshkey_ssh_name(private), fp);
2025 goto out; 2050 goto out;
diff --git a/sshd.0 b/sshd.0
index ac7e70707..da8539aef 100644
--- a/sshd.0
+++ b/sshd.0
@@ -650,4 +650,4 @@ AUTHORS
650 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support 650 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
651 for privilege separation. 651 for privilege separation.
652 652
653OpenBSD 6.4 July 22, 2018 OpenBSD 6.4 653OpenBSD 6.5 July 22, 2018 OpenBSD 6.5
diff --git a/sshd.c b/sshd.c
index ba26287ba..cbd3bce91 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshd.c,v 1.516 2018/09/21 12:23:17 djm Exp $ */ 1/* $OpenBSD: sshd.c,v 1.533 2019/03/01 02:32:39 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -151,45 +151,38 @@ int debug_flag = 0;
151 * configuration, optionally using connection information provided by the 151 * configuration, optionally using connection information provided by the
152 * "-C" flag. 152 * "-C" flag.
153 */ 153 */
154int test_flag = 0; 154static int test_flag = 0;
155 155
156/* Flag indicating that the daemon is being started from inetd. */ 156/* Flag indicating that the daemon is being started from inetd. */
157int inetd_flag = 0; 157static int inetd_flag = 0;
158 158
159/* Flag indicating that sshd should not detach and become a daemon. */ 159/* Flag indicating that sshd should not detach and become a daemon. */
160int no_daemon_flag = 0; 160static int no_daemon_flag = 0;
161 161
162/* debug goes to stderr unless inetd_flag is set */ 162/* debug goes to stderr unless inetd_flag is set */
163int log_stderr = 0; 163static int log_stderr = 0;
164 164
165/* Saved arguments to main(). */ 165/* Saved arguments to main(). */
166char **saved_argv; 166static char **saved_argv;
167int saved_argc; 167static int saved_argc;
168 168
169/* re-exec */ 169/* re-exec */
170int rexeced_flag = 0; 170static int rexeced_flag = 0;
171int rexec_flag = 1; 171static int rexec_flag = 1;
172int rexec_argc = 0; 172static int rexec_argc = 0;
173char **rexec_argv; 173static char **rexec_argv;
174 174
175/* 175/*
176 * The sockets that the server is listening; this is used in the SIGHUP 176 * The sockets that the server is listening; this is used in the SIGHUP
177 * signal handler. 177 * signal handler.
178 */ 178 */
179#define MAX_LISTEN_SOCKS 16 179#define MAX_LISTEN_SOCKS 16
180int listen_socks[MAX_LISTEN_SOCKS]; 180static int listen_socks[MAX_LISTEN_SOCKS];
181int num_listen_socks = 0; 181static int num_listen_socks = 0;
182
183/*
184 * the client's version string, passed by sshd2 in compat mode. if != NULL,
185 * sshd will skip the version-number exchange
186 */
187char *client_version_string = NULL;
188char *server_version_string = NULL;
189 182
190/* Daemon's agent connection */ 183/* Daemon's agent connection */
191int auth_sock = -1; 184int auth_sock = -1;
192int have_agent = 0; 185static int have_agent = 0;
193 186
194/* 187/*
195 * Any really sensitive data in the application is contained in this 188 * Any really sensitive data in the application is contained in this
@@ -220,9 +213,26 @@ u_int session_id2_len = 0;
220/* record remote hostname or ip */ 213/* record remote hostname or ip */
221u_int utmp_len = HOST_NAME_MAX+1; 214u_int utmp_len = HOST_NAME_MAX+1;
222 215
223/* options.max_startup sized array of fd ints */ 216/*
224int *startup_pipes = NULL; 217 * startup_pipes/flags are used for tracking children of the listening sshd
225int startup_pipe; /* in child */ 218 * process early in their lifespans. This tracking is needed for three things:
219 *
220 * 1) Implementing the MaxStartups limit of concurrent unauthenticated
221 * connections.
222 * 2) Avoiding a race condition for SIGHUP processing, where child processes
223 * may have listen_socks open that could collide with main listener process
224 * after it restarts.
225 * 3) Ensuring that rexec'd sshd processes have received their initial state
226 * from the parent listen process before handling SIGHUP.
227 *
228 * Child processes signal that they have completed closure of the listen_socks
229 * and (if applicable) received their rexec state by sending a char over their
230 * sock. Child processes signal that authentication has completed by closing
231 * the sock (or by exiting).
232 */
233static int *startup_pipes = NULL;
234static int *startup_flags = NULL; /* Indicates child closed listener */
235static int startup_pipe = -1; /* in child */
226 236
227/* variables used for privilege separation */ 237/* variables used for privilege separation */
228int use_privsep = -1; 238int use_privsep = -1;
@@ -230,8 +240,9 @@ struct monitor *pmonitor = NULL;
230int privsep_is_preauth = 1; 240int privsep_is_preauth = 1;
231static int privsep_chroot = 1; 241static int privsep_chroot = 1;
232 242
233/* global authentication context */ 243/* global connection state and authentication contexts */
234Authctxt *the_authctxt = NULL; 244Authctxt *the_authctxt = NULL;
245struct ssh *the_active_state;
235 246
236/* global key/cert auth options. XXX move to permanent ssh->authctxt? */ 247/* global key/cert auth options. XXX move to permanent ssh->authctxt? */
237struct sshauthopt *auth_opts = NULL; 248struct sshauthopt *auth_opts = NULL;
@@ -248,7 +259,7 @@ struct passwd *privsep_pw = NULL;
248/* Prototypes for various functions defined later in this file. */ 259/* Prototypes for various functions defined later in this file. */
249void destroy_sensitive_data(void); 260void destroy_sensitive_data(void);
250void demote_sensitive_data(void); 261void demote_sensitive_data(void);
251static void do_ssh2_kex(void); 262static void do_ssh2_kex(struct ssh *);
252 263
253/* 264/*
254 * Close all listening sockets 265 * Close all listening sockets
@@ -358,111 +369,11 @@ grace_alarm_handler(int sig)
358 kill(0, SIGTERM); 369 kill(0, SIGTERM);
359 } 370 }
360 371
372 /* XXX pre-format ipaddr/port so we don't need to access active_state */
361 /* Log error and exit. */ 373 /* Log error and exit. */
362 sigdie("Timeout before authentication for %s port %d", 374 sigdie("Timeout before authentication for %s port %d",
363 ssh_remote_ipaddr(active_state), ssh_remote_port(active_state)); 375 ssh_remote_ipaddr(the_active_state),
364} 376 ssh_remote_port(the_active_state));
365
366static void
367sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
368{
369 u_int i;
370 int remote_major, remote_minor;
371 char *s;
372 char buf[256]; /* Must not be larger than remote_version. */
373 char remote_version[256]; /* Must be at least as big as buf. */
374
375 xasprintf(&server_version_string, "SSH-%d.%d-%.100s%s%s\r\n",
376 PROTOCOL_MAJOR_2, PROTOCOL_MINOR_2, SSH_VERSION,
377 *options.version_addendum == '\0' ? "" : " ",
378 options.version_addendum);
379
380 /* Send our protocol version identification. */
381 if (atomicio(vwrite, sock_out, server_version_string,
382 strlen(server_version_string))
383 != strlen(server_version_string)) {
384 logit("Could not write ident string to %s port %d",
385 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
386 cleanup_exit(255);
387 }
388
389 /* Read other sides version identification. */
390 memset(buf, 0, sizeof(buf));
391 for (i = 0; i < sizeof(buf) - 1; i++) {
392 if (atomicio(read, sock_in, &buf[i], 1) != 1) {
393 logit("Did not receive identification string "
394 "from %s port %d",
395 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
396 cleanup_exit(255);
397 }
398 if (buf[i] == '\r') {
399 buf[i] = 0;
400 /* Kludge for F-Secure Macintosh < 1.0.2 */
401 if (i == 12 &&
402 strncmp(buf, "SSH-1.5-W1.0", 12) == 0)
403 break;
404 continue;
405 }
406 if (buf[i] == '\n') {
407 buf[i] = 0;
408 break;
409 }
410 }
411 buf[sizeof(buf) - 1] = 0;
412 client_version_string = xstrdup(buf);
413
414 /*
415 * Check that the versions match. In future this might accept
416 * several versions and set appropriate flags to handle them.
417 */
418 if (sscanf(client_version_string, "SSH-%d.%d-%[^\n]\n",
419 &remote_major, &remote_minor, remote_version) != 3) {
420 s = "Protocol mismatch.\n";
421 (void) atomicio(vwrite, sock_out, s, strlen(s));
422 logit("Bad protocol version identification '%.100s' "
423 "from %s port %d", client_version_string,
424 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh));
425 close(sock_in);
426 close(sock_out);
427 cleanup_exit(255);
428 }
429 debug("Client protocol version %d.%d; client software version %.100s",
430 remote_major, remote_minor, remote_version);
431
432 ssh->compat = compat_datafellows(remote_version);
433
434 if ((ssh->compat & SSH_BUG_PROBE) != 0) {
435 logit("probed from %s port %d with %s. Don't panic.",
436 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
437 client_version_string);
438 cleanup_exit(255);
439 }
440 if ((ssh->compat & SSH_BUG_SCANNER) != 0) {
441 logit("scanned from %s port %d with %s. Don't panic.",
442 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
443 client_version_string);
444 cleanup_exit(255);
445 }
446 if ((ssh->compat & SSH_BUG_RSASIGMD5) != 0) {
447 logit("Client version \"%.100s\" uses unsafe RSA signature "
448 "scheme; disabling use of RSA keys", remote_version);
449 }
450
451 chop(server_version_string);
452 debug("Local version string %.200s", server_version_string);
453
454 if (remote_major != 2 &&
455 !(remote_major == 1 && remote_minor == 99)) {
456 s = "Protocol major versions differ.\n";
457 (void) atomicio(vwrite, sock_out, s, strlen(s));
458 close(sock_in);
459 close(sock_out);
460 logit("Protocol major versions differ for %s port %d: "
461 "%.200s vs. %.200s",
462 ssh_remote_ipaddr(ssh), ssh_remote_port(ssh),
463 server_version_string, client_version_string);
464 cleanup_exit(255);
465 }
466} 377}
467 378
468/* Destroy the host and server keys. They will no longer be needed. */ 379/* Destroy the host and server keys. They will no longer be needed. */
@@ -564,7 +475,7 @@ privsep_preauth_child(void)
564} 475}
565 476
566static int 477static int
567privsep_preauth(Authctxt *authctxt) 478privsep_preauth(struct ssh *ssh)
568{ 479{
569 int status, r; 480 int status, r;
570 pid_t pid; 481 pid_t pid;
@@ -573,7 +484,7 @@ privsep_preauth(Authctxt *authctxt)
573 /* Set up unprivileged child process to deal with network data */ 484 /* Set up unprivileged child process to deal with network data */
574 pmonitor = monitor_init(); 485 pmonitor = monitor_init();
575 /* Store a pointer to the kex for later rekeying */ 486 /* Store a pointer to the kex for later rekeying */
576 pmonitor->m_pkex = &active_state->kex; 487 pmonitor->m_pkex = &ssh->kex;
577 488
578 if (use_privsep == PRIVSEP_ON) 489 if (use_privsep == PRIVSEP_ON)
579 box = ssh_sandbox_init(pmonitor); 490 box = ssh_sandbox_init(pmonitor);
@@ -594,7 +505,7 @@ privsep_preauth(Authctxt *authctxt)
594 } 505 }
595 if (box != NULL) 506 if (box != NULL)
596 ssh_sandbox_parent_preauth(box, pid); 507 ssh_sandbox_parent_preauth(box, pid);
597 monitor_child_preauth(authctxt, pmonitor); 508 monitor_child_preauth(ssh, pmonitor);
598 509
599 /* Wait for the child's exit status */ 510 /* Wait for the child's exit status */
600 while (waitpid(pid, &status, 0) < 0) { 511 while (waitpid(pid, &status, 0) < 0) {
@@ -633,7 +544,7 @@ privsep_preauth(Authctxt *authctxt)
633} 544}
634 545
635static void 546static void
636privsep_postauth(Authctxt *authctxt) 547privsep_postauth(struct ssh *ssh, Authctxt *authctxt)
637{ 548{
638#ifdef DISABLE_FD_PASSING 549#ifdef DISABLE_FD_PASSING
639 if (1) { 550 if (1) {
@@ -654,8 +565,8 @@ privsep_postauth(Authctxt *authctxt)
654 else if (pmonitor->m_pid != 0) { 565 else if (pmonitor->m_pid != 0) {
655 verbose("User child is on pid %ld", (long)pmonitor->m_pid); 566 verbose("User child is on pid %ld", (long)pmonitor->m_pid);
656 sshbuf_reset(loginmsg); 567 sshbuf_reset(loginmsg);
657 monitor_clear_keystate(pmonitor); 568 monitor_clear_keystate(ssh, pmonitor);
658 monitor_child_postauth(pmonitor); 569 monitor_child_postauth(ssh, pmonitor);
659 570
660 /* NEVERREACHED */ 571 /* NEVERREACHED */
661 exit(0); 572 exit(0);
@@ -676,13 +587,13 @@ privsep_postauth(Authctxt *authctxt)
676 587
677 skip: 588 skip:
678 /* It is safe now to apply the key state */ 589 /* It is safe now to apply the key state */
679 monitor_apply_keystate(pmonitor); 590 monitor_apply_keystate(ssh, pmonitor);
680 591
681 /* 592 /*
682 * Tell the packet layer that authentication was successful, since 593 * Tell the packet layer that authentication was successful, since
683 * this information is not part of the key state. 594 * this information is not part of the key state.
684 */ 595 */
685 packet_set_authenticated(); 596 ssh_packet_set_authenticated(ssh);
686} 597}
687 598
688static void 599static void
@@ -849,7 +760,7 @@ notify_hostkeys(struct ssh *ssh)
849 char *fp; 760 char *fp;
850 761
851 /* Some clients cannot cope with the hostkeys message, skip those. */ 762 /* Some clients cannot cope with the hostkeys message, skip those. */
852 if (datafellows & SSH_BUG_HOSTKEYS) 763 if (ssh->compat & SSH_BUG_HOSTKEYS)
853 return; 764 return;
854 765
855 if ((buf = sshbuf_new()) == NULL) 766 if ((buf = sshbuf_new()) == NULL)
@@ -865,21 +776,29 @@ notify_hostkeys(struct ssh *ssh)
865 sshkey_ssh_name(key), fp); 776 sshkey_ssh_name(key), fp);
866 free(fp); 777 free(fp);
867 if (nkeys == 0) { 778 if (nkeys == 0) {
868 packet_start(SSH2_MSG_GLOBAL_REQUEST); 779 /*
869 packet_put_cstring("hostkeys-00@openssh.com"); 780 * Start building the request when we find the
870 packet_put_char(0); /* want-reply */ 781 * first usable key.
782 */
783 if ((r = sshpkt_start(ssh, SSH2_MSG_GLOBAL_REQUEST)) != 0 ||
784 (r = sshpkt_put_cstring(ssh, "hostkeys-00@openssh.com")) != 0 ||
785 (r = sshpkt_put_u8(ssh, 0)) != 0) /* want reply */
786 sshpkt_fatal(ssh, r, "%s: start request", __func__);
871 } 787 }
788 /* Append the key to the request */
872 sshbuf_reset(buf); 789 sshbuf_reset(buf);
873 if ((r = sshkey_putb(key, buf)) != 0) 790 if ((r = sshkey_putb(key, buf)) != 0)
874 fatal("%s: couldn't put hostkey %d: %s", 791 fatal("%s: couldn't put hostkey %d: %s",
875 __func__, i, ssh_err(r)); 792 __func__, i, ssh_err(r));
876 packet_put_string(sshbuf_ptr(buf), sshbuf_len(buf)); 793 if ((r = sshpkt_put_stringb(ssh, buf)) != 0)
794 sshpkt_fatal(ssh, r, "%s: append key", __func__);
877 nkeys++; 795 nkeys++;
878 } 796 }
879 debug3("%s: sent %u hostkeys", __func__, nkeys); 797 debug3("%s: sent %u hostkeys", __func__, nkeys);
880 if (nkeys == 0) 798 if (nkeys == 0)
881 fatal("%s: no hostkeys", __func__); 799 fatal("%s: no hostkeys", __func__);
882 packet_send(); 800 if ((r = sshpkt_send(ssh)) != 0)
801 sshpkt_fatal(ssh, r, "%s: send", __func__);
883 sshbuf_free(buf); 802 sshbuf_free(buf);
884} 803}
885 804
@@ -917,7 +836,7 @@ usage(void)
917 fprintf(stderr, "%s, %s\n", 836 fprintf(stderr, "%s, %s\n",
918 SSH_RELEASE, 837 SSH_RELEASE,
919#ifdef WITH_OPENSSL 838#ifdef WITH_OPENSSL
920 SSLeay_version(SSLEAY_VERSION) 839 OpenSSL_version(OPENSSL_VERSION)
921#else 840#else
922 "without OpenSSL" 841 "without OpenSSL"
923#endif 842#endif
@@ -999,14 +918,9 @@ server_accept_inetd(int *sock_in, int *sock_out)
999{ 918{
1000 int fd; 919 int fd;
1001 920
1002 startup_pipe = -1;
1003 if (rexeced_flag) { 921 if (rexeced_flag) {
1004 close(REEXEC_CONFIG_PASS_FD); 922 close(REEXEC_CONFIG_PASS_FD);
1005 *sock_in = *sock_out = dup(STDIN_FILENO); 923 *sock_in = *sock_out = dup(STDIN_FILENO);
1006 if (!debug_flag) {
1007 startup_pipe = dup(REEXEC_STARTUP_PIPE_FD);
1008 close(REEXEC_STARTUP_PIPE_FD);
1009 }
1010 } else { 924 } else {
1011 *sock_in = dup(STDIN_FILENO); 925 *sock_in = dup(STDIN_FILENO);
1012 *sock_out = dup(STDOUT_FILENO); 926 *sock_out = dup(STDOUT_FILENO);
@@ -1131,8 +1045,9 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1131{ 1045{
1132 fd_set *fdset; 1046 fd_set *fdset;
1133 int i, j, ret, maxfd; 1047 int i, j, ret, maxfd;
1134 int startups = 0; 1048 int startups = 0, listening = 0, lameduck = 0;
1135 int startup_p[2] = { -1 , -1 }; 1049 int startup_p[2] = { -1 , -1 };
1050 char c = 0;
1136 struct sockaddr_storage from; 1051 struct sockaddr_storage from;
1137 socklen_t fromlen; 1052 socklen_t fromlen;
1138 pid_t pid; 1053 pid_t pid;
@@ -1146,6 +1061,7 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1146 maxfd = listen_socks[i]; 1061 maxfd = listen_socks[i];
1147 /* pipes connected to unauthenticated childs */ 1062 /* pipes connected to unauthenticated childs */
1148 startup_pipes = xcalloc(options.max_startups, sizeof(int)); 1063 startup_pipes = xcalloc(options.max_startups, sizeof(int));
1064 startup_flags = xcalloc(options.max_startups, sizeof(int));
1149 for (i = 0; i < options.max_startups; i++) 1065 for (i = 0; i < options.max_startups; i++)
1150 startup_pipes[i] = -1; 1066 startup_pipes[i] = -1;
1151 1067
@@ -1154,8 +1070,15 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1154 * the daemon is killed with a signal. 1070 * the daemon is killed with a signal.
1155 */ 1071 */
1156 for (;;) { 1072 for (;;) {
1157 if (received_sighup) 1073 if (received_sighup) {
1158 sighup_restart(); 1074 if (!lameduck) {
1075 debug("Received SIGHUP; waiting for children");
1076 close_listen_socks();
1077 lameduck = 1;
1078 }
1079 if (listening <= 0)
1080 sighup_restart();
1081 }
1159 free(fdset); 1082 free(fdset);
1160 fdset = xcalloc(howmany(maxfd + 1, NFDBITS), 1083 fdset = xcalloc(howmany(maxfd + 1, NFDBITS),
1161 sizeof(fd_mask)); 1084 sizeof(fd_mask));
@@ -1181,19 +1104,37 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1181 if (ret < 0) 1104 if (ret < 0)
1182 continue; 1105 continue;
1183 1106
1184 for (i = 0; i < options.max_startups; i++) 1107 for (i = 0; i < options.max_startups; i++) {
1185 if (startup_pipes[i] != -1 && 1108 if (startup_pipes[i] == -1 ||
1186 FD_ISSET(startup_pipes[i], fdset)) { 1109 !FD_ISSET(startup_pipes[i], fdset))
1187 /* 1110 continue;
1188 * the read end of the pipe is ready 1111 switch (read(startup_pipes[i], &c, sizeof(c))) {
1189 * if the child has closed the pipe 1112 case -1:
1190 * after successful authentication 1113 if (errno == EINTR || errno == EAGAIN)
1191 * or if the child has died 1114 continue;
1192 */ 1115 if (errno != EPIPE) {
1116 error("%s: startup pipe %d (fd=%d): "
1117 "read %s", __func__, i,
1118 startup_pipes[i], strerror(errno));
1119 }
1120 /* FALLTHROUGH */
1121 case 0:
1122 /* child exited or completed auth */
1193 close(startup_pipes[i]); 1123 close(startup_pipes[i]);
1194 startup_pipes[i] = -1; 1124 startup_pipes[i] = -1;
1195 startups--; 1125 startups--;
1126 if (startup_flags[i])
1127 listening--;
1128 break;
1129 case 1:
1130 /* child has finished preliminaries */
1131 if (startup_flags[i]) {
1132 listening--;
1133 startup_flags[i] = 0;
1134 }
1135 break;
1196 } 1136 }
1137 }
1197 for (i = 0; i < num_listen_socks; i++) { 1138 for (i = 0; i < num_listen_socks; i++) {
1198 if (!FD_ISSET(listen_socks[i], fdset)) 1139 if (!FD_ISSET(listen_socks[i], fdset))
1199 continue; 1140 continue;
@@ -1247,6 +1188,7 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1247 if (maxfd < startup_p[0]) 1188 if (maxfd < startup_p[0])
1248 maxfd = startup_p[0]; 1189 maxfd = startup_p[0];
1249 startups++; 1190 startups++;
1191 startup_flags[j] = 1;
1250 break; 1192 break;
1251 } 1193 }
1252 1194
@@ -1272,7 +1214,7 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1272 send_rexec_state(config_s[0], cfg); 1214 send_rexec_state(config_s[0], cfg);
1273 close(config_s[0]); 1215 close(config_s[0]);
1274 } 1216 }
1275 break; 1217 return;
1276 } 1218 }
1277 1219
1278 /* 1220 /*
@@ -1281,13 +1223,14 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1281 * parent continues listening. 1223 * parent continues listening.
1282 */ 1224 */
1283 platform_pre_fork(); 1225 platform_pre_fork();
1226 listening++;
1284 if ((pid = fork()) == 0) { 1227 if ((pid = fork()) == 0) {
1285 /* 1228 /*
1286 * Child. Close the listening and 1229 * Child. Close the listening and
1287 * max_startup sockets. Start using 1230 * max_startup sockets. Start using
1288 * the accepted socket. Reinitialize 1231 * the accepted socket. Reinitialize
1289 * logging (since our pid has changed). 1232 * logging (since our pid has changed).
1290 * We break out of the loop to handle 1233 * We return from this function to handle
1291 * the connection. 1234 * the connection.
1292 */ 1235 */
1293 platform_post_fork_child(); 1236 platform_post_fork_child();
@@ -1302,7 +1245,18 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1302 log_stderr); 1245 log_stderr);
1303 if (rexec_flag) 1246 if (rexec_flag)
1304 close(config_s[0]); 1247 close(config_s[0]);
1305 break; 1248 else {
1249 /*
1250 * Signal parent that the preliminaries
1251 * for this child are complete. For the
1252 * re-exec case, this happens after the
1253 * child has received the rexec state
1254 * from the server.
1255 */
1256 (void)atomicio(vwrite, startup_pipe,
1257 "\0", 1);
1258 }
1259 return;
1306 } 1260 }
1307 1261
1308 /* Parent. Stay in the loop. */ 1262 /* Parent. Stay in the loop. */
@@ -1334,10 +1288,6 @@ server_accept_loop(int *sock_in, int *sock_out, int *newsock, int *config_s)
1334#endif 1288#endif
1335 explicit_bzero(rnd, sizeof(rnd)); 1289 explicit_bzero(rnd, sizeof(rnd));
1336 } 1290 }
1337
1338 /* child process check (or debug mode) */
1339 if (num_listen_socks < 0)
1340 break;
1341 } 1291 }
1342} 1292}
1343 1293
@@ -1510,6 +1460,8 @@ main(int ac, char **av)
1510 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */ 1460 /* Ensure that fds 0, 1 and 2 are open or directed to /dev/null */
1511 sanitise_stdfd(); 1461 sanitise_stdfd();
1512 1462
1463 seed_rng();
1464
1513 /* Initialize configuration options to their default values. */ 1465 /* Initialize configuration options to their default values. */
1514 initialize_server_options(&options); 1466 initialize_server_options(&options);
1515 1467
@@ -1588,7 +1540,7 @@ main(int ac, char **av)
1588 break; 1540 break;
1589 case 'h': 1541 case 'h':
1590 servconf_add_hostkey("[command-line]", 0, 1542 servconf_add_hostkey("[command-line]", 0,
1591 &options, optarg); 1543 &options, optarg, 1);
1592 break; 1544 break;
1593 case 't': 1545 case 't':
1594 test_flag = 1; 1546 test_flag = 1;
@@ -1597,7 +1549,7 @@ main(int ac, char **av)
1597 test_flag = 2; 1549 test_flag = 2;
1598 break; 1550 break;
1599 case 'C': 1551 case 'C':
1600 connection_info = get_connection_info(0, 0); 1552 connection_info = get_connection_info(ssh, 0, 0);
1601 if (parse_server_match_testspec(connection_info, 1553 if (parse_server_match_testspec(connection_info,
1602 optarg) == -1) 1554 optarg) == -1)
1603 exit(1); 1555 exit(1);
@@ -1624,17 +1576,13 @@ main(int ac, char **av)
1624 } 1576 }
1625 if (rexeced_flag || inetd_flag) 1577 if (rexeced_flag || inetd_flag)
1626 rexec_flag = 0; 1578 rexec_flag = 0;
1627 if (!test_flag && (rexec_flag && (av[0] == NULL || *av[0] != '/'))) 1579 if (!test_flag && rexec_flag && !path_absolute(av[0]))
1628 fatal("sshd re-exec requires execution with an absolute path"); 1580 fatal("sshd re-exec requires execution with an absolute path");
1629 if (rexeced_flag) 1581 if (rexeced_flag)
1630 closefrom(REEXEC_MIN_FREE_FD); 1582 closefrom(REEXEC_MIN_FREE_FD);
1631 else 1583 else
1632 closefrom(REEXEC_DEVCRYPTO_RESERVED_FD); 1584 closefrom(REEXEC_DEVCRYPTO_RESERVED_FD);
1633 1585
1634#ifdef WITH_OPENSSL
1635 OpenSSL_add_all_algorithms();
1636#endif
1637
1638 /* If requested, redirect the logs to the specified logfile. */ 1586 /* If requested, redirect the logs to the specified logfile. */
1639 if (logfile != NULL) 1587 if (logfile != NULL)
1640 log_redirect_stderr_to(logfile); 1588 log_redirect_stderr_to(logfile);
@@ -1669,16 +1617,24 @@ main(int ac, char **av)
1669 /* Fetch our configuration */ 1617 /* Fetch our configuration */
1670 if ((cfg = sshbuf_new()) == NULL) 1618 if ((cfg = sshbuf_new()) == NULL)
1671 fatal("%s: sshbuf_new failed", __func__); 1619 fatal("%s: sshbuf_new failed", __func__);
1672 if (rexeced_flag) 1620 if (rexeced_flag) {
1673 recv_rexec_state(REEXEC_CONFIG_PASS_FD, cfg); 1621 recv_rexec_state(REEXEC_CONFIG_PASS_FD, cfg);
1622 if (!debug_flag) {
1623 startup_pipe = dup(REEXEC_STARTUP_PIPE_FD);
1624 close(REEXEC_STARTUP_PIPE_FD);
1625 /*
1626 * Signal parent that this child is at a point where
1627 * they can go away if they have a SIGHUP pending.
1628 */
1629 (void)atomicio(vwrite, startup_pipe, "\0", 1);
1630 }
1631 }
1674 else if (strcasecmp(config_file_name, "none") != 0) 1632 else if (strcasecmp(config_file_name, "none") != 0)
1675 load_server_config(config_file_name, cfg); 1633 load_server_config(config_file_name, cfg);
1676 1634
1677 parse_server_config(&options, rexeced_flag ? "rexec" : config_file_name, 1635 parse_server_config(&options, rexeced_flag ? "rexec" : config_file_name,
1678 cfg, NULL); 1636 cfg, NULL);
1679 1637
1680 seed_rng();
1681
1682 /* Fill in default values for those options not explicitly set. */ 1638 /* Fill in default values for those options not explicitly set. */
1683 fill_default_server_options(&options); 1639 fill_default_server_options(&options);
1684 1640
@@ -1723,7 +1679,7 @@ main(int ac, char **av)
1723 1679
1724 debug("sshd version %s, %s", SSH_VERSION, 1680 debug("sshd version %s, %s", SSH_VERSION,
1725#ifdef WITH_OPENSSL 1681#ifdef WITH_OPENSSL
1726 SSLeay_version(SSLEAY_VERSION) 1682 OpenSSL_version(OPENSSL_VERSION)
1727#else 1683#else
1728 "without OpenSSL" 1684 "without OpenSSL"
1729#endif 1685#endif
@@ -1760,15 +1716,18 @@ main(int ac, char **av)
1760 } 1716 }
1761 1717
1762 for (i = 0; i < options.num_host_key_files; i++) { 1718 for (i = 0; i < options.num_host_key_files; i++) {
1719 int ll = options.host_key_file_userprovided[i] ?
1720 SYSLOG_LEVEL_ERROR : SYSLOG_LEVEL_DEBUG1;
1721
1763 if (options.host_key_files[i] == NULL) 1722 if (options.host_key_files[i] == NULL)
1764 continue; 1723 continue;
1765 if ((r = sshkey_load_private(options.host_key_files[i], "", 1724 if ((r = sshkey_load_private(options.host_key_files[i], "",
1766 &key, NULL)) != 0 && r != SSH_ERR_SYSTEM_ERROR) 1725 &key, NULL)) != 0 && r != SSH_ERR_SYSTEM_ERROR)
1767 error("Error loading host key \"%s\": %s", 1726 do_log2(ll, "Unable to load host key \"%s\": %s",
1768 options.host_key_files[i], ssh_err(r)); 1727 options.host_key_files[i], ssh_err(r));
1769 if ((r = sshkey_load_public(options.host_key_files[i], 1728 if ((r = sshkey_load_public(options.host_key_files[i],
1770 &pubkey, NULL)) != 0 && r != SSH_ERR_SYSTEM_ERROR) 1729 &pubkey, NULL)) != 0 && r != SSH_ERR_SYSTEM_ERROR)
1771 error("Error loading host key \"%s\": %s", 1730 do_log2(ll, "Unable to load host key \"%s\": %s",
1772 options.host_key_files[i], ssh_err(r)); 1731 options.host_key_files[i], ssh_err(r));
1773 if (pubkey == NULL && key != NULL) 1732 if (pubkey == NULL && key != NULL)
1774 if ((r = sshkey_from_private(key, &pubkey)) != 0) 1733 if ((r = sshkey_from_private(key, &pubkey)) != 0)
@@ -1785,7 +1744,7 @@ main(int ac, char **av)
1785 keytype = key->type; 1744 keytype = key->type;
1786 accumulate_host_timing_secret(cfg, key); 1745 accumulate_host_timing_secret(cfg, key);
1787 } else { 1746 } else {
1788 error("Could not load host key: %s", 1747 do_log2(ll, "Unable to load host key: %s",
1789 options.host_key_files[i]); 1748 options.host_key_files[i]);
1790 sensitive_data.host_keys[i] = NULL; 1749 sensitive_data.host_keys[i] = NULL;
1791 sensitive_data.host_pubkeys[i] = NULL; 1750 sensitive_data.host_pubkeys[i] = NULL;
@@ -1883,7 +1842,7 @@ main(int ac, char **av)
1883 * use a blank one that will cause no predicate to match. 1842 * use a blank one that will cause no predicate to match.
1884 */ 1843 */
1885 if (connection_info == NULL) 1844 if (connection_info == NULL)
1886 connection_info = get_connection_info(0, 0); 1845 connection_info = get_connection_info(ssh, 0, 0);
1887 parse_server_match_config(&options, connection_info); 1846 parse_server_match_config(&options, connection_info);
1888 dump_config(&options); 1847 dump_config(&options);
1889 } 1848 }
@@ -2058,9 +2017,10 @@ main(int ac, char **av)
2058 * Register our connection. This turns encryption off because we do 2017 * Register our connection. This turns encryption off because we do
2059 * not have a key. 2018 * not have a key.
2060 */ 2019 */
2061 packet_set_connection(sock_in, sock_out); 2020 if ((ssh = ssh_packet_set_connection(NULL, sock_in, sock_out)) == NULL)
2062 packet_set_server(); 2021 fatal("Unable to create connection");
2063 ssh = active_state; /* XXX */ 2022 the_active_state = ssh;
2023 ssh_packet_set_server(ssh);
2064 2024
2065 check_ip_options(ssh); 2025 check_ip_options(ssh);
2066 2026
@@ -2070,7 +2030,7 @@ main(int ac, char **av)
2070 process_permitopen(ssh, &options); 2030 process_permitopen(ssh, &options);
2071 2031
2072 /* Set SO_KEEPALIVE if requested. */ 2032 /* Set SO_KEEPALIVE if requested. */
2073 if (options.tcp_keep_alive && packet_connection_is_on_socket() && 2033 if (options.tcp_keep_alive && ssh_packet_connection_is_on_socket(ssh) &&
2074 setsockopt(sock_in, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)) < 0) 2034 setsockopt(sock_in, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on)) < 0)
2075 error("setsockopt SO_KEEPALIVE: %.100s", strerror(errno)); 2035 error("setsockopt SO_KEEPALIVE: %.100s", strerror(errno));
2076 2036
@@ -2116,11 +2076,14 @@ main(int ac, char **av)
2116 if (!debug_flag) 2076 if (!debug_flag)
2117 alarm(options.login_grace_time); 2077 alarm(options.login_grace_time);
2118 2078
2119 sshd_exchange_identification(ssh, sock_in, sock_out); 2079 if (kex_exchange_identification(ssh, -1, options.version_addendum) != 0)
2120 packet_set_nonblocking(); 2080 cleanup_exit(255); /* error already logged */
2081
2082 ssh_packet_set_nonblocking(ssh);
2121 2083
2122 /* allocate authentication context */ 2084 /* allocate authentication context */
2123 authctxt = xcalloc(1, sizeof(*authctxt)); 2085 authctxt = xcalloc(1, sizeof(*authctxt));
2086 ssh->authctxt = authctxt;
2124 2087
2125 authctxt->loginmsg = loginmsg; 2088 authctxt->loginmsg = loginmsg;
2126 2089
@@ -2137,7 +2100,7 @@ main(int ac, char **av)
2137 auth_debug_reset(); 2100 auth_debug_reset();
2138 2101
2139 if (use_privsep) { 2102 if (use_privsep) {
2140 if (privsep_preauth(authctxt) == 1) 2103 if (privsep_preauth(ssh) == 1)
2141 goto authenticated; 2104 goto authenticated;
2142 } else if (have_agent) { 2105 } else if (have_agent) {
2143 if ((r = ssh_get_authentication_socket(&auth_sock)) != 0) { 2106 if ((r = ssh_get_authentication_socket(&auth_sock)) != 0) {
@@ -2148,16 +2111,16 @@ main(int ac, char **av)
2148 2111
2149 /* perform the key exchange */ 2112 /* perform the key exchange */
2150 /* authenticate user and start session */ 2113 /* authenticate user and start session */
2151 do_ssh2_kex(); 2114 do_ssh2_kex(ssh);
2152 do_authentication2(authctxt); 2115 do_authentication2(ssh);
2153 2116
2154 /* 2117 /*
2155 * If we use privilege separation, the unprivileged child transfers 2118 * If we use privilege separation, the unprivileged child transfers
2156 * the current keystate and exits 2119 * the current keystate and exits
2157 */ 2120 */
2158 if (use_privsep) { 2121 if (use_privsep) {
2159 mm_send_keystate(pmonitor); 2122 mm_send_keystate(ssh, pmonitor);
2160 packet_clear_keys(); 2123 ssh_packet_clear_keys(ssh);
2161 exit(0); 2124 exit(0);
2162 } 2125 }
2163 2126
@@ -2175,7 +2138,7 @@ main(int ac, char **av)
2175 } 2138 }
2176 2139
2177#ifdef SSH_AUDIT_EVENTS 2140#ifdef SSH_AUDIT_EVENTS
2178 audit_event(SSH_AUTH_SUCCESS); 2141 audit_event(ssh, SSH_AUTH_SUCCESS);
2179#endif 2142#endif
2180 2143
2181#ifdef GSSAPI 2144#ifdef GSSAPI
@@ -2197,11 +2160,11 @@ main(int ac, char **av)
2197 * file descriptor passing. 2160 * file descriptor passing.
2198 */ 2161 */
2199 if (use_privsep) { 2162 if (use_privsep) {
2200 privsep_postauth(authctxt); 2163 privsep_postauth(ssh, authctxt);
2201 /* the monitor process [priv] will not return */ 2164 /* the monitor process [priv] will not return */
2202 } 2165 }
2203 2166
2204 packet_set_timeout(options.client_alive_interval, 2167 ssh_packet_set_timeout(ssh, options.client_alive_interval,
2205 options.client_alive_count_max); 2168 options.client_alive_count_max);
2206 2169
2207 /* Try to send all our hostkeys to the client */ 2170 /* Try to send all our hostkeys to the client */
@@ -2211,7 +2174,7 @@ main(int ac, char **av)
2211 do_authenticated(ssh, authctxt); 2174 do_authenticated(ssh, authctxt);
2212 2175
2213 /* The connection has been terminated. */ 2176 /* The connection has been terminated. */
2214 packet_get_bytes(&ibytes, &obytes); 2177 ssh_packet_get_bytes(ssh, &ibytes, &obytes);
2215 verbose("Transferred: sent %llu, received %llu bytes", 2178 verbose("Transferred: sent %llu, received %llu bytes",
2216 (unsigned long long)obytes, (unsigned long long)ibytes); 2179 (unsigned long long)obytes, (unsigned long long)ibytes);
2217 2180
@@ -2223,10 +2186,10 @@ main(int ac, char **av)
2223#endif /* USE_PAM */ 2186#endif /* USE_PAM */
2224 2187
2225#ifdef SSH_AUDIT_EVENTS 2188#ifdef SSH_AUDIT_EVENTS
2226 PRIVSEP(audit_event(SSH_CONNECTION_CLOSE)); 2189 PRIVSEP(audit_event(ssh, SSH_CONNECTION_CLOSE));
2227#endif 2190#endif
2228 2191
2229 packet_close(); 2192 ssh_packet_close(ssh);
2230 2193
2231 if (use_privsep) 2194 if (use_privsep)
2232 mm_terminate(); 2195 mm_terminate();
@@ -2235,32 +2198,42 @@ main(int ac, char **av)
2235} 2198}
2236 2199
2237int 2200int
2238sshd_hostkey_sign(struct sshkey *privkey, struct sshkey *pubkey, 2201sshd_hostkey_sign(struct ssh *ssh, struct sshkey *privkey,
2239 u_char **signature, size_t *slenp, const u_char *data, size_t dlen, 2202 struct sshkey *pubkey, u_char **signature, size_t *slenp,
2240 const char *alg, u_int flag) 2203 const u_char *data, size_t dlen, const char *alg)
2241{ 2204{
2242 int r; 2205 int r;
2243 2206
2244 if (privkey) { 2207 if (use_privsep) {
2245 if (PRIVSEP(sshkey_sign(privkey, signature, slenp, data, dlen, 2208 if (privkey) {
2246 alg, datafellows)) < 0) 2209 if (mm_sshkey_sign(ssh, privkey, signature, slenp,
2247 fatal("%s: key_sign failed", __func__); 2210 data, dlen, alg, ssh->compat) < 0)
2248 } else if (use_privsep) { 2211 fatal("%s: privkey sign failed", __func__);
2249 if (mm_sshkey_sign(pubkey, signature, slenp, data, dlen, 2212 } else {
2250 alg, datafellows) < 0) 2213 if (mm_sshkey_sign(ssh, pubkey, signature, slenp,
2251 fatal("%s: pubkey_sign failed", __func__); 2214 data, dlen, alg, ssh->compat) < 0)
2215 fatal("%s: pubkey sign failed", __func__);
2216 }
2252 } else { 2217 } else {
2253 if ((r = ssh_agent_sign(auth_sock, pubkey, signature, slenp, 2218 if (privkey) {
2254 data, dlen, alg, datafellows)) != 0) 2219 if (sshkey_sign(privkey, signature, slenp, data, dlen,
2255 fatal("%s: ssh_agent_sign failed: %s", 2220 alg, ssh->compat) < 0)
2256 __func__, ssh_err(r)); 2221 fatal("%s: privkey sign failed", __func__);
2222 } else {
2223 if ((r = ssh_agent_sign(auth_sock, pubkey,
2224 signature, slenp, data, dlen, alg,
2225 ssh->compat)) != 0) {
2226 fatal("%s: agent sign failed: %s",
2227 __func__, ssh_err(r));
2228 }
2229 }
2257 } 2230 }
2258 return 0; 2231 return 0;
2259} 2232}
2260 2233
2261/* SSH2 key exchange */ 2234/* SSH2 key exchange */
2262static void 2235static void
2263do_ssh2_kex(void) 2236do_ssh2_kex(struct ssh *ssh)
2264{ 2237{
2265 char *myproposal[PROPOSAL_MAX] = { KEX_SERVER }; 2238 char *myproposal[PROPOSAL_MAX] = { KEX_SERVER };
2266 struct kex *kex; 2239 struct kex *kex;
@@ -2281,38 +2254,36 @@ do_ssh2_kex(void)
2281 } 2254 }
2282 2255
2283 if (options.rekey_limit || options.rekey_interval) 2256 if (options.rekey_limit || options.rekey_interval)
2284 packet_set_rekey_limits(options.rekey_limit, 2257 ssh_packet_set_rekey_limits(ssh, options.rekey_limit,
2285 options.rekey_interval); 2258 options.rekey_interval);
2286 2259
2287 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal( 2260 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = compat_pkalg_proposal(
2288 list_hostkey_types()); 2261 list_hostkey_types());
2289 2262
2290 /* start key exchange */ 2263 /* start key exchange */
2291 if ((r = kex_setup(active_state, myproposal)) != 0) 2264 if ((r = kex_setup(ssh, myproposal)) != 0)
2292 fatal("kex_setup: %s", ssh_err(r)); 2265 fatal("kex_setup: %s", ssh_err(r));
2293 kex = active_state->kex; 2266 kex = ssh->kex;
2294#ifdef WITH_OPENSSL 2267#ifdef WITH_OPENSSL
2295 kex->kex[KEX_DH_GRP1_SHA1] = kexdh_server; 2268 kex->kex[KEX_DH_GRP1_SHA1] = kex_gen_server;
2296 kex->kex[KEX_DH_GRP14_SHA1] = kexdh_server; 2269 kex->kex[KEX_DH_GRP14_SHA1] = kex_gen_server;
2297 kex->kex[KEX_DH_GRP14_SHA256] = kexdh_server; 2270 kex->kex[KEX_DH_GRP14_SHA256] = kex_gen_server;
2298 kex->kex[KEX_DH_GRP16_SHA512] = kexdh_server; 2271 kex->kex[KEX_DH_GRP16_SHA512] = kex_gen_server;
2299 kex->kex[KEX_DH_GRP18_SHA512] = kexdh_server; 2272 kex->kex[KEX_DH_GRP18_SHA512] = kex_gen_server;
2300 kex->kex[KEX_DH_GEX_SHA1] = kexgex_server; 2273 kex->kex[KEX_DH_GEX_SHA1] = kexgex_server;
2301 kex->kex[KEX_DH_GEX_SHA256] = kexgex_server; 2274 kex->kex[KEX_DH_GEX_SHA256] = kexgex_server;
2302# ifdef OPENSSL_HAS_ECC 2275# ifdef OPENSSL_HAS_ECC
2303 kex->kex[KEX_ECDH_SHA2] = kexecdh_server; 2276 kex->kex[KEX_ECDH_SHA2] = kex_gen_server;
2304# endif 2277# endif
2305#endif 2278#endif
2306 kex->kex[KEX_C25519_SHA256] = kexc25519_server; 2279 kex->kex[KEX_C25519_SHA256] = kex_gen_server;
2307 kex->server = 1; 2280 kex->kex[KEX_KEM_SNTRUP4591761X25519_SHA512] = kex_gen_server;
2308 kex->client_version_string=client_version_string;
2309 kex->server_version_string=server_version_string;
2310 kex->load_host_public_key=&get_hostkey_public_by_type; 2281 kex->load_host_public_key=&get_hostkey_public_by_type;
2311 kex->load_host_private_key=&get_hostkey_private_by_type; 2282 kex->load_host_private_key=&get_hostkey_private_by_type;
2312 kex->host_key_index=&get_hostkey_index; 2283 kex->host_key_index=&get_hostkey_index;
2313 kex->sign = sshd_hostkey_sign; 2284 kex->sign = sshd_hostkey_sign;
2314 2285
2315 ssh_dispatch_run_fatal(active_state, DISPATCH_BLOCK, &kex->done); 2286 ssh_dispatch_run_fatal(ssh, DISPATCH_BLOCK, &kex->done);
2316 2287
2317 session_id2 = kex->session_id; 2288 session_id2 = kex->session_id;
2318 session_id2_len = kex->session_id_len; 2289 session_id2_len = kex->session_id_len;
@@ -2331,10 +2302,8 @@ do_ssh2_kex(void)
2331void 2302void
2332cleanup_exit(int i) 2303cleanup_exit(int i)
2333{ 2304{
2334 struct ssh *ssh = active_state; /* XXX */ 2305 if (the_active_state != NULL && the_authctxt != NULL) {
2335 2306 do_cleanup(the_active_state, the_authctxt);
2336 if (the_authctxt) {
2337 do_cleanup(ssh, the_authctxt);
2338 if (use_privsep && privsep_is_preauth && 2307 if (use_privsep && privsep_is_preauth &&
2339 pmonitor != NULL && pmonitor->m_pid > 1) { 2308 pmonitor != NULL && pmonitor->m_pid > 1) {
2340 debug("Killing privsep child %d", pmonitor->m_pid); 2309 debug("Killing privsep child %d", pmonitor->m_pid);
@@ -2346,8 +2315,8 @@ cleanup_exit(int i)
2346 } 2315 }
2347#ifdef SSH_AUDIT_EVENTS 2316#ifdef SSH_AUDIT_EVENTS
2348 /* done after do_cleanup so it can cancel the PAM auth 'thread' */ 2317 /* done after do_cleanup so it can cancel the PAM auth 'thread' */
2349 if (!use_privsep || mm_is_monitor()) 2318 if (the_active_state != NULL && (!use_privsep || mm_is_monitor()))
2350 audit_event(SSH_CONNECTION_ABANDON); 2319 audit_event(the_active_state, SSH_CONNECTION_ABANDON);
2351#endif 2320#endif
2352 _exit(i); 2321 _exit(i);
2353} 2322}
diff --git a/sshd_config.0 b/sshd_config.0
index af54da6b2..545b9a89c 100644
--- a/sshd_config.0
+++ b/sshd_config.0
@@ -637,7 +637,7 @@ DESCRIPTION
637 the single token All which matches all criteria. The available 637 the single token All which matches all criteria. The available
638 criteria are User, Group, Host, LocalAddress, LocalPort, RDomain, 638 criteria are User, Group, Host, LocalAddress, LocalPort, RDomain,
639 and Address (with RDomain representing the rdomain(4) on which 639 and Address (with RDomain representing the rdomain(4) on which
640 the connection was received.) 640 the connection was received).
641 641
642 The match patterns may consist of single entries or comma- 642 The match patterns may consist of single entries or comma-
643 separated lists and may use the wildcard and negation operators 643 separated lists and may use the wildcard and negation operators
@@ -725,9 +725,9 @@ DESCRIPTION
725 listen requests are permitted. Note that the GatewayPorts option 725 listen requests are permitted. Note that the GatewayPorts option
726 may further restrict which addresses may be listened on. Note 726 may further restrict which addresses may be listened on. Note
727 also that ssh(1) will request a listen host of M-bM-^@M-^\localhostM-bM-^@M-^] if no 727 also that ssh(1) will request a listen host of M-bM-^@M-^\localhostM-bM-^@M-^] if no
728 listen host was specifically requested, and this this name is 728 listen host was specifically requested, and this name is treated
729 treated differently to explicit localhost addresses of 729 differently to explicit localhost addresses of M-bM-^@M-^\127.0.0.1M-bM-^@M-^] and
730 M-bM-^@M-^\127.0.0.1M-bM-^@M-^] and M-bM-^@M-^\::1M-bM-^@M-^]. 730 M-bM-^@M-^\::1M-bM-^@M-^].
731 731
732 PermitOpen 732 PermitOpen
733 Specifies the destinations to which TCP port forwarding is 733 Specifies the destinations to which TCP port forwarding is
@@ -1089,4 +1089,4 @@ AUTHORS
1089 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support 1089 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
1090 for privilege separation. 1090 for privilege separation.
1091 1091
1092OpenBSD 6.4 September 20, 2018 OpenBSD 6.4 1092OpenBSD 6.5 March 22, 2019 OpenBSD 6.5
diff --git a/sshd_config.5 b/sshd_config.5
index c6484370b..b224f2929 100644
--- a/sshd_config.5
+++ b/sshd_config.5
@@ -33,8 +33,8 @@
33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 33.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 34.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
35.\" 35.\"
36.\" $OpenBSD: sshd_config.5,v 1.282 2018/09/20 03:28:06 djm Exp $ 36.\" $OpenBSD: sshd_config.5,v 1.284 2019/03/22 20:58:34 jmc Exp $
37.Dd $Mdocdate: September 20 2018 $ 37.Dd $Mdocdate: March 22 2019 $
38.Dt SSHD_CONFIG 5 38.Dt SSHD_CONFIG 5
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -1084,7 +1084,7 @@ and
1084.Cm RDomain 1084.Cm RDomain
1085representing the 1085representing the
1086.Xr rdomain 4 1086.Xr rdomain 4
1087on which the connection was received.) 1087on which the connection was received).
1088.Pp 1088.Pp
1089The match patterns may consist of single entries or comma-separated 1089The match patterns may consist of single entries or comma-separated
1090lists and may use the wildcard and negation operators described in the 1090lists and may use the wildcard and negation operators described in the
@@ -1237,7 +1237,7 @@ Note also that
1237.Xr ssh 1 1237.Xr ssh 1
1238will request a listen host of 1238will request a listen host of
1239.Dq localhost 1239.Dq localhost
1240if no listen host was specifically requested, and this this name is 1240if no listen host was specifically requested, and this name is
1241treated differently to explicit localhost addresses of 1241treated differently to explicit localhost addresses of
1242.Dq 127.0.0.1 1242.Dq 127.0.0.1
1243and 1243and
diff --git a/sshkey.c b/sshkey.c
index 6555c5ef8..ad1957762 100644
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.c,v 1.72 2018/10/11 00:52:46 djm Exp $ */ 1/* $OpenBSD: sshkey.c,v 1.73 2019/01/21 09:54:11 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2008 Alexander von Gernler. All rights reserved. 4 * Copyright (c) 2008 Alexander von Gernler. All rights reserved.
@@ -2056,13 +2056,8 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
2056 ret = SSH_ERR_ALLOC_FAIL; 2056 ret = SSH_ERR_ALLOC_FAIL;
2057 goto out; 2057 goto out;
2058 } 2058 }
2059 if ((rsa_e = BN_new()) == NULL || 2059 if (sshbuf_get_bignum2(b, &rsa_e) != 0 ||
2060 (rsa_n = BN_new()) == NULL) { 2060 sshbuf_get_bignum2(b, &rsa_n) != 0) {
2061 ret = SSH_ERR_ALLOC_FAIL;
2062 goto out;
2063 }
2064 if (sshbuf_get_bignum2(b, rsa_e) != 0 ||
2065 sshbuf_get_bignum2(b, rsa_n) != 0) {
2066 ret = SSH_ERR_INVALID_FORMAT; 2061 ret = SSH_ERR_INVALID_FORMAT;
2067 goto out; 2062 goto out;
2068 } 2063 }
@@ -2089,17 +2084,10 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
2089 ret = SSH_ERR_ALLOC_FAIL; 2084 ret = SSH_ERR_ALLOC_FAIL;
2090 goto out; 2085 goto out;
2091 } 2086 }
2092 if ((dsa_p = BN_new()) == NULL || 2087 if (sshbuf_get_bignum2(b, &dsa_p) != 0 ||
2093 (dsa_q = BN_new()) == NULL || 2088 sshbuf_get_bignum2(b, &dsa_q) != 0 ||
2094 (dsa_g = BN_new()) == NULL || 2089 sshbuf_get_bignum2(b, &dsa_g) != 0 ||
2095 (dsa_pub_key = BN_new()) == NULL) { 2090 sshbuf_get_bignum2(b, &dsa_pub_key) != 0) {
2096 ret = SSH_ERR_ALLOC_FAIL;
2097 goto out;
2098 }
2099 if (sshbuf_get_bignum2(b, dsa_p) != 0 ||
2100 sshbuf_get_bignum2(b, dsa_q) != 0 ||
2101 sshbuf_get_bignum2(b, dsa_g) != 0 ||
2102 sshbuf_get_bignum2(b, dsa_pub_key) != 0) {
2103 ret = SSH_ERR_INVALID_FORMAT; 2091 ret = SSH_ERR_INVALID_FORMAT;
2104 goto out; 2092 goto out;
2105 } 2093 }
@@ -2941,19 +2929,11 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2941 r = SSH_ERR_ALLOC_FAIL; 2929 r = SSH_ERR_ALLOC_FAIL;
2942 goto out; 2930 goto out;
2943 } 2931 }
2944 if ((dsa_p = BN_new()) == NULL || 2932 if ((r = sshbuf_get_bignum2(buf, &dsa_p)) != 0 ||
2945 (dsa_q = BN_new()) == NULL || 2933 (r = sshbuf_get_bignum2(buf, &dsa_q)) != 0 ||
2946 (dsa_g = BN_new()) == NULL || 2934 (r = sshbuf_get_bignum2(buf, &dsa_g)) != 0 ||
2947 (dsa_pub_key = BN_new()) == NULL || 2935 (r = sshbuf_get_bignum2(buf, &dsa_pub_key)) != 0 ||
2948 (dsa_priv_key = BN_new()) == NULL) { 2936 (r = sshbuf_get_bignum2(buf, &dsa_priv_key)) != 0)
2949 r = SSH_ERR_ALLOC_FAIL;
2950 goto out;
2951 }
2952 if ((r = sshbuf_get_bignum2(buf, dsa_p)) != 0 ||
2953 (r = sshbuf_get_bignum2(buf, dsa_q)) != 0 ||
2954 (r = sshbuf_get_bignum2(buf, dsa_g)) != 0 ||
2955 (r = sshbuf_get_bignum2(buf, dsa_pub_key)) != 0 ||
2956 (r = sshbuf_get_bignum2(buf, dsa_priv_key)) != 0)
2957 goto out; 2937 goto out;
2958 if (!DSA_set0_pqg(k->dsa, dsa_p, dsa_q, dsa_g)) { 2938 if (!DSA_set0_pqg(k->dsa, dsa_p, dsa_q, dsa_g)) {
2959 r = SSH_ERR_LIBCRYPTO_ERROR; 2939 r = SSH_ERR_LIBCRYPTO_ERROR;
@@ -2967,12 +2947,8 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2967 dsa_pub_key = dsa_priv_key = NULL; /* transferred */ 2947 dsa_pub_key = dsa_priv_key = NULL; /* transferred */
2968 break; 2948 break;
2969 case KEY_DSA_CERT: 2949 case KEY_DSA_CERT:
2970 if ((dsa_priv_key = BN_new()) == NULL) {
2971 r = SSH_ERR_ALLOC_FAIL;
2972 goto out;
2973 }
2974 if ((r = sshkey_froms(buf, &k)) != 0 || 2950 if ((r = sshkey_froms(buf, &k)) != 0 ||
2975 (r = sshbuf_get_bignum2(buf, dsa_priv_key)) != 0) 2951 (r = sshbuf_get_bignum2(buf, &dsa_priv_key)) != 0)
2976 goto out; 2952 goto out;
2977 if (!DSA_set0_key(k->dsa, NULL, dsa_priv_key)) { 2953 if (!DSA_set0_key(k->dsa, NULL, dsa_priv_key)) {
2978 r = SSH_ERR_LIBCRYPTO_ERROR; 2954 r = SSH_ERR_LIBCRYPTO_ERROR;
@@ -2997,12 +2973,12 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2997 goto out; 2973 goto out;
2998 } 2974 }
2999 k->ecdsa = EC_KEY_new_by_curve_name(k->ecdsa_nid); 2975 k->ecdsa = EC_KEY_new_by_curve_name(k->ecdsa_nid);
3000 if (k->ecdsa == NULL || (exponent = BN_new()) == NULL) { 2976 if (k->ecdsa == NULL) {
3001 r = SSH_ERR_LIBCRYPTO_ERROR; 2977 r = SSH_ERR_LIBCRYPTO_ERROR;
3002 goto out; 2978 goto out;
3003 } 2979 }
3004 if ((r = sshbuf_get_eckey(buf, k->ecdsa)) != 0 || 2980 if ((r = sshbuf_get_eckey(buf, k->ecdsa)) != 0 ||
3005 (r = sshbuf_get_bignum2(buf, exponent))) 2981 (r = sshbuf_get_bignum2(buf, &exponent)))
3006 goto out; 2982 goto out;
3007 if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) { 2983 if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) {
3008 r = SSH_ERR_LIBCRYPTO_ERROR; 2984 r = SSH_ERR_LIBCRYPTO_ERROR;
@@ -3014,12 +2990,8 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
3014 goto out; 2990 goto out;
3015 break; 2991 break;
3016 case KEY_ECDSA_CERT: 2992 case KEY_ECDSA_CERT:
3017 if ((exponent = BN_new()) == NULL) {
3018 r = SSH_ERR_LIBCRYPTO_ERROR;
3019 goto out;
3020 }
3021 if ((r = sshkey_froms(buf, &k)) != 0 || 2993 if ((r = sshkey_froms(buf, &k)) != 0 ||
3022 (r = sshbuf_get_bignum2(buf, exponent)) != 0) 2994 (r = sshbuf_get_bignum2(buf, &exponent)) != 0)
3023 goto out; 2995 goto out;
3024 if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) { 2996 if (EC_KEY_set_private_key(k->ecdsa, exponent) != 1) {
3025 r = SSH_ERR_LIBCRYPTO_ERROR; 2997 r = SSH_ERR_LIBCRYPTO_ERROR;
@@ -3036,21 +3008,12 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
3036 r = SSH_ERR_ALLOC_FAIL; 3008 r = SSH_ERR_ALLOC_FAIL;
3037 goto out; 3009 goto out;
3038 } 3010 }
3039 if ((rsa_n = BN_new()) == NULL || 3011 if ((r = sshbuf_get_bignum2(buf, &rsa_n)) != 0 ||
3040 (rsa_e = BN_new()) == NULL || 3012 (r = sshbuf_get_bignum2(buf, &rsa_e)) != 0 ||
3041 (rsa_d = BN_new()) == NULL || 3013 (r = sshbuf_get_bignum2(buf, &rsa_d)) != 0 ||
3042 (rsa_iqmp = BN_new()) == NULL || 3014 (r = sshbuf_get_bignum2(buf, &rsa_iqmp)) != 0 ||
3043 (rsa_p = BN_new()) == NULL || 3015 (r = sshbuf_get_bignum2(buf, &rsa_p)) != 0 ||
3044 (rsa_q = BN_new()) == NULL) { 3016 (r = sshbuf_get_bignum2(buf, &rsa_q)) != 0)
3045 r = SSH_ERR_ALLOC_FAIL;
3046 goto out;
3047 }
3048 if ((r = sshbuf_get_bignum2(buf, rsa_n)) != 0 ||
3049 (r = sshbuf_get_bignum2(buf, rsa_e)) != 0 ||
3050 (r = sshbuf_get_bignum2(buf, rsa_d)) != 0 ||
3051 (r = sshbuf_get_bignum2(buf, rsa_iqmp)) != 0 ||
3052 (r = sshbuf_get_bignum2(buf, rsa_p)) != 0 ||
3053 (r = sshbuf_get_bignum2(buf, rsa_q)) != 0)
3054 goto out; 3017 goto out;
3055 if (!RSA_set0_key(k->rsa, rsa_n, rsa_e, rsa_d)) { 3018 if (!RSA_set0_key(k->rsa, rsa_n, rsa_e, rsa_d)) {
3056 r = SSH_ERR_LIBCRYPTO_ERROR; 3019 r = SSH_ERR_LIBCRYPTO_ERROR;
@@ -3068,18 +3031,11 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
3068 goto out; 3031 goto out;
3069 break; 3032 break;
3070 case KEY_RSA_CERT: 3033 case KEY_RSA_CERT:
3071 if ((rsa_d = BN_new()) == NULL ||
3072 (rsa_iqmp = BN_new()) == NULL ||
3073 (rsa_p = BN_new()) == NULL ||
3074 (rsa_q = BN_new()) == NULL) {
3075 r = SSH_ERR_ALLOC_FAIL;
3076 goto out;
3077 }
3078 if ((r = sshkey_froms(buf, &k)) != 0 || 3034 if ((r = sshkey_froms(buf, &k)) != 0 ||
3079 (r = sshbuf_get_bignum2(buf, rsa_d)) != 0 || 3035 (r = sshbuf_get_bignum2(buf, &rsa_d)) != 0 ||
3080 (r = sshbuf_get_bignum2(buf, rsa_iqmp)) != 0 || 3036 (r = sshbuf_get_bignum2(buf, &rsa_iqmp)) != 0 ||
3081 (r = sshbuf_get_bignum2(buf, rsa_p)) != 0 || 3037 (r = sshbuf_get_bignum2(buf, &rsa_p)) != 0 ||
3082 (r = sshbuf_get_bignum2(buf, rsa_q)) != 0) 3038 (r = sshbuf_get_bignum2(buf, &rsa_q)) != 0)
3083 goto out; 3039 goto out;
3084 if (!RSA_set0_key(k->rsa, NULL, NULL, rsa_d)) { 3040 if (!RSA_set0_key(k->rsa, NULL, NULL, rsa_d)) {
3085 r = SSH_ERR_LIBCRYPTO_ERROR; 3041 r = SSH_ERR_LIBCRYPTO_ERROR;
diff --git a/sshkey.h b/sshkey.h
index f6a007fdf..a91e60436 100644
--- a/sshkey.h
+++ b/sshkey.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.h,v 1.30 2018/09/14 04:17:44 djm Exp $ */ 1/* $OpenBSD: sshkey.h,v 1.31 2019/01/20 22:51:37 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000, 2001 Markus Friedl. All rights reserved.
@@ -33,6 +33,7 @@
33#include <openssl/dsa.h> 33#include <openssl/dsa.h>
34# ifdef OPENSSL_HAS_ECC 34# ifdef OPENSSL_HAS_ECC
35# include <openssl/ec.h> 35# include <openssl/ec.h>
36# include <openssl/ecdsa.h>
36# else /* OPENSSL_HAS_ECC */ 37# else /* OPENSSL_HAS_ECC */
37# define EC_KEY void 38# define EC_KEY void
38# define EC_GROUP void 39# define EC_GROUP void
diff --git a/version.h b/version.h
index 422dfbc3a..806ead9a6 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
1/* $OpenBSD: version.h,v 1.83 2018/10/10 16:43:49 deraadt Exp $ */ 1/* $OpenBSD: version.h,v 1.84 2019/04/03 15:48:45 djm Exp $ */
2 2
3#define SSH_VERSION "OpenSSH_7.9" 3#define SSH_VERSION "OpenSSH_8.0"
4 4
5#define SSH_PORTABLE "p1" 5#define SSH_PORTABLE "p1"
6#define SSH_RELEASE SSH_VERSION SSH_PORTABLE 6#define SSH_RELEASE SSH_VERSION SSH_PORTABLE