summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.depend182
-rw-r--r--.skipped-commit-ids7
-rw-r--r--ChangeLog4925
-rw-r--r--INSTALL20
-rw-r--r--Makefile.in101
-rw-r--r--PROTOCOL14
-rw-r--r--PROTOCOL.certkeys8
-rw-r--r--README20
-rw-r--r--README.privsep4
-rw-r--r--auth-options.c1199
-rw-r--r--auth-options.h107
-rw-r--r--auth-pam.c25
-rw-r--r--auth-pam.h4
-rw-r--r--auth-passwd.c30
-rw-r--r--auth-sia.c4
-rw-r--r--auth.c351
-rw-r--r--auth.h34
-rw-r--r--auth2-hostbased.c10
-rw-r--r--auth2-none.c4
-rw-r--r--auth2-passwd.c4
-rw-r--r--auth2-pubkey.c615
-rw-r--r--auth2.c17
-rw-r--r--authfd.c43
-rw-r--r--authfd.h7
-rw-r--r--authfile.c8
-rw-r--r--bitmap.c1
-rw-r--r--bitmap.h1
-rw-r--r--blocks.c248
-rw-r--r--channels.c84
-rw-r--r--cipher.c21
-rw-r--r--clientloop.c57
-rw-r--r--clientloop.h4
-rw-r--r--compat.c73
-rw-r--r--compat.h28
-rw-r--r--config.h.in72
-rwxr-xr-xconfigure716
-rw-r--r--configure.ac217
-rw-r--r--contrib/aix/README1
-rwxr-xr-xcontrib/aix/buildbff.sh1
-rwxr-xr-xcontrib/aix/inventory.sh1
-rw-r--r--contrib/cygwin/Makefile11
-rw-r--r--contrib/findssl.sh2
-rw-r--r--contrib/redhat/openssh.spec69
-rwxr-xr-xcontrib/redhat/sshd.init1
-rwxr-xr-xcontrib/redhat/sshd.init.old17
-rw-r--r--contrib/suse/openssh.spec2
-rw-r--r--crypto_api.h10
-rw-r--r--defines.h24
-rw-r--r--dh.c11
-rw-r--r--dns.c7
-rw-r--r--dns.h5
-rw-r--r--entropy.c4
-rwxr-xr-xfixprogs72
-rw-r--r--hash.c83
-rwxr-xr-xinstall-sh682
-rw-r--r--kex.c14
-rw-r--r--kexc25519c.c4
-rw-r--r--kexc25519s.c2
-rw-r--r--kexdhc.c10
-rw-r--r--kexdhs.c8
-rw-r--r--kexecdhc.c19
-rw-r--r--kexecdhs.c14
-rw-r--r--kexgexc.c16
-rw-r--r--kexgexs.c8
-rw-r--r--key.c17
-rw-r--r--key.h3
-rw-r--r--krl.c4
-rw-r--r--loginrec.c6
-rw-r--r--md5crypt.c4
-rw-r--r--mdoc2man.awk2
-rw-r--r--misc.c696
-rw-r--r--misc.h21
-rwxr-xr-xmkinstalldirs2
-rw-r--r--moduli836
-rw-r--r--moduli.c6
-rw-r--r--monitor.c116
-rw-r--r--monitor_wrap.c56
-rw-r--r--monitor_wrap.h13
-rw-r--r--opacket.c1
-rw-r--r--opacket.h1
-rw-r--r--openbsd-compat/Makefile.in81
-rw-r--r--openbsd-compat/bsd-cray.c816
-rw-r--r--openbsd-compat/bsd-cray.h59
-rw-r--r--openbsd-compat/bsd-flock.c81
-rw-r--r--openbsd-compat/bsd-getpagesize.c2
-rw-r--r--openbsd-compat/bsd-malloc.c2
-rw-r--r--openbsd-compat/bsd-misc.c81
-rw-r--r--openbsd-compat/bsd-misc.h34
-rw-r--r--openbsd-compat/bsd-openpty.c25
-rw-r--r--openbsd-compat/bsd-signal.c62
-rw-r--r--openbsd-compat/bsd-signal.h39
-rw-r--r--openbsd-compat/bsd-statvfs.c8
-rw-r--r--openbsd-compat/bsd-statvfs.h3
-rw-r--r--openbsd-compat/freezero.c4
-rw-r--r--openbsd-compat/openbsd-compat.h14
-rw-r--r--openbsd-compat/port-aix.c4
-rw-r--r--openbsd-compat/port-linux.c9
-rw-r--r--openbsd-compat/port-net.c (renamed from openbsd-compat/port-tun.c)101
-rw-r--r--openbsd-compat/port-net.h (renamed from openbsd-compat/port-tun.h)16
-rw-r--r--openbsd-compat/port-uw.c4
-rw-r--r--openbsd-compat/readpassphrase.c8
-rw-r--r--openbsd-compat/regress/Makefile.in2
-rw-r--r--openbsd-compat/strndup.c43
-rw-r--r--openbsd-compat/strnlen.c2
-rwxr-xr-xopensshd.init.in4
-rw-r--r--packet.c32
-rw-r--r--packet.h5
-rw-r--r--pathnames.h4
-rw-r--r--readconf.c76
-rw-r--r--readconf.h4
-rw-r--r--regress/Makefile5
-rw-r--r--regress/README.regress2
-rw-r--r--regress/agent-getpeereid.sh3
-rw-r--r--regress/agent-ptrace.sh2
-rw-r--r--regress/agent.sh144
-rw-r--r--regress/allow-deny-users.sh1
-rw-r--r--regress/authinfo.sh4
-rw-r--r--regress/cert-userkey.sh5
-rw-r--r--regress/cfgmatch.sh6
-rw-r--r--regress/connect-uri.sh29
-rw-r--r--regress/forward-control.sh29
-rw-r--r--regress/key-options.sh68
-rw-r--r--regress/keys-command.sh2
-rw-r--r--regress/keytype.sh14
-rw-r--r--regress/limit-keytype.sh9
-rw-r--r--regress/misc/fuzz-harness/sig_fuzz.cc12
-rw-r--r--regress/misc/kexfuzz/Makefile32
-rw-r--r--regress/misc/kexfuzz/README2
-rw-r--r--[-rwxr-xr-x]regress/modpipe.c0
-rw-r--r--regress/netcat.c7
-rw-r--r--regress/proxy-connect.sh30
-rw-r--r--regress/putty-ciphers.sh2
-rw-r--r--regress/putty-kex.sh2
-rw-r--r--regress/putty-transfer.sh6
-rw-r--r--regress/scp-uri.sh70
-rw-r--r--regress/sftp-chroot.sh7
-rw-r--r--regress/sftp-uri.sh63
-rw-r--r--regress/sftp.sh6
-rw-r--r--regress/sshd-log-wrapper.sh2
-rw-r--r--regress/test-exec.sh6
-rw-r--r--regress/unittests/Makefile3
-rw-r--r--regress/unittests/Makefile.inc16
-rw-r--r--regress/unittests/authopt/testdata/all_permit.cert1
-rw-r--r--regress/unittests/authopt/testdata/bad_sourceaddr.cert1
-rw-r--r--regress/unittests/authopt/testdata/force_command.cert1
-rw-r--r--regress/unittests/authopt/testdata/host.cert1
-rw-r--r--regress/unittests/authopt/testdata/mktestdata.sh48
-rw-r--r--regress/unittests/authopt/testdata/no_agentfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_permit.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_portfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_pty.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_user_rc.cert1
-rw-r--r--regress/unittests/authopt/testdata/no_x11fwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_agentfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_portfwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_pty.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_user_rc.cert1
-rw-r--r--regress/unittests/authopt/testdata/only_x11fwd.cert1
-rw-r--r--regress/unittests/authopt/testdata/sourceaddr.cert1
-rw-r--r--regress/unittests/authopt/testdata/unknown_critical.cert1
-rw-r--r--regress/unittests/authopt/tests.c573
-rw-r--r--regress/unittests/bitmap/Makefile6
-rw-r--r--regress/unittests/conversion/Makefile7
-rw-r--r--regress/unittests/hostkeys/Makefile15
-rw-r--r--regress/unittests/kex/Makefile19
-rw-r--r--regress/unittests/match/Makefile8
-rw-r--r--regress/unittests/sshbuf/Makefile12
-rw-r--r--regress/unittests/sshkey/Makefile15
-rw-r--r--regress/unittests/sshkey/test_fuzz.c6
-rw-r--r--regress/unittests/sshkey/test_sshkey.c8
-rw-r--r--regress/unittests/test_helper/test_helper.c14
-rw-r--r--regress/unittests/test_helper/test_helper.h4
-rw-r--r--regress/unittests/utf8/Makefile6
-rw-r--r--regress/yes-head.sh2
-rw-r--r--scp.019
-rw-r--r--scp.145
-rw-r--r--scp.c222
-rw-r--r--servconf.c567
-rw-r--r--servconf.h77
-rw-r--r--serverloop.c82
-rw-r--r--session.c120
-rw-r--r--sftp-client.c20
-rw-r--r--sftp.067
-rw-r--r--sftp.192
-rw-r--r--sftp.c88
-rw-r--r--ssh-add.c74
-rw-r--r--ssh-agent.c64
-rw-r--r--ssh-dss.c87
-rw-r--r--ssh-ecdsa.c8
-rw-r--r--ssh-keygen.033
-rw-r--r--ssh-keygen.129
-rw-r--r--ssh-keygen.c98
-rw-r--r--ssh-keyscan.080
-rw-r--r--ssh-keyscan.1102
-rw-r--r--ssh-keyscan.c38
-rw-r--r--ssh-keysign.c7
-rw-r--r--ssh-pkcs11-client.c5
-rw-r--r--ssh-pkcs11-helper.c183
-rw-r--r--ssh-pkcs11.c5
-rw-r--r--ssh-rsa.c57
-rw-r--r--ssh-xmss.c192
-rw-r--r--ssh.050
-rw-r--r--ssh.157
-rw-r--r--ssh.c344
-rw-r--r--ssh_config.053
-rw-r--r--ssh_config.552
-rw-r--r--sshconnect.c197
-rw-r--r--sshconnect.h4
-rw-r--r--sshconnect2.c99
-rw-r--r--sshd.031
-rw-r--r--sshd.832
-rw-r--r--sshd.c218
-rw-r--r--sshd_config3
-rw-r--r--sshd_config.076
-rw-r--r--sshd_config.574
-rw-r--r--sshkey-xmss.c1055
-rw-r--r--sshkey-xmss.h56
-rw-r--r--sshkey.c743
-rw-r--r--sshkey.h45
-rw-r--r--sshpty.c25
-rw-r--r--ttymodes.c13
-rw-r--r--umac.c194
-rw-r--r--umac128.c10
-rw-r--r--version.h4
-rw-r--r--xmss_commons.c36
-rw-r--r--xmss_commons.h21
-rw-r--r--xmss_fast.c1106
-rw-r--r--xmss_fast.h111
-rw-r--r--xmss_hash.c140
-rw-r--r--xmss_hash.h22
-rw-r--r--xmss_hash_address.c66
-rw-r--r--xmss_hash_address.h40
-rw-r--r--xmss_wots.c192
-rw-r--r--xmss_wots.h64
234 files changed, 14907 insertions, 7908 deletions
diff --git a/.depend b/.depend
new file mode 100644
index 000000000..0893a87ab
--- /dev/null
+++ b/.depend
@@ -0,0 +1,182 @@
1# DO NOT DELETE
2
3addrmatch.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 buffer.h sshbuf.h match.h log.h
4atomicio.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 buffer.h sshbuf.h atomicio.h
5audit-bsm.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 buffer.h sshbuf.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 buffer.h sshbuf.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 buffer.h sshbuf.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 buffer.h sshbuf.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 buffer.h sshbuf.h xmalloc.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h uidswap.h key.h sshkey.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.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 buffer.h sshbuf.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h key.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h uidswap.h pathnames.h log.h misc.h key.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 buffer.h sshbuf.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 buffer.h sshbuf.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 buffer.h sshbuf.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 buffer.h sshbuf.h xmalloc.h match.h groupaccess.h log.h misc.h servconf.h key.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
18auth.o: dispatch.h opacket.h authfile.h 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 buffer.h sshbuf.h xmalloc.h ssh2.h key.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
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 buffer.h sshbuf.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 buffer.h sshbuf.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h canohost.h
22auth2-hostbased.o: monitor_wrap.h pathnames.h 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 buffer.h sshbuf.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h log.h misc.h servconf.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 buffer.h sshbuf.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
25auth2-none.o: monitor_wrap.h
26auth2-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 buffer.h sshbuf.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
27auth2-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 buffer.h sshbuf.h xmalloc.h ssh.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.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
28auth2-pubkey.o: auth-options.h canohost.h monitor_wrap.h authfile.h match.h ssherr.h channels.h session.h
29auth2.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 buffer.h sshbuf.h atomicio.h xmalloc.h ssh2.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h misc.h servconf.h compat.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h pathnames.h
30auth2.o: monitor_wrap.h ssherr.h
31authfd.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 buffer.h sshbuf.h xmalloc.h ssh.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
32authfile.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 buffer.h sshbuf.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 ssherr.h krl.h
33bitmap.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 buffer.h sshbuf.h bitmap.h
34bufaux.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 buffer.h sshbuf.h log.h ssherr.h
35bufbn.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 buffer.h sshbuf.h
36bufec.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 buffer.h sshbuf.h log.h ssherr.h
37buffer.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 buffer.h sshbuf.h log.h ssherr.h
38canohost.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 buffer.h sshbuf.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h canohost.h misc.h
39chacha.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 buffer.h sshbuf.h chacha.h
40channels.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h ssherr.h packet.h dispatch.h opacket.h log.h misc.h channels.h compat.h canohost.h key.h sshkey.h authfd.h pathnames.h
41cipher-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 buffer.h sshbuf.h openbsd-compat/openssl-compat.h
42cipher-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 buffer.h sshbuf.h cipher-aesctr.h rijndael.h
43cipher-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 buffer.h sshbuf.h log.h ssherr.h cipher-chachapoly.h chacha.h poly1305.h
44cipher-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 buffer.h sshbuf.h
45cipher.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 buffer.h sshbuf.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h misc.h ssherr.h digest.h openbsd-compat/openssl-compat.h
46cleanup.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 buffer.h sshbuf.h log.h
47clientloop.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h channels.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h
48clientloop.o: kex.h mac.h 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
49compat.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 buffer.h sshbuf.h xmalloc.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h compat.h log.h match.h kex.h mac.h key.h sshkey.h
50crc32.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 buffer.h sshbuf.h crc32.h
51dh.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 buffer.h sshbuf.h
52digest-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 buffer.h sshbuf.h ssherr.h digest.h
53digest-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 buffer.h sshbuf.h
54dispatch.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 buffer.h sshbuf.h ssh2.h log.h dispatch.h packet.h openbsd-compat/sys-queue.h opacket.h compat.h ssherr.h
55dns.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 buffer.h sshbuf.h xmalloc.h sshkey.h ssherr.h dns.h log.h digest.h
56ed25519.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 buffer.h sshbuf.h crypto_api.h ge25519.h fe25519.h sc25519.h
57entropy.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 buffer.h sshbuf.h
58fatal.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 buffer.h sshbuf.h log.h
59fe25519.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 buffer.h sshbuf.h fe25519.h crypto_api.h
60ge25519.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 buffer.h sshbuf.h fe25519.h crypto_api.h sc25519.h ge25519.h ge25519_base.data
61groupaccess.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 buffer.h sshbuf.h xmalloc.h groupaccess.h match.h log.h
62gss-genr.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 buffer.h sshbuf.h
63gss-serv-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 buffer.h sshbuf.h
64gss-serv.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 buffer.h sshbuf.h
65hash.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 buffer.h sshbuf.h digest.h log.h ssherr.h
66hmac.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 buffer.h sshbuf.h digest.h hmac.h
67hostfile.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 buffer.h sshbuf.h xmalloc.h match.h sshkey.h hostfile.h log.h misc.h ssherr.h digest.h hmac.h
68kex.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 buffer.h sshbuf.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 key.h log.h match.h misc.h
69kex.o: monitor.h ssherr.h digest.h
70kexc25519.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 buffer.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 key.h log.h digest.h ssherr.h
71kexc25519c.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 buffer.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h key.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssh2.h digest.h ssherr.h
72kexc25519s.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 buffer.h sshbuf.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h kex.h mac.h key.h log.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h ssh2.h ssherr.h
73kexdh.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 buffer.h sshbuf.h
74kexdhc.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 buffer.h sshbuf.h
75kexdhs.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 buffer.h sshbuf.h
76kexecdh.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 buffer.h sshbuf.h
77kexecdhc.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 buffer.h sshbuf.h
78kexecdhs.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 buffer.h sshbuf.h
79kexgex.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 buffer.h sshbuf.h
80kexgexc.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 buffer.h sshbuf.h
81kexgexs.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 buffer.h sshbuf.h
82key.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 buffer.h sshbuf.h key.h sshkey.h compat.h ssherr.h log.h authfile.h
83krl.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 buffer.h sshbuf.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h ssherr.h sshkey.h authfile.h misc.h log.h digest.h bitmap.h krl.h
84log.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 buffer.h sshbuf.h log.h
85loginrec.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 buffer.h sshbuf.h xmalloc.h key.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
86logintest.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 buffer.h sshbuf.h loginrec.h
87mac.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 buffer.h sshbuf.h digest.h hmac.h umac.h mac.h misc.h ssherr.h openbsd-compat/openssl-compat.h
88match.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 buffer.h sshbuf.h xmalloc.h match.h misc.h
89md5crypt.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 buffer.h sshbuf.h
90misc.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 buffer.h sshbuf.h xmalloc.h misc.h log.h ssh.h ssherr.h uidswap.h
91moduli.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 buffer.h sshbuf.h
92monitor.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 buffer.h sshbuf.h ./openbsd-compat/sys-tree.h openbsd-compat/sys-queue.h atomicio.h xmalloc.h ssh.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h cipher.h cipher-chachapoly.h chacha.h poly1305.h
93monitor.o: 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
94monitor_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 buffer.h sshbuf.h log.h monitor_fdpass.h
95monitor_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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h key.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
96monitor_wrap.o: loginrec.h 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
97msg.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 buffer.h sshbuf.h ssherr.h log.h atomicio.h msg.h misc.h
98mux.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h log.h ssh.h ssh2.h pathnames.h misc.h match.h channels.h msg.h packet.h dispatch.h opacket.h monitor_fdpass.h sshpty.h key.h sshkey.h readconf.h clientloop.h
99mux.o: ssherr.h
100nchan.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h ssh2.h ssherr.h packet.h dispatch.h opacket.h channels.h compat.h log.h
101opacket.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 buffer.h sshbuf.h ssherr.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h
102packet.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h key.h sshkey.h xmalloc.h crc32.h compat.h ssh2.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h digest.h log.h canohost.h misc.h
103packet.o: channels.h ssh.h packet.h dispatch.h opacket.h ssherr.h
104platform-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 buffer.h sshbuf.h
105platform-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 buffer.h sshbuf.h
106platform-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 buffer.h sshbuf.h log.h
107platform.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 buffer.h sshbuf.h log.h misc.h servconf.h key.h sshkey.h hostfile.h auth.h auth-pam.h audit.h loginrec.h
108poly1305.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 buffer.h sshbuf.h poly1305.h
109progressmeter.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 buffer.h sshbuf.h progressmeter.h atomicio.h misc.h
110readconf.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 buffer.h sshbuf.h openbsd-compat/glob.h xmalloc.h ssh.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 key.h
111readconf.o: uidswap.h myproposal.h digest.h
112readpass.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 buffer.h sshbuf.h xmalloc.h misc.h pathnames.h log.h ssh.h uidswap.h
113rijndael.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 buffer.h sshbuf.h rijndael.h
114sandbox-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 buffer.h sshbuf.h
115sandbox-darwin.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 buffer.h sshbuf.h
116sandbox-null.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 buffer.h sshbuf.h
117sandbox-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 buffer.h sshbuf.h
118sandbox-rlimit.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 buffer.h sshbuf.h
119sandbox-seccomp-filter.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 buffer.h sshbuf.h
120sandbox-solaris.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 buffer.h sshbuf.h
121sandbox-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 buffer.h sshbuf.h
122sc25519.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 buffer.h sshbuf.h sc25519.h crypto_api.h
123scp.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 buffer.h sshbuf.h xmalloc.h ssh.h atomicio.h pathnames.h log.h misc.h progressmeter.h utf8.h
124servconf.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h log.h misc.h servconf.h compat.h pathnames.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h key.h sshkey.h kex.h mac.h
125servconf.o: match.h channels.h groupaccess.h canohost.h packet.h dispatch.h opacket.h hostfile.h auth.h auth-pam.h audit.h loginrec.h myproposal.h digest.h
126serverloop.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h packet.h dispatch.h opacket.h log.h misc.h servconf.h canohost.h sshpty.h channels.h compat.h ssh2.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h
127serverloop.o: poly1305.h 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
128session.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h sshpty.h packet.h dispatch.h opacket.h match.h uidswap.h compat.h channels.h key.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h
129session.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
130sftp-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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssherr.h log.h atomicio.h progressmeter.h misc.h utf8.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
131sftp-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 buffer.h sshbuf.h xmalloc.h ssherr.h log.h misc.h sftp.h sftp-common.h
132sftp-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 buffer.h sshbuf.h xmalloc.h sftp.h sftp-common.h sftp-client.h openbsd-compat/glob.h
133sftp-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 buffer.h sshbuf.h log.h sftp.h misc.h xmalloc.h
134sftp-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 buffer.h sshbuf.h xmalloc.h ssherr.h log.h misc.h match.h uidswap.h sftp.h sftp-common.h
135sftp.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 buffer.h sshbuf.h xmalloc.h log.h pathnames.h misc.h utf8.h sftp.h ssherr.h sftp-common.h sftp-client.h openbsd-compat/glob.h
136ssh-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 buffer.h sshbuf.h openbsd-compat/openssl-compat.h xmalloc.h ssh.h log.h sshkey.h authfd.h authfile.h pathnames.h misc.h ssherr.h digest.h
137ssh-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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshkey.h authfd.h compat.h log.h misc.h digest.h ssherr.h match.h
138ssh-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 buffer.h sshbuf.h
139ssh-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 buffer.h sshbuf.h
140ssh-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 buffer.h sshbuf.h crypto_api.h log.h sshkey.h ssherr.h ssh.h
141ssh-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 buffer.h sshbuf.h xmalloc.h sshkey.h authfile.h uuencode.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
142ssh-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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h sshkey.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h kex.h mac.h key.h compat.h myproposal.h packet.h dispatch.h
143ssh-keyscan.o: opacket.h log.h atomicio.h misc.h hostfile.h ssherr.h ssh_api.h ssh2.h dns.h
144ssh-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 buffer.h sshbuf.h xmalloc.h log.h sshkey.h ssh.h ssh2.h misc.h authfile.h msg.h canohost.h pathnames.h readconf.h uidswap.h ssherr.h
145ssh-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 buffer.h sshbuf.h
146ssh-pkcs11-helper.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h log.h misc.h sshkey.h authfd.h ssh-pkcs11.h ssherr.h
147ssh-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 buffer.h sshbuf.h
148ssh-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 buffer.h sshbuf.h
149ssh-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 buffer.h sshbuf.h
150ssh.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 buffer.h sshbuf.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
151ssh.o: dispatch.h opacket.h channels.h key.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 uidswap.h version.h ssherr.h myproposal.h utf8.h
152ssh_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 buffer.h sshbuf.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 key.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h
153ssh_api.o: log.h authfile.h misc.h version.h myproposal.h ssherr.h
154sshbuf-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 buffer.h sshbuf.h ssherr.h
155sshbuf-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 buffer.h sshbuf.h ssherr.h
156sshbuf-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 buffer.h sshbuf.h ssherr.h
157sshbuf.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 buffer.h sshbuf.h ssherr.h misc.h
158sshconnect.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 buffer.h sshbuf.h xmalloc.h key.h sshkey.h hostfile.h ssh.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h uidswap.h compat.h sshconnect.h log.h misc.h readconf.h atomicio.h dns.h monitor_fdpass.h
159sshconnect.o: ssh2.h version.h authfile.h ssherr.h authfd.h
160sshconnect2.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 buffer.h sshbuf.h openbsd-compat/sys-queue.h xmalloc.h ssh.h ssh2.h packet.h dispatch.h opacket.h compat.h cipher.h cipher-chachapoly.h chacha.h poly1305.h cipher-aesctr.h rijndael.h key.h sshkey.h kex.h mac.h
161sshconnect2.o: myproposal.h 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
162sshd.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 buffer.h sshbuf.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 misc.h match.h servconf.h uidswap.h compat.h cipher.h cipher-chachapoly.h
163sshd.o: chacha.h poly1305.h cipher-aesctr.h rijndael.h digest.h key.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
164ssherr.o: ssherr.h
165sshkey-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 buffer.h sshbuf.h
166sshkey.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 buffer.h sshbuf.h crypto_api.h ssh2.h ssherr.h misc.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
167sshlogin.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 buffer.h sshbuf.h loginrec.h log.h misc.h servconf.h
168sshpty.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 buffer.h sshbuf.h sshpty.h log.h misc.h
169sshtty.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 buffer.h sshbuf.h sshpty.h
170ttymodes.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 buffer.h sshbuf.h packet.h openbsd-compat/sys-queue.h dispatch.h opacket.h log.h compat.h ttymodes.h
171uidswap.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 buffer.h sshbuf.h log.h uidswap.h xmalloc.h
172umac.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 buffer.h sshbuf.h xmalloc.h umac.h misc.h rijndael.h
173umac128.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 buffer.h sshbuf.h xmalloc.h umac.h misc.h rijndael.h
174utf8.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 buffer.h sshbuf.h utf8.h
175uuencode.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 buffer.h sshbuf.h xmalloc.h uuencode.h
176verify.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 buffer.h sshbuf.h crypto_api.h
177xmalloc.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 buffer.h sshbuf.h xmalloc.h log.h
178xmss_commons.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 buffer.h sshbuf.h
179xmss_fast.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 buffer.h sshbuf.h
180xmss_hash.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 buffer.h sshbuf.h
181xmss_hash_address.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 buffer.h sshbuf.h
182xmss_wots.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 buffer.h sshbuf.h
diff --git a/.skipped-commit-ids b/.skipped-commit-ids
index 7c03c9db8..b51baf90d 100644
--- a/.skipped-commit-ids
+++ b/.skipped-commit-ids
@@ -1,3 +1,10 @@
15317f294d63a876bfc861e19773b1575f96f027d remove libssh from makefiles
2a337e886a49f96701ccbc4832bed086a68abfa85 Makefile changes
3f2c9feb26963615c4fece921906cf72e248b61ee more Makefile
4fa728823ba21c4b45212750e1d3a4b2086fd1a62 more Makefile refactoring
5
6Old upstream tree:
7
1321065a95a7ccebdd5fd08482a1e19afbf524e35 Update DH groups 8321065a95a7ccebdd5fd08482a1e19afbf524e35 Update DH groups
2d4f699a421504df35254cf1c6f1a7c304fb907ca Remove 1k bit groups 9d4f699a421504df35254cf1c6f1a7c304fb907ca Remove 1k bit groups
3aafe246655b53b52bc32c8a24002bc262f4230f7 Remove intermediate moduli 10aafe246655b53b52bc32c8a24002bc262f4230f7 Remove intermediate moduli
diff --git a/ChangeLog b/ChangeLog
index e008ec9f3..bb729917c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,2689 @@
1commit a0349a1cc4a18967ad1dbff5389bcdf9da098814
2Author: Damien Miller <djm@mindrot.org>
3Date: Mon Apr 2 15:38:28 2018 +1000
4
5 update versions in .spec files
6
7commit 816ad38f79792f5617e3913be306ddb27e91091c
8Author: Damien Miller <djm@mindrot.org>
9Date: Mon Apr 2 15:38:20 2018 +1000
10
11 update version number
12
13commit 2c71ca1dd1efe458cb7dee3f8a1a566f913182c2
14Author: Darren Tucker <dtucker@dtucker.net>
15Date: Fri Mar 30 18:23:07 2018 +1100
16
17 Disable native strndup and strnlen on AIX.
18
19 On at least some revisions of AIX, strndup returns unterminated strings
20 under some conditions, apparently because strnlen returns incorrect
21 values in those cases. Disable both on AIX and use the replacements
22 from openbsd-compat. Fixes problem with ECDSA keys there, ok djm.
23
24commit 6b5a17bc14e896e3904dc58d889b58934cfacd24
25Author: Darren Tucker <dtucker@dtucker.net>
26Date: Mon Mar 26 13:12:44 2018 +1100
27
28 Include ssh_api.h for struct ssh.
29
30 struct ssh is needed by implementations of sys_auth_passwd() that were
31 converted in commit bba02a50. Needed to fix build on AIX, I assume for
32 the other platforms too (although it should be harmless if not needed).
33
34commit bc3f80e4d191b8e48650045dfa8a682cd3aabd4d
35Author: Darren Tucker <dtucker@dtucker.net>
36Date: Mon Mar 26 12:58:09 2018 +1100
37
38 Remove UNICOS code missed during removal.
39
40 Fixes compile error on AIX.
41
42commit 9d57762c24882e2f000a21a0ffc8c5908a1fa738
43Author: markus@openbsd.org <markus@openbsd.org>
44Date: Sat Mar 24 19:29:03 2018 +0000
45
46 upstream: openssh-7.7
47
48 OpenBSD-Commit-ID: 274e614352460b9802c905f38fb5ea7ed5db3d41
49
50commit 4b7d8acdbbceef247dc035e611e577174ed8a87e
51Author: Damien Miller <djm@mindrot.org>
52Date: Mon Mar 26 09:37:02 2018 +1100
53
54 Remove authinfo.sh test dependency on printenv
55
56 Some platforms lack printenv in the default $PATH.
57 Reported by Tom G. Christensen
58
59commit 4afeaf3dcb7dc70efd98fcfcb0ed28a6b40b820e
60Author: Tim Rice <tim@multitalents.net>
61Date: Sun Mar 25 10:00:21 2018 -0700
62
63 Use libiaf on all sysv5 systems
64
65commit bba02a5094b3db228ceac41cb4bfca165d0735f3
66Author: Tim Rice <tim@multitalents.net>
67Date: Sun Mar 25 09:17:33 2018 -0700
68
69 modified: auth-sia.c
70 modified: openbsd-compat/port-aix.c
71 modified: openbsd-compat/port-uw.c
72
73 propogate changes to auth-passwd.c in commit
74 7c856857607112a3dfe6414696bf4c7ab7fb0cb3 to other providers
75 of sys_auth_passwd()
76
77commit d7a7a39168bdfe273587bf85d779d60569100a3f
78Author: markus@openbsd.org <markus@openbsd.org>
79Date: Sat Mar 24 19:29:03 2018 +0000
80
81 upstream: openssh-7.7
82
83 OpenBSD-Commit-ID: 274e614352460b9802c905f38fb5ea7ed5db3d41
84
85commit 9efcaaac314c611c6c0326e8bac5b486c424bbd2
86Author: markus@openbsd.org <markus@openbsd.org>
87Date: Sat Mar 24 19:28:43 2018 +0000
88
89 upstream: fix bogus warning when signing cert keys using agent;
90
91 from djm; ok deraadt dtucker
92
93 OpenBSD-Commit-ID: 12e50836ba2040042383a8b71e12d7ea06e9633d
94
95commit 393436024d2e4b4c7a01f9cfa5854e7437896d11
96Author: Darren Tucker <dtucker@dtucker.net>
97Date: Sun Mar 25 09:40:46 2018 +1100
98
99 Replace /dev/stdin with "-".
100
101 For some reason sftp -b doesn't work with /dev/stdin on Cygwin, as noted
102 and suggested by vinschen at redhat.com.
103
104commit b5974de1a1d419e316ffb6524b1b277dda2f3b49
105Author: Darren Tucker <dtucker@dtucker.net>
106Date: Fri Mar 23 13:21:14 2018 +1100
107
108 Provide $OBJ to paths in PuTTY interop tests.
109
110commit dc31e79454e9b9140b33ad380565fdb59b9c4f33
111Author: dtucker@openbsd.org <dtucker@openbsd.org>
112Date: Fri Mar 16 09:06:31 2018 +0000
113
114 upstream: Tell puttygen to use /dev/urandom instead of /dev/random. On
115
116 OpenBSD they are both non-blocking, but on many other -portable platforms it
117 blocks, stalling tests.
118
119 OpenBSD-Regress-ID: 397d0d4c719c353f24d79f5b14775e0cfdf0e1cc
120
121commit cb1f94431ef319cd48618b8b771b58739a8210cf
122Author: markus@openbsd.org <markus@openbsd.org>
123Date: Thu Mar 22 07:06:11 2018 +0000
124
125 upstream: ssh/xmss: fix build; ok djm@
126
127 OpenBSD-Commit-ID: c9374ca41d4497f1c673ab681cc33f6e7c5dd186
128
129commit 27979da9e4074322611355598f69175b9ff10d39
130Author: markus@openbsd.org <markus@openbsd.org>
131Date: Thu Mar 22 07:05:48 2018 +0000
132
133 upstream: ssh/xmss: fix deserialize for certs; ok djm@
134
135 OpenBSD-Commit-ID: f44c41636c16ec83502039828beaf521c057dddc
136
137commit c6cb2565c9285eb54fa9dfbb3890f5464aff410f
138Author: Darren Tucker <dtucker@dtucker.net>
139Date: Thu Mar 22 17:00:28 2018 +1100
140
141 Save $? before case statement.
142
143 In some shells (FreeBSD 9, ash) the case statement resets $?, so save
144 for later testing.
145
146commit 4c4e7f783b43b264c247233acb887ee10ed4ce4d
147Author: djm@openbsd.org <djm@openbsd.org>
148Date: Wed Mar 14 05:35:40 2018 +0000
149
150 upstream: rename recently-added "valid-before" key restriction to
151
152 "expiry-time" as the former is confusing wrt similar terminology in X.509;
153 pointed out by jsing@
154
155 OpenBSD-Regress-ID: ac8b41dbfd90cffd525d58350c327195b0937793
156
157commit 500396b204c58e78ad9d081516a365a9f28dc3fd
158Author: djm@openbsd.org <djm@openbsd.org>
159Date: Mon Mar 12 00:56:03 2018 +0000
160
161 upstream: check valid-before option in authorized_keys
162
163 OpenBSD-Regress-ID: 7e1e4a84f7f099a290e5a4cbf4196f90ff2d7e11
164
165commit a76b5d26c2a51d7dd7a5164e683ab3f4419be215
166Author: djm@openbsd.org <djm@openbsd.org>
167Date: Mon Mar 12 00:54:04 2018 +0000
168
169 upstream: explicitly specify RSA/SHA-2 keytype here too
170
171 OpenBSD-Regress-ID: 74d7b24e8c72c27af6b481198344eb077e993a62
172
173commit 3a43297ce29d37c64e37c7e21282cb219e28d3d1
174Author: djm@openbsd.org <djm@openbsd.org>
175Date: Mon Mar 12 00:52:57 2018 +0000
176
177 upstream: exlicitly include RSA/SHA-2 keytypes in
178
179 PubkeyAcceptedKeyTypes here
180
181 OpenBSD-Regress-ID: 954d19e0032a74e31697fb1dc7e7d3d1b2d65fe9
182
183commit 037fdc1dc2d68e1d43f9c9e2586c02cabc8f7cc8
184Author: jmc@openbsd.org <jmc@openbsd.org>
185Date: Wed Mar 14 06:56:20 2018 +0000
186
187 upstream: sort expiry-time;
188
189 OpenBSD-Commit-ID: 8c7d82ee1e63e26ceb2b3d3a16514019f984f6bf
190
191commit abc0fa38c9bc136871f28e452c3465c3051fc785
192Author: djm@openbsd.org <djm@openbsd.org>
193Date: Wed Mar 14 05:35:40 2018 +0000
194
195 upstream: rename recently-added "valid-before" key restriction to
196
197 "expiry-time" as the former is confusing wrt similar terminology in X.509;
198 pointed out by jsing@
199
200 OpenBSD-Commit-ID: 376939466a1f562f3950a22314bc6505733aaae6
201
202commit bf0fbf2b11a44f06a64b620af7d01ff171c28e13
203Author: djm@openbsd.org <djm@openbsd.org>
204Date: Mon Mar 12 00:52:01 2018 +0000
205
206 upstream: add valid-before="[time]" authorized_keys option. A
207
208 simple way of giving a key an expiry date. ok markus@
209
210 OpenBSD-Commit-ID: 1793b4dd5184fa87f42ed33c7b0f4f02bc877947
211
212commit fbd733ab7adc907118a6cf56c08ed90c7000043f
213Author: Darren Tucker <dtucker@dtucker.net>
214Date: Mon Mar 12 19:17:26 2018 +1100
215
216 Add AC_LANG_PROGRAM to AC_COMPILE_IFELSE.
217
218 The recently added MIPS ABI tests need AC_LANG_PROGRAM to prevent
219 warnings from autoconf. Pointed out by klausz at haus-gisela.de.
220
221commit c7c458e8261b04d161763cd333d74e7a5842e917
222Author: djm@openbsd.org <djm@openbsd.org>
223Date: Wed Mar 7 23:53:08 2018 +0000
224
225 upstream: revert recent strdelim() change, it causes problems with
226
227 some configs.
228
229 revision 1.124
230 date: 2018/03/02 03:02:11; author: djm; state: Exp; lines: +19 -8; commitid: nNRsCijZiGG6SUTT;
231 Allow escaped quotes \" and \' in ssh_config and sshd_config quotes
232 option strings. bz#1596 ok markus@
233
234 OpenBSD-Commit-ID: 59c40b1b81206d713c06b49d8477402c86babda5
235
236commit 0bcd871ccdf3baf2b642509ba4773d5be067cfa2
237Author: jmc@openbsd.org <jmc@openbsd.org>
238Date: Mon Mar 5 07:03:18 2018 +0000
239
240 upstream: move the input format details to -f; remove the output
241
242 format details and point to sshd(8), where it is documented;
243
244 ok dtucker
245
246 OpenBSD-Commit-ID: 95f17e47dae02a6ac7329708c8c893d4cad0004a
247
248commit 45011511a09e03493568506ce32f4891a174a3bd
249Author: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
250Date: Tue Jun 20 16:42:28 2017 +0100
251
252 configure.ac: properly set seccomp_audit_arch for MIPS64
253
254 Currently seccomp_audit_arch is set to AUDIT_ARCH_MIPS64 or
255 AUDIT_ARCH_MIPSEL64 (depending on the endinness) when openssh is built
256 for MIPS64. However, that's only valid for n64 ABI. The right macros for
257 n32 ABI defined in seccomp.h are AUDIT_ARCH_MIPS64N32 and
258 AUDIT_ARCH_MIPSEL64N32, for big and little endian respectively.
259
260 Because of that an sshd built for MIPS64 n32 rejects connection attempts
261 and the output of strace reveals that the problem is related to seccomp
262 audit:
263
264 [pid 194] prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, {len=57,
265 filter=0x555d5da0}) = 0
266 [pid 194] write(7, "\0\0\0]\0\0\0\5\0\0\0Ulist_hostkey_types: "..., 97) = ?
267 [pid 193] <... poll resumed> ) = 2 ([{fd=5, revents=POLLIN|POLLHUP},
268 {fd=6, revents=POLLHUP}])
269 [pid 194] +++ killed by SIGSYS +++
270
271 This patch fixes that problem by setting the right value to
272 seccomp_audit_arch taking into account the MIPS64 ABI.
273
274 Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
275
276commit 580086704c31de91dc7ba040a28e416bf1fefbca
277Author: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
278Date: Tue Jun 20 16:42:11 2017 +0100
279
280 configure.ac: detect MIPS ABI
281
282 Signed-off-by: Vicente Olivert Riera <Vincent.Riera@imgtec.com>
283
284commit cd4e937aa701f70366cd5b5969af525dff6fdf15
285Author: Alan Yee <alyee@ucsd.edu>
286Date: Wed Mar 7 15:12:14 2018 -0800
287
288 Use https URLs for links that support it.
289
290commit c0a0c3fc4a76b682db22146b28ddc46566db1ce9
291Author: Darren Tucker <dtucker@dtucker.net>
292Date: Mon Mar 5 20:03:07 2018 +1100
293
294 Disable UTMPX on SunOS4.
295
296commit 58fd4c5c0140f6636227ca7acbb149ab0c2509b9
297Author: Darren Tucker <dtucker@dtucker.net>
298Date: Mon Mar 5 19:28:08 2018 +1100
299
300 Check for and work around buggy fflush(NULL).
301
302 Some really old platforms (eg SunOS4) segfault on fflush(NULL) so check
303 for and work around. With klausz at haus-gisela.de.
304
305commit 71e48bc7945f867029e50e06c665c66aed6d3c64
306Author: Darren Tucker <dtucker@dtucker.net>
307Date: Mon Mar 5 10:22:32 2018 +1100
308
309 Remove extra XMSS #endif
310
311 Extra #endif breaks compile with -DWITH_XMSS. Pointed out by Jack
312 Schmidt via github.
313
314commit 055e09e2212ff52067786bf6d794ca9512ff7f0c
315Author: dtucker@openbsd.org <dtucker@openbsd.org>
316Date: Sat Mar 3 06:37:53 2018 +0000
317
318 upstream: Update RSA minimum modulus size to 1024. sshkey.h rev 1.18
319
320 bumped the minimum from 768 to 1024, update man page accordingly.
321
322 OpenBSD-Commit-ID: 27563ab4e866cd2aac40a5247876f6787c08a338
323
324commit 7e4fadd3248d6bb7d39d6688c76a613d35d2efc1
325Author: djm@openbsd.org <djm@openbsd.org>
326Date: Sun Mar 4 01:46:48 2018 +0000
327
328 upstream: for the pty control tests, just check that the PTY path
329
330 points to something in /dev (rather than checking the device node itself);
331 makes life easier for portable, where systems with dynamic ptys can delete
332 nodes before we get around to testing their existence.
333
334 OpenBSD-Regress-ID: b1e455b821e62572bccd98102f8dd9d09bb94994
335
336commit 13ef4cf53f24753fe920832b990b25c9c9cd0530
337Author: Darren Tucker <dtucker@dtucker.net>
338Date: Sat Mar 3 16:21:20 2018 +1100
339
340 Update PAM password change to new opts API.
341
342commit 33561e68e0b27366cb769295a077aabc6a49d2a1
343Author: Darren Tucker <dtucker@dtucker.net>
344Date: Sat Mar 3 14:56:09 2018 +1100
345
346 Add strndup for platforms that need it.
347
348 Some platforms don't have strndup, which includes Solaris 10, NetBSD 3
349 and FreeBSD 6.
350
351commit e8a17feba95eef424303fb94441008f6c5347aaf
352Author: Darren Tucker <dtucker@dtucker.net>
353Date: Sat Mar 3 14:49:07 2018 +1100
354
355 Flatten and alphabetize object file lists.
356
357 This will make maintenance and changes easier. "no objection" tim@
358
359commit de1920d743d295f50e6905e5957c4172c038e8eb
360Author: djm@openbsd.org <djm@openbsd.org>
361Date: Sat Mar 3 03:16:17 2018 +0000
362
363 upstream: unit tests for new authorized_keys options API
364
365 OpenBSD-Regress-ID: 820f9ec9c6301f6ca330ad4052d85f0e67d0bdc1
366
367commit dc3e92df17556dc5b0ab19cee8dcb2a6ba348717
368Author: djm@openbsd.org <djm@openbsd.org>
369Date: Fri Mar 2 02:53:27 2018 +0000
370
371 upstream: fix testing of pty option, include positive test and
372
373 testing of restrict keyword
374
375 OpenBSD-Regress-ID: 4268f27c2706a0a95e725d9518c5bcbec9814c6d
376
377commit 3d1edd1ebbc0aabea8bbe61903060f37137f7c61
378Author: djm@openbsd.org <djm@openbsd.org>
379Date: Fri Mar 2 02:51:55 2018 +0000
380
381 upstream: better testing for port-forwarding and restrict flags in
382
383 authorized_keys
384
385 OpenBSD-Regress-ID: ee771df8955f2735df54746872c6228aff381daa
386
387commit 7c856857607112a3dfe6414696bf4c7ab7fb0cb3
388Author: djm@openbsd.org <djm@openbsd.org>
389Date: Sat Mar 3 03:15:51 2018 +0000
390
391 upstream: switch over to the new authorized_keys options API and
392
393 remove the legacy one.
394
395 Includes a fairly big refactor of auth2-pubkey.c to retain less state
396 between key file lines.
397
398 feedback and ok markus@
399
400 OpenBSD-Commit-ID: dece6cae0f47751b9892080eb13d6625599573df
401
402commit 90c4bec8b5f9ec4c003ae4abdf13fc7766f00c8b
403Author: djm@openbsd.org <djm@openbsd.org>
404Date: Sat Mar 3 03:06:02 2018 +0000
405
406 upstream: Introduce a new API for handling authorized_keys options.
407
408 This API parses options to a dedicated structure rather than the old API's
409 approach of setting global state. It also includes support for merging
410 options, e.g. from authorized_keys, authorized_principals and/or
411 certificates.
412
413 feedback and ok markus@
414
415 OpenBSD-Commit-ID: 98badda102cd575210d7802943e93a34232c80a2
416
417commit 26074380767e639ef89321610e146ae11016b385
418Author: djm@openbsd.org <djm@openbsd.org>
419Date: Sat Mar 3 03:01:50 2018 +0000
420
421 upstream: warn when the agent returns a signature type that was
422
423 different to what was requested. This might happen when an old/non-OpenSSH
424 agent is asked to make a rsa-sha2-256/512 signature but only supports
425 ssh-rsa. bz#2799 feedback and ok markus@
426
427 OpenBSD-Commit-ID: 760c0f9438c5c58abc16b5f98008ff2d95cb13ce
428
429commit f493d2b0b66fb003ed29f31dd66ff1aeb64be1fc
430Author: jmc@openbsd.org <jmc@openbsd.org>
431Date: Fri Mar 2 21:40:15 2018 +0000
432
433 upstream: apply a lick of paint; tweaks/ok dtucker
434
435 OpenBSD-Commit-ID: 518a6736338045e0037f503c21027d958d05e703
436
437commit 713d9cb510e0e7759398716cbe6dcf43e574be71
438Author: djm@openbsd.org <djm@openbsd.org>
439Date: Fri Mar 2 03:02:11 2018 +0000
440
441 upstream: Allow escaped quotes \" and \' in ssh_config and
442
443 sshd_config quotes option strings. bz#1596 ok markus@
444
445 OpenBSD-Commit-ID: dd3a29fc2dc905e8780198e5a6a30b096de1a1cb
446
447commit 94b4e2d29afaaaef89a95289b16c18bf5627f7cd
448Author: djm@openbsd.org <djm@openbsd.org>
449Date: Fri Mar 2 02:08:03 2018 +0000
450
451 upstream: refactor sshkey_read() to make it a little more, err,
452
453 readable. ok markus
454
455 OpenBSD-Commit-ID: 2e9247b5762fdac3b6335dc606d3822121714c28
456
457commit 5886b92968b360623491699247caddfb77a74d80
458Author: markus@openbsd.org <markus@openbsd.org>
459Date: Thu Mar 1 20:32:16 2018 +0000
460
461 upstream: missing #ifdef for _PATH_HOST_XMSS_KEY_FILE; report by
462
463 jmc@
464
465 OpenBSD-Commit-ID: 9039cb69a3f9886bfef096891a9e7fcbd620280b
466
467commit 3b36bed3d26f17f6a2b7e036e01777770fe1bcd4
468Author: dtucker@openbsd.org <dtucker@openbsd.org>
469Date: Mon Feb 26 12:14:53 2018 +0000
470
471 upstream: Remove unneeded (local) include. ok markus@
472
473 OpenBSD-Commit-ID: 132812dd2296b1caa8cb07d2408afc28e4e60f93
474
475commit 27b9f3950e0289e225b57b7b880a8f1859dcd70b
476Author: dtucker@openbsd.org <dtucker@openbsd.org>
477Date: Mon Feb 26 03:56:44 2018 +0000
478
479 upstream: Add $OpenBSD$ markers to xmss files to help keep synced
480
481 with portable. ok djm@.
482
483 OpenBSD-Commit-ID: 5233a27aafd1dfadad4b957225f95ae51eb365c1
484
485commit afd830847a82ebbd5aeab05bad6d2c8ce74df1cd
486Author: dtucker@openbsd.org <dtucker@openbsd.org>
487Date: Mon Feb 26 03:03:05 2018 +0000
488
489 upstream: Add newline at end of file to prevent compiler warnings.
490
491 OpenBSD-Commit-ID: 52f247d4eafe840c7c14c8befa71a760a8eeb063
492
493commit 941e0d3e9bb8d5e4eb70cc694441445faf037c84
494Author: Darren Tucker <dtucker@dtucker.net>
495Date: Wed Feb 28 19:59:35 2018 +1100
496
497 Add WITH_XMSS, move to prevent conflicts.
498
499 Add #ifdef WITH_XMSS to ssh-xmss.c, move it in the other files to after
500 includes.h so it's less likely to conflict and will pick up WITH_XMSS if
501 added to config.h.
502
503commit a10d8552d0d2438da4ed539275abcbf557d1e7a8
504Author: Darren Tucker <dtucker@dtucker.net>
505Date: Tue Feb 27 14:45:17 2018 +1100
506
507 Conditionally compile XMSS code.
508
509 The XMSS code is currently experimental and, unlike the rest of OpenSSH
510 cannot currently be compiled with a c89 compiler.
511
512commit 146c3bd28c8dbee9c4b06465d9c9facab96b1e9b
513Author: Darren Tucker <dtucker@dtucker.net>
514Date: Mon Feb 26 12:51:29 2018 +1100
515
516 Check dlopen has RTLD_NOW before enabling pkcs11.
517
518commit 1323f120d06a26074c4d154fcbe7f49bcad3d741
519Author: Darren Tucker <dtucker@dtucker.net>
520Date: Tue Feb 27 08:41:25 2018 +1100
521
522 Check for attributes on prototype args.
523
524 Some compilers (gcc 2.9.53, 3.0 and probably others, see gcc bug #3481)
525 do not accept __attribute__ on function pointer prototype args. Check for
526 this and hide them if they're not accepted.
527
528commit f0b245b0439e600fab782d19e97980e9f2c2533c
529Author: Darren Tucker <dtucker@dtucker.net>
530Date: Mon Feb 26 11:43:48 2018 +1100
531
532 Check if HAVE_DECL_BZERO correctly.
533
534commit c7ef4a399155e1621a532cc5e08e6fa773658dd4
535Author: Darren Tucker <dtucker@dtucker.net>
536Date: Mon Feb 26 17:42:56 2018 +1100
537
538 Wrap <stdint.h> in #ifdef HAVE_STDINT_H.
539
540commit ac53ce46cf8165cbda7f57ee045f9f32e1e92b31
541Author: Darren Tucker <dtucker@dtucker.net>
542Date: Mon Feb 26 16:24:23 2018 +1100
543
544 Replace $(CURDIR) with $(PWD).
545
546 The former doesn't work on Solaris or BSDs.
547
548commit 534b2680a15d14e7e60274d5b29b812d44cc5a44
549Author: Darren Tucker <dtucker@dtucker.net>
550Date: Mon Feb 26 14:51:59 2018 +1100
551
552 Comment out hexdump().
553
554 Nothing currently uses them but they cause conflicts on at least
555 FreeBSD, possibly others. ok djm@
556
557commit 5aea4aa522f61bb2f34c3055a7de203909dfae77
558Author: Darren Tucker <dtucker@dtucker.net>
559Date: Mon Feb 26 14:39:14 2018 +1100
560
561 typo: missing ;
562
563commit cd3ab57f9b388f8b1abf601dc4d78ff82d83b75e
564Author: Darren Tucker <dtucker@dtucker.net>
565Date: Mon Feb 26 14:37:06 2018 +1100
566
567 Hook up flock() compat code.
568
569 Also a couple of minor changes: fail if we can't lock instead of
570 silently succeeding, and apply a couple of minor style fixes.
571
572commit b087998d1ba90dd1ddb6bfdb17873dc3e7392798
573Author: Darren Tucker <dtucker@dtucker.net>
574Date: Mon Feb 26 14:27:02 2018 +1100
575
576 Import flock() compat from NetBSD.
577
578 From NetBSD's src/trunk/tools/compat/flock.c, no OpenSSH changes yet.
579
580commit 89212533dde6798324e835b1499084658df4579e
581Author: Darren Tucker <dtucker@dtucker.net>
582Date: Mon Feb 26 12:32:14 2018 +1100
583
584 Fix breakage when REGRESSTMP not set.
585
586 BUILDDIR is not set where used for REGRESSTMP, use make's CURDIR
587 instead. Pointed out by djm@.
588
589commit f885474137df4b89498c0b8834c2ac72c47aa4bd
590Author: Damien Miller <djm@mindrot.org>
591Date: Mon Feb 26 12:18:14 2018 +1100
592
593 XMSS-related files get includes.h
594
595commit 612faa34c72e421cdc9e63f624526bae62d557cc
596Author: Damien Miller <djm@mindrot.org>
597Date: Mon Feb 26 12:17:55 2018 +1100
598
599 object files end with .o - not .c
600
601commit bda709b8e13d3eef19e69c2d1684139e3af728f5
602Author: Damien Miller <djm@mindrot.org>
603Date: Mon Feb 26 12:17:22 2018 +1100
604
605 avoid inclusion of deprecated selinux/flask.h
606
607 Use string_to_security_class() instead.
608
609commit 2e396439365c4ca352cac222717d09b14f8a0dfd
610Author: Damien Miller <djm@mindrot.org>
611Date: Mon Feb 26 11:48:27 2018 +1100
612
613 updatedepend
614
615commit 1b11ea7c58cd5c59838b5fa574cd456d6047b2d4
616Author: markus@openbsd.org <markus@openbsd.org>
617Date: Fri Feb 23 15:58:37 2018 +0000
618
619 upstream: Add experimental support for PQC XMSS keys (Extended
620
621 Hash-Based Signatures) The code is not compiled in by default (see WITH_XMSS
622 in Makefile.inc) Joint work with stefan-lukas_gazdag at genua.eu See
623 https://tools.ietf.org/html/draft-irtf-cfrg-xmss-hash-based-signatures-12 ok
624 djm@
625
626 OpenBSD-Commit-ID: ef3eccb96762a5d6f135d7daeef608df7776a7ac
627
628commit 7d330a1ac02076de98cfc8fda05353d57b603755
629Author: jmc@openbsd.org <jmc@openbsd.org>
630Date: Fri Feb 23 07:38:09 2018 +0000
631
632 upstream: some cleanup for BindInterface and ssh-keyscan;
633
634 OpenBSD-Commit-ID: 1a719ebeae22a166adf05bea5009add7075acc8c
635
636commit c7b5a47e3b9db9a0f0198f9c90c705f6307afc2b
637Author: Darren Tucker <dtucker@dtucker.net>
638Date: Sun Feb 25 23:55:41 2018 +1100
639
640 Invert sense of getpgrp test.
641
642 AC_FUNC_GETPGRP tests if getpgrp(0) works, which it does if it's not
643 declared. Instead, test if the zero-arg version we want to use works.
644
645commit b39593a6de5290650a01adf8699c6460570403c2
646Author: Darren Tucker <dtucker@dtucker.net>
647Date: Sun Feb 25 13:25:15 2018 +1100
648
649 Add no-op getsid implmentation.
650
651commit 11057564eb6ab8fd987de50c3d7f394c6f6632b7
652Author: Darren Tucker <dtucker@dtucker.net>
653Date: Sun Feb 25 11:22:57 2018 +1100
654
655 bsd-statvfs: include sys/vfs.h, check for f_flags.
656
657commit e9dede06e5bc582a4aeb5b1cd5a7a640d7de3609
658Author: Darren Tucker <dtucker@dtucker.net>
659Date: Sun Feb 25 10:20:31 2018 +1100
660
661 Handle calloc(0,x) where different from malloc.
662
663 Configure assumes that if malloc(0) returns null then calloc(0,n)
664 also does. On some old platforms (SunOS4) malloc behaves as expected
665 (as determined by AC_FUNC_MALLOC) but calloc doesn't. Test for this
666 at configure time and activate the replacement function if found, plus
667 handle this case in rpl_calloc.
668
669commit 2eb4041493fd2635ffdc64a852d02b38c4955e0b
670Author: Darren Tucker <dtucker@dtucker.net>
671Date: Sat Feb 24 21:06:48 2018 +1100
672
673 Add prototype for readv if needed.
674
675commit 6c8c9a615b6d31db8a87bc25033f053d5b0a831e
676Author: Darren Tucker <dtucker@dtucker.net>
677Date: Sat Feb 24 20:46:37 2018 +1100
678
679 Check for raise and supply if needed.
680
681commit a9004425a032d7a7141a5437cfabfd02431e2a74
682Author: Darren Tucker <dtucker@dtucker.net>
683Date: Sat Feb 24 20:25:22 2018 +1100
684
685 Check for bzero and supply if needed.
686
687 Since explicit_bzero uses it via an indirect it needs to be a function
688 not just a macro.
689
690commit 1a348359e4d2876203b5255941bae348557f4f54
691Author: djm@openbsd.org <djm@openbsd.org>
692Date: Fri Feb 23 05:14:05 2018 +0000
693
694 upstream: Add ssh-keyscan -D option to make it print its results in
695
696 SSHFP format bz#2821, ok dtucker@
697
698 OpenBSD-Commit-ID: 831446b582e0f298ca15c9d99c415c899e392221
699
700commit 3e19fb976a47b44b3d7c4f8355269f7f2c5dd82c
701Author: dtucker@openbsd.org <dtucker@openbsd.org>
702Date: Fri Feb 23 04:18:46 2018 +0000
703
704 upstream: Add missing braces.
705
706 Caught by the tinderbox's -Werror=misleading-indentation, ok djm@
707
708 OpenBSD-Commit-ID: d44656af594c3b2366eb87d6abcef83e1c88a6ca
709
710commit b59162da99399d89bd57f71c170c0003c55b1583
711Author: Darren Tucker <dtucker@dtucker.net>
712Date: Fri Feb 23 15:20:42 2018 +1100
713
714 Check for ifaddrs.h for BindInterface.
715
716 BindInterface required getifaddr and friends so disable if not available
717 (eg Solaris 10). We should be able to add support for some systems with
718 a bit more work but this gets the building again.
719
720commit a8dd6fe0aa10b6866830b4688a73ef966f0aed88
721Author: Damien Miller <djm@mindrot.org>
722Date: Fri Feb 23 14:19:11 2018 +1100
723
724 space before tab in previous
725
726commit b5e9263c7704247f9624c8f5c458e9181fcdbc09
727Author: dtucker@openbsd.org <dtucker@openbsd.org>
728Date: Fri Feb 9 03:40:22 2018 +0000
729
730 upstream: Replace fatal with exit in the case that we do not have
731
732 $SUDO set. Prevents test failures when neither sudo nor doas are configured.
733
734 OpenBSD-Regress-ID: 6a0464decc4f8ac7d6eded556a032b0fc521bc7b
735
736commit 3e9d3192ad43758ef761c5b0aa3ac5ccf8121ef2
737Author: Darren Tucker <dtucker@dtucker.net>
738Date: Fri Feb 23 14:10:53 2018 +1100
739
740 Use portable syntax for REGRESSTMP.
741
742commit 73282b61187883a2b2bb48e087fdda1d751d6059
743Author: djm@openbsd.org <djm@openbsd.org>
744Date: Fri Feb 23 03:03:00 2018 +0000
745
746 upstream: unbreak interop test after SSHv1 purge; patch from Colin
747
748 Watson via bz#2823
749
750 OpenBSD-Regress-ID: 807d30a597756ed6612bdf46dfebca74f49cb31a
751
752commit f8985dde5f46aedade0373365cbf86ed3f1aead2
753Author: dtucker@openbsd.org <dtucker@openbsd.org>
754Date: Fri Feb 9 03:42:57 2018 +0000
755
756 upstream: Skip sftp-chroot test when SUDO not set instead of
757
758 fatal().
759
760 OpenBSD-Regress-ID: cd4b5f1109b0dc09af4e5ea7d4968c43fbcbde88
761
762commit df88551c02d4e3445c44ff67ba8757cff718609a
763Author: dtucker@openbsd.org <dtucker@openbsd.org>
764Date: Fri Feb 9 03:40:22 2018 +0000
765
766 upstream: Replace fatal with exit in the case that we do not have
767
768 $SUDO set. Prevents test failures when neither sudo nor doas are configured.
769
770 OpenBSD-Regress-ID: 6a0464decc4f8ac7d6eded556a032b0fc521bc7b
771
772commit 3b252c20b19f093e87363de197f1100b79705dd3
773Author: djm@openbsd.org <djm@openbsd.org>
774Date: Thu Feb 8 08:46:20 2018 +0000
775
776 upstream: some helpers to check verbose/quiet mode
777
778 OpenBSD-Regress-ID: e736aac39e563f5360a0935080a71d5fdcb976de
779
780commit ac2e3026bbee1367e4cda34765d1106099be3287
781Author: djm@openbsd.org <djm@openbsd.org>
782Date: Fri Feb 23 02:34:33 2018 +0000
783
784 upstream: Add BindInterface ssh_config directive and -B
785
786 command-line argument to ssh(1) that directs it to bind its outgoing
787 connection to the address of the specified network interface.
788
789 BindInterface prefers to use addresses that aren't loopback or link-
790 local, but will fall back to those if no other addresses of the
791 required family are available on that interface.
792
793 Based on patch by Mike Manning in bz#2820, ok dtucker@
794
795 OpenBSD-Commit-ID: c5064d285c2851f773dd736a2c342aa384fbf713
796
797commit fcdb9d777839a3fa034b3bc3067ba8c1f6886679
798Author: djm@openbsd.org <djm@openbsd.org>
799Date: Mon Feb 19 00:55:02 2018 +0000
800
801 upstream: emphasise that the hostkey rotation may send key types
802
803 that the client may not support, and that the client should simply disregard
804 such keys (this is what ssh does already).
805
806 OpenBSD-Commit-ID: 65f8ffbc32ac8d12be8f913d7c0ea55bef8622bf
807
808commit ce066f688dc166506c082dac41ca686066e3de5f
809Author: Darren Tucker <dtucker@dtucker.net>
810Date: Thu Feb 22 20:45:09 2018 +1100
811
812 Add headers for sys/audit.h.
813
814 On some older platforms (at least sunos4, probably others) sys/audit.h
815 requires some other headers. Patch from klausz at haus-gisela.de.
816
817commit 3fd2d2291a695c96a54269deae079bacce6e3fb9
818Author: Darren Tucker <dtucker@dtucker.net>
819Date: Mon Feb 19 18:37:40 2018 +1100
820
821 Add REGRESSTMP make var override.
822
823 Defaults to original location ($srcdir/regress) but allows overriding
824 if desired, eg a directory in /tmp.
825
826commit f8338428588f3ecb5243c86336eccaa28809f97e
827Author: Darren Tucker <dtucker@dtucker.net>
828Date: Sun Feb 18 15:53:15 2018 +1100
829
830 Remove now-unused check for getrusage.
831
832 getrusage was used in ssh-rand-helper but that's now long gone.
833 Patch from klauszh at haus-gisela.de.
834
835commit 8570177195f6a4b3173c0a25484a83641ee3faa6
836Author: dtucker@openbsd.org <dtucker@openbsd.org>
837Date: Fri Feb 16 04:43:11 2018 +0000
838
839 upstream: Don't send IUTF8 to servers that don't like them.
840
841 Some SSH servers eg "ConfD" drop the connection if the client sends the
842 new IUTF8 (RFC8160) terminal mode even if it's not set. Add a bug bit
843 for such servers and avoid sending IUTF8 to them. ok djm@
844
845 OpenBSD-Commit-ID: 26425855402d870c3c0a90491e72e2a8a342ceda
846
847commit f6dc2ba3c9d12be53057b9371f5109ec553a399f
848Author: Darren Tucker <dtucker@dtucker.net>
849Date: Fri Feb 16 17:32:28 2018 +1100
850
851 freezero should check for NULL.
852
853commit 680321f3eb46773883111e234b3c262142ff7c5b
854Author: djm@openbsd.org <djm@openbsd.org>
855Date: Fri Feb 16 02:40:45 2018 +0000
856
857 upstream: Mention recent DH KEX methods:
858
859 diffie-hellman-group14-sha256
860 diffie-hellman-group16-sha512
861 diffie-hellman-group18-sha512
862
863 From Jakub Jelen via bz#2826
864
865 OpenBSD-Commit-ID: 51bf769f06e55447f4bfa7306949e62d2401907a
866
867commit 88c50a5ae20902715f0fca306bb9c38514f71679
868Author: djm@openbsd.org <djm@openbsd.org>
869Date: Fri Feb 16 02:32:40 2018 +0000
870
871 upstream: stop loading DSA keys by default, remove sshd_config
872
873 stanza and manpage bits; from Colin Watson via bz#2662, ok dtucker@
874
875 OpenBSD-Commit-ID: d33a849f481684ff655c140f5eb1b4acda8c5c09
876
877commit d2b3db2860c962927def39a52f67f1c23f7b201a
878Author: jsing@openbsd.org <jsing@openbsd.org>
879Date: Wed Feb 14 16:27:24 2018 +0000
880
881 upstream: Ensure that D mod (P-1) and D mod (Q-1) are calculated in
882
883 constant time.
884
885 This avoids a potential side channel timing leak.
886
887 ok djm@ markus@
888
889 OpenBSD-Commit-ID: 71ff3c16be03290e63d8edab8fac053d8a82968c
890
891commit 4270efad7048535b4f250f493d70f9acfb201593
892Author: jsing@openbsd.org <jsing@openbsd.org>
893Date: Wed Feb 14 16:03:32 2018 +0000
894
895 upstream: Some obvious freezero() conversions.
896
897 This also zeros an ed25519_pk when it was not being zeroed previously.
898
899 ok djm@ dtucker@
900
901 OpenBSD-Commit-ID: 5c196a3c85c23ac0bd9b11bcadaedd90b7a2ce82
902
903commit affa6ba67ffccc30b85d6e98f36eb5afd9386882
904Author: Darren Tucker <dtucker@dtucker.net>
905Date: Thu Feb 15 22:32:04 2018 +1100
906
907 Remove execute bit from modpipe.c.
908
909commit 9879dca438526ae6dfd656fecb26b0558c29c731
910Author: Darren Tucker <dtucker@dtucker.net>
911Date: Thu Feb 15 22:26:16 2018 +1100
912
913 Update prngd link to point to sourceforge.
914
915commit b6973fa5152b1a0bafd2417b7c3ad96f6e87d014
916Author: Darren Tucker <dtucker@dtucker.net>
917Date: Thu Feb 15 22:22:38 2018 +1100
918
919 Remove references to UNICOS.
920
921commit f1ca487940449f0b64f38f1da575078257609966
922Author: Darren Tucker <dtucker@dtucker.net>
923Date: Thu Feb 15 22:18:37 2018 +1100
924
925 Remove extra newline.
926
927commit 6d4e980f3cf27f409489cf89cd46c21501b13731
928Author: Darren Tucker <dtucker@dtucker.net>
929Date: Thu Feb 15 22:16:54 2018 +1100
930
931 OpenSSH's builtin entropy gathering is long gone.
932
933commit 389125b25d1a1d7f22e907463b7e8eca74af79ea
934Author: Darren Tucker <dtucker@dtucker.net>
935Date: Thu Feb 15 21:43:01 2018 +1100
936
937 Replace remaining mysignal() with signal().
938
939 These seem to have been missed during the replacement of mysignal
940 with #define signal in commit 5ade9ab. Both include the requisite
941 headers to pick up the #define.
942
943commit 265d88d4e61e352de6791733c8b29fa3d7d0c26d
944Author: Darren Tucker <dtucker@dtucker.net>
945Date: Thu Feb 15 20:06:19 2018 +1100
946
947 Remove remaining now-obsolete cvs $Ids.
948
949commit 015749e9b1d2f6e14733466d19ba72f014d0845c
950Author: Darren Tucker <dtucker@dtucker.net>
951Date: Thu Feb 15 17:01:54 2018 +1100
952
953 Regenerate dependencies after UNICOS removal.
954
955commit ddc0f3814881ea279a6b6d4d98e03afc60ae1ed7
956Author: Darren Tucker <dtucker@dtucker.net>
957Date: Tue Feb 13 09:10:46 2018 +1100
958
959 Remove UNICOS support.
960
961 The code required to support it is quite invasive to the mainline
962 code that is synced with upstream and is an ongoing maintenance burden.
963 Both the hardware and software are literal museum pieces these days and
964 we could not find anyone still running OpenSSH on one.
965
966commit 174bed686968494723e6db881208cc4dac0d020f
967Author: Darren Tucker <dtucker@dtucker.net>
968Date: Tue Feb 13 18:12:47 2018 +1100
969
970 Retpoline linker flag only needed for linking.
971
972commit 075e258c2cc41e1d7f3ea2d292c5342091728d40
973Author: Darren Tucker <dtucker@dtucker.net>
974Date: Tue Feb 13 17:36:43 2018 +1100
975
976 Default PidFile is sshd.pid not ssh.pid.
977
978commit 49f3c0ec47730ea264e2bd1e6ece11167d6384df
979Author: Darren Tucker <dtucker@dtucker.net>
980Date: Tue Feb 13 16:27:09 2018 +1100
981
982 Remove assigned-to-but-never-used variable.
983
984 'p' was removed in previous change but I neglected to remove the
985 otherwise-unused assignment to it.
986
987commit b8bbff3b3fc823bf80c5ab226c94f13cb887d5b1
988Author: djm@openbsd.org <djm@openbsd.org>
989Date: Tue Feb 13 03:36:56 2018 +0000
990
991 upstream: remove space before tab
992
993 OpenBSD-Commit-ID: 674edd214d0a7332dd4623c9cf8117301b012890
994
995commit 05046d907c211cb9b4cd21b8eff9e7a46cd6c5ab
996Author: dtucker@openbsd.org <dtucker@openbsd.org>
997Date: Sun Feb 11 21:16:56 2018 +0000
998
999 upstream Don't reset signal handlers inside handlers.
1000
1001 The signal handlers from the original ssh1 code on which OpenSSH
1002 is based assume unreliable signals and reinstall their handlers.
1003 Since OpenBSD (and pretty much every current system) has reliable
1004 signals this is not needed. In the unlikely even that -portable
1005 is still being used on such systems we will deal with it in the
1006 compat layer. ok deraadt@
1007
1008 OpenBSD-Commit-ID: f53a1015cb6908431b92116130d285d71589612c
1009
1010commit 3c51143c639ac686687c7acf9b373b8c08195ffb
1011Author: Darren Tucker <dtucker@dtucker.net>
1012Date: Tue Feb 13 09:07:29 2018 +1100
1013
1014 Whitespace sync with upstream.
1015
1016commit 19edfd4af746bedf0df17f01953ba8c6d3186eb7
1017Author: Darren Tucker <dtucker@dtucker.net>
1018Date: Tue Feb 13 08:25:46 2018 +1100
1019
1020 Whitespace sync with upstream.
1021
1022commit fbfa6f980d7460b3e12b0ce88ed3b6018edf4711
1023Author: Darren Tucker <dtucker@dtucker.net>
1024Date: Sun Feb 11 21:25:11 2018 +1300
1025
1026 Move signal compat code into bsd-signal.{c,h}
1027
1028commit 24d2a33bd3bf5170700bfdd8675498aa09a79eab
1029Author: Darren Tucker <dtucker@dtucker.net>
1030Date: Sun Feb 11 21:20:39 2018 +1300
1031
1032 Include headers for linux/if.h.
1033
1034 Prevents configure-time "present but cannot be compiled" warning.
1035
1036commit bc02181c24fc551aab85eb2cff0f90380928ef43
1037Author: Darren Tucker <dtucker@dtucker.net>
1038Date: Sun Feb 11 19:45:47 2018 +1300
1039
1040 Fix test for -z,retpolineplt linker flag.
1041
1042commit 3377df00ea3fece5293db85fe63baef33bf5152e
1043Author: Darren Tucker <dtucker@dtucker.net>
1044Date: Sun Feb 11 09:32:37 2018 +1100
1045
1046 Add checks for Spectre v2 mitigation (retpoline)
1047
1048 This adds checks for gcc and clang flags for mitigations for Spectre
1049 variant 2, ie "retpoline". It'll automatically enabled if the compiler
1050 supports it as part of toolchain hardening flag. ok djm@
1051
1052commit d9e5cf078ea5380da6df767bb1773802ec557ef0
1053Author: djm@openbsd.org <djm@openbsd.org>
1054Date: Sat Feb 10 09:25:34 2018 +0000
1055
1056 upstream commit
1057
1058 constify some private key-related functions; based on
1059 https://github.com/openssh/openssh-portable/pull/56 by Vincent Brillault
1060
1061 OpenBSD-Commit-ID: dcb94a41834a15f4d00275cb5051616fdc4c988c
1062
1063commit a7c38215d564bf98e8e9eb40c1079e3adf686f15
1064Author: djm@openbsd.org <djm@openbsd.org>
1065Date: Sat Feb 10 09:03:54 2018 +0000
1066
1067 upstream commit
1068
1069 Mention ServerAliveTimeout in context of TCPKeepAlives;
1070 prompted by Christoph Anton Mitterer via github
1071
1072 OpenBSD-Commit-ID: f0cf1b5bd3f1fbf41d71c88d75d93afc1c880ca2
1073
1074commit 62562ceae61e4f7cf896566592bb840216e71061
1075Author: djm@openbsd.org <djm@openbsd.org>
1076Date: Sat Feb 10 06:54:38 2018 +0000
1077
1078 upstream commit
1079
1080 clarify IgnoreUserKnownHosts; based on github PR from
1081 Christoph Anton Mitterer.
1082
1083 OpenBSD-Commit-ID: 4fff2c17620c342fb2f1f9c2d2e679aab3e589c3
1084
1085commit 4f011daa4cada6450fa810f7563b8968639bb562
1086Author: djm@openbsd.org <djm@openbsd.org>
1087Date: Sat Feb 10 06:40:28 2018 +0000
1088
1089 upstream commit
1090
1091 Shorter, more accurate explanation of
1092 NoHostAuthenticationForLocalhost without the confusing example. Prompted by
1093 Christoph Anton Mitterer via github and bz#2293.
1094
1095 OpenBSD-Commit-ID: 19dc96bea25b80d78d416b581fb8506f1e7b76df
1096
1097commit 77e05394af21d3f5faa0c09ed3855e4505a5cf9f
1098Author: djm@openbsd.org <djm@openbsd.org>
1099Date: Sat Feb 10 06:15:12 2018 +0000
1100
1101 upstream commit
1102
1103 Disable RemoteCommand and RequestTTY in the ssh session
1104 started by scp. sftp is already doing this. From Camden Narzt via github; ok
1105 dtucker
1106
1107 OpenBSD-Commit-ID: 59e2611141c0b2ee579c6866e8eb9d7d8217bc6b
1108
1109commit ca613249a00b64b2eea9f52d3834b55c28cf2862
1110Author: djm@openbsd.org <djm@openbsd.org>
1111Date: Sat Feb 10 05:48:46 2018 +0000
1112
1113 upstream commit
1114
1115 Refuse to create a certificate with an unusable number of
1116 principals; Prompted by gdestuynder via github
1117
1118 OpenBSD-Commit-ID: 8cfae2451e8f07810e3e2546dfdcce66984cbd29
1119
1120commit b56ac069d46b6f800de34e1e935f98d050731d14
1121Author: djm@openbsd.org <djm@openbsd.org>
1122Date: Sat Feb 10 05:43:26 2018 +0000
1123
1124 upstream commit
1125
1126 fatal if we're unable to write all the public key; previously
1127 we would silently ignore errors writing the comment and terminating newline.
1128 Prompted by github PR from WillerZ; ok dtucker
1129
1130 OpenBSD-Commit-ID: 18fbfcfd4e8c6adbc84820039b64d70906e49831
1131
1132commit cdb10bd431f9f6833475c27e9a82ebb36fdb12db
1133Author: Darren Tucker <dtucker@dtucker.net>
1134Date: Sat Feb 10 11:18:38 2018 +1100
1135
1136 Add changelog entry for binary strip change.
1137
1138commit fbddd91897cfaf456bfc2081f39fb4a2208a0ebf
1139Author: Darren Tucker <dtucker@dtucker.net>
1140Date: Sat Feb 10 11:14:54 2018 +1100
1141
1142 Remove unused variables.
1143
1144commit 937d96587df99c16c611d828cded292fa474a32b
1145Author: Darren Tucker <dtucker@dtucker.net>
1146Date: Sat Feb 10 11:12:45 2018 +1100
1147
1148 Don't strip binaries so debuginfo gets built.
1149
1150 Tell install not to strip binaries during package creation so that the
1151 debuginfo package can be built.
1152
1153commit eb0865f330f59c889ec92696b97bd397090e720c
1154Author: Darren Tucker <dtucker@dtucker.net>
1155Date: Sat Feb 10 10:33:11 2018 +1100
1156
1157 Fix bogus dates in changelog.
1158
1159commit 7fbde1b34c1f6c9ca9e9d10805ba1e5e4538e165
1160Author: Darren Tucker <dtucker@dtucker.net>
1161Date: Sat Feb 10 10:25:15 2018 +1100
1162
1163 Remove SSH1 from description.
1164
1165commit 9c34a76f099c4e0634bf6ecc2f40ce93925402c4
1166Author: Darren Tucker <dtucker@dtucker.net>
1167Date: Sat Feb 10 10:19:16 2018 +1100
1168
1169 Add support for compat-openssl10 build dep.
1170
1171commit 04f4e8193cb5a5a751fcc356bd6656291fec539e
1172Author: Darren Tucker <dtucker@dtucker.net>
1173Date: Sat Feb 10 09:57:04 2018 +1100
1174
1175 Add leading zero so it'll work when rhel not set.
1176
1177 When rhel is not set it will error out with "bad if". Add leading zero
1178 as per https://fedoraproject.org/wiki/Packaging:DistTag so it'll work
1179 on non-RHEL.
1180
1181commit 12abd67a6af28476550807a443b38def2076bb92
1182Author: Darren Tucker <dtucker@dtucker.net>
1183Date: Sat Feb 10 09:56:34 2018 +1100
1184
1185 Update openssl-devel dependency.
1186
1187commit b33e7645f8813719d7f9173fef24463c8833ebb3
1188Author: nkadel <nkadel@gmail.com>
1189Date: Sun Nov 16 18:19:58 2014 -0500
1190
1191 Add mandir with-mandir' for RHEL 5 compatibility.
1192
1193 Activate '--mandir' and '--with-mandir' settings in setup for RHEL
1194 5 compatibility.
1195
1196commit 94f8bf360eb0162e39ddf39d69925c2e93511e40
1197Author: nkadel <nkadel@gmail.com>
1198Date: Sun Nov 16 18:18:51 2014 -0500
1199
1200 Discard 'K5DIR' reporting.
1201
1202 It does not work inside 'mock' build environment.
1203
1204commit bb7e54dbaf34b70b3e57acf7982f3a2136c94ee5
1205Author: nkadel <nkadel@gmail.com>
1206Date: Sun Nov 16 18:17:15 2014 -0500
1207
1208 Add 'dist' to 'rel' for OS specific RPM names.
1209
1210commit 87346f1f57f71150a9b8c7029d8c210e27027716
1211Author: nkadel <nkadel@gmail.com>
1212Date: Sun Nov 16 14:17:38 2014 -0500
1213
1214 Add openssh-devel >= 0.9.8f for redhat spec file.
1215
1216commit bec1478d710866d3c1b119343a35567a8fc71ec3
1217Author: nkadel <nkadel@gmail.com>
1218Date: Sun Nov 16 13:10:24 2014 -0500
1219
1220 Enhance BuildRequires for openssh-x11-askpass.
1221
1222commit 3104fcbdd3c70aefcb0cdc3ee24948907db8dc8f
1223Author: nkadel <nkadel@gmail.com>
1224Date: Sun Nov 16 13:04:14 2014 -0500
1225
1226 Always include x11-ssh-askpass SRPM.
1227
1228 Always include x11-ssh-askpass tarball in redhat SRPM, even if unused.
1229
1230commit c61d0d038d58eebc365f31830be6e04ce373ad1b
1231Author: Damien Miller <djm@mindrot.org>
1232Date: Sat Feb 10 09:43:12 2018 +1100
1233
1234 this is long unused; prompted by dtucker@
1235
1236commit 745771fb788e41bb7cdad34e5555bf82da3af7ed
1237Author: dtucker@openbsd.org <dtucker@openbsd.org>
1238Date: Fri Feb 9 02:37:36 2018 +0000
1239
1240 upstream commit
1241
1242 Remove unused sKerberosTgtPassing from enum. From
1243 calestyo via github pull req #11, ok djm@
1244
1245 OpenBSD-Commit-ID: 1008f8870865a7c4968b7aed402a0a9e3e5b9540
1246
1247commit 1f385f55332db830b0ae22a7663b98279ca2d657
1248Author: dtucker@openbsd.org <dtucker@openbsd.org>
1249Date: Thu Feb 8 04:12:32 2018 +0000
1250
1251 upstream commit
1252
1253 Rename struct umac_ctx to umac128_ctx too. In portable
1254 some linkers complain about two symbols with the same name having differing
1255 sizes. ok djm@
1256
1257 OpenBSD-Commit-ID: cbebf8bdd3310a9795b4939a1e112cfe24061ca3
1258
1259commit f1f047fb031c0081dbc8738f05bf5d4cc47acadf
1260Author: dtucker@openbsd.org <dtucker@openbsd.org>
1261Date: Wed Feb 7 22:52:45 2018 +0000
1262
1263 upstream commit
1264
1265 ssh_free checks for and handles NULL args, remove NULL
1266 checks from remaining callers. ok djm@
1267
1268 OpenBSD-Commit-ID: bb926825c53724c069df68a93a2597f9192f7e7b
1269
1270commit aee49b2a89b6b323c80dd3b431bd486e51f94c8c
1271Author: Darren Tucker <dtucker@dtucker.net>
1272Date: Thu Feb 8 12:36:22 2018 +1100
1273
1274 Set SO_REUSEADDR in regression test netcat.
1275
1276 Sometimes multiplex tests fail on Solaris with "netcat: local_listen:
1277 Address already in use" which is likely due to previous invocations
1278 leaving the port in TIME_WAIT. Set SO_REUSEADDR (in addition to
1279 SO_REUSEPORT which is alread set on platforms that support it). ok djm@
1280
1281commit 1749991c55bab716877b7c687cbfbf19189ac6f1
1282Author: jsing@openbsd.org <jsing@openbsd.org>
1283Date: Wed Feb 7 05:17:56 2018 +0000
1284
1285 upstream commit
1286
1287 Convert some explicit_bzero()/free() calls to freezero().
1288
1289 ok deraadt@ dtucker@
1290
1291 OpenBSD-Commit-ID: f566ab99149650ebe58b1d4b946ea726c3829609
1292
1293commit 94ec2b69d403f4318b7a0d9b17f8bc3efbf4d0d2
1294Author: jsing@openbsd.org <jsing@openbsd.org>
1295Date: Wed Feb 7 05:15:49 2018 +0000
1296
1297 upstream commit
1298
1299 Remove some #ifdef notyet code from OpenSSL 0.9.8 days.
1300
1301 These functions have never appeared in OpenSSL and are likely never to do
1302 so.
1303
1304 "kill it with fire" djm@
1305
1306 OpenBSD-Commit-ID: fee9560e283fd836efc2631ef381658cc673d23e
1307
1308commit 7cd31632e3a6607170ed0c9ed413a7ded5b9b377
1309Author: jsing@openbsd.org <jsing@openbsd.org>
1310Date: Wed Feb 7 02:06:50 2018 +0000
1311
1312 upstream commit
1313
1314 Remove all guards for calls to OpenSSL free functions -
1315 all of these functions handle NULL, from at least OpenSSL 1.0.1g onwards.
1316
1317 Prompted by dtucker@ asking about guards for RSA_free(), when looking at
1318 openssh-portable pr#84 on github.
1319
1320 ok deraadt@ dtucker@
1321
1322 OpenBSD-Commit-ID: 954f1c51b94297d0ae1f749271e184141e0cadae
1323
1324commit 3c000d57d46882eb736c6563edfc4995915c24a2
1325Author: Darren Tucker <dtucker@dtucker.net>
1326Date: Wed Feb 7 09:19:38 2018 +1100
1327
1328 Remove obsolete "Smartcard support" message
1329
1330 The configure checks that populated $SCARD_MSG were removed in commits
1331 7ea845e4 and d8f60022 when the smartcard support was replaced with
1332 PKCS#11.
1333
1334commit 3e615090de0ce36a833d811e01c28aec531247c4
1335Author: dtucker@openbsd.org <dtucker@openbsd.org>
1336Date: Tue Feb 6 06:01:54 2018 +0000
1337
1338 upstream commit
1339
1340 Replace "trojan horse" with the correct term (MITM).
1341 From maikel at predikkta.com via bz#2822, ok markus@
1342
1343 OpenBSD-Commit-ID: e86ac64c512057c89edfadb43302ac0aa81a6c53
1344
1345commit 3484380110d437c50e17f87d18544286328c75cb
1346Author: tb@openbsd.org <tb@openbsd.org>
1347Date: Mon Feb 5 05:37:46 2018 +0000
1348
1349 upstream commit
1350
1351 Add a couple of non-negativity checks to avoid close(-1).
1352
1353 ok djm
1354
1355 OpenBSD-Commit-ID: 4701ce0b37161c891c838d0931305f1d37a50880
1356
1357commit 5069320be93c8b2a6584b9f944c86f60c2b04e48
1358Author: tb@openbsd.org <tb@openbsd.org>
1359Date: Mon Feb 5 05:36:49 2018 +0000
1360
1361 upstream commit
1362
1363 The file descriptors for socket, stdin, stdout and stderr
1364 aren't necessarily distinct, so check if they are the same to avoid closing
1365 the same fd several times.
1366
1367 ok djm
1368
1369 OpenBSD-Commit-ID: 60d71fd22e9a32f5639d4ba6e25a2f417fc36ac1
1370
1371commit 2b428f90ea1b21d7a7c68ec1ee334253b3f9324d
1372Author: djm@openbsd.org <djm@openbsd.org>
1373Date: Mon Feb 5 04:02:53 2018 +0000
1374
1375 upstream commit
1376
1377 I accidentially a word
1378
1379 OpenBSD-Commit-ID: 4547ee713fa941da861e83ae7a3e6432f915e14a
1380
1381commit 130283d5c2545ff017c2162dc1258c5354e29399
1382Author: djm@openbsd.org <djm@openbsd.org>
1383Date: Thu Jan 25 03:34:43 2018 +0000
1384
1385 upstream commit
1386
1387 certificate options are case-sensitive; fix case on one
1388 that had it wrong.
1389
1390 move a badly-place sentence to a less bad place
1391
1392 OpenBSD-Commit-ID: 231e516bba860699a1eece6d48532d825f5f747b
1393
1394commit 89f09ee68730337015bf0c3f138504494a34e9a6
1395Author: Damien Miller <djm@mindrot.org>
1396Date: Wed Jan 24 12:20:44 2018 +1100
1397
1398 crypto_api.h needs includes.h
1399
1400commit c9c1bba06ad1c7cad8548549a68c071bd807af60
1401Author: stsp@openbsd.org <stsp@openbsd.org>
1402Date: Tue Jan 23 20:00:58 2018 +0000
1403
1404 upstream commit
1405
1406 Fix a logic bug in sshd_exchange_identification which
1407 prevented clients using major protocol version 2 from connecting to the
1408 server. ok millert@
1409
1410 OpenBSD-Commit-ID: 8668dec04586e27f1c0eb039ef1feb93d80a5ee9
1411
1412commit a60c5dcfa2538ffc94dc5b5adb3db5b6ed905bdb
1413Author: stsp@openbsd.org <stsp@openbsd.org>
1414Date: Tue Jan 23 18:33:49 2018 +0000
1415
1416 upstream commit
1417
1418 Add missing braces; fixes 'write: Socket is not
1419 connected' error in ssh. ok deraadt@
1420
1421 OpenBSD-Commit-ID: db73a3a9e147722d410866cac34d43ed52e1ad24
1422
1423commit 20d53ac283e1c60245ea464bdedd015ed9b38f4a
1424Author: Damien Miller <djm@mindrot.org>
1425Date: Tue Jan 23 16:49:43 2018 +1100
1426
1427 rebuild depends
1428
1429commit 552ea155be44f9c439c1f9f0c38f9e593428f838
1430Author: Damien Miller <djm@mindrot.org>
1431Date: Tue Jan 23 16:49:22 2018 +1100
1432
1433 one SSH_BUG_BANNER instance that got away
1434
1435commit 14b5c635d1190633b23ac3372379517fb645b0c2
1436Author: djm@openbsd.org <djm@openbsd.org>
1437Date: Tue Jan 23 05:27:21 2018 +0000
1438
1439 upstream commit
1440
1441 Drop compatibility hacks for some ancient SSH
1442 implementations, including ssh.com <=2.* and OpenSSH <= 3.*.
1443
1444 These versions were all released in or before 2001 and predate the
1445 final SSH RFCs. The hacks in question aren't necessary for RFC-
1446 compliant SSH implementations.
1447
1448 ok markus@
1449
1450 OpenBSD-Commit-ID: 4be81c67db57647f907f4e881fb9341448606138
1451
1452commit 7c77991f5de5d8475cbeb7cbb06d0c7d1611d7bb
1453Author: djm@openbsd.org <djm@openbsd.org>
1454Date: Tue Jan 23 05:17:04 2018 +0000
1455
1456 upstream commit
1457
1458 try harder to preserve errno during
1459 ssh_connect_direct() to make the final error message possibly accurate;
1460 bz#2814, ok dtucker@
1461
1462 OpenBSD-Commit-ID: 57de882cb47381c319b04499fef845dd0c2b46ca
1463
1464commit 9e9c4a7e57b96ab29fe6d7545ed09d2e5bddbdec
1465Author: djm@openbsd.org <djm@openbsd.org>
1466Date: Tue Jan 23 05:12:12 2018 +0000
1467
1468 upstream commit
1469
1470 unbreak support for clients that advertise a protocol
1471 version of "1.99" (indicating both v2 and v1 support). Busted by me during
1472 SSHv1 purge in r1.358; bz2810, ok dtucker
1473
1474 OpenBSD-Commit-ID: e8f9c2bee11afc16c872bb79d6abe9c555bd0e4b
1475
1476commit fc21ea97968264ad9bb86b13fedaaec8fd3bf97d
1477Author: djm@openbsd.org <djm@openbsd.org>
1478Date: Tue Jan 23 05:06:25 2018 +0000
1479
1480 upstream commit
1481
1482 don't attempt to force hostnames that are addresses to
1483 lowercase, but instead canonicalise them through getnameinfo/getaddrinfo to
1484 remove ambiguities (e.g. ::0001 => ::1) before they are matched against
1485 known_hosts; bz#2763, ok dtucker@
1486
1487 OpenBSD-Commit-ID: ba0863ff087e61e5c65efdbe53be3cb92c9aefa0
1488
1489commit d6364f6fb1a3d753d7ca9bf15b2adce961324513
1490Author: djm@openbsd.org <djm@openbsd.org>
1491Date: Tue Jan 23 05:01:15 2018 +0000
1492
1493 upstream commit
1494
1495 avoid modifying pw->pw_passwd; let endpwent() clean up
1496 for us, but keep a scrubbed copy; bz2777, ok dtucker@
1497
1498 OpenBSD-Commit-ID: 715afc0f59c6b82c4929a73279199ed241ce0752
1499
1500commit a69bbb07cd6fb4dfb9bdcacd370ab26d0a2b4215
1501Author: naddy@openbsd.org <naddy@openbsd.org>
1502Date: Sat Jan 13 00:24:09 2018 +0000
1503
1504 upstream commit
1505
1506 clarify authorship; prodded by and ok markus@
1507
1508 OpenBSD-Commit-ID: e1938eee58c89b064befdabe232835fa83bb378c
1509
1510commit 04214b30be3d3e73a01584db4e040d5ccbaaddd4
1511Author: markus@openbsd.org <markus@openbsd.org>
1512Date: Mon Jan 8 15:37:21 2018 +0000
1513
1514 upstream commit
1515
1516 group shared source files (e.g. SRCS_KEX) and allow
1517 compilation w/o OPENSSL ok djm@
1518
1519 OpenBSD-Commit-ID: fa728823ba21c4b45212750e1d3a4b2086fd1a62
1520
1521commit 25cf9105b849932fc3b141590c009e704f2eeba6
1522Author: markus@openbsd.org <markus@openbsd.org>
1523Date: Mon Jan 8 15:21:49 2018 +0000
1524
1525 upstream commit
1526
1527 move subprocess() so scp/sftp do not need uidswap.o; ok
1528 djm@
1529
1530 OpenBSD-Commit-ID: 6601b8360388542c2e5fef0f4085f8e54750bea8
1531
1532commit b0d34132b3ca26fe94013f01d7b92101e70b68bb
1533Author: markus@openbsd.org <markus@openbsd.org>
1534Date: Mon Jan 8 15:18:46 2018 +0000
1535
1536 upstream commit
1537
1538 switch ssh-pkcs11-helper to new API; ok djm@
1539
1540 OpenBSD-Commit-ID: e0c0ed2a568e25b1d2024f3e630f3fea837c2a42
1541
1542commit ec4a9831184c0c6ed5f7f0cfff01ede5455465a3
1543Author: markus@openbsd.org <markus@openbsd.org>
1544Date: Mon Jan 8 15:15:36 2018 +0000
1545
1546 upstream commit
1547
1548 split client/server kex; only ssh-keygen needs
1549 uuencode.o; only scp/sftp use progressmeter.o; ok djm@
1550
1551 OpenBSD-Commit-ID: f2c9feb26963615c4fece921906cf72e248b61ee
1552
1553commit ec77efeea06ac62ee1d76fe0b3225f3000775a9e
1554Author: markus@openbsd.org <markus@openbsd.org>
1555Date: Mon Jan 8 15:15:17 2018 +0000
1556
1557 upstream commit
1558
1559 only ssh-keygen needs uuencode.o; only scp/sftp use
1560 progressmeter.o
1561
1562 OpenBSD-Commit-ID: a337e886a49f96701ccbc4832bed086a68abfa85
1563
1564commit 25aae35d3d6ee86a8c4c0b1896acafc1eab30172
1565Author: markus@openbsd.org <markus@openbsd.org>
1566Date: Mon Jan 8 15:14:44 2018 +0000
1567
1568 upstream commit
1569
1570 uuencode.h is not used
1571
1572 OpenBSD-Commit-ID: 238eb4659f3c119904326b9e94a5e507a912796c
1573
1574commit 4f29309c4cb19bcb1774931db84cacc414f17d29
1575Author: Damien Miller <djm@mindrot.org>
1576Date: Wed Jan 3 19:50:43 2018 +1100
1577
1578 unbreak fuzz harness
1579
1580commit f6b50bf84dc0b61f22c887c00423e0ea7644e844
1581Author: djm@openbsd.org <djm@openbsd.org>
1582Date: Thu Dec 21 05:46:35 2017 +0000
1583
1584 upstream commit
1585
1586 another libssh casualty
1587
1588 OpenBSD-Regress-ID: 839b970560246de23e7c50215095fb527a5a83ec
1589
1590commit 5fb4fb5a0158318fb8ed7dbb32f3869bbf221f13
1591Author: djm@openbsd.org <djm@openbsd.org>
1592Date: Thu Dec 21 03:01:49 2017 +0000
1593
1594 upstream commit
1595
1596 missed one (unbreak after ssh/lib removal)
1597
1598 OpenBSD-Regress-ID: cfdd132143131769e2d2455e7892b5d55854c322
1599
1600commit e6c4134165d05447009437a96e7201276688807f
1601Author: djm@openbsd.org <djm@openbsd.org>
1602Date: Thu Dec 21 00:41:22 2017 +0000
1603
1604 upstream commit
1605
1606 unbreak unit tests after removal of src/usr.bin/ssh/lib
1607
1608 OpenBSD-Regress-ID: 3a79760494147b20761cbd2bd5c20e86c63dc8f9
1609
1610commit d45d69f2a937cea215c7f0424e5a4677b6d8c7fe
1611Author: djm@openbsd.org <djm@openbsd.org>
1612Date: Thu Dec 21 00:00:28 2017 +0000
1613
1614 upstream commit
1615
1616 revert stricter key type / signature type checking in
1617 userauth path; too much software generates inconsistent messages, so we need
1618 a better plan.
1619
1620 OpenBSD-Commit-ID: 4a44ddc991c803c4ecc8f1ad40e0ab4d22e1c519
1621
1622commit c5a6cbdb79752f7e761074abdb487953ea6db671
1623Author: djm@openbsd.org <djm@openbsd.org>
1624Date: Tue Dec 19 00:49:30 2017 +0000
1625
1626 upstream commit
1627
1628 explicitly test all key types and their certificate
1629 counterparts
1630
1631 refactor a little
1632
1633 OpenBSD-Regress-ID: e9ecd5580821b9ef8b7106919c6980d8e45ca8c4
1634
1635commit f689adb7a370b5572612d88be9837ca9aea75447
1636Author: dtucker@openbsd.org <dtucker@openbsd.org>
1637Date: Mon Dec 11 11:41:56 2017 +0000
1638
1639 upstream commit
1640
1641 use cmp in a loop instead of diff -N to compare
1642 directories. The former works on more platforms for Portable.
1643
1644 OpenBSD-Regress-ID: c3aa72807f9c488e8829a26ae50fe5bcc5b57099
1645
1646commit 748dd8e5de332b24c40f4b3bbedb902acb048c98
1647Author: Damien Miller <djm@mindrot.org>
1648Date: Tue Dec 19 16:17:59 2017 +1100
1649
1650 remove blocks.c from Makefile
1651
1652commit 278856320520e851063b06cef6ef1c60d4c5d652
1653Author: djm@openbsd.org <djm@openbsd.org>
1654Date: Tue Dec 19 00:24:34 2017 +0000
1655
1656 upstream commit
1657
1658 include signature type and CA key (if applicable) in some
1659 debug messages
1660
1661 OpenBSD-Commit-ID: b71615cc20e78cec7105bb6e940c03ce9ae414a5
1662
1663commit 7860731ef190b52119fa480f8064ab03c44a120a
1664Author: djm@openbsd.org <djm@openbsd.org>
1665Date: Mon Dec 18 23:16:23 2017 +0000
1666
1667 upstream commit
1668
1669 unbreak hostkey rotation; attempting to sign with a
1670 desired signature algorithm of kex->hostkey_alg is incorrect when the key
1671 type isn't capable of making those signatures. ok markus@
1672
1673 OpenBSD-Commit-ID: 35ae46864e1f5859831ec0d115ee5ea50953a906
1674
1675commit 966ef478339ad5e631fb684d2a8effe846ce3fd4
1676Author: djm@openbsd.org <djm@openbsd.org>
1677Date: Mon Dec 18 23:14:34 2017 +0000
1678
1679 upstream commit
1680
1681 log mismatched RSA signature types; ok markus@
1682
1683 OpenBSD-Commit-ID: 381bddfcc1e297a42292222f3bcb5ac2b7ea2418
1684
1685commit 349ecd4da3a985359694a74635748009be6baca6
1686Author: djm@openbsd.org <djm@openbsd.org>
1687Date: Mon Dec 18 23:13:42 2017 +0000
1688
1689 upstream commit
1690
1691 pass kex->hostkey_alg and kex->hostkey_nid from pre-auth
1692 to post-auth unpriviledged child processes; ok markus@
1693
1694 OpenBSD-Commit-ID: 4a35bc7af0a5f8a232d1361f79f4ebc376137302
1695
1696commit c9e37a8725c083441dd34a8a53768aa45c3c53fe
1697Author: millert@openbsd.org <millert@openbsd.org>
1698Date: Mon Dec 18 17:28:54 2017 +0000
1699
1700 upstream commit
1701
1702 Add helper function for uri handing in scp where a
1703 missing path simply means ".". Also fix exit code and add warnings when an
1704 invalid uri is encountered. OK otto@
1705
1706 OpenBSD-Commit-ID: 47dcf872380586dabf7fcc6e7baf5f8ad508ae1a
1707
1708commit 04c7e28f83062dc42f2380d1bb3a6bf0190852c0
1709Author: djm@openbsd.org <djm@openbsd.org>
1710Date: Mon Dec 18 02:25:15 2017 +0000
1711
1712 upstream commit
1713
1714 pass negotiated signing algorithm though to
1715 sshkey_verify() and check that the negotiated algorithm matches the type in
1716 the signature (only matters for RSA SHA1/SHA2 sigs). ok markus@
1717
1718 OpenBSD-Commit-ID: 735fb15bf4adc060d3bee9d047a4bcaaa81b1af9
1719
1720commit 931c78dfd7fe30669681a59e536bbe66535f3ee9
1721Author: djm@openbsd.org <djm@openbsd.org>
1722Date: Mon Dec 18 02:22:29 2017 +0000
1723
1724 upstream commit
1725
1726 sshkey_sigtype() function to return the type of a
1727 signature; ok markus@
1728
1729 OpenBSD-Commit-ID: d3772b065ad6eed97285589bfb544befed9032e8
1730
1731commit 4cdc5956f2fcc9e9078938db833142dc07d8f523
1732Author: naddy@openbsd.org <naddy@openbsd.org>
1733Date: Thu Dec 14 21:07:39 2017 +0000
1734
1735 upstream commit
1736
1737 Replace ED25519's private SHA-512 implementation with a
1738 call to the regular digest code. This speeds up compilation considerably. ok
1739 markus@
1740
1741 OpenBSD-Commit-ID: fcce8c3bcfe7389462a28228f63c823e80ade41c
1742
1743commit 012e5cb839faf76549e3b6101b192fe1a74d367e
1744Author: naddy@openbsd.org <naddy@openbsd.org>
1745Date: Tue Dec 12 15:06:12 2017 +0000
1746
1747 upstream commit
1748
1749 Create a persistent umac128.c source file: #define the
1750 output size and the name of the entry points for UMAC-128 before including
1751 umac.c. Idea from FreeBSD. ok dtucker@
1752
1753 OpenBSD-Commit-ID: 463cfacfa07cb8060a4d4961e63dca307bf3f4b1
1754
1755commit b35addfb4cd3b5cdb56a2a489d38e940ada926c7
1756Author: Darren Tucker <dtucker@zip.com.au>
1757Date: Mon Dec 11 16:23:28 2017 +1100
1758
1759 Update .depend with empty config.h
1760
1761commit 2d96f28246938e0ca474a939d8ac82ecd0de27e3
1762Author: Darren Tucker <dtucker@zip.com.au>
1763Date: Mon Dec 11 16:21:55 2017 +1100
1764
1765 Ensure config.h is always in dependencies.
1766
1767 Put an empty config.h into the dependency list to ensure that it's
1768 always listed and consistent.
1769
1770commit ac4987a55ee5d4dcc8e87f7ae7c1f87be7257d71
1771Author: deraadt@openbsd.org <deraadt@openbsd.org>
1772Date: Sun Dec 10 19:37:57 2017 +0000
1773
1774 upstream commit
1775
1776 ssh/lib hasn't worked towards our code-sharing goals for
1777 a quit while, perhaps it is too verbose? Change each */Makefile to
1778 specifying exactly what sources that program requires, compiling it seperate.
1779 Maybe we'll iterate by sorting those into seperatable chunks, splitting up
1780 files which contain common code + server/client specific code, or whatnot.
1781 But this isn't one step, or we'd have done it a long time ago.. ok dtucker
1782 markus djm
1783
1784 OpenBSD-Commit-ID: 5317f294d63a876bfc861e19773b1575f96f027d
1785
1786commit 48c23a39a8f1069a57264dd826f6c90aa12778d5
1787Author: dtucker@openbsd.org <dtucker@openbsd.org>
1788Date: Sun Dec 10 05:55:29 2017 +0000
1789
1790 upstream commit
1791
1792 Put remote client info back into the ClientAlive
1793 connection termination message. Based in part on diff from lars.nooden at
1794 gmail, ok djm
1795
1796 OpenBSD-Commit-ID: 80a0f619a29bbf2f32eb5297a69978a0e05d0ee0
1797
1798commit aabd75ec76575c1b17232e6526a644097cd798e5
1799Author: deraadt@openbsd.org <deraadt@openbsd.org>
1800Date: Fri Dec 8 03:45:52 2017 +0000
1801
1802 upstream commit
1803
1804 time_t printing needs %lld and (long long) casts ok djm
1805
1806 OpenBSD-Commit-ID: 4a93bc2b0d42a39b8f8de8bb74d07ad2e5e83ef7
1807
1808commit fd4eeeec16537870bd40d04836c7906ec141c17d
1809Author: djm@openbsd.org <djm@openbsd.org>
1810Date: Fri Dec 8 02:14:33 2017 +0000
1811
1812 upstream commit
1813
1814 fix ordering in previous to ensure errno isn't clobbered
1815 before logging.
1816
1817 OpenBSD-Commit-ID: e260bc1e145a9690dcb0d5aa9460c7b96a0c8ab2
1818
1819commit 155072fdb0d938015df828836beb2f18a294ab8a
1820Author: djm@openbsd.org <djm@openbsd.org>
1821Date: Fri Dec 8 02:13:02 2017 +0000
1822
1823 upstream commit
1824
1825 for some reason unix_listener() logged most errors twice
1826 with each message containing only some of the useful information; merge these
1827
1828 OpenBSD-Commit-ID: 1978a7594a9470c0dddcd719586066311b7c9a4a
1829
1830commit 79c0e1d29959304e5a49af1dbc58b144628c09f3
1831Author: Darren Tucker <dtucker@zip.com.au>
1832Date: Mon Dec 11 14:38:33 2017 +1100
1833
1834 Add autogenerated dependency info to Makefile.
1835
1836 Adds a .depend file containing dependency information generated by
1837 makedepend, which is appended to the generated Makefile by configure.
1838
1839 You can regen the file with "make -f Makefile.in depend" if necessary,
1840 but we'll be looking at some way to automatically keep this up to date.
1841
1842 "no objection" djm@
1843
1844commit f001de8fbf7f3faddddd8efd03df18e57601f7eb
1845Author: Darren Tucker <dtucker@zip.com.au>
1846Date: Mon Dec 11 13:42:51 2017 +1100
1847
1848 Fix pasto in ldns handling.
1849
1850 When ldns-config is not found, configure would check the wrong variable.
1851 ok djm@
1852
1853commit c5bfe83f67cb64e71cf2fe0d1500f6904b0099ee
1854Author: Darren Tucker <dtucker@zip.com.au>
1855Date: Sat Dec 9 10:12:23 2017 +1100
1856
1857 Portable switched to git so s/CVS/git/.
1858
1859commit bb82e61a40a4ee52e4eb904caaee2c27b763ab5b
1860Author: Darren Tucker <dtucker@zip.com.au>
1861Date: Sat Dec 9 08:06:00 2017 +1100
1862
1863 Remove now-used check for perl.
1864
1865commit e0ce54c0b9ca3a9388f9c50f4fa6cc25c28a3240
1866Author: djm@openbsd.org <djm@openbsd.org>
1867Date: Wed Dec 6 05:06:21 2017 +0000
1868
1869 upstream commit
1870
1871 don't accept junk after "yes" or "no" responses to
1872 hostkey prompts. bz#2803 reported by Maksim Derbasov; ok dtucker@
1873
1874 OpenBSD-Commit-ID: e1b159fb2253be973ce25eb7a7be26e6f967717c
1875
1876commit 609d96b3d58475a15b2eb6b3d463f2c5d8e510c0
1877Author: dtucker@openbsd.org <dtucker@openbsd.org>
1878Date: Tue Dec 5 23:59:47 2017 +0000
1879
1880 upstream commit
1881
1882 Replace atoi and strtol conversions for integer arguments
1883 to config keywords with a checking wrapper around strtonum. This will
1884 prevent and flag invalid and negative arguments to these keywords. ok djm@
1885
1886 OpenBSD-Commit-ID: 99ae3981f3d608a219ccb8d2fff635ae52c17998
1887
1888commit 168ecec13f9d7cb80c07df3bf7d414f4e4165e84
1889Author: dtucker@openbsd.org <dtucker@openbsd.org>
1890Date: Tue Dec 5 23:56:07 2017 +0000
1891
1892 upstream commit
1893
1894 Add missing break for rdomain. Prevents spurious
1895 "Deprecated option" warnings. ok djm@
1896
1897 OpenBSD-Commit-ID: ba28a675d39bb04a974586241c3cba71a9c6099a
1898
1899commit 927f8514ceffb1af380a5f63ab4d3f7709b1b198
1900Author: djm@openbsd.org <djm@openbsd.org>
1901Date: Tue Dec 5 01:30:19 2017 +0000
1902
1903 upstream commit
1904
1905 include the addr:port in bind/listen failure messages
1906
1907 OpenBSD-Commit-ID: fdadb69fe1b38692608809cf0376b71c2c28e58e
1908
1909commit a8c89499543e2d889629c4e5e8dcf47a655cf889
1910Author: dtucker@openbsd.org <dtucker@openbsd.org>
1911Date: Wed Nov 29 05:49:54 2017 +0000
1912
1913 upstream commit
1914
1915 Import updated moduli.
1916
1917 OpenBSD-Commit-ID: 524d210f982af6007aa936ca7f4c977f4d32f38a
1918
1919commit 3dde09ab38c8e1cfc28252be473541a81bc57097
1920Author: dtucker@openbsd.org <dtucker@openbsd.org>
1921Date: Tue Nov 28 21:10:22 2017 +0000
1922
1923 upstream commit
1924
1925 Have sftp print a warning about shell cleanliness when
1926 decoding the first packet fails, which is usually caused by shells polluting
1927 stdout of non-interactive starups. bz#2800, ok markus@ deraadt@.
1928
1929 OpenBSD-Commit-ID: 88d6a9bf3470f9324b76ba1cbd53e50120f685b5
1930
1931commit 6c8a246437f612ada8541076be2414846d767319
1932Author: Darren Tucker <dtucker@zip.com.au>
1933Date: Fri Dec 1 17:11:47 2017 +1100
1934
1935 Replace mkinstalldirs with mkdir -p.
1936
1937 Check for MIKDIR_P and use it instead of mkinstalldirs. Should fix "mkdir:
1938 cannot create directory:... File exists" during "make install".
1939 Patch from eb at emlix.com.
1940
1941commit 3058dd78d2e43ed0f82ad8eab8bb04b043a72023
1942Author: Darren Tucker <dtucker@zip.com.au>
1943Date: Fri Dec 1 17:07:08 2017 +1100
1944
1945 Pull in newer install-sh from autoconf-2.69.
1946
1947 Suggested by eb at emlix.com
1948
1949commit 79226e5413c5b0fda3511351a8511ff457e306d8
1950Author: Darren Tucker <dtucker@zip.com.au>
1951Date: Fri Dec 1 16:55:35 2017 +1100
1952
1953 Remove RSA1 host key generation.
1954
1955 SSH1 support is now gone, remove SSH1 key generation.
1956 Patch from eb at emlix.com.
1957
1958commit 2937dd02c572a12f33d5c334d518f6cbe0b645eb
1959Author: djm@openbsd.org <djm@openbsd.org>
1960Date: Tue Nov 28 06:09:38 2017 +0000
1961
1962 upstream commit
1963
1964 more whitespace errors
1965
1966 OpenBSD-Commit-ID: 5e11c125378327b648940b90145e0d98beb05abb
1967
1968commit 7f257bf3fd3a759f31098960cbbd1453fafc4164
1969Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
1970Date: Tue Nov 28 06:04:51 2017 +0000
1971
1972 upstream commit
1973
1974 whitespace at EOL
1975
1976 OpenBSD-Commit-ID: 76d3965202b22d59c2784a8df3a8bfa5ee67b96a
1977
1978commit 5db6fbf1438b108e5df3e79a1b4de544373bc2d4
1979Author: dtucker@openbsd.org@openbsd.org <dtucker@openbsd.org@openbsd.org>
1980Date: Sat Nov 25 06:46:22 2017 +0000
1981
1982 upstream commit
1983
1984 Add monotime_ts and monotime_tv that return monotonic
1985 timespec and timeval respectively. Replace calls to gettimeofday() in packet
1986 timing with monotime_tv so that the callers will work over a clock step.
1987 Should prevent integer overflow during clock steps reported by wangle6 at
1988 huawei.com. "I like" markus@
1989
1990 OpenBSD-Commit-ID: 74d684264814ff806f197948b87aa732cb1b0b8a
1991
1992commit 2d638e986085bdf1a40310ed6e2307463db96ea0
1993Author: dtucker@openbsd.org@openbsd.org <dtucker@openbsd.org@openbsd.org>
1994Date: Sat Nov 25 05:58:47 2017 +0000
1995
1996 upstream commit
1997
1998 Remove get_current_time() and replace with calls to
1999 monotime_double() which uses CLOCK_MONOTONIC and works over clock steps. "I
2000 like" markus@
2001
2002 OpenBSD-Commit-ID: 3ad2f7d2414e2cfcaef99877a7a5b0baf2242952
2003
2004commit ba460acae48a36ef749cb23068f968f4d5d90a24
2005Author: Darren Tucker <dtucker@zip.com.au>
2006Date: Fri Nov 24 16:24:31 2017 +1100
2007
2008 Include string.h for explicit_bzero.
2009
2010commit a65655fb1a12b77fb22f9e71559b9d73030ec8ff
2011Author: Damien Miller <djm@mindrot.org>
2012Date: Fri Nov 24 10:23:47 2017 +1100
2013
2014 fix incorrect range of OpenSSL versions supported
2015
2016 Pointed out by Solar Designer
2017
2018commit 83a1e5dbec52d05775174f368e0c44b08619a308
2019Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2020Date: Wed Nov 15 02:10:16 2017 +0000
2021
2022 upstream commit
2023
2024 downgrade a couple more request parsing errors from
2025 process-fatal to just returning failure, making them consistent with the
2026 others that were already like that.
2027
2028 OpenBSD-Commit-ID: c111461f7a626690a2d53018ef26557b34652918
2029
2030commit 93c68a8f3da8e5e6acdc3396f54d73919165e242
2031Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2032Date: Wed Nov 15 00:13:40 2017 +0000
2033
2034 upstream commit
2035
2036 fix regression in 7.6: failure to parse a signature request
2037 message shouldn't be fatal to the process, just the request. Reported by Ron
2038 Frederick
2039
2040 OpenBSD-Commit-ID: e5d01b3819caa1a2ad51fc57d6ded43f48bbcc05
2041
2042commit 548d3a66feb64c405733932a6b1abeaf7198fa71
2043Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2044Date: Tue Nov 14 00:45:29 2017 +0000
2045
2046 upstream commit
2047
2048 fix problem in configuration parsing when in config dump mode
2049 (sshd -T) without providing a full connection specification (sshd -T -C ...)
2050
2051 spotted by bluhm@
2052
2053 OpenBSD-Commit-ID: 7125faf5740eaa9d3a2f25400a0bc85e94e28b8f
2054
2055commit 33edb6ebdc2f81ebed1bceadacdfb8910b64fb88
2056Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2057Date: Fri Nov 3 05:18:44 2017 +0000
2058
2059 upstream commit
2060
2061 reuse parse_multistate for parse_flag (yes/no arguments).
2062 Saves a few lines of code and makes the parser more consistent wrt case-
2063 sensitivity. bz#2664 ok dtucker@
2064
2065 OpenBSD-Commit-ID: b2ad1b6086858d5db71c7b11e5a74dba6d60efef
2066
2067commit d52131a98316e76c0caa348f09bf6f7b9b01a1b9
2068Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2069Date: Fri Nov 3 05:14:04 2017 +0000
2070
2071 upstream commit
2072
2073 allow certificate validity intervals that specify only a
2074 start or stop time (we already support specifying both or neither)
2075
2076 OpenBSD-Commit-ID: 9be486545603c003030bdb5c467d1318b46b4e42
2077
2078commit fbe8e7ac94c2fa380421a9205a8bc966549c2f91
2079Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2080Date: Fri Nov 3 03:46:52 2017 +0000
2081
2082 upstream commit
2083
2084 allow "cd" and "lcd" commands with no explicit path
2085 argument. lcd will change to the local user's home directory as usual. cd
2086 will change to the starting directory for session (because the protocol
2087 offers no way to obtain the remote user's home directory). bz#2760 ok
2088 dtucker@
2089
2090 OpenBSD-Commit-ID: 15333f5087cee8c1ed1330cac1bd0a3e6a767393
2091
2092commit 0208a48517b5e8e8b091f32fa4addcd67c31ca9e
2093Author: dtucker@openbsd.org@openbsd.org <dtucker@openbsd.org@openbsd.org>
2094Date: Fri Nov 3 03:18:53 2017 +0000
2095
2096 upstream commit
2097
2098 When doing a config test with sshd -T, only require the
2099 attributes that are actually used in Match criteria rather than (an
2100 incomplete list of) all criteria. ok djm@, man page help jmc@
2101
2102 OpenBSD-Commit-ID: b4e773c4212d3dea486d0259ae977551aab2c1fc
2103
2104commit c357eed5a52cd2f4ff358b17e30e3f9a800644da
2105Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2106Date: Fri Nov 3 02:32:19 2017 +0000
2107
2108 upstream commit
2109
2110 typos in ECDSA certificate names; bz#2787 reported by
2111 Mike Gerow
2112
2113 OpenBSD-Commit-ID: 824938b6aba1b31321324ba1f56c05f84834b163
2114
2115commit ecbf005b8fd80b81d0c61dfc1e96fe3da6099395
2116Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2117Date: Fri Nov 3 02:29:17 2017 +0000
2118
2119 upstream commit
2120
2121 Private keys in PEM format have been encrypted by AES-128 for
2122 a while (not 3DES). bz#2788 reported by Calum Mackay
2123
2124 OpenBSD-Commit-ID: bd33da7acbbb3c882f0a0ee56007a35ce0d8a11a
2125
2126commit 81c9ccdbf6ddbf9bfbd6f1f775a5a7c13e47e185
2127Author: Darren Tucker <dtucker@zip.com.au>
2128Date: Fri Nov 3 14:52:51 2017 +1100
2129
2130 Check for linux/if.h when enabling rdomain.
2131
2132 musl libc doesn't seem to have linux/if.h, so check for its presence
2133 before enabling rdomain support on Linux.
2134
2135commit fa1b834cce41a1ce3e6a8d57fb67ef18c9dd803f
2136Author: Darren Tucker <dtucker@zip.com.au>
2137Date: Fri Nov 3 14:09:45 2017 +1100
2138
2139 Add headers for sys/sysctl.h and net/route.h
2140
2141 On at least older OpenBSDs, sys/sysctl.h and net/route.h require
2142 sys/types and, in the case of sys/sysctl.h, sys/param.h for MAXLOGNAME.
2143
2144commit 41bff4da21fcd8a7c6a83a7e0f92b018f904f6fb
2145Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2146Date: Fri Nov 3 02:22:41 2017 +0000
2147
2148 upstream commit
2149
2150 avoid unused variable warnings for !WITH_OPENSSL; patch from
2151 Marcus Folkesson
2152
2153 OpenBSD-Commit-ID: c01d27a3f907acdc3dd4ea48170fac3ba236d229
2154
2155commit 6b373e4635a7470baa94253dd1dc8953663da9e8
2156Author: Marcus Folkesson <marcus.folkesson@gmail.com>
2157Date: Sat Oct 28 19:48:39 2017 +0200
2158
2159 only enable functions in dh.c when openssl is used
2160
2161 Signed-off-by: Marcus Folkesson <marcus.folkesson@gmail.com>
2162
2163commit 939b30ba23848b572e15bf92f0f1a3d9cf3acc2b
2164Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2165Date: Wed Nov 1 00:04:15 2017 +0000
2166
2167 upstream commit
2168
2169 fix broken stdout in ControlPersist mode, introduced by me in
2170 r1.467 and reported by Alf Schlichting
2171
2172 OpenBSD-Commit-ID: 3750a16e02108fc25f747e4ebcedb7123c1ef509
2173
2174commit f21455a084f9cc3942cf1bde64055a4916849fed
2175Author: Darren Tucker <dtucker@zip.com.au>
2176Date: Tue Oct 31 10:09:33 2017 +1100
2177
2178 Include includes.h for HAVE_GETPAGESIZE.
2179
2180 The configure script checks for getpagesize() and sets HAVE_GETPAGESIZE in
2181 config.h, but bsd-getpagesize.c forgot to include includes.h (which
2182 indirectly includes config.h) so the checks always fails, causing linker
2183 issues when linking statically on systems with getpagesize().
2184
2185 Patch from Peter Korsgaard <peter at korsgaard.com>
2186
2187commit f2ad63c0718b93ac1d1e85f53fee33b06eef86b5
2188Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2189Date: Mon Oct 30 22:01:52 2017 +0000
2190
2191 upstream commit
2192
2193 whitespace at EOL
2194
2195 OpenBSD-Regress-ID: f4b5df99b28c6f63478deb916c6ed0e794685f07
2196
2197commit c6415b1f8f1d0c2735564371647fd6a177fb9a3e
2198Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2199Date: Mon Oct 30 21:59:43 2017 +0000
2200
2201 upstream commit
2202
2203 whitespace at EOL
2204
2205 OpenBSD-Regress-ID: 19b1394393deee4c8a2114a3b7d18189f27a15cd
2206
2207commit e4d4ddbbba0e585ca3ec3a455430750b4622a6d3
2208Author: millert@openbsd.org@openbsd.org <millert@openbsd.org@openbsd.org>
2209Date: Wed Oct 25 20:08:36 2017 +0000
2210
2211 upstream commit
2212
2213 Use printenv to test whether an SSH_USER_AUTH is set
2214 instead of using $SSH_USER_AUTH. The latter won't work with csh which treats
2215 unknown variables as an error when expanding them. OK markus@
2216
2217 OpenBSD-Regress-ID: f601e878dd8b71aa40381573dde3a8f567e6f2d1
2218
2219commit 116b1b439413a724ebb3320633a64dd0f3ee1fe7
2220Author: millert@openbsd.org@openbsd.org <millert@openbsd.org@openbsd.org>
2221Date: Tue Oct 24 19:33:32 2017 +0000
2222
2223 upstream commit
2224
2225 Add tests for URI parsing. OK markus@
2226
2227 OpenBSD-Regress-ID: 5d1df19874f3b916d1a2256a905526e17a98bd3b
2228
2229commit dbe0662e9cd482593a4a8bf58c6481bfe8a747a4
2230Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2231Date: Fri Oct 27 01:57:06 2017 +0000
2232
2233 upstream commit
2234
2235 whitespace at EOL
2236
2237 OpenBSD-Commit-ID: c95549cf5a07d56ea11aaff818415118720214f6
2238
2239commit d2135474344335a7c6ee643b6ade6db400fa76ee
2240Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2241Date: Fri Oct 27 01:01:17 2017 +0000
2242
2243 upstream commit
2244
2245 whitespace at EOL (lots)
2246
2247 OpenBSD-Commit-ID: 757257dd44116794ee1b5a45c6724973de181747
2248
2249commit b77c29a07f5a02c7c1998701c73d92bde7ae1608
2250Author: djm@openbsd.org@openbsd.org <djm@openbsd.org@openbsd.org>
2251Date: Fri Oct 27 00:18:41 2017 +0000
2252
2253 upstream commit
2254
2255 improve printing of rdomain on accept() a little
2256
2257 OpenBSD-Commit-ID: 5da58db2243606899cedaa646c70201b2d12247a
2258
2259commit 68d3bbb2e6dfbf117c46e942142795b2cdd0274b
2260Author: jmc@openbsd.org@openbsd.org <jmc@openbsd.org@openbsd.org>
2261Date: Thu Oct 26 06:44:01 2017 +0000
2262
2263 upstream commit
2264
2265 mark up the rdomain keyword;
2266
2267 OpenBSD-Commit-ID: 1b597d0ad0ad20e94dbd61ca066057e6f6313b8a
2268
2269commit 0b2e2896b9d0d6cfb59e9ec8271085296bd4e99b
2270Author: jmc@openbsd.org@openbsd.org <jmc@openbsd.org@openbsd.org>
2271Date: Wed Oct 25 06:19:46 2017 +0000
2272
2273 upstream commit
2274
2275 tweak the uri text, specifically removing some markup to
2276 make it a bit more readable;
2277
2278 issue reported by - and diff ok - millert
2279
2280 OpenBSD-Commit-ID: 8b56a20208040b2d0633536fd926e992de37ef3f
2281
2282commit 7530e77bdc9415386d2a8ea3d086e8b611b2ba40
2283Author: jmc@openbsd.org@openbsd.org <jmc@openbsd.org@openbsd.org>
2284Date: Wed Oct 25 06:18:06 2017 +0000
2285
2286 upstream commit
2287
2288 simplify macros in previous, and some minor tweaks;
2289
2290 OpenBSD-Commit-ID: 6efeca3d8b095b76e21b484607d9cc67ac9a11ca
2291
2292commit eb9c582b710dc48976b48eb2204218f6863bae9a
2293Author: Damien Miller <djm@mindrot.org>
2294Date: Tue Oct 31 00:46:29 2017 +1100
2295
2296 Switch upstream git repository.
2297
2298 Previously portable OpenSSH has synced against a conversion of OpenBSD's
2299 CVS repository made using the git cvsimport tool, but this has become
2300 increasingly unreliable.
2301
2302 As of this commit, portable OpenSSH now tracks a conversion of the
2303 OpenBSD CVS upstream made using the excellent cvs2gitdump tool from
2304 YASUOKA Masahiko: https://github.com/yasuoka/cvs2gitdump
2305
2306 cvs2gitdump is considerably more reliable than gitcvsimport and the old
2307 version of cvsps that it uses under the hood, and is the same tool used
2308 to export the entire OpenBSD repository to git (so we know it can cope
2309 with future growth).
2310
2311 These new conversions are mirrored at github, so interested parties can
2312 match portable OpenSSH commits to their upstream counterparts.
2313
2314 https://github.com/djmdjm/openbsd-openssh-src
2315 https://github.com/djmdjm/openbsd-openssh-regress
2316
2317 An unfortunate side effect of switching upstreams is that we must have
2318 a flag day, across which the upstream commit IDs will be inconsistent.
2319 The old commit IDs are recorded with the tags "Upstream-ID" for main
2320 directory commits and "Upstream-Regress-ID" for regress commits.
2321
2322 To make it clear that the commit IDs do not refer to the same
2323 things, the new repository will instead use "OpenBSD-ID" and
2324 "OpenBSD-Regress-ID" tags instead.
2325
2326 Apart from being a longwinded explanation of what is going on, this
2327 commit message also serves to synchronise our tools with the state of
2328 the tree, which happens to be:
2329
2330 OpenBSD-ID: 9c43a9968c7929613284ea18e9fb92e4e2a8e4c1
2331 OpenBSD-Regress-ID: b33b385719420bf3bc57d664feda6f699c147fef
2332
2333commit 2de5c6b53bf063ac698596ef4e23d8e3099656ea
2334Author: Damien Miller <djm@mindrot.org>
2335Date: Fri Oct 27 08:42:33 2017 +1100
2336
2337 fix rdomain compilation errors
2338
2339commit 6bd5b569fd6dfd5e8c8af20bbc41e45c2d6462ab
2340Author: Damien Miller <djm@mindrot.org>
2341Date: Wed Oct 25 14:15:42 2017 +1100
2342
2343 autoconf glue to enable Linux VRF
2344
2345commit 97c5aaf925d61641d599071abb56012cde265978
2346Author: Damien Miller <djm@mindrot.org>
2347Date: Wed Oct 25 14:09:56 2017 +1100
2348
2349 basic valid_rdomain() implementation for Linux
2350
2351commit ce1cca39d7935dd394080ce2df62f5ce5b51f485
2352Author: Damien Miller <djm@mindrot.org>
2353Date: Wed Oct 25 13:47:59 2017 +1100
2354
2355 implement get/set_rdomain() for Linux
2356
2357 Not enabled, pending implementation of valid_rdomain() and autoconf glue
2358
2359commit 6eee79f9b8d4a3b113b698383948a119acb82415
2360Author: Damien Miller <djm@mindrot.org>
2361Date: Wed Oct 25 13:22:29 2017 +1100
2362
2363 stubs for rdomain replacement functions
2364
2365commit f5594f939f844bbb688313697d6676238da355b3
2366Author: Damien Miller <djm@mindrot.org>
2367Date: Wed Oct 25 13:13:57 2017 +1100
2368
2369 rename port-tun.[ch] => port-net.[ch]
2370
2371 Ahead of adding rdomain support
2372
2373commit d685e5a31feea35fb99e1a31a70b3c60a7f2a0eb
2374Author: djm@openbsd.org <djm@openbsd.org>
2375Date: Wed Oct 25 02:10:39 2017 +0000
2376
2377 upstream commit
2378
2379 uninitialised variable in PermitTunnel printing code
2380
2381 Upstream-ID: f04dc33e42855704e116b8da61095ecc71bc9e9a
2382
2383commit 43c29bb7cfd46bbbc61e0ffa61a11e74d49a712f
2384Author: Damien Miller <djm@mindrot.org>
2385Date: Wed Oct 25 13:10:59 2017 +1100
2386
2387 provide hooks and fallbacks for rdomain support
2388
2389commit 3235473bc8e075fad7216b7cd62fcd2b0320ea04
2390Author: Damien Miller <djm@mindrot.org>
2391Date: Wed Oct 25 11:25:43 2017 +1100
2392
2393 check for net/route.h and sys/sysctl.h
2394
2395commit 4d5456c7de108e17603a0920c4d15bca87244921
2396Author: djm@openbsd.org <djm@openbsd.org>
2397Date: Wed Oct 25 00:21:37 2017 +0000
2398
2399 upstream commit
2400
2401 transfer ownership of stdout to the session channel by
2402 dup2'ing /dev/null to fd 1. This allows propagation of remote stdout close to
2403 the local side; reported by David Newall, ok markus@
2404
2405 Upstream-ID: 8d9ac18a11d89e6b0415f0cbf67b928ac67f0e79
2406
2407commit 68af80e6fdeaeb79432209db614386ff0f37e75f
2408Author: djm@openbsd.org <djm@openbsd.org>
2409Date: Wed Oct 25 00:19:47 2017 +0000
2410
2411 upstream commit
2412
2413 add a "rdomain" criteria for the sshd_config Match
2414 keyword to allow conditional configuration that depends on which rdomain(4) a
2415 connection was recevied on. ok markus@
2416
2417 Upstream-ID: 27d8fd5a3f1bae18c9c6e533afdf99bff887a4fb
2418
2419commit 35eb33fb957979e3fcbe6ea0eaee8bf4a217421a
2420Author: djm@openbsd.org <djm@openbsd.org>
2421Date: Wed Oct 25 00:17:08 2017 +0000
2422
2423 upstream commit
2424
2425 add sshd_config RDomain keyword to place sshd and the
2426 subsequent user session (including the shell and any TCP/IP forwardings) into
2427 the specified rdomain(4)
2428
2429 ok markus@
2430
2431 Upstream-ID: be2358e86346b5cacf20d90f59f980b87d1af0f5
2432
2433commit acf559e1cffbd1d6167cc1742729fc381069f06b
2434Author: djm@openbsd.org <djm@openbsd.org>
2435Date: Wed Oct 25 00:15:35 2017 +0000
2436
2437 upstream commit
2438
2439 Add optional rdomain qualifier to sshd_config's
2440 ListenAddress option to allow listening on a different rdomain(4), e.g.
2441
2442 ListenAddress 0.0.0.0 rdomain 4
2443
2444 Upstream-ID: 24b6622c376feeed9e9be8b9605e593695ac9091
2445
2446commit b9903ee8ee8671b447fc260c2bee3761e26c7227
2447Author: millert@openbsd.org <millert@openbsd.org>
2448Date: Tue Oct 24 19:41:45 2017 +0000
2449
2450 upstream commit
2451
2452 Kill dead store and some spaces vs. tabs indent in
2453 parse_user_host_path(). Noticed by markus@
2454
2455 Upstream-ID: 114fec91dadf9af46c7c94fd40fc630ea2de8200
2456
2457commit 0869627e00f4ee2a038cb62d7bd9ffad405e1800
2458Author: jmc@openbsd.org <jmc@openbsd.org>
2459Date: Tue Oct 24 06:27:42 2017 +0000
2460
2461 upstream commit
2462
2463 tweak previous; ok djm
2464
2465 Upstream-ID: 7d913981ab315296be1f759c67b6e17aea38fca9
2466
2467commit e3fa20e2e58fdc88a0e842358778f2de448b771b
2468Author: Damien Miller <djm@mindrot.org>
2469Date: Mon Oct 23 16:25:24 2017 +1100
2470
2471 avoid -Wsign-compare warning in argv copying
2472
2473commit b7548b12a6b2b4abf4d057192c353147e0abba08
2474Author: djm@openbsd.org <djm@openbsd.org>
2475Date: Mon Oct 23 05:08:00 2017 +0000
2476
2477 upstream commit
2478
2479 Expose devices allocated for tun/tap forwarding.
2480
2481 At the client, the device may be obtained from a new %T expansion
2482 for LocalCommand.
2483
2484 At the server, the allocated devices will be listed in a
2485 SSH_TUNNEL variable exposed to the environment of any user sessions
2486 started after the tunnel forwarding was established.
2487
2488 ok markus
2489
2490 Upstream-ID: e61e53f8ae80566e9ddc0d67a5df5bdf2f3c9f9e
2491
2492commit 887669ef032d63cf07f53cada216fa8a0c9a7d72
2493Author: millert@openbsd.org <millert@openbsd.org>
2494Date: Sat Oct 21 23:06:24 2017 +0000
2495
2496 upstream commit
2497
2498 Add URI support to ssh, sftp and scp. For example
2499 ssh://user@host or sftp://user@host/path. The connection parameters
2500 described in draft-ietf-secsh-scp-sftp-ssh-uri-04 are not implemented since
2501 the ssh fingerprint format in the draft uses md5 with no way to specify the
2502 hash function type. OK djm@
2503
2504 Upstream-ID: 4ba3768b662d6722de59e6ecb00abf2d4bf9cacc
2505
2506commit d27bff293cfeb2252f4c7a58babe5ad3262c6c98
2507Author: Damien Miller <djm@mindrot.org>
2508Date: Fri Oct 20 13:22:00 2017 +1100
2509
2510 Fix missed RCSID merges
2511
2512commit d3b6aeb546242c9e61721225ac4387d416dd3d5e
2513Author: djm@openbsd.org <djm@openbsd.org>
2514Date: Fri Oct 20 02:13:41 2017 +0000
2515
2516 upstream commit
2517
2518 more RCSIDs
2519
2520 Upstream-Regress-ID: 1aecbe3f8224793f0ec56741a86d619830eb33be
2521
2522commit b011edbb32e41aaab01386ce4c0efcc9ff681c4a
2523Author: djm@openbsd.org <djm@openbsd.org>
2524Date: Fri Oct 20 01:56:39 2017 +0000
2525
2526 upstream commit
2527
2528 add RCSIDs to these; they make syncing portable a bit
2529 easier
2530
2531 Upstream-ID: 56cb7021faea599736dd7e7f09c2e714425b1e68
2532
2533commit 6eb27597781dccaf0ec2b80107a9f0592a0cb464
2534Author: Damien Miller <djm@mindrot.org>
2535Date: Fri Oct 20 12:54:15 2017 +1100
2536
2537 upstream commit
2538
2539 Apply missing commit 1.11 to kexc25519s.c
2540
2541 Upstream-ID: 5f020e23a1ee6c3597af1f91511e68552cdf15e8
2542
2543commit 6f72280553cb6918859ebcacc717f2d2fafc1a27
2544Author: Damien Miller <djm@mindrot.org>
2545Date: Fri Oct 20 12:52:50 2017 +1100
2546
2547 upstream commit
2548
2549 Apply missing commit 1.127 to servconf.h
2550
2551 Upstream-ID: f14c4bac74a2b7cf1e3cff6bea5c447f192a7d15
2552
2553commit bb3e16ab25cb911238c2eb7455f9cf490cb143cc
2554Author: jmc@openbsd.org <jmc@openbsd.org>
2555Date: Wed Oct 18 05:36:59 2017 +0000
2556
2557 upstream commit
2558
2559 remove unused Pp;
2560
2561 Upstream-ID: 8ad26467f1f6a40be887234085a8e01a61a00550
2562
2563commit 05b69e99570553c8e1eafb895b1fbf1d098d2e14
2564Author: djm@openbsd.org <djm@openbsd.org>
2565Date: Wed Oct 18 02:49:44 2017 +0000
2566
2567 upstream commit
2568
2569 In the description of pattern-lists, clarify negated
2570 matches by explicitly stating that a negated match will never yield a
2571 positive result, and that at least one positive term in the pattern-list must
2572 match. bz#1918
2573
2574 Upstream-ID: 652d2f9d993f158fc5f83cef4a95cd9d95ae6a14
2575
2576commit eb80e26a15c10bc65fed8b8cdb476819a713c0fd
2577Author: djm@openbsd.org <djm@openbsd.org>
2578Date: Fri Oct 13 21:13:54 2017 +0000
2579
2580 upstream commit
2581
2582 log debug messages sent to peer; ok deraadt markus
2583
2584 Upstream-ID: 3b4fdc0a06ea5083f61d96e20043000f477103d9
2585
2586commit 071325f458d615d7740da5c1c1d5a8b68a0b4605
2587Author: jmc@openbsd.org <jmc@openbsd.org>
2588Date: Fri Oct 13 16:50:45 2017 +0000
2589
2590 upstream commit
2591
2592 trim permitrootlogin description somewhat, to avoid
2593 ambiguity; original diff from walter alejandro iglesias, tweaked by sthen and
2594 myself
2595
2596 ok sthen schwarze deraadt
2597
2598 Upstream-ID: 1749418b2bc073f3fdd25fe21f8263c3637fe5d2
2599
2600commit 10727487becb897a15f658e0cb2d05466236e622
2601Author: djm@openbsd.org <djm@openbsd.org>
2602Date: Fri Oct 13 06:45:18 2017 +0000
2603
2604 upstream commit
2605
2606 mention SSH_USER_AUTH in the list of environment
2607 variables
2608
2609 Upstream-ID: 1083397c3ee54b4933121ab058c70a0fc6383691
2610
2611commit 224f193d6a4b57e7a0cb2b9ecd3b6c54d721d8c2
2612Author: djm@openbsd.org <djm@openbsd.org>
2613Date: Fri Oct 13 06:24:51 2017 +0000
2614
2615 upstream commit
2616
2617 BIO_get_mem_data() is supposed to take a char* as pointer
2618 argument, so don't pass it a const char*
2619
2620 Upstream-ID: 1ccd91eb7f4dd4f0fa812d4f956987cd00b5f6ec
2621
2622commit cfa46825b5ef7097373ed8e31b01a4538a8db565
2623Author: benno@openbsd.org <benno@openbsd.org>
2624Date: Mon Oct 9 20:12:51 2017 +0000
2625
2626 upstream commit
2627
2628 clarify the order in which config statements are used. ok
2629 jmc@ djm@
2630
2631 Upstream-ID: e37e27bb6bbac71315e22cb9690fd8a556a501ed
2632
2633commit dceabc7ad7ebc7769c8214a1647af64c9a1d92e5
2634Author: djm@openbsd.org <djm@openbsd.org>
2635Date: Thu Oct 5 15:52:03 2017 +0000
2636
2637 upstream commit
2638
2639 replace statically-sized arrays in ServerOptions with
2640 dynamic ones managed by xrecallocarray, removing some arbitrary (though
2641 large) limits and saving a bit of memory; "much nicer" markus@
2642
2643 Upstream-ID: 1732720b2f478fe929d6687ac7b0a97ff2efe9d2
2644
2645commit 2b4f3ab050c2aaf6977604dd037041372615178d
2646Author: jmc@openbsd.org <jmc@openbsd.org>
2647Date: Thu Oct 5 12:56:50 2017 +0000
2648
2649 upstream commit
2650
2651 %C is hashed; from klemens nanni ok markus
2652
2653 Upstream-ID: 6ebed7b2e1b6ee5402a67875d74f5e2859d8f998
2654
2655commit a66714508b86d6814e9055fefe362d9fe4d49ab3
2656Author: djm@openbsd.org <djm@openbsd.org>
2657Date: Wed Oct 4 18:50:23 2017 +0000
2658
2659 upstream commit
2660
2661 exercise PermitOpen a little more thoroughly
2662
2663 Upstream-Regress-ID: f41592334e227a4c1f9a983044522de4502d5eac
2664
2665commit 609ecc8e57eb88e2eac976bd3cae7f7889aaeff6
2666Author: dtucker@openbsd.org <dtucker@openbsd.org>
2667Date: Tue Sep 26 22:39:25 2017 +0000
2668
2669 upstream commit
2670
2671 UsePrivilegeSeparation is gone, stop trying to test it.
2672
2673 Upstream-Regress-ID: 796a5057cfd79456a20ea935cc53f6eb80ace191
2674
2675commit 69bda0228861f3dacd4fb3d28b60ce9d103d254b
2676Author: djm@openbsd.org <djm@openbsd.org>
2677Date: Wed Oct 4 18:49:30 2017 +0000
2678
2679 upstream commit
2680
2681 fix (another) problem in PermitOpen introduced during the
2682 channels.c refactor: the third and subsequent arguments to PermitOpen were
2683 being silently ignored; ok markus@
2684
2685 Upstream-ID: 067c89f1f53cbc381628012ba776d6861e6782fd
2686
1commit 66bf74a92131b7effe49fb0eefe5225151869dc5 2687commit 66bf74a92131b7effe49fb0eefe5225151869dc5
2Author: djm@openbsd.org <djm@openbsd.org> 2688Author: djm@openbsd.org <djm@openbsd.org>
3Date: Mon Oct 2 19:33:20 2017 +0000 2689Date: Mon Oct 2 19:33:20 2017 +0000
@@ -7110,2242 +9796,3 @@ Author: Darren Tucker <dtucker@zip.com.au>
7110Date: Mon Apr 4 11:07:59 2016 +1000 9796Date: Mon Apr 4 11:07:59 2016 +1000
7111 9797
7112 Fix configure-time warnings for openssl test. 9798 Fix configure-time warnings for openssl test.
7113
7114commit 95687f5831ae680f7959446d8ae4b52452ee05dd
7115Author: djm@openbsd.org <djm@openbsd.org>
7116Date: Fri Apr 1 02:34:10 2016 +0000
7117
7118 upstream commit
7119
7120 whitespace at EOL
7121
7122 Upstream-ID: 40ae2203d07cb14e0a89e1a0d4c6120ee8fd8c3a
7123
7124commit fdfbf4580de09d84a974211715e14f88a5704b8e
7125Author: dtucker@openbsd.org <dtucker@openbsd.org>
7126Date: Thu Mar 31 05:24:06 2016 +0000
7127
7128 upstream commit
7129
7130 Remove fallback from moduli to "primes" file that was
7131 deprecated in 2001 and fix log messages referring to primes file. Based on
7132 patch from xnox at ubuntu.com via bz#2559. "kill it" deraadt@
7133
7134 Upstream-ID: 0d4f8c70e2fa7431a83b95f8ca81033147ba8713
7135
7136commit 0235a5fa67fcac51adb564cba69011a535f86f6b
7137Author: djm@openbsd.org <djm@openbsd.org>
7138Date: Thu Mar 17 17:19:43 2016 +0000
7139
7140 upstream commit
7141
7142 UseDNS affects ssh hostname processing in authorized_keys,
7143 not known_hosts; bz#2554 reported by jjelen AT redhat.com
7144
7145 Upstream-ID: c1c1bb895dde46095fc6d81d8653703928437591
7146
7147commit 8c4739338f5e379d05b19d6e544540114965f07e
7148Author: Darren Tucker <dtucker@zip.com.au>
7149Date: Tue Mar 15 09:24:43 2016 +1100
7150
7151 Don't call Solaris setproject() with UsePAM=yes.
7152
7153 When Solaris Projects are enabled along with PAM setting the project
7154 is PAM's responsiblity. bz#2425, based on patch from
7155 brent.paulson at gmail.com.
7156
7157commit cff26f373c58457a32cb263e212cfff53fca987b
7158Author: Damien Miller <djm@mindrot.org>
7159Date: Tue Mar 15 04:30:21 2016 +1100
7160
7161 remove slogin from *.spec
7162
7163commit c38905ba391434834da86abfc988a2b8b9b62477
7164Author: djm@openbsd.org <djm@openbsd.org>
7165Date: Mon Mar 14 16:20:54 2016 +0000
7166
7167 upstream commit
7168
7169 unbreak authentication using lone certificate keys in
7170 ssh-agent: when attempting pubkey auth with a certificate, if no separate
7171 private key is found among the keys then try with the certificate key itself.
7172
7173 bz#2550 reported by Peter Moody
7174
7175 Upstream-ID: f939cd76d68e6a9a3d1711b5a943d6ed1e623966
7176
7177commit 4b4bfb01cd40b9ddb948e6026ddd287cc303d871
7178Author: djm@openbsd.org <djm@openbsd.org>
7179Date: Thu Mar 10 11:47:57 2016 +0000
7180
7181 upstream commit
7182
7183 sanitise characters destined for xauth reported by
7184 github.com/tintinweb feedback and ok deraadt and markus
7185
7186 Upstream-ID: 18ad8d0d74cbd2ea3306a16595a306ee356aa261
7187
7188commit 732b463d37221722b1206f43aa59563766a6a968
7189Author: Darren Tucker <dtucker@zip.com.au>
7190Date: Mon Mar 14 16:04:23 2016 +1100
7191
7192 Pass supported malloc options to connect-privsep.
7193
7194 This allows us to activate only the supported options during the malloc
7195 option portion of the connect-privsep test.
7196
7197commit d29c5b9b3e9f27394ca97a364ed4bb4a55a59744
7198Author: Darren Tucker <dtucker@zip.com.au>
7199Date: Mon Mar 14 09:30:58 2016 +1100
7200
7201 Remove leftover roaming.h file.
7202
7203 Pointed out by des at des.no.
7204
7205commit 8ff20ec95f4377021ed5e9b2331320f5c5a34cea
7206Author: Darren Tucker <dtucker@zip.com.au>
7207Date: Mon Mar 14 09:24:03 2016 +1100
7208
7209 Quote variables that may contain whitespace.
7210
7211 The variable $L_TMP_ID_FILE needs to be surrounded by quotes in order to
7212 survive paths containing whitespace. bz#2551, from Corinna Vinschen via
7213 Philip Hands.
7214
7215commit 627824480c01f0b24541842c7206ab9009644d02
7216Author: Darren Tucker <dtucker@zip.com.au>
7217Date: Fri Mar 11 14:47:41 2016 +1100
7218
7219 Include priv.h for priv_set_t.
7220
7221 From alex at cooperi.net.
7222
7223commit e960051f9a264f682c4d2fefbeecffcfc66b0ddf
7224Author: Darren Tucker <dtucker@zip.com.au>
7225Date: Wed Mar 9 13:14:18 2016 +1100
7226
7227 Wrap stdint.h inside #ifdef HAVE_STDINT_H.
7228
7229commit 2c48bd344d2c4b5e08dae9aea5ff44fc19a5e363
7230Author: Darren Tucker <dtucker@zip.com.au>
7231Date: Wed Mar 9 12:46:50 2016 +1100
7232
7233 Add compat to monotime_double().
7234
7235 Apply all of the portability changes in monotime() to monotime() double.
7236 Fixes build on at least older FreeBSD systems.
7237
7238commit 7b40ef6c2eef40c339f6ea8920cb8a44838e10c9
7239Author: Damien Miller <djm@mindrot.org>
7240Date: Tue Mar 8 14:12:58 2016 -0800
7241
7242 make a regress-binaries target
7243
7244 Easier to build all the regression/unit test binaries in one pass
7245 than going through all of ${REGRESS_BINARIES}
7246
7247commit c425494d6b6181beb54a1b3763ef9e944fd3c214
7248Author: Damien Miller <djm@mindrot.org>
7249Date: Tue Mar 8 14:03:54 2016 -0800
7250
7251 unbreak kexfuzz for -Werror without __bounded__
7252
7253commit 3ed9218c336607846563daea5d5ab4f701f4e042
7254Author: Damien Miller <djm@mindrot.org>
7255Date: Tue Mar 8 14:01:29 2016 -0800
7256
7257 unbreak PAM after canohost refactor
7258
7259commit 885fb2a44ff694f01e4f6470f803629e11f62961
7260Author: Darren Tucker <dtucker@zip.com.au>
7261Date: Tue Mar 8 11:58:43 2016 +1100
7262
7263 auth_get_canonical_hostname in portable code.
7264
7265 "refactor canohost.c" replaced get_canonical_hostname, this makes the
7266 same change to some portable-specific code.
7267
7268commit 95767262caa6692eff1e1565be1f5cb297949a89
7269Author: djm@openbsd.org <djm@openbsd.org>
7270Date: Mon Mar 7 19:02:43 2016 +0000
7271
7272 upstream commit
7273
7274 refactor canohost.c: move functions that cache results closer
7275 to the places that use them (authn and session code). After this, no state is
7276 cached in canohost.c
7277
7278 feedback and ok markus@
7279
7280 Upstream-ID: 5f2e4df88d4803fc8ec59ec53629105e23ce625e
7281
7282commit af0bb38ffd1f2c4f9f43b0029be2efe922815255
7283Author: Damien Miller <djm@mindrot.org>
7284Date: Fri Mar 4 15:11:55 2016 +1100
7285
7286 hook unittests/misc/kexfuzz into build
7287
7288commit 331b8e07ee5bcbdca12c11cc8f51a7e8de09b248
7289Author: dtucker@openbsd.org <dtucker@openbsd.org>
7290Date: Fri Mar 4 02:48:06 2016 +0000
7291
7292 upstream commit
7293
7294 Filter debug messages out of log before picking the last
7295 two lines. Should prevent problems if any more debug output is added late in
7296 the connection.
7297
7298 Upstream-Regress-ID: 345d0a9589c381e7d640a4ead06cfaadf4db1363
7299
7300commit 0892edaa3ce623381d3a7635544cbc69b31cf9cb
7301Author: djm@openbsd.org <djm@openbsd.org>
7302Date: Fri Mar 4 02:30:36 2016 +0000
7303
7304 upstream commit
7305
7306 add KEX fuzzer harness; ok deraadt@
7307
7308 Upstream-Regress-ID: 3df5242d30551b12b828aa9ba4a4cec0846be8d1
7309
7310commit ae2562c47d41b68dbb00240fd6dd60bed205367a
7311Author: dtucker@openbsd.org <dtucker@openbsd.org>
7312Date: Thu Mar 3 00:46:53 2016 +0000
7313
7314 upstream commit
7315
7316 Look back 3 lines for possible error messages. Changes
7317 to the code mean that "Bad packet length" errors are 3 lines back instead of
7318 the previous two, which meant we didn't skip some offsets that we intended
7319 to.
7320
7321 Upstream-Regress-ID: 24f36912740a634d509a3144ebc8eb7c09b9c684
7322
7323commit 988e429d903acfb298bfddfd75e7994327adfed0
7324Author: djm@openbsd.org <djm@openbsd.org>
7325Date: Fri Mar 4 03:35:44 2016 +0000
7326
7327 upstream commit
7328
7329 fix ClientAliveInterval when a time-based RekeyLimit is
7330 set; previously keepalive packets were not being sent. bz#2252 report and
7331 analysis by Christian Wittenhorst and Garrett Lee feedback and ok dtucker@
7332
7333 Upstream-ID: d48f9deadd35fdacdd5106b41bb07630ddd4aa81
7334
7335commit 8ef04d7a94bcdb8b0085fdd2a79a844b7d40792d
7336Author: dtucker@openbsd.org <dtucker@openbsd.org>
7337Date: Wed Mar 2 22:43:52 2016 +0000
7338
7339 upstream commit
7340
7341 Improve accuracy of reported transfer speeds by waiting
7342 for the ack from the other end. Pointed out by mmcc@, ok deraadt@ markus@
7343
7344 Upstream-ID: 99f1cf15c9a8f161086b814d414d862795ae153d
7345
7346commit b8d4eafe29684fe4f5bb587f7eab948e6ed62723
7347Author: dtucker@openbsd.org <dtucker@openbsd.org>
7348Date: Wed Mar 2 22:42:40 2016 +0000
7349
7350 upstream commit
7351
7352 Improve precision of progressmeter for sftp and scp by
7353 storing sub-second timestamps. Pointed out by mmcc@, ok deraadt@ markus@
7354
7355 Upstream-ID: 38fd83a3d83dbf81c8ff7b5d1302382fe54970ab
7356
7357commit 18f64b969c70ed00e74b9d8e50359dbe698ce4c0
7358Author: jca@openbsd.org <jca@openbsd.org>
7359Date: Mon Feb 29 20:22:36 2016 +0000
7360
7361 upstream commit
7362
7363 Print ssize_t with %zd; ok deraadt@ mmcc@
7364
7365 Upstream-ID: 0590313bbb013ff6692298c98f7e0be349d124bd
7366
7367commit 6e7f68ce38130c794ec1fb8d2a6091fbe982628d
7368Author: djm@openbsd.org <djm@openbsd.org>
7369Date: Sun Feb 28 22:27:00 2016 +0000
7370
7371 upstream commit
7372
7373 rearrange DH public value tests to be a little more clear
7374
7375 rearrange DH private value generation to explain rationale more
7376 clearly and include an extra sanity check.
7377
7378 ok deraadt
7379
7380 Upstream-ID: 9ad8a07e1a12684e1b329f9bd88941b249d4b2ad
7381
7382commit 2ed17aa34008bdfc8db674315adc425a0712be11
7383Author: Darren Tucker <dtucker@zip.com.au>
7384Date: Tue Mar 1 15:24:20 2016 +1100
7385
7386 Import updated moduli file from OpenBSD.
7387
7388 Note that 1.5k bit groups have been removed.
7389
7390commit 72b061d4ba0f909501c595d709ea76e06b01e5c9
7391Author: Darren Tucker <dtucker@zip.com.au>
7392Date: Fri Feb 26 14:40:04 2016 +1100
7393
7394 Add a note about using xlc on AIX.
7395
7396commit fd4e4f2416baa2e6565ea49d52aade296bad3e28
7397Author: Darren Tucker <dtucker@zip.com.au>
7398Date: Wed Feb 24 10:44:25 2016 +1100
7399
7400 Skip PrintLastLog in config dump mode.
7401
7402 When DISABLE_LASTLOG is set, do not try to include PrintLastLog in the
7403 config dump since it'll be reported as UNKNOWN.
7404
7405commit 99135c764fa250801da5ec3b8d06cbd0111caae8
7406Author: Damien Miller <djm@mindrot.org>
7407Date: Tue Feb 23 20:17:23 2016 +1100
7408
7409 update spec/README versions ahead of release
7410
7411commit b86a334aaaa4d1e643eb1fd71f718573d6d948b5
7412Author: Damien Miller <djm@mindrot.org>
7413Date: Tue Feb 23 20:16:53 2016 +1100
7414
7415 put back portable patchlevel to p1
7416
7417commit 555dd35ff176847e3c6bd068ba2e8db4022eb24f
7418Author: djm@openbsd.org <djm@openbsd.org>
7419Date: Tue Feb 23 09:14:34 2016 +0000
7420
7421 upstream commit
7422
7423 openssh-7.2
7424
7425 Upstream-ID: 9db776b26014147fc907ece8460ef2bcb0f11e78
7426
7427commit 1acc058d0a7913838c830ed998a1a1fb5b7864bf
7428Author: Damien Miller <djm@mindrot.org>
7429Date: Tue Feb 23 16:12:13 2016 +1100
7430
7431 Disable tests where fs perms are incorrect
7432
7433 Some tests have strict requirements on the filesystem permissions
7434 for certain files and directories. This adds a regress/check-perm
7435 tool that copies the relevant logic from sshd to exactly test
7436 the paths in question. This lets us skip tests when the local
7437 filesystem doesn't conform to our expectations rather than
7438 continuing and failing the test run.
7439
7440 ok dtucker@
7441
7442commit 39f303b1f36d934d8410b05625f25c7bcb75db4d
7443Author: Damien Miller <djm@mindrot.org>
7444Date: Tue Feb 23 12:56:59 2016 +1100
7445
7446 fix sandbox on OSX Lion
7447
7448 sshd was failing with:
7449
7450 ssh_sandbox_child: sandbox_init: dlopen(/usr/lib/libsandbox.1.dylib, 261):cw
7451 image not found [preauth]
7452
7453 caused by chroot before sandboxing. Avoid by explicitly linking libsandbox
7454 to sshd. Spotted by Darren.
7455
7456commit 0d1451a32c7436e6d3d482351e776bc5e7824ce4
7457Author: djm@openbsd.org <djm@openbsd.org>
7458Date: Tue Feb 23 01:34:14 2016 +0000
7459
7460 upstream commit
7461
7462 fix spurious error message when incorrect passphrase
7463 entered for keys; reported by espie@ ok deraadt@
7464
7465 Upstream-ID: 58b2e46e63ed6912ed1ee780bd3bd8560f9a5899
7466
7467commit 09d87d79741beb85768b5e788d7dfdf4bc3543dc
7468Author: sobrado@openbsd.org <sobrado@openbsd.org>
7469Date: Sat Feb 20 23:06:23 2016 +0000
7470
7471 upstream commit
7472
7473 set ssh(1) protocol version to 2 only.
7474
7475 ok djm@
7476
7477 Upstream-ID: e168daf9d27d7e392e3c9923826bd8e87b2b3a10
7478
7479commit 9262e07826ba5eebf8423f7ac9e47ec488c47869
7480Author: sobrado@openbsd.org <sobrado@openbsd.org>
7481Date: Sat Feb 20 23:02:39 2016 +0000
7482
7483 upstream commit
7484
7485 add missing ~/.ssh/id_ecdsa and ~/.ssh/id_ed25519 to
7486 IdentityFile.
7487
7488 ok djm@
7489
7490 Upstream-ID: 6ce99466312e4ae7708017c3665e3edb976f70cf
7491
7492commit c12f0fdce8f985fca8d71829fd64c5b89dc777f5
7493Author: sobrado@openbsd.org <sobrado@openbsd.org>
7494Date: Sat Feb 20 23:01:46 2016 +0000
7495
7496 upstream commit
7497
7498 AddressFamily defaults to any.
7499
7500 ok djm@
7501
7502 Upstream-ID: 0d94aa06a4b889bf57a7f631c45ba36d24c13e0c
7503
7504commit 907091acb188b1057d50c2158f74c3ecf1c2302b
7505Author: Darren Tucker <dtucker@zip.com.au>
7506Date: Fri Feb 19 09:05:39 2016 +1100
7507
7508 Make Solaris privs code build on older systems.
7509
7510 Not all systems with Solaris privs have priv_basicset so factor that
7511 out and provide backward compatibility code. Similarly, not all have
7512 PRIV_NET_ACCESS so wrap that in #ifdef. Based on code from
7513 alex at cooperi.net and djm@ with help from carson at taltos.org and
7514 wieland at purdue.edu.
7515
7516commit 292a8dee14e5e67dcd1b49ba5c7b9023e8420d59
7517Author: djm@openbsd.org <djm@openbsd.org>
7518Date: Wed Feb 17 22:20:14 2016 +0000
7519
7520 upstream commit
7521
7522 rekey refactor broke SSH1; spotted by Tom G. Christensen
7523
7524 Upstream-ID: 43f0d57928cc077c949af0bfa71ef574dcb58243
7525
7526commit 3a13cb543df9919aec2fc6b75f3dd3802facaeca
7527Author: djm@openbsd.org <djm@openbsd.org>
7528Date: Wed Feb 17 08:57:34 2016 +0000
7529
7530 upstream commit
7531
7532 rsa-sha2-512,rsa-sha2-256 cannot be selected explicitly
7533 in *KeyTypes options yet. Remove them from the lists of algorithms for now.
7534 committing on behalf of markus@ ok djm@
7535
7536 Upstream-ID: c6e8820eb8e610ac21551832c0c89684a9a51bb7
7537
7538commit a685ae8d1c24fb7c712c55a4f3280ee76f5f1e4b
7539Author: jmc@openbsd.org <jmc@openbsd.org>
7540Date: Wed Feb 17 07:38:19 2016 +0000
7541
7542 upstream commit
7543
7544 since these pages now clearly tell folks to avoid v1,
7545 normalise the docs from a v2 perspective (i.e. stop pointing out which bits
7546 are v2 only);
7547
7548 ok/tweaks djm ok markus
7549
7550 Upstream-ID: eb474f8c36fb6a532dc05c282f7965e38dcfa129
7551
7552commit c5c3f3279a0e4044b8de71b70d3570d692d0f29d
7553Author: djm@openbsd.org <djm@openbsd.org>
7554Date: Wed Feb 17 05:29:04 2016 +0000
7555
7556 upstream commit
7557
7558 make sandboxed privilege separation the default, not just
7559 for new installs; "absolutely" deraadt@
7560
7561 Upstream-ID: 5221ef3b927d2df044e9aa3f5db74ae91743f69b
7562
7563commit eb3f7337a651aa01d5dec019025e6cdc124ed081
7564Author: jmc@openbsd.org <jmc@openbsd.org>
7565Date: Tue Feb 16 07:47:54 2016 +0000
7566
7567 upstream commit
7568
7569 no need to state that protocol 2 is the default twice;
7570
7571 Upstream-ID: b1e4c36b0c2e12e338e5b66e2978f2ac953b95eb
7572
7573commit e7901efa9b24e5b0c7e74f2c5520d47eead4d005
7574Author: djm@openbsd.org <djm@openbsd.org>
7575Date: Tue Feb 16 05:11:04 2016 +0000
7576
7577 upstream commit
7578
7579 Replace list of ciphers and MACs adjacent to -1/-2 flag
7580 descriptions in ssh(1) with a strong recommendation not to use protocol 1.
7581 Add a similar warning to the Protocol option descriptions in ssh_config(5)
7582 and sshd_config(5);
7583
7584 prompted by and ok mmcc@
7585
7586 Upstream-ID: 961f99e5437d50e636feca023978950a232ead5e
7587
7588commit 5a0fcb77287342e2fc2ba1cee79b6af108973dc2
7589Author: djm@openbsd.org <djm@openbsd.org>
7590Date: Tue Feb 16 03:37:48 2016 +0000
7591
7592 upstream commit
7593
7594 add a "Close session" log entry (at loglevel=verbose) to
7595 correspond to the existing "Starting session" one. Also include the session
7596 id number to make multiplexed sessions more apparent.
7597
7598 feedback and ok dtucker@
7599
7600 Upstream-ID: e72d2ac080e02774376325136e532cb24c2e617c
7601
7602commit 624fd395b559820705171f460dd33d67743d13d6
7603Author: djm@openbsd.org <djm@openbsd.org>
7604Date: Wed Feb 17 02:24:17 2016 +0000
7605
7606 upstream commit
7607
7608 include bad $SSH_CONNECTION in failure output
7609
7610 Upstream-Regress-ID: b22d72edfde78c403aaec2b9c9753ef633cc0529
7611
7612commit 60d860e54b4f199e5e89963b1c086981309753cb
7613Author: Darren Tucker <dtucker@zip.com.au>
7614Date: Wed Feb 17 13:37:09 2016 +1100
7615
7616 Rollback addition of va_start.
7617
7618 va_start was added in 0f754e29dd3760fc0b172c1220f18b753fb0957e, however
7619 it has the wrong number of args and it's not usable in non-variadic
7620 functions anyway so it breaks things (for example Solaris 2.6 as
7621 reported by Tom G. Christensen).i ok djm@
7622
7623commit 2fee909c3cee2472a98b26eb82696297b81e0d38
7624Author: Darren Tucker <dtucker@zip.com.au>
7625Date: Wed Feb 17 09:48:15 2016 +1100
7626
7627 Look for gethostbyname in libresolv and libnsl.
7628
7629 Should fix build problem on Solaris 2.6 reported by Tom G. Christensen.
7630
7631commit 5ac712d81a84396aab441a272ec429af5b738302
7632Author: Damien Miller <djm@mindrot.org>
7633Date: Tue Feb 16 10:45:02 2016 +1100
7634
7635 make existing ssh_malloc_init only for __OpenBSD__
7636
7637commit 24c9bded569d9f2449ded73f92fb6d12db7a9eec
7638Author: djm@openbsd.org <djm@openbsd.org>
7639Date: Mon Feb 15 23:32:37 2016 +0000
7640
7641 upstream commit
7642
7643 memleak of algorithm name in mm_answer_sign; reported by
7644 Jakub Jelen
7645
7646 Upstream-ID: ccd742cd25952240ebd23d7d4d6b605862584d08
7647
7648commit ffb1e7e896139a42ceb78676f637658f44612411
7649Author: dtucker@openbsd.org <dtucker@openbsd.org>
7650Date: Mon Feb 15 09:47:49 2016 +0000
7651
7652 upstream commit
7653
7654 Add a function to enable security-related malloc_options.
7655 With and ok deraadt@, something similar has been in the snaps for a while.
7656
7657 Upstream-ID: 43a95523b832b7f3b943d2908662191110c380ed
7658
7659commit ef39e8c0497ff0564990a4f9e8b7338b3ba3507c
7660Author: Damien Miller <djm@mindrot.org>
7661Date: Tue Feb 16 10:34:39 2016 +1100
7662
7663 sync ssh-copy-id with upstream 783ef08b0a75
7664
7665commit d2d772f55b19bb0e8d03c2fe1b9bb176d9779efd
7666Author: djm@openbsd.org <djm@openbsd.org>
7667Date: Fri Feb 12 00:20:30 2016 +0000
7668
7669 upstream commit
7670
7671 avoid fatal() for PKCS11 tokens that present empty key IDs
7672 bz#1773, ok markus@
7673
7674 Upstream-ID: 044a764fee526f2c4a9d530bd10695422d01fc54
7675
7676commit e4c918a6c721410792b287c9fd21356a1bed5805
7677Author: djm@openbsd.org <djm@openbsd.org>
7678Date: Thu Feb 11 02:56:32 2016 +0000
7679
7680 upstream commit
7681
7682 sync crypto algorithm lists in ssh_config(5) and
7683 sshd_config(5) with current reality. bz#2527
7684
7685 Upstream-ID: d7fd1b6c1ed848d866236bcb1d7049d2bb9b2ff6
7686
7687commit e30cabfa4ab456a30b3224f7f545f1bdfc4a2517
7688Author: djm@openbsd.org <djm@openbsd.org>
7689Date: Thu Feb 11 02:21:34 2016 +0000
7690
7691 upstream commit
7692
7693 fix regression in openssh-6.8 sftp client: existing
7694 destination directories would incorrectly terminate recursive uploads;
7695 bz#2528
7696
7697 Upstream-ID: 3306be469f41f26758e3d447987ac6d662623e18
7698
7699commit 714e367226ded4dc3897078be48b961637350b05
7700Author: djm@openbsd.org <djm@openbsd.org>
7701Date: Tue Feb 9 05:30:04 2016 +0000
7702
7703 upstream commit
7704
7705 turn off more old crypto in the client: hmac-md5, ripemd,
7706 truncated HMACs, RC4, blowfish. ok markus@ dtucker@
7707
7708 Upstream-ID: 96aa11c2c082be45267a690c12f1d2aae6acd46e
7709
7710commit 5a622844ff7f78dcb75e223399f9ef0977e8d0a3
7711Author: djm@openbsd.org <djm@openbsd.org>
7712Date: Mon Feb 8 23:40:12 2016 +0000
7713
7714 upstream commit
7715
7716 don't attempt to percent_expand() already-canonicalised
7717 addresses, avoiding unnecessary failures when attempting to connect to scoped
7718 IPv6 addresses (that naturally contain '%' characters)
7719
7720 Upstream-ID: f24569cffa1a7cbde5f08dc739a72f4d78aa5c6a
7721
7722commit 19bcf2ea2d17413f2d9730dd2a19575ff86b9b6a
7723Author: djm@openbsd.org <djm@openbsd.org>
7724Date: Mon Feb 8 10:57:07 2016 +0000
7725
7726 upstream commit
7727
7728 refactor activation of rekeying
7729
7730 This makes automatic rekeying internal to the packet code (previously
7731 the server and client loops needed to assist). In doing to it makes
7732 application of rekey limits more accurate by accounting for packets
7733 about to be sent as well as packets queued during rekeying events
7734 themselves.
7735
7736 Based on a patch from dtucker@ which was in turn based on a patch
7737 Aleksander Adamowski in bz#2521; ok markus@
7738
7739 Upstream-ID: a441227fd64f9739850ca97b4cf794202860fcd8
7740
7741commit 603ba41179e4b53951c7b90ee95b6ef3faa3f15d
7742Author: naddy@openbsd.org <naddy@openbsd.org>
7743Date: Fri Feb 5 13:28:19 2016 +0000
7744
7745 upstream commit
7746
7747 Only check errno if read() has returned an error. EOF is
7748 not an error. This fixes a problem where the mux master would sporadically
7749 fail to notice that the client had exited. ok mikeb@ djm@
7750
7751 Upstream-ID: 3c2dadc21fac6ef64665688aac8a75fffd57ae53
7752
7753commit 56d7dac790693ce420d225119283bc355cff9185
7754Author: jsg@openbsd.org <jsg@openbsd.org>
7755Date: Fri Feb 5 04:31:21 2016 +0000
7756
7757 upstream commit
7758
7759 avoid an uninitialised value when NumberOfPasswordPrompts
7760 is 0 ok markus@ djm@
7761
7762 Upstream-ID: 11b068d83c2865343aeb46acf1e9eec00f829b6b
7763
7764commit deae7d52d59c5019c528f977360d87fdda15d20b
7765Author: djm@openbsd.org <djm@openbsd.org>
7766Date: Fri Feb 5 03:07:06 2016 +0000
7767
7768 upstream commit
7769
7770 mention internal DH-GEX fallback groups; bz#2302
7771
7772 Upstream-ID: e7b395fcca3122cd825515f45a2e41c9a157e09e
7773
7774commit cac3b6665f884d46192c0dc98a64112e8b11a766
7775Author: djm@openbsd.org <djm@openbsd.org>
7776Date: Fri Feb 5 02:37:56 2016 +0000
7777
7778 upstream commit
7779
7780 better description for MaxSessions; bz#2531
7781
7782 Upstream-ID: e2c0d74ee185cd1a3e9d4ca1f1b939b745b354da
7783
7784commit 5ef4b0fdcc7a239577a754829b50022b91ab4712
7785Author: Damien Miller <djm@mindrot.org>
7786Date: Wed Jan 27 17:45:56 2016 +1100
7787
7788 avoid FreeBSD RCS Id in comment
7789
7790 Change old $FreeBSD version string in comment so it doesn't
7791 become an RCS ident downstream; requested by des AT des.no
7792
7793commit 696d12683c90d20a0a9c5f4275fc916b7011fb04
7794Author: djm@openbsd.org <djm@openbsd.org>
7795Date: Thu Feb 4 23:43:48 2016 +0000
7796
7797 upstream commit
7798
7799 printf argument casts to avoid warnings on strict
7800 compilers
7801
7802 Upstream-ID: 7b9f6712cef01865ad29070262d366cf13587c9c
7803
7804commit 5658ef2501e785fbbdf5de2dc33b1ff7a4dca73a
7805Author: millert@openbsd.org <millert@openbsd.org>
7806Date: Mon Feb 1 21:18:17 2016 +0000
7807
7808 upstream commit
7809
7810 Avoid ugly "DISPLAY "(null)" invalid; disabling X11
7811 forwarding" message when DISPLAY is not set. This could also result in a
7812 crash on systems with a printf that doesn't handle NULL. OK djm@
7813
7814 Upstream-ID: 20ee0cfbda678a247264c20ed75362042b90b412
7815
7816commit 537f88ec7bcf40bd444ac5584c707c5588c55c43
7817Author: dtucker@openbsd.org <dtucker@openbsd.org>
7818Date: Fri Jan 29 05:18:15 2016 +0000
7819
7820 upstream commit
7821
7822 Add regression test for RekeyLimit parsing of >32bit values
7823 (4G and 8G).
7824
7825 Upstream-Regress-ID: 548390350c62747b6234f522a99c319eee401328
7826
7827commit 4c6cb8330460f94e6c7ae28a364236d4188156a3
7828Author: dtucker@openbsd.org <dtucker@openbsd.org>
7829Date: Fri Jan 29 23:04:46 2016 +0000
7830
7831 upstream commit
7832
7833 Remove leftover roaming dead code. ok djm markus.
7834
7835 Upstream-ID: 13d1f9c8b65a5109756bcfd3b74df949d53615be
7836
7837commit 28136471809806d6246ef41e4341467a39fe2f91
7838Author: djm@openbsd.org <djm@openbsd.org>
7839Date: Fri Jan 29 05:46:01 2016 +0000
7840
7841 upstream commit
7842
7843 include packet type of non-data packets in debug3 output;
7844 ok markus dtucker
7845
7846 Upstream-ID: 034eaf639acc96459b9c5ce782db9fcd8bd02d41
7847
7848commit 6fd6e28daccafaa35f02741036abe64534c361a1
7849Author: dtucker@openbsd.org <dtucker@openbsd.org>
7850Date: Fri Jan 29 03:31:03 2016 +0000
7851
7852 upstream commit
7853
7854 Revert "account for packets buffered but not yet
7855 processed" change as it breaks for very small RekeyLimit values due to
7856 continuous rekeying. ok djm@
7857
7858 Upstream-ID: 7e03f636cb45ab60db18850236ccf19079182a19
7859
7860commit 921ff00b0ac429666fb361d2d6cb1c8fff0006cb
7861Author: dtucker@openbsd.org <dtucker@openbsd.org>
7862Date: Fri Jan 29 02:54:45 2016 +0000
7863
7864 upstream commit
7865
7866 Allow RekeyLimits in excess of 4G up to 2**63 bits
7867 (limited by the return type of scan_scaled). Part of bz#2521, ok djm.
7868
7869 Upstream-ID: 13bea82be566b9704821b1ea05bf7804335c7979
7870
7871commit c0060a65296f01d4634f274eee184c0e93ba0f23
7872Author: dtucker@openbsd.org <dtucker@openbsd.org>
7873Date: Fri Jan 29 02:42:46 2016 +0000
7874
7875 upstream commit
7876
7877 Account for packets buffered but not yet processed when
7878 computing whether or not it is time to perform rekeying. bz#2521, based
7879 loosely on a patch from olo at fb.com, ok djm@
7880
7881 Upstream-ID: 67e268b547f990ed220f3cb70a5624d9bda12b8c
7882
7883commit 44cf930e670488c85c9efeb373fa5f4b455692ac
7884Author: djm@openbsd.org <djm@openbsd.org>
7885Date: Wed Jan 27 06:44:58 2016 +0000
7886
7887 upstream commit
7888
7889 change old $FreeBSD version string in comment so it doesn't
7890 become an RCS ident downstream; requested by des AT des.no
7891
7892 Upstream-ID: 8ca558c01f184e596b45e4fc8885534b2c864722
7893
7894commit ebacd377769ac07d1bf3c75169644336056b7060
7895Author: djm@openbsd.org <djm@openbsd.org>
7896Date: Wed Jan 27 00:53:12 2016 +0000
7897
7898 upstream commit
7899
7900 make the debug messages a bit more useful here
7901
7902 Upstream-ID: 478ccd4e897e0af8486b294aa63aa3f90ab78d64
7903
7904commit 458abc2934e82034c5c281336d8dc0f910aecad3
7905Author: jsg@openbsd.org <jsg@openbsd.org>
7906Date: Sat Jan 23 05:31:35 2016 +0000
7907
7908 upstream commit
7909
7910 Zero a stack buffer with explicit_bzero() instead of
7911 memset() when returning from client_loop() for consistency with
7912 buffer_free()/sshbuf_free().
7913
7914 ok dtucker@ deraadt@ djm@
7915
7916 Upstream-ID: bc9975b2095339811c3b954694d7d15ea5c58f66
7917
7918commit 65a3c0dacbc7dbb75ddb6a70ebe22d8de084d0b0
7919Author: dtucker@openbsd.org <dtucker@openbsd.org>
7920Date: Wed Jan 20 09:22:39 2016 +0000
7921
7922 upstream commit
7923
7924 Include sys/time.h for gettimeofday. From sortie at
7925 maxsi.org.
7926
7927 Upstream-ID: 6ed0c33b836d9de0a664cd091e86523ecaa2fb3b
7928
7929commit fc77ccdc2ce6d5d06628b8da5048a6a5f6ffca5a
7930Author: markus@openbsd.org <markus@openbsd.org>
7931Date: Thu Jan 14 22:56:56 2016 +0000
7932
7933 upstream commit
7934
7935 fd leaks; report Qualys Security Advisory team; ok
7936 deraadt@
7937
7938 Upstream-ID: 4ec0f12b9d8fa202293c9effa115464185aa071d
7939
7940commit a306863831c57ec5fad918687cc5d289ee8e2635
7941Author: markus@openbsd.org <markus@openbsd.org>
7942Date: Thu Jan 14 16:17:39 2016 +0000
7943
7944 upstream commit
7945
7946 remove roaming support; ok djm@
7947
7948 Upstream-ID: 2cab8f4b197bc95776fb1c8dc2859dad0c64dc56
7949
7950commit 6ef49e83e30688504552ac10875feabd5521565f
7951Author: deraadt@openbsd.org <deraadt@openbsd.org>
7952Date: Thu Jan 14 14:34:34 2016 +0000
7953
7954 upstream commit
7955
7956 Disable experimental client-side roaming support. Server
7957 side was disabled/gutted for years already, but this aspect was surprisingly
7958 forgotten. Thanks for report from Qualys
7959
7960 Upstream-ID: 2328004b58f431a554d4c1bf67f5407eae3389df
7961
7962commit 8d7b523b96d3be180572d9d338cedaafc0570f60
7963Author: Damien Miller <djm@mindrot.org>
7964Date: Thu Jan 14 11:08:19 2016 +1100
7965
7966 bump version numbers
7967
7968commit 8c3d512a1fac8b9c83b4d0c9c3f2376290bd84ca
7969Author: Damien Miller <djm@mindrot.org>
7970Date: Thu Jan 14 11:04:04 2016 +1100
7971
7972 openssh-7.1p2
7973
7974commit e6c85f8889c5c9eb04796fdb76d2807636b9eef5
7975Author: Damien Miller <djm@mindrot.org>
7976Date: Fri Jan 15 01:30:36 2016 +1100
7977
7978 forcibly disable roaming support in the client
7979
7980commit ed4ce82dbfa8a3a3c8ea6fa0db113c71e234416c
7981Author: djm@openbsd.org <djm@openbsd.org>
7982Date: Wed Jan 13 23:04:47 2016 +0000
7983
7984 upstream commit
7985
7986 eliminate fallback from untrusted X11 forwarding to trusted
7987 forwarding when the X server disables the SECURITY extension; Reported by
7988 Thomas Hoger; ok deraadt@
7989
7990 Upstream-ID: f76195bd2064615a63ef9674a0e4096b0713f938
7991
7992commit 9a728cc918fad67c8a9a71201088b1e150340ba4
7993Author: djm@openbsd.org <djm@openbsd.org>
7994Date: Tue Jan 12 23:42:54 2016 +0000
7995
7996 upstream commit
7997
7998 use explicit_bzero() more liberally in the buffer code; ok
7999 deraadt
8000
8001 Upstream-ID: 0ece37069fd66bc6e4f55eb1321f93df372b65bf
8002
8003commit 4626cbaf78767fc8e9c86dd04785386c59ae0839
8004Author: Damien Miller <djm@mindrot.org>
8005Date: Fri Jan 8 14:24:56 2016 +1100
8006
8007 Support Illumos/Solaris fine-grained privileges
8008
8009 Includes a pre-auth privsep sandbox and several pledge()
8010 emulations. bz#2511, patch by Alex Wilson.
8011
8012 ok dtucker@
8013
8014commit 422d1b3ee977ff4c724b597fb2e437d38fc8de9d
8015Author: djm@openbsd.org <djm@openbsd.org>
8016Date: Thu Dec 31 00:33:52 2015 +0000
8017
8018 upstream commit
8019
8020 fix three bugs in KRL code related to (unused) signature
8021 support: verification length was being incorrectly calculated, multiple
8022 signatures were being incorrectly processed and a NULL dereference that
8023 occurred when signatures were verified. Reported by Carl Jackson
8024
8025 Upstream-ID: e705e97ad3ccce84291eaa651708dd1b9692576b
8026
8027commit 6074c84bf95d00f29cc7d5d3cd3798737851aa1a
8028Author: djm@openbsd.org <djm@openbsd.org>
8029Date: Wed Dec 30 23:46:14 2015 +0000
8030
8031 upstream commit
8032
8033 unused prototype
8034
8035 Upstream-ID: f3eef4389d53ed6c0d5c77dcdcca3060c745da97
8036
8037commit 6213f0e180e54122bb1ba928e11c784e2b4e5380
8038Author: guenther@openbsd.org <guenther@openbsd.org>
8039Date: Sat Dec 26 20:51:35 2015 +0000
8040
8041 upstream commit
8042
8043 Use pread/pwrite instead separate lseek+read/write for
8044 lastlog. Cast to off_t before multiplication to avoid truncation on ILP32
8045
8046 ok kettenis@ mmcc@
8047
8048 Upstream-ID: fc40092568cd195719ddf1a00aa0742340d616cf
8049
8050commit d7d2bc95045a43dd56ea696cc1d030ac9d77e81f
8051Author: semarie@openbsd.org <semarie@openbsd.org>
8052Date: Sat Dec 26 07:46:03 2015 +0000
8053
8054 upstream commit
8055
8056 adjust pledge promises for ControlMaster: when using
8057 "ask" or "autoask", the process will use ssh-askpass for asking confirmation.
8058
8059 problem found by halex@
8060
8061 ok halex@
8062
8063 Upstream-ID: 38a58b30ae3eef85051c74d3c247216ec0735f80
8064
8065commit 271df8185d9689b3fb0523f58514481b858f6843
8066Author: djm@openbsd.org <djm@openbsd.org>
8067Date: Sun Dec 13 22:42:23 2015 +0000
8068
8069 upstream commit
8070
8071 unbreak connections with peers that set
8072 first_kex_follows; fix from Matt Johnston va bz#2515
8073
8074 Upstream-ID: decc88ec4fc7515594fdb42b04aa03189a44184b
8075
8076commit 43849a47c5f8687699eafbcb5604f6b9c395179f
8077Author: doug@openbsd.org <doug@openbsd.org>
8078Date: Fri Dec 11 17:41:37 2015 +0000
8079
8080 upstream commit
8081
8082 Add "id" to ssh-agent pledge for subprocess support.
8083
8084 Found the hard way by Jan Johansson when using ssh-agent with X. Also,
8085 rearranged proc/exec and retval to match other pledge calls in the tree.
8086
8087 ok djm@
8088
8089 Upstream-ID: 914255f6850e5e7fa830a2de6c38605333b584db
8090
8091commit 52d7078421844b2f88329f5be3de370b0a938636
8092Author: mmcc@openbsd.org <mmcc@openbsd.org>
8093Date: Fri Dec 11 04:21:11 2015 +0000
8094
8095 upstream commit
8096
8097 Remove NULL-checks before sshbuf_free().
8098
8099 ok djm@
8100
8101 Upstream-ID: 5ebed00ed5f9f03b119a345085e8774565466917
8102
8103commit a4b9e0f4e4a6980a0eb8072f76ea611cab5b77e7
8104Author: djm@openbsd.org <djm@openbsd.org>
8105Date: Fri Dec 11 03:24:25 2015 +0000
8106
8107 upstream commit
8108
8109 include remote port number in a few more messages; makes
8110 tying log messages together into a session a bit easier; bz#2503 ok dtucker@
8111
8112 Upstream-ID: 9300dc354015f7a7368d94a8ff4a4266a69d237e
8113
8114commit 6091c362e89079397e68744ae30df121b0a72c07
8115Author: djm@openbsd.org <djm@openbsd.org>
8116Date: Fri Dec 11 03:20:09 2015 +0000
8117
8118 upstream commit
8119
8120 don't try to load SSHv1 private key when compiled without
8121 SSHv1 support. From Iain Morgan bz#2505
8122
8123 Upstream-ID: 8b8e7b02a448cf5e5635979df2d83028f58868a7
8124
8125commit cce6a36bb95e81fa8bfb46daf22eabcf13afc352
8126Author: djm@openbsd.org <djm@openbsd.org>
8127Date: Fri Dec 11 03:19:09 2015 +0000
8128
8129 upstream commit
8130
8131 use SSH_MAX_PUBKEY_BYTES consistently as buffer size when
8132 reading key files. Increase it to match the size of the buffers already being
8133 used.
8134
8135 Upstream-ID: 1b60586b484b55a947d99a0b32bd25e0ced56fae
8136
8137commit 89540b6de025b80404a0cb8418c06377f3f98848
8138Author: mmcc@openbsd.org <mmcc@openbsd.org>
8139Date: Fri Dec 11 02:31:47 2015 +0000
8140
8141 upstream commit
8142
8143 Remove NULL-checks before sshkey_free().
8144
8145 ok djm@
8146
8147 Upstream-ID: 3e35afe8a25e021216696b5d6cde7f5d2e5e3f52
8148
8149commit 79394ed6d74572c2d2643d73937dad33727fc240
8150Author: dtucker@openbsd.org <dtucker@openbsd.org>
8151Date: Fri Dec 11 02:29:03 2015 +0000
8152
8153 upstream commit
8154
8155 fflush stdout so that output is seen even when running in
8156 debug mode when output may otherwise not be flushed. Patch from dustin at
8157 null-ptr.net.
8158
8159 Upstream-ID: b0c6b4cd2cdb01d7e9eefbffdc522e35b5bc4acc
8160
8161commit ee607cccb6636eb543282ba90e0677b0604d8b7a
8162Author: Darren Tucker <dtucker@zip.com.au>
8163Date: Tue Dec 15 15:23:49 2015 +1100
8164
8165 Increase robustness of redhat/openssh.spec
8166
8167 - remove configure --with-rsh, because this option isn't supported anymore
8168 - replace last occurrence of BuildPreReq by BuildRequires
8169 - update grep statement to query the krb5 include directory
8170
8171 Patch from CarstenGrohmann via github, ok djm.
8172
8173commit b5fa0cd73555b991a543145603658d7088ec6b60
8174Author: Darren Tucker <dtucker@zip.com.au>
8175Date: Tue Dec 15 15:10:32 2015 +1100
8176
8177 Allow --without-ssl-engine with --without-openssl
8178
8179 Patch from Mike Frysinger via github.
8180
8181commit c1d7e546f6029024f3257cc25c92f2bddf163125
8182Author: Darren Tucker <dtucker@zip.com.au>
8183Date: Tue Dec 15 14:27:09 2015 +1100
8184
8185 Include openssl crypto.h for SSLeay.
8186
8187 Patch from doughdemon via github.
8188
8189commit c6f5f01651526e88c00d988ce59d71f481ebac62
8190Author: Darren Tucker <dtucker@zip.com.au>
8191Date: Tue Dec 15 13:59:12 2015 +1100
8192
8193 Add sys/time.h for gettimeofday.
8194
8195 Should allow it it compile with MUSL libc. Based on patch from
8196 doughdemon via github.
8197
8198commit 39736be06c7498ef57d6970f2d85cf066ae57c82
8199Author: djm@openbsd.org <djm@openbsd.org>
8200Date: Fri Dec 11 02:20:28 2015 +0000
8201
8202 upstream commit
8203
8204 correct error messages; from Tomas Kuthan bz#2507
8205
8206 Upstream-ID: 7454a0affeab772398052954c79300aa82077093
8207
8208commit 94141b7ade24afceeb6762a3f99e09e47a6c42b6
8209Author: mmcc@openbsd.org <mmcc@openbsd.org>
8210Date: Fri Dec 11 00:20:04 2015 +0000
8211
8212 upstream commit
8213
8214 Pass (char *)NULL rather than (char *)0 to execl and
8215 execlp.
8216
8217 ok dtucker@
8218
8219 Upstream-ID: 56c955106cbddba86c3dd9bbf786ac0d1b361492
8220
8221commit d59ce08811bf94111c2f442184cf7d1257ffae24
8222Author: mmcc@openbsd.org <mmcc@openbsd.org>
8223Date: Thu Dec 10 17:08:40 2015 +0000
8224
8225 upstream commit
8226
8227 Remove NULL-checks before free().
8228
8229 ok dtucker@
8230
8231 Upstream-ID: e3d3cb1ce900179906af36517b5eea0fb15e6ef8
8232
8233commit 8e56dd46cb37879c73bce2d6032cf5e7f82d5a71
8234Author: mmcc@openbsd.org <mmcc@openbsd.org>
8235Date: Thu Dec 10 07:01:35 2015 +0000
8236
8237 upstream commit
8238
8239 Fix a couple "the the" typos. ok dtucker@
8240
8241 Upstream-ID: ec364c5af32031f013001fd28d1bd3dfacfe9a72
8242
8243commit 6262a0522ddc2c0f2e9358dcb68d59b46e9c533e
8244Author: markus@openbsd.org <markus@openbsd.org>
8245Date: Mon Dec 7 20:04:09 2015 +0000
8246
8247 upstream commit
8248
8249 stricter encoding type checks for ssh-rsa; ok djm@
8250
8251 Upstream-ID: 8cca7c787599a5e8391e184d0b4f36fdc3665650
8252
8253commit d86a3ba7af160c13496102aed861ae48a4297072
8254Author: Damien Miller <djm@mindrot.org>
8255Date: Wed Dec 9 09:18:45 2015 +1100
8256
8257 Don't set IPV6_V6ONLY on OpenBSD
8258
8259 It isn't necessary and runs afoul of pledge(2) restrictions.
8260
8261commit da98c11d03d819a15429d8fff9688acd7505439f
8262Author: djm@openbsd.org <djm@openbsd.org>
8263Date: Mon Dec 7 02:20:46 2015 +0000
8264
8265 upstream commit
8266
8267 basic unit tests for rsa-sha2-* signature types
8268
8269 Upstream-Regress-ID: 7dc4b9db809d578ff104d591b4d86560c3598d3c
8270
8271commit 3da893fdec9936dd2c23739cdb3c0c9d4c59fca0
8272Author: markus@openbsd.org <markus@openbsd.org>
8273Date: Sat Dec 5 20:53:21 2015 +0000
8274
8275 upstream commit
8276
8277 prefer rsa-sha2-512 over -256 for hostkeys, too; noticed
8278 by naddy@
8279
8280 Upstream-ID: 685f55f7ec566a8caca587750672723a0faf3ffe
8281
8282commit 8b56e59714d87181505e4678f0d6d39955caf10e
8283Author: tobias@openbsd.org <tobias@openbsd.org>
8284Date: Fri Dec 4 21:51:06 2015 +0000
8285
8286 upstream commit
8287
8288 Properly handle invalid %-format by calling fatal.
8289
8290 ok deraadt, djm
8291
8292 Upstream-ID: 5692bce7d9f6eaa9c488cb93d3b55e758bef1eac
8293
8294commit 76c9fbbe35aabc1db977fb78e827644345e9442e
8295Author: markus@openbsd.org <markus@openbsd.org>
8296Date: Fri Dec 4 16:41:28 2015 +0000
8297
8298 upstream commit
8299
8300 implement SHA2-{256,512} for RSASSA-PKCS1-v1_5 signatures
8301 (user and host auth) based on draft-rsa-dsa-sha2-256-03.txt and
8302 draft-ssh-ext-info-04.txt; with & ok djm@
8303
8304 Upstream-ID: cf82ce532b2733e5c4b34bb7b7c94835632db309
8305
8306commit 6064a8b8295cb5a17b5ebcfade53053377714f40
8307Author: djm@openbsd.org <djm@openbsd.org>
8308Date: Fri Dec 4 00:24:55 2015 +0000
8309
8310 upstream commit
8311
8312 clean up agent_fd handling; properly initialise it to -1
8313 and make tests consistent
8314
8315 ok markus@
8316
8317 Upstream-ID: ac9554323d5065745caf17b5e37cb0f0d4825707
8318
8319commit b91926a97620f3e51761c271ba57aa5db790f48d
8320Author: semarie@openbsd.org <semarie@openbsd.org>
8321Date: Thu Dec 3 17:00:18 2015 +0000
8322
8323 upstream commit
8324
8325 pledges ssh client: - mux client: which is used when
8326 ControlMaster is in use. will end with "stdio proc tty" (proc is to
8327 permit sending SIGWINCH to mux master on window resize)
8328
8329 - client loop: several levels of pledging depending of your used options
8330
8331 ok deraadt@
8332
8333 Upstream-ID: 21676155a700e51f2ce911e33538e92a2cd1d94b
8334
8335commit bcce47466bbc974636f588b5e4a9a18ae386f64a
8336Author: doug@openbsd.org <doug@openbsd.org>
8337Date: Wed Dec 2 08:30:50 2015 +0000
8338
8339 upstream commit
8340
8341 Add "cpath" to the ssh-agent pledge so the cleanup
8342 handler can unlink().
8343
8344 ok djm@
8345
8346 Upstream-ID: 9e632991d48241d56db645602d381253a3d8c29d
8347
8348commit a90d001543f46716b6590c6dcc681d5f5322f8cf
8349Author: djm@openbsd.org <djm@openbsd.org>
8350Date: Wed Dec 2 08:00:58 2015 +0000
8351
8352 upstream commit
8353
8354 ssh-agent pledge needs proc for askpass; spotted by todd@
8355
8356 Upstream-ID: 349aa261b29cc0e7de47ef56167769c432630b2a
8357
8358commit d952162b3c158a8f23220587bb6c8fcda75da551
8359Author: djm@openbsd.org <djm@openbsd.org>
8360Date: Tue Dec 1 23:29:24 2015 +0000
8361
8362 upstream commit
8363
8364 basic pledge() for ssh-agent, more refinement needed
8365
8366 Upstream-ID: 5b5b03c88162fce549e45e1b6dd833f20bbb5e13
8367
8368commit f0191d7c8e76e30551084b79341886d9bb38e453
8369Author: Damien Miller <djm@mindrot.org>
8370Date: Mon Nov 30 10:53:25 2015 +1100
8371
8372 Revert "stub for pledge(2) for systems that lack it"
8373
8374 This reverts commit 14c887c8393adde2d9fd437d498be30f8c98535c.
8375
8376 dtucker beat me to it :/
8377
8378commit 6283cc72eb0e49a3470d30e07ca99a1ba9e89676
8379Author: Damien Miller <djm@mindrot.org>
8380Date: Mon Nov 30 10:37:03 2015 +1100
8381
8382 revert 7d4c7513: bring back S/Key prototypes
8383
8384 (but leave RCSID changes)
8385
8386commit 14c887c8393adde2d9fd437d498be30f8c98535c
8387Author: Damien Miller <djm@mindrot.org>
8388Date: Mon Nov 30 09:45:29 2015 +1100
8389
8390 stub for pledge(2) for systems that lack it
8391
8392commit 452c0b6af5d14c37553e30059bf74456012493f3
8393Author: djm@openbsd.org <djm@openbsd.org>
8394Date: Sun Nov 29 22:18:37 2015 +0000
8395
8396 upstream commit
8397
8398 pledge, better fatal() messages; feedback deraadt@
8399
8400 Upstream-ID: 3e00f6ccfe2b9a7a2d1dbba5409586180801488f
8401
8402commit 6da413c085dba37127687b2617a415602505729b
8403Author: deraadt@openbsd.org <deraadt@openbsd.org>
8404Date: Sat Nov 28 06:50:52 2015 +0000
8405
8406 upstream commit
8407
8408 do not leak temp file if there is no known_hosts file
8409 from craig leres, ok djm
8410
8411 Upstream-ID: c820497fd5574844c782e79405c55860f170e426
8412
8413commit 3ddd15e1b63a4d4f06c8ab16fbdd8a5a61764f16
8414Author: Darren Tucker <dtucker@zip.com.au>
8415Date: Mon Nov 30 07:23:53 2015 +1100
8416
8417 Add a null implementation of pledge.
8418
8419 Fixes builds on almost everything.
8420
8421commit b1d6b3971ef256a08692efc409fc9ada719111cc
8422Author: djm@openbsd.org <djm@openbsd.org>
8423Date: Sat Nov 28 06:41:03 2015 +0000
8424
8425 upstream commit
8426
8427 don't include port number in tcpip-forward replies for
8428 requests that don't allocate a port; bz#2509 diagnosed by Ron Frederick ok
8429 markus
8430
8431 Upstream-ID: 77efad818addb61ec638b5a2362f1554e21a970a
8432
8433commit 9080bd0b9cf10d0f13b1f642f20cb84285cb8d65
8434Author: deraadt@openbsd.org <deraadt@openbsd.org>
8435Date: Fri Nov 27 00:49:31 2015 +0000
8436
8437 upstream commit
8438
8439 pledge "stdio rpath wpath cpath fattr tty proc exec"
8440 except for the -p option (which sadly has insane semantics...) ok semarie
8441 dtucker
8442
8443 Upstream-ID: 8854bbd58279abe00f6c33f8094bdc02c8c65059
8444
8445commit 4d90625b229cf6b3551d81550a9861897509a65f
8446Author: halex@openbsd.org <halex@openbsd.org>
8447Date: Fri Nov 20 23:04:01 2015 +0000
8448
8449 upstream commit
8450
8451 allow comment change for all supported formats
8452
8453 ok djm@
8454
8455 Upstream-ID: 5fc477cf2f119b2d44aa9c683af16cb00bb3744b
8456
8457commit 8ca915fc761519dd1f7766a550ec597a81db5646
8458Author: djm@openbsd.org <djm@openbsd.org>
8459Date: Fri Nov 20 01:45:29 2015 +0000
8460
8461 upstream commit
8462
8463 add cast to make -Werror clean
8464
8465 Upstream-ID: 288db4f8f810bd475be01320c198250a04ff064d
8466
8467commit ac9473580dcd401f8281305af98635cdaae9bf96
8468Author: Damien Miller <djm@mindrot.org>
8469Date: Fri Nov 20 12:35:41 2015 +1100
8470
8471 fix multiple authentication using S/Key w/ privsep
8472
8473 bz#2502, patch from Kevin Korb and feandil_
8474
8475commit 88b6fcdeb87a2fb76767854d9eb15006662dca57
8476Author: djm@openbsd.org <djm@openbsd.org>
8477Date: Thu Nov 19 08:23:27 2015 +0000
8478
8479 upstream commit
8480
8481 ban ConnectionAttempts=0, it makes no sense and would cause
8482 ssh_connect_direct() to print an uninitialised stack variable; bz#2500
8483 reported by dvw AT phas.ubc.ca
8484
8485 Upstream-ID: 32b5134c608270583a90b93a07b3feb3cbd5f7d5
8486
8487commit 964ab3ee7a8f96bdbc963d5b5a91933d6045ebe7
8488Author: djm@openbsd.org <djm@openbsd.org>
8489Date: Thu Nov 19 01:12:32 2015 +0000
8490
8491 upstream commit
8492
8493 trailing whitespace
8494
8495 Upstream-ID: 31fe0ad7c4d08e87f1d69c79372f5e3c5cd79051
8496
8497commit f96516d052dbe38561f6b92b0e4365d8e24bb686
8498Author: djm@openbsd.org <djm@openbsd.org>
8499Date: Thu Nov 19 01:09:38 2015 +0000
8500
8501 upstream commit
8502
8503 print host certificate contents at debug level
8504
8505 Upstream-ID: 39354cdd8a2b32b308fd03f98645f877f540f00d
8506
8507commit 499cf36fecd6040e30e2912dd25655bc574739a7
8508Author: djm@openbsd.org <djm@openbsd.org>
8509Date: Thu Nov 19 01:08:55 2015 +0000
8510
8511 upstream commit
8512
8513 move the certificate validity formatting code to
8514 sshkey.[ch]
8515
8516 Upstream-ID: f05f7c78fab20d02ff1d5ceeda533ef52e8fe523
8517
8518commit bcb7bc77bbb1535d1008c7714085556f3065d99d
8519Author: djm@openbsd.org <djm@openbsd.org>
8520Date: Wed Nov 18 08:37:28 2015 +0000
8521
8522 upstream commit
8523
8524 fix "ssh-keygen -l" of private key, broken in support for
8525 multiple plain keys on stdin
8526
8527 Upstream-ID: 6b3132d2c62d03d0bad6f2bcd7e2d8b7dab5cd9d
8528
8529commit 259adb6179e23195c8f6913635ea71040d1ccd63
8530Author: millert@openbsd.org <millert@openbsd.org>
8531Date: Mon Nov 16 23:47:52 2015 +0000
8532
8533 upstream commit
8534
8535 Replace remaining calls to index(3) with strchr(3). OK
8536 jca@ krw@
8537
8538 Upstream-ID: 33837d767a0cf1db1489b96055f9e330bc0bab6d
8539
8540commit c56a255162c2166884539c0a1f7511575325b477
8541Author: djm@openbsd.org <djm@openbsd.org>
8542Date: Mon Nov 16 22:53:07 2015 +0000
8543
8544 upstream commit
8545
8546 Allow fingerprinting from standard input "ssh-keygen -lf
8547 -"
8548
8549 Support fingerprinting multiple plain keys in a file and authorized_keys
8550 files too (bz#1319)
8551
8552 ok markus@
8553
8554 Upstream-ID: 903f8b4502929d6ccf53509e4e07eae084574b77
8555
8556commit 5b4010d9b923cf1b46c9c7b1887c013c2967e204
8557Author: djm@openbsd.org <djm@openbsd.org>
8558Date: Mon Nov 16 22:51:05 2015 +0000
8559
8560 upstream commit
8561
8562 always call privsep_preauth_child() regardless of whether
8563 sshd was started by root; it does important priming before sandboxing and
8564 failing to call it could result in sandbox violations later; ok markus@
8565
8566 Upstream-ID: c8a6d0d56c42f3faab38460dc917ca0d1705d383
8567
8568commit 3a9f84b58b0534bbb485f1eeab75665e2d03371f
8569Author: djm@openbsd.org <djm@openbsd.org>
8570Date: Mon Nov 16 22:50:01 2015 +0000
8571
8572 upstream commit
8573
8574 improve sshkey_read() semantics; only update *cpp when a
8575 key is successfully read; ok markus@
8576
8577 Upstream-ID: f371e78e8f4fab366cf69a42bdecedaed5d1b089
8578
8579commit db6f8dc5dd5655b59368efd074994d4568bc3556
8580Author: logan@openbsd.org <logan@openbsd.org>
8581Date: Mon Nov 16 06:13:04 2015 +0000
8582
8583 upstream commit
8584
8585 1) Use xcalloc() instead of xmalloc() to check for
8586 potential overflow. (Feedback from both mmcc@ and djm@) 2) move set_size
8587 just before the for loop. (suggested by djm@)
8588
8589 OK djm@
8590
8591 Upstream-ID: 013534c308187284756c3141f11d2c0f33c47213
8592
8593commit 383f10fb84a0fee3c01f9d97594f3e22aa3cd5e0
8594Author: djm@openbsd.org <djm@openbsd.org>
8595Date: Mon Nov 16 00:30:02 2015 +0000
8596
8597 upstream commit
8598
8599 Add a new authorized_keys option "restrict" that
8600 includes all current and future key restrictions (no-*-forwarding, etc). Also
8601 add permissive versions of the existing restrictions, e.g. "no-pty" -> "pty".
8602 This simplifies the task of setting up restricted keys and ensures they are
8603 maximally-restricted, regardless of any permissions we might implement in the
8604 future.
8605
8606 Example:
8607
8608 restrict,pty,command="nethack" ssh-ed25519 AAAAC3NzaC1lZDI1...
8609
8610 Idea from Jann Horn; ok markus@
8611
8612 Upstream-ID: 04ceb9d448e46e67e13887a7ae5ea45b4f1719d0
8613
8614commit e41a071f7bda6af1fb3f081bed0151235fa61f15
8615Author: jmc@openbsd.org <jmc@openbsd.org>
8616Date: Sun Nov 15 23:58:04 2015 +0000
8617
8618 upstream commit
8619
8620 correct section number for ssh-agent;
8621
8622 Upstream-ID: 44be72fd8bcc167635c49b357b1beea8d5674bd6
8623
8624commit 1a11670286acddcc19f5eff0966c380831fc4638
8625Author: jmc@openbsd.org <jmc@openbsd.org>
8626Date: Sun Nov 15 23:54:15 2015 +0000
8627
8628 upstream commit
8629
8630 do not confuse mandoc by presenting "Dd";
8631
8632 Upstream-ID: 1470fce171c47b60bbc7ecd0fc717a442c2cfe65
8633
8634commit f361df474c49a097bfcf16d1b7b5c36fcd844b4b
8635Author: jcs@openbsd.org <jcs@openbsd.org>
8636Date: Sun Nov 15 22:26:49 2015 +0000
8637
8638 upstream commit
8639
8640 Add an AddKeysToAgent client option which can be set to
8641 'yes', 'no', 'ask', or 'confirm', and defaults to 'no'. When enabled, a
8642 private key that is used during authentication will be added to ssh-agent if
8643 it is running (with confirmation enabled if set to 'confirm').
8644
8645 Initial version from Joachim Schipper many years ago.
8646
8647 ok markus@
8648
8649 Upstream-ID: a680db2248e8064ec55f8be72d539458c987d5f4
8650
8651commit d87063d9baf5479b6e813d47dfb694a97df6f6f5
8652Author: djm@openbsd.org <djm@openbsd.org>
8653Date: Fri Nov 13 04:39:35 2015 +0000
8654
8655 upstream commit
8656
8657 send SSH2_MSG_UNIMPLEMENTED replies to unexpected
8658 messages during KEX; bz#2949, ok dtucker@
8659
8660 Upstream-ID: 2b3abdff344d53c8d505f45c83a7b12e84935786
8661
8662commit 9fd04681a1e9b0af21e08ff82eb674cf0a499bfc
8663Author: djm@openbsd.org <djm@openbsd.org>
8664Date: Fri Nov 13 04:38:06 2015 +0000
8665
8666 upstream commit
8667
8668 Support "none" as an argument for sshd_config
8669 ForceCommand and ChrootDirectory. Useful inside Match blocks to override a
8670 global default. bz#2486 ok dtucker@
8671
8672 Upstream-ID: 7ef478d6592bc7db5c7376fc33b4443e63dccfa5
8673
8674commit 94bc0b72c29e511cbbc5772190d43282e5acfdfe
8675Author: djm@openbsd.org <djm@openbsd.org>
8676Date: Fri Nov 13 04:34:15 2015 +0000
8677
8678 upstream commit
8679
8680 support multiple certificates (one per line) and
8681 reading from standard input (using "-f -") for "ssh-keygen -L"; ok dtucker@
8682
8683 Upstream-ID: ecbadeeef3926e5be6281689b7250a32a80e88db
8684
8685commit b6b9108f5b561c83612cb97ece4134eb59fde071
8686Author: djm@openbsd.org <djm@openbsd.org>
8687Date: Fri Nov 13 02:57:46 2015 +0000
8688
8689 upstream commit
8690
8691 list a couple more options usable in Match blocks;
8692 bz#2489
8693
8694 Upstream-ID: e4d03f39d254db4c0cc54101921bb89fbda19879
8695
8696commit a7994b3f5a5a5a33b52b0a6065d08e888f0a99fb
8697Author: djm@openbsd.org <djm@openbsd.org>
8698Date: Wed Nov 11 04:56:39 2015 +0000
8699
8700 upstream commit
8701
8702 improve PEEK/POKE macros: better casts, don't multiply
8703 evaluate arguments; ok deraadt@
8704
8705 Upstream-ID: 9a1889e19647615ededbbabab89064843ba92d3e
8706
8707commit 7d4c7513a7f209cb303a608ac6e46b3f1dfc11ec
8708Author: djm@openbsd.org <djm@openbsd.org>
8709Date: Wed Nov 11 01:48:01 2015 +0000
8710
8711 upstream commit
8712
8713 remove prototypes for long-gone s/key support; ok
8714 dtucker@
8715
8716 Upstream-ID: db5bed3c57118af986490ab23d399df807359a79
8717
8718commit 07889c75926c040b8e095949c724e66af26441cb
8719Author: Damien Miller <djm@mindrot.org>
8720Date: Sat Nov 14 18:44:49 2015 +1100
8721
8722 read back from libcrypto RAND when privdropping
8723
8724 makes certain libcrypto implementations cache a /dev/urandom fd
8725 in preparation of sandboxing. Based on patch by Greg Hartman.
8726
8727commit 1560596f44c01bb0cef977816410950ed17b8ecd
8728Author: Darren Tucker <dtucker@zip.com.au>
8729Date: Tue Nov 10 11:14:47 2015 +1100
8730
8731 Fix compiler warnings in the openssl header check.
8732
8733 Noted by Austin English.
8734
8735commit e72a8575ffe1d8adff42c9abe9ca36938acc036b
8736Author: jmc@openbsd.org <jmc@openbsd.org>
8737Date: Sun Nov 8 23:24:03 2015 +0000
8738
8739 upstream commit
8740
8741 -c before -H, in SYNOPSIS and usage();
8742
8743 Upstream-ID: 25e8c58a69e1f37fcd54ac2cd1699370acb5e404
8744
8745commit 3a424cdd21db08c7b0ded902f97b8f02af5aa485
8746Author: djm@openbsd.org <djm@openbsd.org>
8747Date: Sun Nov 8 22:30:20 2015 +0000
8748
8749 upstream commit
8750
8751 Add "ssh-keyscan -c ..." flag to allow fetching
8752 certificates instead of plain keys; ok markus@
8753
8754 Upstream-ID: 0947e2177dba92339eced9e49d3c5bf7dda69f82
8755
8756commit 69fead5d7cdaa73bdece9fcba80f8e8e70b90346
8757Author: jmc@openbsd.org <jmc@openbsd.org>
8758Date: Sun Nov 8 22:08:38 2015 +0000
8759
8760 upstream commit
8761
8762 remove slogin links; ok deraadt markus djm
8763
8764 Upstream-ID: 39ba08548acde4c54f2d4520c202c2a863a3c730
8765
8766commit 2fecfd486bdba9f51b3a789277bb0733ca36e1c0
8767Author: djm@openbsd.org <djm@openbsd.org>
8768Date: Sun Nov 8 21:59:11 2015 +0000
8769
8770 upstream commit
8771
8772 fix OOB read in packet code caused by missing return
8773 statement found by Ben Hawkes; ok markus@ deraadt@
8774
8775 Upstream-ID: a3e3a85434ebfa0690d4879091959591f30efc62
8776
8777commit 5e288923a303ca672b686908320bc5368ebec6e6
8778Author: mmcc@openbsd.org <mmcc@openbsd.org>
8779Date: Fri Nov 6 00:31:41 2015 +0000
8780
8781 upstream commit
8782
8783 1. rlogin and rsh are long gone 2. protocol version isn't
8784 of core relevance here, and v1 is going away
8785
8786 ok markus@, deraadt@
8787
8788 Upstream-ID: 8b46bc94cf1ca7c8c1a75b1c958b2bb38d7579c8
8789
8790commit 8b29008bbe97f33381d9b4b93fcfa304168d0286
8791Author: jmc@openbsd.org <jmc@openbsd.org>
8792Date: Thu Nov 5 09:48:05 2015 +0000
8793
8794 upstream commit
8795
8796 "commandline" -> "command line", since there are so few
8797 examples of the former in the pages, so many of the latter, and in some of
8798 these pages we had multiple spellings;
8799
8800 prompted by tj
8801
8802 Upstream-ID: 78459d59bff74223f8139d9001ccd56fc4310659
8803
8804commit 996b24cebf20077fbe5db07b3a2c20c2d9db736e
8805Author: Darren Tucker <dtucker@zip.com.au>
8806Date: Thu Oct 29 20:57:34 2015 +1100
8807
8808 (re)wrap SYS_sendsyslog in ifdef.
8809
8810 Replace ifdef that went missing in commit
8811 c61b42f2678f21f05653ac2d3d241b48ab5d59ac. Fixes build on older
8812 OpenBSDs.
8813
8814commit b67e2e76fcf1ae7c802eb27ca927e16c91a513ff
8815Author: djm@openbsd.org <djm@openbsd.org>
8816Date: Thu Oct 29 08:05:17 2015 +0000
8817
8818 upstream commit
8819
8820 regress test for "PubkeyAcceptedKeyTypes +..." inside a
8821 Match block
8822
8823 Upstream-Regress-ID: 246c37ed64a2e5704d4c158ccdca1ff700e10647
8824
8825commit abd9dbc3c0d8c8c7561347cfa22166156e78c077
8826Author: dtucker@openbsd.org <dtucker@openbsd.org>
8827Date: Mon Oct 26 02:50:58 2015 +0000
8828
8829 upstream commit
8830
8831 Fix typo certopt->certopts in shell variable. This would
8832 cause the test to hang at a host key prompt if you have an A or CNAME for
8833 "proxy" in your local domain.
8834
8835 Upstream-Regress-ID: 6ea03bcd39443a83c89e2c5606392ceb9585836a
8836
8837commit ed08510d38aef930a061ae30d10f2a9cf233bafa
8838Author: djm@openbsd.org <djm@openbsd.org>
8839Date: Thu Oct 29 08:05:01 2015 +0000
8840
8841 upstream commit
8842
8843 Fix "PubkeyAcceptedKeyTypes +..." inside a Match block;
8844 ok dtucker@
8845
8846 Upstream-ID: 853662c4036730b966aab77684390c47b9738c69
8847
8848commit a4aef3ed29071719b2af82fdf1ac3c2514f82bc5
8849Author: djm@openbsd.org <djm@openbsd.org>
8850Date: Tue Oct 27 08:54:52 2015 +0000
8851
8852 upstream commit
8853
8854 fix execv arguments in a way less likely to cause grief
8855 for -portable; ok dtucker@
8856
8857 Upstream-ID: 5902bf0ea0371f39f1300698dc3b8e4105fc0fc5
8858
8859commit 63d188175accea83305e89fafa011136ff3d96ad
8860Author: djm@openbsd.org <djm@openbsd.org>
8861Date: Tue Oct 27 01:44:45 2015 +0000
8862
8863 upstream commit
8864
8865 log certificate serial in verbose() messages to match the
8866 main auth success/fail message; ok dtucker@
8867
8868 Upstream-ID: dfc48b417c320b97c36ff351d303c142f2186288
8869
8870commit 2aaba0cfd560ecfe92aa50c00750e6143842cf1f
8871Author: djm@openbsd.org <djm@openbsd.org>
8872Date: Tue Oct 27 00:49:53 2015 +0000
8873
8874 upstream commit
8875
8876 avoid de-const warning & shrink; ok dtucker@
8877
8878 Upstream-ID: 69a85ef94832378952a22c172009cbf52aaa11db
8879
8880commit 03239c18312b9bab7d1c3b03062c61e8bbc1ca6e
8881Author: dtucker@openbsd.org <dtucker@openbsd.org>
8882Date: Sun Oct 25 23:42:00 2015 +0000
8883
8884 upstream commit
8885
8886 Expand tildes in filenames passed to -i before checking
8887 whether or not the identity file exists. This means that if the shell
8888 doesn't do the expansion (eg because the option and filename were given as a
8889 single argument) then we'll still add the key. bz#2481, ok markus@
8890
8891 Upstream-ID: db1757178a14ac519e9a3e1a2dbd21113cb3bfc6
8892
8893commit 97e184e508dd33c37860c732c0eca3fc57698b40
8894Author: dtucker@openbsd.org <dtucker@openbsd.org>
8895Date: Sun Oct 25 23:14:03 2015 +0000
8896
8897 upstream commit
8898
8899 Do not prepend "exec" to the shell command run by "Match
8900 exec" in a config file. It's an unnecessary optimization from repurposed
8901 ProxyCommand code and prevents some things working with some shells.
8902 bz#2471, pointed out by res at qoxp.net. ok markus@
8903
8904 Upstream-ID: a1ead25ae336bfa15fb58d8c6b5589f85b4c33a3
8905
8906commit 8db134e7f457bcb069ec72bc4ee722e2af557c69
8907Author: Darren Tucker <dtucker@zip.com.au>
8908Date: Thu Oct 29 10:48:23 2015 +1100
8909
8910 Prevent name collisions with system glob (bz#2463)
8911
8912 Move glob.h from includes.h to the only caller (sftp) and override the
8913 names for the symbols. This prevents name collisions with the system glob
8914 in the case where something other than ssh uses it (eg kerberos). With
8915 jjelen at redhat.com, ok djm@
8916
8917commit 86c10dbbef6a5800d2431a66cf7f41a954bb62b5
8918Author: dtucker@openbsd.org <dtucker@openbsd.org>
8919Date: Fri Oct 23 02:22:01 2015 +0000
8920
8921 upstream commit
8922
8923 Update expected group sizes to match recent code changes.
8924
8925 Upstream-Regress-ID: 0004f0ea93428969fe75bcfff0d521c553977794
8926
8927commit 9ada37d36003a77902e90a3214981e417457cf13
8928Author: djm@openbsd.org <djm@openbsd.org>
8929Date: Sat Oct 24 22:56:19 2015 +0000
8930
8931 upstream commit
8932
8933 fix keyscan output for multiple hosts/addrs on one line
8934 when host hashing or a non standard port is in use; bz#2479 ok dtucker@
8935
8936 Upstream-ID: 5321dabfaeceba343da3c8a8b5754c6f4a0a307b
8937
8938commit 44fc7cd7dcef6c52c6b7e9ff830dfa32879bd319
8939Author: djm@openbsd.org <djm@openbsd.org>
8940Date: Sat Oct 24 22:52:22 2015 +0000
8941
8942 upstream commit
8943
8944 skip "Could not chdir to home directory" message when
8945 chrooted
8946
8947 patch from Christian Hesse in bz#2485 ok dtucker@
8948
8949 Upstream-ID: 86783c1953da426dff5b03b03ce46e699d9e5431
8950
8951commit a820a8618ec44735dabc688fab96fba38ad66bb2
8952Author: sthen@openbsd.org <sthen@openbsd.org>
8953Date: Sat Oct 24 08:34:09 2015 +0000
8954
8955 upstream commit
8956
8957 Handle the split of tun(4) "link0" into tap(4) in ssh
8958 tun-forwarding. Adapted from portable (using separate devices for this is the
8959 normal case in most OS). ok djm@
8960
8961 Upstream-ID: 90facf4c59ce73d6741db1bc926e578ef465cd39
8962
8963commit 66d2e229baa9fe57b868c373b05f7ff3bb20055b
8964Author: gsoares@openbsd.org <gsoares@openbsd.org>
8965Date: Wed Oct 21 11:33:03 2015 +0000
8966
8967 upstream commit
8968
8969 fix memory leak in error path ok djm@
8970
8971 Upstream-ID: dd2f402b0a0029b755df029fc7f0679e1365ce35
8972
8973commit 7d6c0362039ceacdc1366b5df29ad5d2693c13e5
8974Author: mmcc@openbsd.org <mmcc@openbsd.org>
8975Date: Tue Oct 20 23:24:25 2015 +0000
8976
8977 upstream commit
8978
8979 Compare pointers to NULL rather than 0.
8980
8981 ok djm@
8982
8983 Upstream-ID: 21616cfea27eda65a06e772cc887530b9a1a27f8
8984
8985commit f98a09cacff7baad8748c9aa217afd155a4d493f
8986Author: mmcc@openbsd.org <mmcc@openbsd.org>
8987Date: Tue Oct 20 03:36:35 2015 +0000
8988
8989 upstream commit
8990
8991 Replace a function-local allocation with stack memory.
8992
8993 ok djm@
8994
8995 Upstream-ID: c09fbbab637053a2ab9f33ca142b4e20a4c5a17e
8996
8997commit ac908c1eeacccfa85659594d92428659320fd57e
8998Author: Damien Miller <djm@mindrot.org>
8999Date: Thu Oct 22 09:35:24 2015 +1100
9000
9001 turn off PrintLastLog when --disable-lastlog
9002
9003 bz#2278 from Brent Paulson
9004
9005commit b56deb847f4a0115a8bf488bf6ee8524658162fd
9006Author: djm@openbsd.org <djm@openbsd.org>
9007Date: Fri Oct 16 22:32:22 2015 +0000
9008
9009 upstream commit
9010
9011 increase the minimum modulus that we will send or accept in
9012 diffie-hellman-group-exchange to 2048 bits; ok markus@
9013
9014 Upstream-ID: 06dce7a24c17b999a0f5fadfe95de1ed6a1a9b6a
9015
9016commit 5ee0063f024bf5b3f3ffb275b8cd20055d62b4b9
9017Author: djm@openbsd.org <djm@openbsd.org>
9018Date: Fri Oct 16 18:40:49 2015 +0000
9019
9020 upstream commit
9021
9022 better handle anchored FQDNs (e.g. 'cvs.openbsd.org.') in
9023 hostname canonicalisation - treat them as already canonical and remove the
9024 trailing '.' before matching ssh_config; ok markus@
9025
9026 Upstream-ID: f7619652e074ac3febe8363f19622aa4853b679a
9027
9028commit e92c499a75477ecfe94dd7b4aed89f20b1fac5a7
9029Author: mmcc@openbsd.org <mmcc@openbsd.org>
9030Date: Fri Oct 16 17:07:24 2015 +0000
9031
9032 upstream commit
9033
9034 0 -> NULL when comparing with a char*.
9035
9036 ok dtucker@, djm@.
9037
9038 Upstream-ID: a928e9c21c0a9020727d99738ff64027c1272300
9039
9040commit b1d38a3cc6fe349feb8d16a5f520ef12d1de7cb2
9041Author: djm@openbsd.org <djm@openbsd.org>
9042Date: Thu Oct 15 23:51:40 2015 +0000
9043
9044 upstream commit
9045
9046 fix some signed/unsigned integer type mismatches in
9047 format strings; reported by Nicholas Lemonias
9048
9049 Upstream-ID: 78cd55420a0eef68c4095bdfddd1af84afe5f95c
9050
9051commit 1a2663a15d356bb188196b6414b4c50dc12fd42b
9052Author: djm@openbsd.org <djm@openbsd.org>
9053Date: Thu Oct 15 23:08:23 2015 +0000
9054
9055 upstream commit
9056
9057 argument to sshkey_from_private() and sshkey_demote()
9058 can't be NULL
9059
9060 Upstream-ID: 0111245b1641d387977a9b38da15916820a5fd1f
9061
9062commit 0f754e29dd3760fc0b172c1220f18b753fb0957e
9063Author: Damien Miller <djm@mindrot.org>
9064Date: Fri Oct 16 10:53:14 2015 +1100
9065
9066 need va_copy before va_start
9067
9068 reported by Nicholas Lemonias
9069
9070commit eb6c50d82aa1f0d3fc95f5630ea69761e918bfcd
9071Author: Damien Miller <djm@mindrot.org>
9072Date: Thu Oct 15 15:48:28 2015 -0700
9073
9074 fix compilation on systems without SYMLOOP_MAX
9075
9076commit fafe1d84a210fb3dae7744f268059cc583db8c12
9077Author: Damien Miller <djm@mindrot.org>
9078Date: Wed Oct 14 09:22:15 2015 -0700
9079
9080 s/SANDBOX_TAME/SANDBOX_PLEDGE/g
9081
9082commit 8f22911027ff6c17d7226d232ccd20727f389310
9083Author: Damien Miller <djm@mindrot.org>
9084Date: Wed Oct 14 08:28:19 2015 +1100
9085
9086 upstream commit
9087
9088 revision 1.20
9089 date: 2015/10/13 20:55:37; author: millert; state: Exp; lines: +2 -2; commitid: X39sl5ay1czgFIgp;
9090 In rev 1.15 the sizeof argument was fixed in a strlcat() call but
9091 the truncation check immediately following it was not updated to
9092 match. Not an issue in practice since the buffers are the same
9093 size. OK deraadt@
9094
9095commit 23fa695bb735f54f04d46123662609edb6c76767
9096Author: Damien Miller <djm@mindrot.org>
9097Date: Wed Oct 14 08:27:51 2015 +1100
9098
9099 upstream commit
9100
9101 revision 1.19
9102 date: 2015/01/16 16:48:51; author: deraadt; state: Exp; lines: +3 -3; commitid: 0DYulI8hhujBHMcR;
9103 Move to the <limits.h> universe.
9104 review by millert, binary checking process with doug, concept with guenther
9105
9106commit c71be375a69af00c2d0a0c24d8752bec12d8fd1b
9107Author: Damien Miller <djm@mindrot.org>
9108Date: Wed Oct 14 08:27:08 2015 +1100
9109
9110 upstream commit
9111
9112 revision 1.18
9113 date: 2014/10/19 03:56:28; author: doug; state: Exp; lines: +9 -9; commitid: U6QxmtbXrGoc02S5;
9114 Revert last commit due to changed semantics found by make release.
9115
9116commit c39ad23b06e9aecc3ff788e92f787a08472905b1
9117Author: Damien Miller <djm@mindrot.org>
9118Date: Wed Oct 14 08:26:24 2015 +1100
9119
9120 upstream commit
9121
9122 revision 1.17
9123 date: 2014/10/18 20:43:52; author: doug; state: Exp; lines: +10 -10; commitid: I74hI1tVZtsspKEt;
9124 Better POSIX compliance in realpath(3).
9125
9126 millert@ made changes to realpath.c based on FreeBSD's version. I merged
9127 Todd's changes into dl_realpath.c.
9128
9129 ok millert@, guenther@
9130
9131commit e929a43f957dbd1254aca2aaf85c8c00cbfc25f4
9132Author: Damien Miller <djm@mindrot.org>
9133Date: Wed Oct 14 08:25:55 2015 +1100
9134
9135 upstream commit
9136
9137 revision 1.16
9138 date: 2013/04/05 12:59:54; author: kurt; state: Exp; lines: +3 -1;
9139 - Add comments regarding copies of these files also in libexec/ld.so
9140 okay guenther@
9141
9142commit 5225db68e58a1048cb17f0e36e0d33bc4a8fc410
9143Author: Damien Miller <djm@mindrot.org>
9144Date: Wed Oct 14 08:25:32 2015 +1100
9145
9146 upstream commit
9147
9148 revision 1.15
9149 date: 2012/09/13 15:39:05; author: deraadt; state: Exp; lines: +2 -2;
9150 specify the bounds of the dst to strlcat (both values were static and
9151 equal, but it is more correct)
9152 from Michal Mazurek
9153
9154commit 7365fe5b4859de2305e40ea132da3823830fa710
9155Author: Damien Miller <djm@mindrot.org>
9156Date: Wed Oct 14 08:25:09 2015 +1100
9157
9158 upstream commit
9159
9160 revision 1.14
9161 date: 2011/07/24 21:03:00; author: miod; state: Exp; lines: +35 -13;
9162 Recent Single Unix will malloc memory if the second argument of realpath()
9163 is NULL, and third-party software is starting to rely upon this.
9164 Adapted from FreeBSD via Jona Joachim (jaj ; hcl-club , .lu), with minor
9165 tweaks from nicm@ and yours truly.
9166
9167commit e679c09cd1951f963793aa3d9748d1c3fdcf808f
9168Author: djm@openbsd.org <djm@openbsd.org>
9169Date: Tue Oct 13 16:15:21 2015 +0000
9170
9171 upstream commit
9172
9173 apply PubkeyAcceptedKeyTypes filtering earlier, so all
9174 skipped keys are noted before pubkey authentication starts. ok dtucker@
9175
9176 Upstream-ID: ba4f52f54268a421a2a5f98bb375403f4cb044b8
9177
9178commit 179c353f564ec7ada64b87730b25fb41107babd7
9179Author: djm@openbsd.org <djm@openbsd.org>
9180Date: Tue Oct 13 00:21:27 2015 +0000
9181
9182 upstream commit
9183
9184 free the correct IV length, don't assume it's always the
9185 cipher blocksize; ok dtucker@
9186
9187 Upstream-ID: c260d9e5ec73628d9ff4b067fbb060eff5a7d298
9188
9189commit 2539dce2a049a8f6bb0d44cac51f07ad48e691d3
9190Author: deraadt@openbsd.org <deraadt@openbsd.org>
9191Date: Fri Oct 9 01:37:08 2015 +0000
9192
9193 upstream commit
9194
9195 Change all tame callers to namechange to pledge(2).
9196
9197 Upstream-ID: 17e654fc27ceaf523c60f4ffd9ec7ae4e7efc7f2
9198
9199commit 9846a2f4067383bb76b4e31a9d2303e0a9c13a73
9200Author: Damien Miller <djm@mindrot.org>
9201Date: Thu Oct 8 04:30:48 2015 +1100
9202
9203 hook tame(2) sandbox up to build
9204
9205 OpenBSD only for now
9206
9207commit 0c46bbe68b70bdf0d6d20588e5847e71f3739fe6
9208Author: djm@openbsd.org <djm@openbsd.org>
9209Date: Wed Oct 7 15:59:12 2015 +0000
9210
9211 upstream commit
9212
9213 include PubkeyAcceptedKeyTypes in ssh -G config dump
9214
9215 Upstream-ID: 6c097ce6ffebf6fe393fb7988b5d152a5d6b36bb
9216
9217commit bdcb73fb7641b1cf73c0065d1a0dd57b1e8b778e
9218Author: sobrado@openbsd.org <sobrado@openbsd.org>
9219Date: Wed Oct 7 14:45:30 2015 +0000
9220
9221 upstream commit
9222
9223 UsePrivilegeSeparation defaults to sandbox now.
9224
9225 ok djm@
9226
9227 Upstream-ID: bff136c38bcae89df82e044d2f42de21e1ad914f
9228
9229commit 2905d6f99c837bb699b6ebc61711b19acd030709
9230Author: djm@openbsd.org <djm@openbsd.org>
9231Date: Wed Oct 7 00:54:06 2015 +0000
9232
9233 upstream commit
9234
9235 don't try to change tun device flags if they are already
9236 what we need; makes it possible to use tun/tap networking as non- root user
9237 if device permissions and interface flags are pre-established; based on patch
9238 by Ossi Herrala
9239
9240 Upstream-ID: 89099ac4634cd477b066865acf54cb230780fd21
9241
9242commit 0dc74512bdb105b048883f07de538b37e5e024d4
9243Author: Damien Miller <djm@mindrot.org>
9244Date: Mon Oct 5 18:33:05 2015 -0700
9245
9246 unbreak merge botch
9247
9248commit fdd020e86439afa7f537e2429d29d4b744c94331
9249Author: djm@openbsd.org <djm@openbsd.org>
9250Date: Tue Oct 6 01:20:59 2015 +0000
9251
9252 upstream commit
9253
9254 adapt to recent sshkey_parse_private_fileblob() API
9255 change
9256
9257 Upstream-Regress-ID: 5c0d818da511e33e0abf6a92a31bd7163b7ad988
9258
9259commit 21ae8ee3b630b0925f973db647a1b9aa5fcdd4c5
9260Author: djm@openbsd.org <djm@openbsd.org>
9261Date: Thu Sep 24 07:15:39 2015 +0000
9262
9263 upstream commit
9264
9265 fix command-line option to match what was actually
9266 committed
9267
9268 Upstream-Regress-ID: 3e8c24a2044e8afd37e7ce17b69002ca817ac699
9269
9270commit e14ac43b75e68f1ffbd3e1a5e44143c8ae578dcd
9271Author: djm@openbsd.org <djm@openbsd.org>
9272Date: Thu Sep 24 06:16:53 2015 +0000
9273
9274 upstream commit
9275
9276 regress test for CertificateFile; patch from Meghana Bhat
9277 via bz#2436
9278
9279 Upstream-Regress-ID: e7a6e980cbe0f8081ba2e83de40d06c17be8bd25
9280
9281commit 905b054ed24e0d5b4ef226ebf2c8bfc02ae6d4ad
9282Author: djm@openbsd.org <djm@openbsd.org>
9283Date: Mon Oct 5 17:11:21 2015 +0000
9284
9285 upstream commit
9286
9287 some more bzero->explicit_bzero, from Michael McConville
9288
9289 Upstream-ID: 17f19545685c33327db2efdc357c1c9225ff00d0
9290
9291commit b007159a0acdbcf65814b3ee05dbe2cf4ea46011
9292Author: deraadt@openbsd.org <deraadt@openbsd.org>
9293Date: Fri Oct 2 15:52:55 2015 +0000
9294
9295 upstream commit
9296
9297 fix email
9298
9299 Upstream-ID: 72150f2d54b94de14ebef1ea054ef974281bf834
9300
9301commit b19e1b4ab11884c4f62aee9f8ab53127a4732658
9302Author: deraadt@openbsd.org <deraadt@openbsd.org>
9303Date: Fri Oct 2 01:39:52 2015 +0000
9304
9305 upstream commit
9306
9307 a sandbox using tame ok djm
9308
9309 Upstream-ID: 4ca24e47895e72f5daaa02f3e3d3e5ca2d820fa3
9310
9311commit c61b42f2678f21f05653ac2d3d241b48ab5d59ac
9312Author: deraadt@openbsd.org <deraadt@openbsd.org>
9313Date: Fri Oct 2 01:39:26 2015 +0000
9314
9315 upstream commit
9316
9317 re-order system calls in order of risk, ok i'll be
9318 honest, ordered this way they look like tame... ok djm
9319
9320 Upstream-ID: 42a1e6d251fd8be13c8262bee026059ae6328813
9321
9322commit c5f7c0843cb6e6074a93c8ac34e49ce33a6f5546
9323Author: jmc@openbsd.org <jmc@openbsd.org>
9324Date: Fri Sep 25 18:19:54 2015 +0000
9325
9326 upstream commit
9327
9328 some certificatefile tweaks; ok djm
9329
9330 Upstream-ID: 0e5a7852c28c05fc193419cc7e50e64c1c535af0
9331
9332commit 4e44a79a07d4b88b6a4e5e8c1bed5f58c841b1b8
9333Author: djm@openbsd.org <djm@openbsd.org>
9334Date: Thu Sep 24 06:15:11 2015 +0000
9335
9336 upstream commit
9337
9338 add ssh_config CertificateFile option to explicitly list
9339 a certificate; patch from Meghana Bhat on bz#2436; ok markus@
9340
9341 Upstream-ID: 58648ec53c510b41c1f46d8fe293aadc87229ab8
9342
9343commit e3cbb06ade83c72b640a53728d362bbefa0008e2
9344Author: sobrado@openbsd.org <sobrado@openbsd.org>
9345Date: Tue Sep 22 08:33:23 2015 +0000
9346
9347 upstream commit
9348
9349 fix two typos.
9350
9351 Upstream-ID: 424402c0d8863a11b51749bacd7f8d932083b709
diff --git a/INSTALL b/INSTALL
index e4865bbb4..7f552bf76 100644
--- a/INSTALL
+++ b/INSTALL
@@ -13,7 +13,7 @@ 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 >= 0.9.8f < 1.1.0) 16libcrypto (LibreSSL or OpenSSL >= 1.0.1 < 1.1.0)
17LibreSSL http://www.libressl.org/ ; or 17LibreSSL http://www.libressl.org/ ; or
18OpenSSL http://www.openssl.org/ 18OpenSSL http://www.openssl.org/
19 19
@@ -91,7 +91,7 @@ http://nlnetlabs.nl/projects/ldns/
91Autoconf: 91Autoconf:
92 92
93If you modify configure.ac or configure doesn't exist (eg if you checked 93If you modify configure.ac or configure doesn't exist (eg if you checked
94the code out of CVS yourself) then you will need autoconf-2.69 to rebuild 94the code out of git yourself) then you will need autoconf-2.69 to rebuild
95the automatically generated files by running "autoreconf". Earlier 95the automatically generated files by running "autoreconf". Earlier
96versions may also work but this is not guaranteed. 96versions may also work but this is not guaranteed.
97 97
@@ -103,6 +103,13 @@ Native BSM support is known to exist in Solaris from at least 2.5.1,
103FreeBSD 6.1 and OS X. Alternatively, you may use the OpenBSM 103FreeBSD 6.1 and OS X. Alternatively, you may use the OpenBSM
104implementation (http://www.openbsm.org). 104implementation (http://www.openbsm.org).
105 105
106makedepend:
107
108https://www.x.org/archive/individual/util/
109
110If you are making significant changes to the code you may need to rebuild
111the dependency (.depend) file using "make depend", which requires the
112"makedepend" tool from the X11 distribution.
106 113
1072. Building / Installation 1142. Building / Installation
108-------------------------- 115--------------------------
@@ -162,13 +169,11 @@ also be enabled in sshd_config (refer to the UsePAM directive).
162 169
163--with-prngd-socket=/some/file allows you to enable EGD or PRNGD 170--with-prngd-socket=/some/file allows you to enable EGD or PRNGD
164support and to specify a PRNGd socket. Use this if your Unix lacks 171support and to specify a PRNGd socket. Use this if your Unix lacks
165/dev/random and you don't want to use OpenSSH's builtin entropy 172/dev/random.
166collection support.
167 173
168--with-prngd-port=portnum allows you to enable EGD or PRNGD support 174--with-prngd-port=portnum allows you to enable EGD or PRNGD support
169and to specify a EGD localhost TCP port. Use this if your Unix lacks 175and to specify a EGD localhost TCP port. Use this if your Unix lacks
170/dev/random and you don't want to use OpenSSH's builtin entropy 176/dev/random.
171collection support.
172 177
173--with-lastlog=FILE will specify the location of the lastlog file. 178--with-lastlog=FILE will specify the location of the lastlog file.
174./configure searches a few locations for lastlog, but may not find 179./configure searches a few locations for lastlog, but may not find
@@ -204,8 +209,7 @@ created.
204--with-xauth=PATH specifies the location of the xauth binary 209--with-xauth=PATH specifies the location of the xauth binary
205 210
206--with-ssl-dir=DIR allows you to specify where your Libre/OpenSSL 211--with-ssl-dir=DIR allows you to specify where your Libre/OpenSSL
207libraries 212libraries are installed.
208are installed.
209 213
210--with-ssl-engine enables Libre/OpenSSL's (hardware) ENGINE support 214--with-ssl-engine enables Libre/OpenSSL's (hardware) ENGINE support
211 215
diff --git a/Makefile.in b/Makefile.in
index c52ce191f..04e1c8e53 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -1,5 +1,3 @@
1# $Id: Makefile.in,v 1.365 2014/08/30 06:23:07 djm Exp $
2
3# uncomment if you run a non bourne compatable shell. Ie. csh 1# uncomment if you run a non bourne compatable shell. Ie. csh
4#SHELL = @SH@ 2#SHELL = @SH@
5 3
@@ -54,16 +52,25 @@ AR=@AR@
54AWK=@AWK@ 52AWK=@AWK@
55RANLIB=@RANLIB@ 53RANLIB=@RANLIB@
56INSTALL=@INSTALL@ 54INSTALL=@INSTALL@
57PERL=@PERL@
58SED=@SED@ 55SED=@SED@
59ENT=@ENT@ 56ENT=@ENT@
60XAUTH_PATH=@XAUTH_PATH@ 57XAUTH_PATH=@XAUTH_PATH@
61LDFLAGS=-L. -Lopenbsd-compat/ @LDFLAGS@ 58LDFLAGS=-L. -Lopenbsd-compat/ @LDFLAGS@
62EXEEXT=@EXEEXT@ 59EXEEXT=@EXEEXT@
63MANFMT=@MANFMT@ 60MANFMT=@MANFMT@
61MKDIR_P=@MKDIR_P@
64 62
65TARGETS=ssh$(EXEEXT) sshd$(EXEEXT) ssh-add$(EXEEXT) ssh-keygen$(EXEEXT) ssh-keyscan${EXEEXT} ssh-keysign${EXEEXT} ssh-pkcs11-helper$(EXEEXT) ssh-agent$(EXEEXT) scp$(EXEEXT) sftp-server$(EXEEXT) sftp$(EXEEXT) 63TARGETS=ssh$(EXEEXT) sshd$(EXEEXT) ssh-add$(EXEEXT) ssh-keygen$(EXEEXT) ssh-keyscan${EXEEXT} ssh-keysign${EXEEXT} ssh-pkcs11-helper$(EXEEXT) ssh-agent$(EXEEXT) scp$(EXEEXT) sftp-server$(EXEEXT) sftp$(EXEEXT)
66 64
65XMSS_OBJS=\
66 ssh-xmss.o \
67 sshkey-xmss.o \
68 xmss_commons.o \
69 xmss_fast.o \
70 xmss_hash.o \
71 xmss_hash_address.o \
72 xmss_wots.o
73
67LIBOPENSSH_OBJS=\ 74LIBOPENSSH_OBJS=\
68 ssh_api.o \ 75 ssh_api.o \
69 ssherr.o \ 76 ssherr.o \
@@ -73,7 +80,8 @@ LIBOPENSSH_OBJS=\
73 sshbuf-misc.o \ 80 sshbuf-misc.o \
74 sshbuf-getput-crypto.o \ 81 sshbuf-getput-crypto.o \
75 krl.o \ 82 krl.o \
76 bitmap.o 83 bitmap.o \
84 ${XMSS_OBJS}
77 85
78LIBSSH_OBJS=${LIBOPENSSH_OBJS} \ 86LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
79 authfd.o authfile.o bufaux.o bufbn.o bufec.o buffer.o \ 87 authfd.o authfile.o bufaux.o bufbn.o bufec.o buffer.o \
@@ -88,7 +96,7 @@ LIBSSH_OBJS=${LIBOPENSSH_OBJS} \
88 ssh-pkcs11.o smult_curve25519_ref.o \ 96 ssh-pkcs11.o smult_curve25519_ref.o \
89 poly1305.o chacha.o cipher-chachapoly.o \ 97 poly1305.o chacha.o cipher-chachapoly.o \
90 ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \ 98 ssh-ed25519.o digest-openssl.o digest-libc.o hmac.o \
91 sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o blocks.o \ 99 sc25519.o ge25519.o fe25519.o ed25519.o verify.o hash.o \
92 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \ 100 kex.o kexdh.o kexgex.o kexecdh.o kexc25519.o \
93 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \ 101 kexdhc.o kexgexc.o kexecdhc.o kexc25519c.o \
94 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \ 102 kexdhs.o kexgexs.o kexecdhs.o kexc25519s.o \
@@ -218,13 +226,6 @@ $(CONFIGFILES): $(CONFIGFILES_IN)
218moduli: 226moduli:
219 echo 227 echo
220 228
221# special case target for umac128
222umac128.o: umac.c
223 $(CC) $(CFLAGS) $(CPPFLAGS) -o umac128.o -c $(srcdir)/umac.c \
224 -DUMAC_OUTPUT_LEN=16 -Dumac_new=umac128_new \
225 -Dumac_update=umac128_update -Dumac_final=umac128_final \
226 -Dumac_delete=umac128_delete -Dumac_ctx=umac128_ctx
227
228clean: regressclean 229clean: regressclean
229 rm -f *.o *.a $(TARGETS) logintest config.cache config.log 230 rm -f *.o *.a $(TARGETS) logintest config.cache config.log
230 rm -f *.out core survey 231 rm -f *.out core survey
@@ -298,9 +299,21 @@ catman-do:
298 >$$base.0 ; \ 299 >$$base.0 ; \
299 done 300 done
300 301
301distprep: catman-do 302depend: depend-rebuild
303 rm -f .depend.bak
304
305depend-rebuild:
306 rm -f config.h
307 touch config.h
308 makedepend -w1000 -Y. -f .depend *.c 2>/dev/null
309 rm -f config.h
310
311depend-check: depend-rebuild
312 cmp .depend .depend.bak || (echo .depend stale && exit 1)
313
314distprep: catman-do depend-check
302 $(AUTORECONF) 315 $(AUTORECONF)
303 -rm -rf autom4te.cache 316 -rm -rf autom4te.cache .depend.bak
304 317
305install: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf host-key check-config 318install: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf host-key check-config
306install-nokeys: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf 319install-nokeys: $(CONFIGFILES) $(MANPAGES) $(TARGETS) install-files install-sysconf
@@ -310,14 +323,13 @@ check-config:
310 -$(DESTDIR)$(sbindir)/sshd -t -f $(DESTDIR)$(sysconfdir)/sshd_config 323 -$(DESTDIR)$(sbindir)/sshd -t -f $(DESTDIR)$(sysconfdir)/sshd_config
311 324
312install-files: 325install-files:
313 $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) 326 $(MKDIR_P) $(DESTDIR)$(bindir)
314 $(srcdir)/mkinstalldirs $(DESTDIR)$(sbindir) 327 $(MKDIR_P) $(DESTDIR)$(sbindir)
315 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir) 328 $(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)1
316 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)1 329 $(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)5
317 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)5 330 $(MKDIR_P) $(DESTDIR)$(mandir)/$(mansubdir)8
318 $(srcdir)/mkinstalldirs $(DESTDIR)$(mandir)/$(mansubdir)8 331 $(MKDIR_P) $(DESTDIR)$(libexecdir)
319 $(srcdir)/mkinstalldirs $(DESTDIR)$(libexecdir) 332 $(MKDIR_P) -m 0755 $(DESTDIR)$(PRIVSEP_PATH)
320 (umask 022 ; $(srcdir)/mkinstalldirs $(DESTDIR)$(PRIVSEP_PATH))
321 $(INSTALL) -m 0755 $(STRIP_OPT) ssh$(EXEEXT) $(DESTDIR)$(bindir)/ssh$(EXEEXT) 333 $(INSTALL) -m 0755 $(STRIP_OPT) ssh$(EXEEXT) $(DESTDIR)$(bindir)/ssh$(EXEEXT)
322 $(INSTALL) -m 0755 $(STRIP_OPT) scp$(EXEEXT) $(DESTDIR)$(bindir)/scp$(EXEEXT) 334 $(INSTALL) -m 0755 $(STRIP_OPT) scp$(EXEEXT) $(DESTDIR)$(bindir)/scp$(EXEEXT)
323 $(INSTALL) -m 0755 $(STRIP_OPT) ssh-add$(EXEEXT) $(DESTDIR)$(bindir)/ssh-add$(EXEEXT) 335 $(INSTALL) -m 0755 $(STRIP_OPT) ssh-add$(EXEEXT) $(DESTDIR)$(bindir)/ssh-add$(EXEEXT)
@@ -345,9 +357,7 @@ install-files:
345 $(INSTALL) -m 644 ssh-pkcs11-helper.8.out $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8 357 $(INSTALL) -m 644 ssh-pkcs11-helper.8.out $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8
346 358
347install-sysconf: 359install-sysconf:
348 if [ ! -d $(DESTDIR)$(sysconfdir) ]; then \ 360 $(MKDIR_P) $(DESTDIR)$(sysconfdir)
349 $(srcdir)/mkinstalldirs $(DESTDIR)$(sysconfdir); \
350 fi
351 @if [ ! -f $(DESTDIR)$(sysconfdir)/ssh_config ]; then \ 361 @if [ ! -f $(DESTDIR)$(sysconfdir)/ssh_config ]; then \
352 $(INSTALL) -m 644 ssh_config.out $(DESTDIR)$(sysconfdir)/ssh_config; \ 362 $(INSTALL) -m 644 ssh_config.out $(DESTDIR)$(sysconfdir)/ssh_config; \
353 else \ 363 else \
@@ -375,9 +385,6 @@ host-key: ssh-keygen$(EXEEXT)
375 fi 385 fi
376 386
377host-key-force: ssh-keygen$(EXEEXT) ssh$(EXEEXT) 387host-key-force: ssh-keygen$(EXEEXT) ssh$(EXEEXT)
378 if ./ssh -Q protocol-version | grep '^1$$' >/dev/null; then \
379 ./ssh-keygen -t rsa1 -f $(DESTDIR)$(sysconfdir)/ssh_host_key -N ""; \
380 fi
381 ./ssh-keygen -t dsa -f $(DESTDIR)$(sysconfdir)/ssh_host_dsa_key -N "" 388 ./ssh-keygen -t dsa -f $(DESTDIR)$(sysconfdir)/ssh_host_dsa_key -N ""
382 ./ssh-keygen -t rsa -f $(DESTDIR)$(sysconfdir)/ssh_host_rsa_key -N "" 389 ./ssh-keygen -t rsa -f $(DESTDIR)$(sysconfdir)/ssh_host_rsa_key -N ""
383 ./ssh-keygen -t ed25519 -f $(DESTDIR)$(sysconfdir)/ssh_host_ed25519_key -N "" 390 ./ssh-keygen -t ed25519 -f $(DESTDIR)$(sysconfdir)/ssh_host_ed25519_key -N ""
@@ -421,28 +428,16 @@ uninstall:
421 -rm -f $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8 428 -rm -f $(DESTDIR)$(mandir)/$(mansubdir)8/ssh-pkcs11-helper.8
422 429
423regress-prep: 430regress-prep:
424 [ -d `pwd`/regress ] || mkdir -p `pwd`/regress 431 $(MKDIR_P) `pwd`/regress/unittests/test_helper
425 [ -d `pwd`/regress/unittests ] || mkdir -p `pwd`/regress/unittests 432 $(MKDIR_P) `pwd`/regress/unittests/sshbuf
426 [ -d `pwd`/regress/unittests/test_helper ] || \ 433 $(MKDIR_P) `pwd`/regress/unittests/sshkey
427 mkdir -p `pwd`/regress/unittests/test_helper 434 $(MKDIR_P) `pwd`/regress/unittests/bitmap
428 [ -d `pwd`/regress/unittests/sshbuf ] || \ 435 $(MKDIR_P) `pwd`/regress/unittests/conversion
429 mkdir -p `pwd`/regress/unittests/sshbuf 436 $(MKDIR_P) `pwd`/regress/unittests/hostkeys
430 [ -d `pwd`/regress/unittests/sshkey ] || \ 437 $(MKDIR_P) `pwd`/regress/unittests/kex
431 mkdir -p `pwd`/regress/unittests/sshkey 438 $(MKDIR_P) `pwd`/regress/unittests/match
432 [ -d `pwd`/regress/unittests/bitmap ] || \ 439 $(MKDIR_P) `pwd`/regress/unittests/utf8
433 mkdir -p `pwd`/regress/unittests/bitmap 440 $(MKDIR_P) `pwd`/regress/misc/kexfuzz
434 [ -d `pwd`/regress/unittests/conversion ] || \
435 mkdir -p `pwd`/regress/unittests/conversion
436 [ -d `pwd`/regress/unittests/hostkeys ] || \
437 mkdir -p `pwd`/regress/unittests/hostkeys
438 [ -d `pwd`/regress/unittests/kex ] || \
439 mkdir -p `pwd`/regress/unittests/kex
440 [ -d `pwd`/regress/unittests/match ] || \
441 mkdir -p `pwd`/regress/unittests/match
442 [ -d `pwd`/regress/unittests/utf8 ] || \
443 mkdir -p `pwd`/regress/unittests/utf8
444 [ -d `pwd`/regress/misc/kexfuzz ] || \
445 mkdir -p `pwd`/regress/misc/kexfuzz
446 [ -f `pwd`/regress/Makefile ] || \ 441 [ -f `pwd`/regress/Makefile ] || \
447 ln -s `cd $(srcdir) && pwd`/regress/Makefile `pwd`/regress/Makefile 442 ln -s `cd $(srcdir) && pwd`/regress/Makefile `pwd`/regress/Makefile
448 443
@@ -582,6 +577,8 @@ regress-binaries: regress/modpipe$(EXEEXT) \
582 regress/unittests/utf8/test_utf8$(EXEEXT) \ 577 regress/unittests/utf8/test_utf8$(EXEEXT) \
583 regress/misc/kexfuzz/kexfuzz$(EXEEXT) 578 regress/misc/kexfuzz/kexfuzz$(EXEEXT)
584 579
580REGRESSTMP = "$(PWD)/regress"
581
585tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS) 582tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS)
586 BUILDDIR=`pwd`; \ 583 BUILDDIR=`pwd`; \
587 TEST_SSH_SCP="$${BUILDDIR}/scp"; \ 584 TEST_SSH_SCP="$${BUILDDIR}/scp"; \
@@ -605,7 +602,7 @@ tests interop-tests t-exec unit: regress-prep regress-binaries $(TARGETS)
605 .OBJDIR="$${BUILDDIR}/regress" \ 602 .OBJDIR="$${BUILDDIR}/regress" \
606 .CURDIR="`pwd`" \ 603 .CURDIR="`pwd`" \
607 BUILDDIR="$${BUILDDIR}" \ 604 BUILDDIR="$${BUILDDIR}" \
608 OBJ="$${BUILDDIR}/regress/" \ 605 OBJ="$(REGRESSTMP)" \
609 PATH="$${BUILDDIR}:$${PATH}" \ 606 PATH="$${BUILDDIR}:$${PATH}" \
610 TEST_ENV=MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \ 607 TEST_ENV=MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \
611 TEST_MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \ 608 TEST_MALLOC_OPTIONS="@TEST_MALLOC_OPTIONS@" \
@@ -650,3 +647,5 @@ package: $(CONFIGFILES) $(MANPAGES) $(TARGETS)
650 if [ "@MAKE_PACKAGE_SUPPORTED@" = yes ]; then \ 647 if [ "@MAKE_PACKAGE_SUPPORTED@" = yes ]; then \
651 sh buildpkg.sh; \ 648 sh buildpkg.sh; \
652 fi 649 fi
650
651# @DEPEND@
diff --git a/PROTOCOL b/PROTOCOL
index 4e9e87575..b1fc00691 100644
--- a/PROTOCOL
+++ b/PROTOCOL
@@ -295,10 +295,14 @@ has completed.
295 string[] hostkeys 295 string[] hostkeys
296 296
297Upon receiving this message, a client should check which of the 297Upon receiving this message, a client should check which of the
298supplied host keys are present in known_hosts. For keys that are 298supplied host keys are present in known_hosts.
299not present, it should send a "hostkeys-prove@openssh.com" message 299
300to request the server prove ownership of the private half of the 300Note that the server may send key types that the client does not
301key. 301support. The client should disgregard such keys if they are received.
302
303If the client identifies any keys that are not present for the host,
304it should send a "hostkeys-prove@openssh.com" message to request the
305server prove ownership of the private half of the key.
302 306
303 byte SSH_MSG_GLOBAL_REQUEST 307 byte SSH_MSG_GLOBAL_REQUEST
304 string "hostkeys-prove-00@openssh.com" 308 string "hostkeys-prove-00@openssh.com"
@@ -454,4 +458,4 @@ respond with a SSH_FXP_STATUS message.
454This extension is advertised in the SSH_FXP_VERSION hello with version 458This extension is advertised in the SSH_FXP_VERSION hello with version
455"1". 459"1".
456 460
457$OpenBSD: PROTOCOL,v 1.31 2017/05/26 01:40:07 djm Exp $ 461$OpenBSD: PROTOCOL,v 1.32 2018/02/19 00:55:02 djm Exp $
diff --git a/PROTOCOL.certkeys b/PROTOCOL.certkeys
index 42aa8c2a1..64cb18700 100644
--- a/PROTOCOL.certkeys
+++ b/PROTOCOL.certkeys
@@ -100,9 +100,9 @@ DSA certificate
100 100
101ECDSA certificate 101ECDSA certificate
102 102
103 string "ecdsa-sha2-nistp256-v01@openssh.com" | 103 string "ecdsa-sha2-nistp256-cert-v01@openssh.com" |
104 "ecdsa-sha2-nistp384-v01@openssh.com" | 104 "ecdsa-sha2-nistp384-cert-v01@openssh.com" |
105 "ecdsa-sha2-nistp521-v01@openssh.com" 105 "ecdsa-sha2-nistp521-cert-v01@openssh.com"
106 string nonce 106 string nonce
107 string curve 107 string curve
108 string public_key 108 string public_key
@@ -291,4 +291,4 @@ permit-user-rc empty Flag indicating that execution of
291 of this script will not be permitted if 291 of this script will not be permitted if
292 this option is not present. 292 this option is not present.
293 293
294$OpenBSD: PROTOCOL.certkeys,v 1.12 2017/05/31 04:29:44 djm Exp $ 294$OpenBSD: PROTOCOL.certkeys,v 1.13 2017/11/03 02:32:19 djm Exp $
diff --git a/README b/README
index 103d43e9b..fb8e21743 100644
--- a/README
+++ b/README
@@ -1,11 +1,11 @@
1See https://www.openssh.com/releasenotes.html#7.6p1 for the release notes. 1See https://www.openssh.com/releasenotes.html#7.7p1 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
5patch/pull-request management. 5patch/pull-request management.
6 6
7- A Japanese translation of this document and of the release notes is 7- A Japanese translation of this document and of the release notes is
8- available at http://www.unixuser.org/~haruyama/security/openssh/index.html 8- available at https://www.unixuser.org/~haruyama/security/openssh/index.html
9- Thanks to HARUYAMA Seigo <haruyama@unixuser.org> 9- Thanks to HARUYAMA Seigo <haruyama@unixuser.org>
10 10
11This is the port of OpenBSD's excellent OpenSSH[0] to Linux and other 11This is the port of OpenBSD's excellent OpenSSH[0] to Linux and other
@@ -22,7 +22,7 @@ This port consists of the re-introduction of autoconf support, PAM
22support, EGD[1]/PRNGD[2] support and replacements for OpenBSD library 22support, EGD[1]/PRNGD[2] support and replacements for OpenBSD library
23functions that are (regrettably) absent from other unices. This port 23functions that are (regrettably) absent from other unices. This port
24has been best tested on AIX, Cygwin, HP-UX, Linux, MacOS/X, 24has been best tested on AIX, Cygwin, HP-UX, Linux, MacOS/X,
25NetBSD, OpenBSD, OpenServer, Solaris, Unicos, and UnixWare. 25NetBSD, OpenBSD, OpenServer, Solaris and UnixWare.
26 26
27This version actively tracks changes in the OpenBSD CVS repository. 27This version actively tracks changes in the OpenBSD CVS repository.
28 28
@@ -56,11 +56,11 @@ References -
56 56
57[0] https://www.openssh.com/ 57[0] https://www.openssh.com/
58[1] http://www.lothar.com/tech/crypto/ 58[1] http://www.lothar.com/tech/crypto/
59[2] http://www.aet.tu-cottbus.de/personen/jaenicke/postfix_tls/prngd.html 59[2] http://prngd.sourceforge.net/
60[3] http://www.gzip.org/zlib/ 60[3] https://www.zlib.net/
61[4] http://www.openssl.org/ 61[4] https://www.openssl.org/
62[5] http://www.openpam.org 62[5] https://www.openpam.org
63 http://www.kernel.org/pub/linux/libs/pam/ 63 https://www.kernel.org/pub/linux/libs/pam/
64 (PAM also is standard on Solaris and HP-UX 11) 64 (PAM also is standard on Solaris and HP-UX 11)
65[6] http://thrysoee.dk/editline/ (portable version) 65[6] https://thrysoee.dk/editline/ (portable version)
66[7] http://man.openbsd.org/style.9 66[7] https://man.openbsd.org/style.9
diff --git a/README.privsep b/README.privsep
index 2120544c7..460e90565 100644
--- a/README.privsep
+++ b/README.privsep
@@ -34,8 +34,8 @@ privsep user and chroot directory:
34PAM-enabled OpenSSH is known to function with privsep on AIX, FreeBSD, 34PAM-enabled OpenSSH is known to function with privsep on AIX, FreeBSD,
35HP-UX (including Trusted Mode), Linux, NetBSD and Solaris. 35HP-UX (including Trusted Mode), Linux, NetBSD and Solaris.
36 36
37On Cygwin, Tru64 Unix, OpenServer, and Unicos only the pre-authentication 37On Cygwin, Tru64 Unix and OpenServer only the pre-authentication part
38part of privsep is supported. Post-authentication privsep is disabled 38of privsep is supported. Post-authentication privsep is disabled
39automatically (so you won't see the additional process mentioned below). 39automatically (so you won't see the additional process mentioned below).
40 40
41Note that for a normal interactive login with a shell, enabling privsep 41Note that for a normal interactive login with a shell, enabling privsep
diff --git a/auth-options.c b/auth-options.c
index bed00eef0..b528c197a 100644
--- a/auth-options.c
+++ b/auth-options.c
@@ -1,13 +1,18 @@
1/* $OpenBSD: auth-options.c,v 1.74 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: auth-options.c,v 1.78 2018/03/14 05:35:40 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Copyright (c) 2018 Damien Miller <djm@mindrot.org>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 *
5 * All rights reserved 5 * Permission to use, copy, modify, and distribute this software for any
6 * As far as I am concerned, the code I have written for this software 6 * purpose with or without fee is hereby granted, provided that the above
7 * can be used freely for any purpose. Any derived versions of this 7 * copyright notice and this permission notice appear in all copies.
8 * software must be clearly marked as such, and if the derived work is 8 *
9 * incompatible with the protocol description in the RFC file, it must be 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * called by a name other than "ssh" or "Secure Shell". 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
11 */ 16 */
12 17
13#include "includes.h" 18#include "includes.h"
@@ -19,88 +24,33 @@
19#include <string.h> 24#include <string.h>
20#include <stdio.h> 25#include <stdio.h>
21#include <stdarg.h> 26#include <stdarg.h>
27#include <ctype.h>
28#include <limits.h>
22 29
23#include "openbsd-compat/sys-queue.h" 30#include "openbsd-compat/sys-queue.h"
24 31
25#include "key.h" /* XXX for typedef */
26#include "buffer.h" /* XXX for typedef */
27#include "xmalloc.h" 32#include "xmalloc.h"
28#include "match.h"
29#include "ssherr.h" 33#include "ssherr.h"
30#include "log.h" 34#include "log.h"
31#include "canohost.h"
32#include "packet.h"
33#include "sshbuf.h" 35#include "sshbuf.h"
34#include "misc.h" 36#include "misc.h"
35#include "channels.h"
36#include "servconf.h"
37#include "sshkey.h" 37#include "sshkey.h"
38#include "match.h"
39#include "ssh2.h"
38#include "auth-options.h" 40#include "auth-options.h"
39#include "hostfile.h"
40#include "auth.h"
41
42/* Flags set authorized_keys flags */
43int no_port_forwarding_flag = 0;
44int no_agent_forwarding_flag = 0;
45int no_x11_forwarding_flag = 0;
46int no_pty_flag = 0;
47int no_user_rc = 0;
48int key_is_cert_authority = 0;
49
50/* "command=" option. */
51char *forced_command = NULL;
52
53/* "environment=" options. */
54struct envstring *custom_environment = NULL;
55
56/* "tunnel=" option. */
57int forced_tun_device = -1;
58
59/* "principals=" option. */
60char *authorized_principals = NULL;
61
62extern ServerOptions options;
63
64/* XXX refactor to be stateless */
65
66void
67auth_clear_options(void)
68{
69 struct ssh *ssh = active_state; /* XXX */
70
71 no_agent_forwarding_flag = 0;
72 no_port_forwarding_flag = 0;
73 no_pty_flag = 0;
74 no_x11_forwarding_flag = 0;
75 no_user_rc = 0;
76 key_is_cert_authority = 0;
77 while (custom_environment) {
78 struct envstring *ce = custom_environment;
79 custom_environment = ce->next;
80 free(ce->s);
81 free(ce);
82 }
83 free(forced_command);
84 forced_command = NULL;
85 free(authorized_principals);
86 authorized_principals = NULL;
87 forced_tun_device = -1;
88 channel_clear_permitted_opens(ssh);
89}
90 41
91/* 42/*
92 * Match flag 'opt' in *optsp, and if allow_negate is set then also match 43 * Match flag 'opt' in *optsp, and if allow_negate is set then also match
93 * 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0 44 * 'no-opt'. Returns -1 if option not matched, 1 if option matches or 0
94 * if negated option matches. 45 * if negated option matches.
95 * If the option or negated option matches, then *optsp is updated to 46 * If the option or negated option matches, then *optsp is updated to
96 * point to the first character after the option and, if 'msg' is not NULL 47 * point to the first character after the option.
97 * then a message based on it added via auth_debug_add().
98 */ 48 */
99static int 49static int
100match_flag(const char *opt, int allow_negate, char **optsp, const char *msg) 50opt_flag(const char *opt, int allow_negate, const char **optsp)
101{ 51{
102 size_t opt_len = strlen(opt); 52 size_t opt_len = strlen(opt);
103 char *opts = *optsp; 53 const char *opts = *optsp;
104 int negate = 0; 54 int negate = 0;
105 55
106 if (allow_negate && strncasecmp(opts, "no-", 3) == 0) { 56 if (allow_negate && strncasecmp(opts, "no-", 3) == 0) {
@@ -109,368 +59,92 @@ match_flag(const char *opt, int allow_negate, char **optsp, const char *msg)
109 } 59 }
110 if (strncasecmp(opts, opt, opt_len) == 0) { 60 if (strncasecmp(opts, opt, opt_len) == 0) {
111 *optsp = opts + opt_len; 61 *optsp = opts + opt_len;
112 if (msg != NULL) {
113 auth_debug_add("%s %s.", msg,
114 negate ? "disabled" : "enabled");
115 }
116 return negate ? 0 : 1; 62 return negate ? 0 : 1;
117 } 63 }
118 return -1; 64 return -1;
119} 65}
120 66
121/* 67static char *
122 * return 1 if access is granted, 0 if not. 68opt_dequote(const char **sp, const char **errstrp)
123 * side effect: sets key option flags
124 * XXX remove side effects; fill structure instead.
125 */
126int
127auth_parse_options(struct passwd *pw, char *opts, const char *file,
128 u_long linenum)
129{ 69{
130 struct ssh *ssh = active_state; /* XXX */ 70 const char *s = *sp;
131 const char *cp; 71 char *ret;
132 int i, r; 72 size_t i;
133 73
134 /* reset options */ 74 *errstrp = NULL;
135 auth_clear_options(); 75 if (*s != '"') {
76 *errstrp = "missing start quote";
77 return NULL;
78 }
79 s++;
80 if ((ret = malloc(strlen((s)) + 1)) == NULL) {
81 *errstrp = "memory allocation failed";
82 return NULL;
83 }
84 for (i = 0; *s != '\0' && *s != '"';) {
85 if (s[0] == '\\' && s[1] == '"')
86 s++;
87 ret[i++] = *s++;
88 }
89 if (*s == '\0') {
90 *errstrp = "missing end quote";
91 free(ret);
92 return NULL;
93 }
94 ret[i] = '\0';
95 s++;
96 *sp = s;
97 return ret;
98}
136 99
137 if (!opts) 100static int
101opt_match(const char **opts, const char *term)
102{
103 if (strncasecmp((*opts), term, strlen(term)) == 0 &&
104 (*opts)[strlen(term)] == '=') {
105 *opts += strlen(term) + 1;
138 return 1; 106 return 1;
139
140 while (*opts && *opts != ' ' && *opts != '\t') {
141 if ((r = match_flag("cert-authority", 0, &opts, NULL)) != -1) {
142 key_is_cert_authority = r;
143 goto next_option;
144 }
145 if ((r = match_flag("restrict", 0, &opts, NULL)) != -1) {
146 auth_debug_add("Key is restricted.");
147 no_port_forwarding_flag = 1;
148 no_agent_forwarding_flag = 1;
149 no_x11_forwarding_flag = 1;
150 no_pty_flag = 1;
151 no_user_rc = 1;
152 goto next_option;
153 }
154 if ((r = match_flag("port-forwarding", 1, &opts,
155 "Port forwarding")) != -1) {
156 no_port_forwarding_flag = r != 1;
157 goto next_option;
158 }
159 if ((r = match_flag("agent-forwarding", 1, &opts,
160 "Agent forwarding")) != -1) {
161 no_agent_forwarding_flag = r != 1;
162 goto next_option;
163 }
164 if ((r = match_flag("x11-forwarding", 1, &opts,
165 "X11 forwarding")) != -1) {
166 no_x11_forwarding_flag = r != 1;
167 goto next_option;
168 }
169 if ((r = match_flag("pty", 1, &opts,
170 "PTY allocation")) != -1) {
171 no_pty_flag = r != 1;
172 goto next_option;
173 }
174 if ((r = match_flag("user-rc", 1, &opts,
175 "User rc execution")) != -1) {
176 no_user_rc = r != 1;
177 goto next_option;
178 }
179 cp = "command=\"";
180 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
181 opts += strlen(cp);
182 free(forced_command);
183 forced_command = xmalloc(strlen(opts) + 1);
184 i = 0;
185 while (*opts) {
186 if (*opts == '"')
187 break;
188 if (*opts == '\\' && opts[1] == '"') {
189 opts += 2;
190 forced_command[i++] = '"';
191 continue;
192 }
193 forced_command[i++] = *opts++;
194 }
195 if (!*opts) {
196 debug("%.100s, line %lu: missing end quote",
197 file, linenum);
198 auth_debug_add("%.100s, line %lu: missing end quote",
199 file, linenum);
200 free(forced_command);
201 forced_command = NULL;
202 goto bad_option;
203 }
204 forced_command[i] = '\0';
205 auth_debug_add("Forced command.");
206 opts++;
207 goto next_option;
208 }
209 cp = "principals=\"";
210 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
211 opts += strlen(cp);
212 free(authorized_principals);
213 authorized_principals = xmalloc(strlen(opts) + 1);
214 i = 0;
215 while (*opts) {
216 if (*opts == '"')
217 break;
218 if (*opts == '\\' && opts[1] == '"') {
219 opts += 2;
220 authorized_principals[i++] = '"';
221 continue;
222 }
223 authorized_principals[i++] = *opts++;
224 }
225 if (!*opts) {
226 debug("%.100s, line %lu: missing end quote",
227 file, linenum);
228 auth_debug_add("%.100s, line %lu: missing end quote",
229 file, linenum);
230 free(authorized_principals);
231 authorized_principals = NULL;
232 goto bad_option;
233 }
234 authorized_principals[i] = '\0';
235 auth_debug_add("principals: %.900s",
236 authorized_principals);
237 opts++;
238 goto next_option;
239 }
240 cp = "environment=\"";
241 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
242 char *s;
243 struct envstring *new_envstring;
244
245 opts += strlen(cp);
246 s = xmalloc(strlen(opts) + 1);
247 i = 0;
248 while (*opts) {
249 if (*opts == '"')
250 break;
251 if (*opts == '\\' && opts[1] == '"') {
252 opts += 2;
253 s[i++] = '"';
254 continue;
255 }
256 s[i++] = *opts++;
257 }
258 if (!*opts) {
259 debug("%.100s, line %lu: missing end quote",
260 file, linenum);
261 auth_debug_add("%.100s, line %lu: missing end quote",
262 file, linenum);
263 free(s);
264 goto bad_option;
265 }
266 s[i] = '\0';
267 opts++;
268 if (options.permit_user_env) {
269 auth_debug_add("Adding to environment: "
270 "%.900s", s);
271 debug("Adding to environment: %.900s", s);
272 new_envstring = xcalloc(1,
273 sizeof(*new_envstring));
274 new_envstring->s = s;
275 new_envstring->next = custom_environment;
276 custom_environment = new_envstring;
277 s = NULL;
278 }
279 free(s);
280 goto next_option;
281 }
282 cp = "from=\"";
283 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
284 const char *remote_ip = ssh_remote_ipaddr(ssh);
285 const char *remote_host = auth_get_canonical_hostname(
286 ssh, options.use_dns);
287 char *patterns = xmalloc(strlen(opts) + 1);
288
289 opts += strlen(cp);
290 i = 0;
291 while (*opts) {
292 if (*opts == '"')
293 break;
294 if (*opts == '\\' && opts[1] == '"') {
295 opts += 2;
296 patterns[i++] = '"';
297 continue;
298 }
299 patterns[i++] = *opts++;
300 }
301 if (!*opts) {
302 debug("%.100s, line %lu: missing end quote",
303 file, linenum);
304 auth_debug_add("%.100s, line %lu: missing end quote",
305 file, linenum);
306 free(patterns);
307 goto bad_option;
308 }
309 patterns[i] = '\0';
310 opts++;
311 switch (match_host_and_ip(remote_host, remote_ip,
312 patterns)) {
313 case 1:
314 free(patterns);
315 /* Host name matches. */
316 goto next_option;
317 case -1:
318 debug("%.100s, line %lu: invalid criteria",
319 file, linenum);
320 auth_debug_add("%.100s, line %lu: "
321 "invalid criteria", file, linenum);
322 /* FALLTHROUGH */
323 case 0:
324 free(patterns);
325 logit("Authentication tried for %.100s with "
326 "correct key but not from a permitted "
327 "host (host=%.200s, ip=%.200s).",
328 pw->pw_name, remote_host, remote_ip);
329 auth_debug_add("Your host '%.200s' is not "
330 "permitted to use this key for login.",
331 remote_host);
332 break;
333 }
334 /* deny access */
335 return 0;
336 }
337 cp = "permitopen=\"";
338 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
339 char *host, *p;
340 int port;
341 char *patterns = xmalloc(strlen(opts) + 1);
342
343 opts += strlen(cp);
344 i = 0;
345 while (*opts) {
346 if (*opts == '"')
347 break;
348 if (*opts == '\\' && opts[1] == '"') {
349 opts += 2;
350 patterns[i++] = '"';
351 continue;
352 }
353 patterns[i++] = *opts++;
354 }
355 if (!*opts) {
356 debug("%.100s, line %lu: missing end quote",
357 file, linenum);
358 auth_debug_add("%.100s, line %lu: missing "
359 "end quote", file, linenum);
360 free(patterns);
361 goto bad_option;
362 }
363 patterns[i] = '\0';
364 opts++;
365 p = patterns;
366 /* XXX - add streamlocal support */
367 host = hpdelim(&p);
368 if (host == NULL || strlen(host) >= NI_MAXHOST) {
369 debug("%.100s, line %lu: Bad permitopen "
370 "specification <%.100s>", file, linenum,
371 patterns);
372 auth_debug_add("%.100s, line %lu: "
373 "Bad permitopen specification", file,
374 linenum);
375 free(patterns);
376 goto bad_option;
377 }
378 host = cleanhostname(host);
379 if (p == NULL || (port = permitopen_port(p)) < 0) {
380 debug("%.100s, line %lu: Bad permitopen port "
381 "<%.100s>", file, linenum, p ? p : "");
382 auth_debug_add("%.100s, line %lu: "
383 "Bad permitopen port", file, linenum);
384 free(patterns);
385 goto bad_option;
386 }
387 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0)
388 channel_add_permitted_opens(ssh, host, port);
389 free(patterns);
390 goto next_option;
391 }
392 cp = "tunnel=\"";
393 if (strncasecmp(opts, cp, strlen(cp)) == 0) {
394 char *tun = NULL;
395 opts += strlen(cp);
396 tun = xmalloc(strlen(opts) + 1);
397 i = 0;
398 while (*opts) {
399 if (*opts == '"')
400 break;
401 tun[i++] = *opts++;
402 }
403 if (!*opts) {
404 debug("%.100s, line %lu: missing end quote",
405 file, linenum);
406 auth_debug_add("%.100s, line %lu: missing end quote",
407 file, linenum);
408 free(tun);
409 forced_tun_device = -1;
410 goto bad_option;
411 }
412 tun[i] = '\0';
413 forced_tun_device = a2tun(tun, NULL);
414 free(tun);
415 if (forced_tun_device == SSH_TUNID_ERR) {
416 debug("%.100s, line %lu: invalid tun device",
417 file, linenum);
418 auth_debug_add("%.100s, line %lu: invalid tun device",
419 file, linenum);
420 forced_tun_device = -1;
421 goto bad_option;
422 }
423 auth_debug_add("Forced tun device: %d", forced_tun_device);
424 opts++;
425 goto next_option;
426 }
427next_option:
428 /*
429 * Skip the comma, and move to the next option
430 * (or break out if there are no more).
431 */
432 if (!*opts)
433 fatal("Bugs in auth-options.c option processing.");
434 if (*opts == ' ' || *opts == '\t')
435 break; /* End of options. */
436 if (*opts != ',')
437 goto bad_option;
438 opts++;
439 /* Process the next option. */
440 } 107 }
108 return 0;
109}
441 110
442 /* grant access */ 111static int
443 return 1; 112dup_strings(char ***dstp, size_t *ndstp, char **src, size_t nsrc)
113{
114 char **dst;
115 size_t i, j;
444 116
445bad_option: 117 *dstp = NULL;
446 logit("Bad options in %.100s file, line %lu: %.50s", 118 *ndstp = 0;
447 file, linenum, opts); 119 if (nsrc == 0)
448 auth_debug_add("Bad options in %.100s file, line %lu: %.50s", 120 return 0;
449 file, linenum, opts);
450 121
451 /* deny access */ 122 if ((dst = calloc(nsrc, sizeof(*src))) == NULL)
123 return -1;
124 for (i = 0; i < nsrc; i++) {
125 if ((dst[i] = strdup(src[i])) == NULL) {
126 for (j = 0; j < i; j++)
127 free(dst[j]);
128 free(dst);
129 return -1;
130 }
131 }
132 /* success */
133 *dstp = dst;
134 *ndstp = nsrc;
452 return 0; 135 return 0;
453} 136}
454 137
455#define OPTIONS_CRITICAL 1 138#define OPTIONS_CRITICAL 1
456#define OPTIONS_EXTENSIONS 2 139#define OPTIONS_EXTENSIONS 2
457static int 140static int
458parse_option_list(struct sshbuf *oblob, struct passwd *pw, 141cert_option_list(struct sshauthopt *opts, struct sshbuf *oblob,
459 u_int which, int crit, 142 u_int which, int crit)
460 int *cert_no_port_forwarding_flag,
461 int *cert_no_agent_forwarding_flag,
462 int *cert_no_x11_forwarding_flag,
463 int *cert_no_pty_flag,
464 int *cert_no_user_rc,
465 char **cert_forced_command,
466 int *cert_source_address_done)
467{ 143{
468 struct ssh *ssh = active_state; /* XXX */
469 char *command, *allowed; 144 char *command, *allowed;
470 const char *remote_ip;
471 char *name = NULL; 145 char *name = NULL;
472 struct sshbuf *c = NULL, *data = NULL; 146 struct sshbuf *c = NULL, *data = NULL;
473 int r, ret = -1, result, found; 147 int r, ret = -1, found;
474 148
475 if ((c = sshbuf_fromb(oblob)) == NULL) { 149 if ((c = sshbuf_fromb(oblob)) == NULL) {
476 error("%s: sshbuf_fromb failed", __func__); 150 error("%s: sshbuf_fromb failed", __func__);
@@ -491,21 +165,21 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
491 found = 0; 165 found = 0;
492 if ((which & OPTIONS_EXTENSIONS) != 0) { 166 if ((which & OPTIONS_EXTENSIONS) != 0) {
493 if (strcmp(name, "permit-X11-forwarding") == 0) { 167 if (strcmp(name, "permit-X11-forwarding") == 0) {
494 *cert_no_x11_forwarding_flag = 0; 168 opts->permit_x11_forwarding_flag = 1;
495 found = 1; 169 found = 1;
496 } else if (strcmp(name, 170 } else if (strcmp(name,
497 "permit-agent-forwarding") == 0) { 171 "permit-agent-forwarding") == 0) {
498 *cert_no_agent_forwarding_flag = 0; 172 opts->permit_agent_forwarding_flag = 1;
499 found = 1; 173 found = 1;
500 } else if (strcmp(name, 174 } else if (strcmp(name,
501 "permit-port-forwarding") == 0) { 175 "permit-port-forwarding") == 0) {
502 *cert_no_port_forwarding_flag = 0; 176 opts->permit_port_forwarding_flag = 1;
503 found = 1; 177 found = 1;
504 } else if (strcmp(name, "permit-pty") == 0) { 178 } else if (strcmp(name, "permit-pty") == 0) {
505 *cert_no_pty_flag = 0; 179 opts->permit_pty_flag = 1;
506 found = 1; 180 found = 1;
507 } else if (strcmp(name, "permit-user-rc") == 0) { 181 } else if (strcmp(name, "permit-user-rc") == 0) {
508 *cert_no_user_rc = 0; 182 opts->permit_user_rc = 1;
509 found = 1; 183 found = 1;
510 } 184 }
511 } 185 }
@@ -517,13 +191,13 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
517 "section: %s", name, ssh_err(r)); 191 "section: %s", name, ssh_err(r));
518 goto out; 192 goto out;
519 } 193 }
520 if (*cert_forced_command != NULL) { 194 if (opts->force_command != NULL) {
521 error("Certificate has multiple " 195 error("Certificate has multiple "
522 "force-command options"); 196 "force-command options");
523 free(command); 197 free(command);
524 goto out; 198 goto out;
525 } 199 }
526 *cert_forced_command = command; 200 opts->force_command = command;
527 found = 1; 201 found = 1;
528 } 202 }
529 if (strcmp(name, "source-address") == 0) { 203 if (strcmp(name, "source-address") == 0) {
@@ -533,38 +207,19 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
533 "section: %s", name, ssh_err(r)); 207 "section: %s", name, ssh_err(r));
534 goto out; 208 goto out;
535 } 209 }
536 if ((*cert_source_address_done)++) { 210 if (opts->required_from_host_cert != NULL) {
537 error("Certificate has multiple " 211 error("Certificate has multiple "
538 "source-address options"); 212 "source-address options");
539 free(allowed); 213 free(allowed);
540 goto out; 214 goto out;
541 } 215 }
542 remote_ip = ssh_remote_ipaddr(ssh); 216 /* Check syntax */
543 result = addr_match_cidr_list(remote_ip, 217 if (addr_match_cidr_list(NULL, allowed) == -1) {
544 allowed);
545 free(allowed);
546 switch (result) {
547 case 1:
548 /* accepted */
549 break;
550 case 0:
551 /* no match */
552 logit("Authentication tried for %.100s "
553 "with valid certificate but not "
554 "from a permitted host "
555 "(ip=%.200s).", pw->pw_name,
556 remote_ip);
557 auth_debug_add("Your address '%.200s' "
558 "is not permitted to use this "
559 "certificate for login.",
560 remote_ip);
561 goto out;
562 case -1:
563 default:
564 error("Certificate source-address " 218 error("Certificate source-address "
565 "contents invalid"); 219 "contents invalid");
566 goto out; 220 goto out;
567 } 221 }
222 opts->required_from_host_cert = allowed;
568 found = 1; 223 found = 1;
569 } 224 }
570 } 225 }
@@ -590,74 +245,628 @@ parse_option_list(struct sshbuf *oblob, struct passwd *pw,
590 ret = 0; 245 ret = 0;
591 246
592 out: 247 out:
593 if (ret != 0 &&
594 cert_forced_command != NULL &&
595 *cert_forced_command != NULL) {
596 free(*cert_forced_command);
597 *cert_forced_command = NULL;
598 }
599 free(name); 248 free(name);
600 sshbuf_free(data); 249 sshbuf_free(data);
601 sshbuf_free(c); 250 sshbuf_free(c);
602 return ret; 251 return ret;
603} 252}
604 253
254struct sshauthopt *
255sshauthopt_new(void)
256{
257 struct sshauthopt *ret;
258
259 if ((ret = calloc(1, sizeof(*ret))) == NULL)
260 return NULL;
261 ret->force_tun_device = -1;
262 return ret;
263}
264
265void
266sshauthopt_free(struct sshauthopt *opts)
267{
268 size_t i;
269
270 if (opts == NULL)
271 return;
272
273 free(opts->cert_principals);
274 free(opts->force_command);
275 free(opts->required_from_host_cert);
276 free(opts->required_from_host_keys);
277
278 for (i = 0; i < opts->nenv; i++)
279 free(opts->env[i]);
280 free(opts->env);
281
282 for (i = 0; i < opts->npermitopen; i++)
283 free(opts->permitopen[i]);
284 free(opts->permitopen);
285
286 explicit_bzero(opts, sizeof(*opts));
287 free(opts);
288}
289
290struct sshauthopt *
291sshauthopt_new_with_keys_defaults(void)
292{
293 struct sshauthopt *ret = NULL;
294
295 if ((ret = sshauthopt_new()) == NULL)
296 return NULL;
297
298 /* Defaults for authorized_keys flags */
299 ret->permit_port_forwarding_flag = 1;
300 ret->permit_agent_forwarding_flag = 1;
301 ret->permit_x11_forwarding_flag = 1;
302 ret->permit_pty_flag = 1;
303 ret->permit_user_rc = 1;
304 return ret;
305}
306
307struct sshauthopt *
308sshauthopt_parse(const char *opts, const char **errstrp)
309{
310 char **oarray, *opt, *cp, *tmp, *host;
311 int r;
312 struct sshauthopt *ret = NULL;
313 const char *errstr = "unknown error";
314 uint64_t valid_before;
315
316 if (errstrp != NULL)
317 *errstrp = NULL;
318 if ((ret = sshauthopt_new_with_keys_defaults()) == NULL)
319 goto alloc_fail;
320
321 if (opts == NULL)
322 return ret;
323
324 while (*opts && *opts != ' ' && *opts != '\t') {
325 /* flag options */
326 if ((r = opt_flag("restrict", 0, &opts)) != -1) {
327 ret->restricted = 1;
328 ret->permit_port_forwarding_flag = 0;
329 ret->permit_agent_forwarding_flag = 0;
330 ret->permit_x11_forwarding_flag = 0;
331 ret->permit_pty_flag = 0;
332 ret->permit_user_rc = 0;
333 } else if ((r = opt_flag("cert-authority", 0, &opts)) != -1) {
334 ret->cert_authority = r;
335 } else if ((r = opt_flag("port-forwarding", 1, &opts)) != -1) {
336 ret->permit_port_forwarding_flag = r == 1;
337 } else if ((r = opt_flag("agent-forwarding", 1, &opts)) != -1) {
338 ret->permit_agent_forwarding_flag = r == 1;
339 } else if ((r = opt_flag("x11-forwarding", 1, &opts)) != -1) {
340 ret->permit_x11_forwarding_flag = r == 1;
341 } else if ((r = opt_flag("pty", 1, &opts)) != -1) {
342 ret->permit_pty_flag = r == 1;
343 } else if ((r = opt_flag("user-rc", 1, &opts)) != -1) {
344 ret->permit_user_rc = r == 1;
345 } else if (opt_match(&opts, "command")) {
346 if (ret->force_command != NULL) {
347 errstr = "multiple \"command\" clauses";
348 goto fail;
349 }
350 ret->force_command = opt_dequote(&opts, &errstr);
351 if (ret->force_command == NULL)
352 goto fail;
353 } else if (opt_match(&opts, "principals")) {
354 if (ret->cert_principals != NULL) {
355 errstr = "multiple \"principals\" clauses";
356 goto fail;
357 }
358 ret->cert_principals = opt_dequote(&opts, &errstr);
359 if (ret->cert_principals == NULL)
360 goto fail;
361 } else if (opt_match(&opts, "from")) {
362 if (ret->required_from_host_keys != NULL) {
363 errstr = "multiple \"from\" clauses";
364 goto fail;
365 }
366 ret->required_from_host_keys = opt_dequote(&opts,
367 &errstr);
368 if (ret->required_from_host_keys == NULL)
369 goto fail;
370 } else if (opt_match(&opts, "expiry-time")) {
371 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
372 goto fail;
373 if (parse_absolute_time(opt, &valid_before) != 0 ||
374 valid_before == 0) {
375 free(opt);
376 errstr = "invalid expires time";
377 goto fail;
378 }
379 free(opt);
380 if (ret->valid_before == 0 ||
381 valid_before < ret->valid_before)
382 ret->valid_before = valid_before;
383 } else if (opt_match(&opts, "environment")) {
384 if (ret->nenv > INT_MAX) {
385 errstr = "too many environment strings";
386 goto fail;
387 }
388 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
389 goto fail;
390 /* env name must be alphanumeric and followed by '=' */
391 if ((tmp = strchr(opt, '=')) == NULL) {
392 free(opt);
393 errstr = "invalid environment string";
394 goto fail;
395 }
396 for (cp = opt; cp < tmp; cp++) {
397 if (!isalnum((u_char)*cp)) {
398 free(opt);
399 errstr = "invalid environment string";
400 goto fail;
401 }
402 }
403 /* Append it. */
404 oarray = ret->env;
405 if ((ret->env = recallocarray(ret->env, ret->nenv,
406 ret->nenv + 1, sizeof(*ret->env))) == NULL) {
407 free(opt);
408 ret->env = oarray; /* put it back for cleanup */
409 goto alloc_fail;
410 }
411 ret->env[ret->nenv++] = opt;
412 } else if (opt_match(&opts, "permitopen")) {
413 if (ret->npermitopen > INT_MAX) {
414 errstr = "too many permitopens";
415 goto fail;
416 }
417 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
418 goto fail;
419 if ((tmp = strdup(opt)) == NULL) {
420 free(opt);
421 goto alloc_fail;
422 }
423 cp = tmp;
424 /* validate syntax of permitopen before recording it. */
425 host = hpdelim(&cp);
426 if (host == NULL || strlen(host) >= NI_MAXHOST) {
427 free(tmp);
428 free(opt);
429 errstr = "invalid permitopen hostname";
430 goto fail;
431 }
432 /*
433 * don't want to use permitopen_port to avoid
434 * dependency on channels.[ch] here.
435 */
436 if (cp == NULL ||
437 (strcmp(cp, "*") != 0 && a2port(cp) <= 0)) {
438 free(tmp);
439 free(opt);
440 errstr = "invalid permitopen port";
441 goto fail;
442 }
443 /* XXX - add streamlocal support */
444 free(tmp);
445 /* Record it */
446 oarray = ret->permitopen;
447 if ((ret->permitopen = recallocarray(ret->permitopen,
448 ret->npermitopen, ret->npermitopen + 1,
449 sizeof(*ret->permitopen))) == NULL) {
450 free(opt);
451 ret->permitopen = oarray;
452 goto alloc_fail;
453 }
454 ret->permitopen[ret->npermitopen++] = opt;
455 } else if (opt_match(&opts, "tunnel")) {
456 if ((opt = opt_dequote(&opts, &errstr)) == NULL)
457 goto fail;
458 ret->force_tun_device = a2tun(opt, NULL);
459 free(opt);
460 if (ret->force_tun_device == SSH_TUNID_ERR) {
461 errstr = "invalid tun device";
462 goto fail;
463 }
464 }
465 /*
466 * Skip the comma, and move to the next option
467 * (or break out if there are no more).
468 */
469 if (*opts == '\0' || *opts == ' ' || *opts == '\t')
470 break; /* End of options. */
471 /* Anything other than a comma is an unknown option */
472 if (*opts != ',') {
473 errstr = "unknown key option";
474 goto fail;
475 }
476 opts++;
477 if (*opts == '\0') {
478 errstr = "unexpected end-of-options";
479 goto fail;
480 }
481 }
482
483 /* success */
484 if (errstrp != NULL)
485 *errstrp = NULL;
486 return ret;
487
488alloc_fail:
489 errstr = "memory allocation failed";
490fail:
491 sshauthopt_free(ret);
492 if (errstrp != NULL)
493 *errstrp = errstr;
494 return NULL;
495}
496
497struct sshauthopt *
498sshauthopt_from_cert(struct sshkey *k)
499{
500 struct sshauthopt *ret;
501
502 if (k == NULL || !sshkey_type_is_cert(k->type) || k->cert == NULL ||
503 k->cert->type != SSH2_CERT_TYPE_USER)
504 return NULL;
505
506 if ((ret = sshauthopt_new()) == NULL)
507 return NULL;
508
509 /* Handle options and critical extensions separately */
510 if (cert_option_list(ret, k->cert->critical,
511 OPTIONS_CRITICAL, 1) == -1) {
512 sshauthopt_free(ret);
513 return NULL;
514 }
515 if (cert_option_list(ret, k->cert->extensions,
516 OPTIONS_EXTENSIONS, 0) == -1) {
517 sshauthopt_free(ret);
518 return NULL;
519 }
520 /* success */
521 return ret;
522}
523
605/* 524/*
606 * Set options from critical certificate options. These supersede user key 525 * Merges "additional" options to "primary" and returns the result.
607 * options so this must be called after auth_parse_options(). 526 * NB. Some options from primary have primacy.
608 */ 527 */
609int 528struct sshauthopt *
610auth_cert_options(struct sshkey *k, struct passwd *pw, const char **reason) 529sshauthopt_merge(const struct sshauthopt *primary,
530 const struct sshauthopt *additional, const char **errstrp)
611{ 531{
612 int cert_no_port_forwarding_flag = 1; 532 struct sshauthopt *ret;
613 int cert_no_agent_forwarding_flag = 1; 533 const char *errstr = "internal error";
614 int cert_no_x11_forwarding_flag = 1; 534 const char *tmp;
615 int cert_no_pty_flag = 1; 535
616 int cert_no_user_rc = 1; 536 if (errstrp != NULL)
617 char *cert_forced_command = NULL; 537 *errstrp = NULL;
618 int cert_source_address_done = 0; 538
619 539 if ((ret = sshauthopt_new()) == NULL)
620 *reason = "invalid certificate options"; 540 goto alloc_fail;
621 541
622 /* Separate options and extensions for v01 certs */ 542 /* cert_authority and cert_principals are cleared in result */
623 if (parse_option_list(k->cert->critical, pw, 543
624 OPTIONS_CRITICAL, 1, NULL, NULL, NULL, NULL, NULL, 544 /* Prefer access lists from primary. */
625 &cert_forced_command, 545 /* XXX err is both set and mismatch? */
626 &cert_source_address_done) == -1) 546 tmp = primary->required_from_host_cert;
627 return -1; 547 if (tmp == NULL)
628 if (parse_option_list(k->cert->extensions, pw, 548 tmp = additional->required_from_host_cert;
629 OPTIONS_EXTENSIONS, 0, 549 if (tmp != NULL && (ret->required_from_host_cert = strdup(tmp)) == NULL)
630 &cert_no_port_forwarding_flag, 550 goto alloc_fail;
631 &cert_no_agent_forwarding_flag, 551 tmp = primary->required_from_host_keys;
632 &cert_no_x11_forwarding_flag, 552 if (tmp == NULL)
633 &cert_no_pty_flag, 553 tmp = additional->required_from_host_keys;
634 &cert_no_user_rc, 554 if (tmp != NULL && (ret->required_from_host_keys = strdup(tmp)) == NULL)
635 NULL, NULL) == -1) 555 goto alloc_fail;
636 return -1; 556
557 /* force_tun_device, permitopen and environment prefer the primary. */
558 ret->force_tun_device = primary->force_tun_device;
559 if (ret->force_tun_device == -1)
560 ret->force_tun_device = additional->force_tun_device;
561 if (primary->nenv > 0) {
562 if (dup_strings(&ret->env, &ret->nenv,
563 primary->env, primary->nenv) != 0)
564 goto alloc_fail;
565 } else if (additional->nenv) {
566 if (dup_strings(&ret->env, &ret->nenv,
567 additional->env, additional->nenv) != 0)
568 goto alloc_fail;
569 }
570 if (primary->npermitopen > 0) {
571 if (dup_strings(&ret->permitopen, &ret->npermitopen,
572 primary->permitopen, primary->npermitopen) != 0)
573 goto alloc_fail;
574 } else if (additional->npermitopen > 0) {
575 if (dup_strings(&ret->permitopen, &ret->npermitopen,
576 additional->permitopen, additional->npermitopen) != 0)
577 goto alloc_fail;
578 }
579
580 /* Flags are logical-AND (i.e. must be set in both for permission) */
581#define OPTFLAG(x) ret->x = (primary->x == 1) && (additional->x == 1)
582 OPTFLAG(permit_port_forwarding_flag);
583 OPTFLAG(permit_agent_forwarding_flag);
584 OPTFLAG(permit_x11_forwarding_flag);
585 OPTFLAG(permit_pty_flag);
586 OPTFLAG(permit_user_rc);
587#undef OPTFLAG
588
589 /* Earliest expiry time should win */
590 if (primary->valid_before != 0)
591 ret->valid_before = primary->valid_before;
592 if (additional->valid_before != 0 &&
593 additional->valid_before < ret->valid_before)
594 ret->valid_before = additional->valid_before;
637 595
638 no_port_forwarding_flag |= cert_no_port_forwarding_flag;
639 no_agent_forwarding_flag |= cert_no_agent_forwarding_flag;
640 no_x11_forwarding_flag |= cert_no_x11_forwarding_flag;
641 no_pty_flag |= cert_no_pty_flag;
642 no_user_rc |= cert_no_user_rc;
643 /* 596 /*
644 * Only permit both CA and key option forced-command if they match. 597 * When both multiple forced-command are specified, only
645 * Otherwise refuse the certificate. 598 * proceed if they are identical, otherwise fail.
646 */ 599 */
647 if (cert_forced_command != NULL && forced_command != NULL) { 600 if (primary->force_command != NULL &&
648 if (strcmp(forced_command, cert_forced_command) == 0) { 601 additional->force_command != NULL) {
649 free(forced_command); 602 if (strcmp(primary->force_command,
650 forced_command = cert_forced_command; 603 additional->force_command) == 0) {
604 /* ok */
605 ret->force_command = strdup(primary->force_command);
606 if (ret->force_command == NULL)
607 goto alloc_fail;
651 } else { 608 } else {
652 *reason = "certificate and key options forced command " 609 errstr = "forced command options do not match";
653 "do not match"; 610 goto fail;
654 free(cert_forced_command);
655 return -1;
656 } 611 }
657 } else if (cert_forced_command != NULL) 612 } else if (primary->force_command != NULL) {
658 forced_command = cert_forced_command; 613 if ((ret->force_command = strdup(
614 primary->force_command)) == NULL)
615 goto alloc_fail;
616 } else if (additional->force_command != NULL) {
617 if ((ret->force_command = strdup(
618 additional->force_command)) == NULL)
619 goto alloc_fail;
620 }
621 /* success */
622 if (errstrp != NULL)
623 *errstrp = NULL;
624 return ret;
625
626 alloc_fail:
627 errstr = "memory allocation failed";
628 fail:
629 if (errstrp != NULL)
630 *errstrp = errstr;
631 sshauthopt_free(ret);
632 return NULL;
633}
634
635/*
636 * Copy options
637 */
638struct sshauthopt *
639sshauthopt_copy(const struct sshauthopt *orig)
640{
641 struct sshauthopt *ret;
642
643 if ((ret = sshauthopt_new()) == NULL)
644 return NULL;
645
646#define OPTSCALAR(x) ret->x = orig->x
647 OPTSCALAR(permit_port_forwarding_flag);
648 OPTSCALAR(permit_agent_forwarding_flag);
649 OPTSCALAR(permit_x11_forwarding_flag);
650 OPTSCALAR(permit_pty_flag);
651 OPTSCALAR(permit_user_rc);
652 OPTSCALAR(restricted);
653 OPTSCALAR(cert_authority);
654 OPTSCALAR(force_tun_device);
655 OPTSCALAR(valid_before);
656#undef OPTSCALAR
657#define OPTSTRING(x) \
658 do { \
659 if (orig->x != NULL && (ret->x = strdup(orig->x)) == NULL) { \
660 sshauthopt_free(ret); \
661 return NULL; \
662 } \
663 } while (0)
664 OPTSTRING(cert_principals);
665 OPTSTRING(force_command);
666 OPTSTRING(required_from_host_cert);
667 OPTSTRING(required_from_host_keys);
668#undef OPTSTRING
669
670 if (dup_strings(&ret->env, &ret->nenv, orig->env, orig->nenv) != 0 ||
671 dup_strings(&ret->permitopen, &ret->npermitopen,
672 orig->permitopen, orig->npermitopen) != 0) {
673 sshauthopt_free(ret);
674 return NULL;
675 }
676 return ret;
677}
678
679static int
680serialise_array(struct sshbuf *m, char **a, size_t n)
681{
682 struct sshbuf *b;
683 size_t i;
684 int r;
685
686 if (n > INT_MAX)
687 return SSH_ERR_INTERNAL_ERROR;
688
689 if ((b = sshbuf_new()) == NULL) {
690 return SSH_ERR_ALLOC_FAIL;
691 }
692 for (i = 0; i < n; i++) {
693 if ((r = sshbuf_put_cstring(b, a[i])) != 0) {
694 sshbuf_free(b);
695 return r;
696 }
697 }
698 if ((r = sshbuf_put_u32(m, n)) != 0 ||
699 (r = sshbuf_put_stringb(m, b)) != 0) {
700 sshbuf_free(b);
701 return r;
702 }
659 /* success */ 703 /* success */
660 *reason = NULL;
661 return 0; 704 return 0;
662} 705}
663 706
707static int
708deserialise_array(struct sshbuf *m, char ***ap, size_t *np)
709{
710 char **a = NULL;
711 size_t i, n = 0;
712 struct sshbuf *b = NULL;
713 u_int tmp;
714 int r = SSH_ERR_INTERNAL_ERROR;
715
716 if ((r = sshbuf_get_u32(m, &tmp)) != 0 ||
717 (r = sshbuf_froms(m, &b)) != 0)
718 goto out;
719 if (tmp > INT_MAX) {
720 r = SSH_ERR_INVALID_FORMAT;
721 goto out;
722 }
723 n = tmp;
724 if (n > 0 && (a = calloc(n, sizeof(*a))) == NULL) {
725 r = SSH_ERR_ALLOC_FAIL;
726 goto out;
727 }
728 for (i = 0; i < n; i++) {
729 if ((r = sshbuf_get_cstring(b, &a[i], NULL)) != 0)
730 goto out;
731 }
732 /* success */
733 r = 0;
734 *ap = a;
735 a = NULL;
736 *np = n;
737 n = 0;
738 out:
739 for (i = 0; i < n; i++)
740 free(a[i]);
741 free(a);
742 sshbuf_free(b);
743 return r;
744}
745
746static int
747serialise_nullable_string(struct sshbuf *m, const char *s)
748{
749 int r;
750
751 if ((r = sshbuf_put_u8(m, s == NULL)) != 0 ||
752 (r = sshbuf_put_cstring(m, s)) != 0)
753 return r;
754 return 0;
755}
756
757static int
758deserialise_nullable_string(struct sshbuf *m, char **sp)
759{
760 int r;
761 u_char flag;
762
763 *sp = NULL;
764 if ((r = sshbuf_get_u8(m, &flag)) != 0 ||
765 (r = sshbuf_get_cstring(m, flag ? NULL : sp, NULL)) != 0)
766 return r;
767 return 0;
768}
769
770int
771sshauthopt_serialise(const struct sshauthopt *opts, struct sshbuf *m,
772 int untrusted)
773{
774 int r = SSH_ERR_INTERNAL_ERROR;
775
776 /* Flag and simple integer options */
777 if ((r = sshbuf_put_u8(m, opts->permit_port_forwarding_flag)) != 0 ||
778 (r = sshbuf_put_u8(m, opts->permit_agent_forwarding_flag)) != 0 ||
779 (r = sshbuf_put_u8(m, opts->permit_x11_forwarding_flag)) != 0 ||
780 (r = sshbuf_put_u8(m, opts->permit_pty_flag)) != 0 ||
781 (r = sshbuf_put_u8(m, opts->permit_user_rc)) != 0 ||
782 (r = sshbuf_put_u8(m, opts->restricted)) != 0 ||
783 (r = sshbuf_put_u8(m, opts->cert_authority)) != 0 ||
784 (r = sshbuf_put_u64(m, opts->valid_before)) != 0)
785 return r;
786
787 /* tunnel number can be negative to indicate "unset" */
788 if ((r = sshbuf_put_u8(m, opts->force_tun_device == -1)) != 0 ||
789 (r = sshbuf_put_u32(m, (opts->force_tun_device < 0) ?
790 0 : (u_int)opts->force_tun_device)) != 0)
791 return r;
792
793 /* String options; these may be NULL */
794 if ((r = serialise_nullable_string(m,
795 untrusted ? "yes" : opts->cert_principals)) != 0 ||
796 (r = serialise_nullable_string(m,
797 untrusted ? "true" : opts->force_command)) != 0 ||
798 (r = serialise_nullable_string(m,
799 untrusted ? NULL : opts->required_from_host_cert)) != 0 ||
800 (r = serialise_nullable_string(m,
801 untrusted ? NULL : opts->required_from_host_keys)) != 0)
802 return r;
803
804 /* Array options */
805 if ((r = serialise_array(m, opts->env,
806 untrusted ? 0 : opts->nenv)) != 0 ||
807 (r = serialise_array(m, opts->permitopen,
808 untrusted ? 0 : opts->npermitopen)) != 0)
809 return r;
810
811 /* success */
812 return 0;
813}
814
815int
816sshauthopt_deserialise(struct sshbuf *m, struct sshauthopt **optsp)
817{
818 struct sshauthopt *opts = NULL;
819 int r = SSH_ERR_INTERNAL_ERROR;
820 u_char f;
821 u_int tmp;
822
823 if ((opts = calloc(1, sizeof(*opts))) == NULL)
824 return SSH_ERR_ALLOC_FAIL;
825
826#define OPT_FLAG(x) \
827 do { \
828 if ((r = sshbuf_get_u8(m, &f)) != 0) \
829 goto out; \
830 opts->x = f; \
831 } while (0)
832 OPT_FLAG(permit_port_forwarding_flag);
833 OPT_FLAG(permit_agent_forwarding_flag);
834 OPT_FLAG(permit_x11_forwarding_flag);
835 OPT_FLAG(permit_pty_flag);
836 OPT_FLAG(permit_user_rc);
837 OPT_FLAG(restricted);
838 OPT_FLAG(cert_authority);
839#undef OPT_FLAG
840
841 if ((r = sshbuf_get_u64(m, &opts->valid_before)) != 0)
842 goto out;
843
844 /* tunnel number can be negative to indicate "unset" */
845 if ((r = sshbuf_get_u8(m, &f)) != 0 ||
846 (r = sshbuf_get_u32(m, &tmp)) != 0)
847 goto out;
848 opts->force_tun_device = f ? -1 : (int)tmp;
849
850 /* String options may be NULL */
851 if ((r = deserialise_nullable_string(m, &opts->cert_principals)) != 0 ||
852 (r = deserialise_nullable_string(m, &opts->force_command)) != 0 ||
853 (r = deserialise_nullable_string(m,
854 &opts->required_from_host_cert)) != 0 ||
855 (r = deserialise_nullable_string(m,
856 &opts->required_from_host_keys)) != 0)
857 goto out;
858
859 /* Array options */
860 if ((r = deserialise_array(m, &opts->env, &opts->nenv)) != 0 ||
861 (r = deserialise_array(m,
862 &opts->permitopen, &opts->npermitopen)) != 0)
863 goto out;
864
865 /* success */
866 r = 0;
867 *optsp = opts;
868 opts = NULL;
869 out:
870 sshauthopt_free(opts);
871 return r;
872}
diff --git a/auth-options.h b/auth-options.h
index 547f01635..bf59b30be 100644
--- a/auth-options.h
+++ b/auth-options.h
@@ -1,40 +1,91 @@
1/* $OpenBSD: auth-options.h,v 1.23 2017/05/31 10:54:00 markus Exp $ */ 1/* $OpenBSD: auth-options.h,v 1.26 2018/03/12 00:52:01 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Copyright (c) 2018 Damien Miller <djm@mindrot.org>
5 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
6 * All rights reserved
7 * 5 *
8 * As far as I am concerned, the code I have written for this software 6 * Permission to use, copy, modify, and distribute this software for any
9 * can be used freely for any purpose. Any derived versions of this 7 * purpose with or without fee is hereby granted, provided that the above
10 * software must be clearly marked as such, and if the derived work is 8 * copyright notice and this permission notice appear in all copies.
11 * incompatible with the protocol description in the RFC file, it must be 9 *
12 * called by a name other than "ssh" or "Secure Shell". 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
13 */ 17 */
14 18
15#ifndef AUTH_OPTIONS_H 19#ifndef AUTH_OPTIONS_H
16#define AUTH_OPTIONS_H 20#define AUTH_OPTIONS_H
17 21
18/* Linked list of custom environment strings */ 22struct passwd;
19struct envstring { 23struct sshkey;
20 struct envstring *next; 24
21 char *s; 25/*
26 * sshauthopt represents key options parsed from authorized_keys or
27 * from certificate extensions/options.
28 */
29struct sshauthopt {
30 /* Feature flags */
31 int permit_port_forwarding_flag;
32 int permit_agent_forwarding_flag;
33 int permit_x11_forwarding_flag;
34 int permit_pty_flag;
35 int permit_user_rc;
36
37 /* "restrict" keyword was invoked */
38 int restricted;
39
40 /* key/principal expiry date */
41 uint64_t valid_before;
42
43 /* Certificate-related options */
44 int cert_authority;
45 char *cert_principals;
46
47 int force_tun_device;
48 char *force_command;
49
50 /* Custom environment */
51 size_t nenv;
52 char **env;
53
54 /* Permitted port forwardings */
55 size_t npermitopen;
56 char **permitopen;
57
58 /*
59 * Permitted host/addresses (comma-separated)
60 * Caller must check source address matches both lists (if present).
61 */
62 char *required_from_host_cert;
63 char *required_from_host_keys;
22}; 64};
23 65
24/* Flags that may be set in authorized_keys options. */ 66struct sshauthopt *sshauthopt_new(void);
25extern int no_port_forwarding_flag; 67struct sshauthopt *sshauthopt_new_with_keys_defaults(void);
26extern int no_agent_forwarding_flag; 68void sshauthopt_free(struct sshauthopt *opts);
27extern int no_x11_forwarding_flag; 69struct sshauthopt *sshauthopt_copy(const struct sshauthopt *orig);
28extern int no_pty_flag; 70int sshauthopt_serialise(const struct sshauthopt *opts, struct sshbuf *m, int);
29extern int no_user_rc; 71int sshauthopt_deserialise(struct sshbuf *m, struct sshauthopt **opts);
30extern char *forced_command; 72
31extern struct envstring *custom_environment; 73/*
32extern int forced_tun_device; 74 * Parse authorized_keys options. Returns an options structure on success
33extern int key_is_cert_authority; 75 * or NULL on failure. Will set errstr on failure.
34extern char *authorized_principals; 76 */
35 77struct sshauthopt *sshauthopt_parse(const char *s, const char **errstr);
36int auth_parse_options(struct passwd *, char *, const char *, u_long); 78
37void auth_clear_options(void); 79/*
38int auth_cert_options(struct sshkey *, struct passwd *, const char **); 80 * Parse certification options to a struct sshauthopt.
81 * Returns options on success or NULL on failure.
82 */
83struct sshauthopt *sshauthopt_from_cert(struct sshkey *k);
84
85/*
86 * Merge key options.
87 */
88struct sshauthopt *sshauthopt_merge(const struct sshauthopt *primary,
89 const struct sshauthopt *additional, const char **errstrp);
39 90
40#endif 91#endif
diff --git a/auth-pam.c b/auth-pam.c
index de29c04c9..00ba87775 100644
--- a/auth-pam.c
+++ b/auth-pam.c
@@ -287,18 +287,27 @@ sshpam_chauthtok_ruid(pam_handle_t *pamh, int flags)
287void 287void
288sshpam_password_change_required(int reqd) 288sshpam_password_change_required(int reqd)
289{ 289{
290 extern struct sshauthopt *auth_opts;
291 static int saved_port, saved_agent, saved_x11;
292
290 debug3("%s %d", __func__, reqd); 293 debug3("%s %d", __func__, reqd);
291 if (sshpam_authctxt == NULL) 294 if (sshpam_authctxt == NULL)
292 fatal("%s: PAM authctxt not initialized", __func__); 295 fatal("%s: PAM authctxt not initialized", __func__);
293 sshpam_authctxt->force_pwchange = reqd; 296 sshpam_authctxt->force_pwchange = reqd;
294 if (reqd) { 297 if (reqd) {
295 no_port_forwarding_flag |= 2; 298 saved_port = auth_opts->permit_port_forwarding_flag;
296 no_agent_forwarding_flag |= 2; 299 saved_agent = auth_opts->permit_agent_forwarding_flag;
297 no_x11_forwarding_flag |= 2; 300 saved_x11 = auth_opts->permit_x11_forwarding_flag;
301 auth_opts->permit_port_forwarding_flag = 0;
302 auth_opts->permit_agent_forwarding_flag = 0;
303 auth_opts->permit_x11_forwarding_flag = 0;
298 } else { 304 } else {
299 no_port_forwarding_flag &= ~2; 305 if (saved_port)
300 no_agent_forwarding_flag &= ~2; 306 auth_opts->permit_port_forwarding_flag = saved_port;
301 no_x11_forwarding_flag &= ~2; 307 if (saved_agent)
308 auth_opts->permit_agent_forwarding_flag = saved_agent;
309 if (saved_x11)
310 auth_opts->permit_x11_forwarding_flag = saved_x11;
302 } 311 }
303} 312}
304 313
@@ -1077,7 +1086,7 @@ do_pam_chauthtok(void)
1077} 1086}
1078 1087
1079void 1088void
1080do_pam_session(void) 1089do_pam_session(struct ssh *ssh)
1081{ 1090{
1082 debug3("PAM: opening session"); 1091 debug3("PAM: opening session");
1083 1092
@@ -1093,7 +1102,7 @@ do_pam_session(void)
1093 sshpam_session_open = 1; 1102 sshpam_session_open = 1;
1094 else { 1103 else {
1095 sshpam_session_open = 0; 1104 sshpam_session_open = 0;
1096 disable_forwarding(); 1105 auth_restrict_session(ssh);
1097 error("PAM: pam_open_session(): %s", 1106 error("PAM: pam_open_session(): %s",
1098 pam_strerror(sshpam_handle, sshpam_err)); 1107 pam_strerror(sshpam_handle, sshpam_err));
1099 } 1108 }
diff --git a/auth-pam.h b/auth-pam.h
index c47b442e4..419860745 100644
--- a/auth-pam.h
+++ b/auth-pam.h
@@ -25,10 +25,12 @@
25#include "includes.h" 25#include "includes.h"
26#ifdef USE_PAM 26#ifdef USE_PAM
27 27
28struct ssh;
29
28void start_pam(Authctxt *); 30void start_pam(Authctxt *);
29void finish_pam(void); 31void finish_pam(void);
30u_int do_pam_account(void); 32u_int do_pam_account(void);
31void do_pam_session(void); 33void do_pam_session(struct ssh *);
32void do_pam_setcred(int ); 34void do_pam_setcred(int );
33void do_pam_chauthtok(void); 35void do_pam_chauthtok(void);
34int do_pam_putenv(char *, char *); 36int do_pam_putenv(char *, char *);
diff --git a/auth-passwd.c b/auth-passwd.c
index 996c2cf71..6097fdd24 100644
--- a/auth-passwd.c
+++ b/auth-passwd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth-passwd.c,v 1.45 2016/07/21 01:39:35 dtucker Exp $ */ 1/* $OpenBSD: auth-passwd.c,v 1.46 2018/03/03 03:15:51 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
@@ -68,22 +68,15 @@ extern login_cap_t *lc;
68 68
69#define MAX_PASSWORD_LEN 1024 69#define MAX_PASSWORD_LEN 1024
70 70
71void
72disable_forwarding(void)
73{
74 no_port_forwarding_flag = 1;
75 no_agent_forwarding_flag = 1;
76 no_x11_forwarding_flag = 1;
77}
78
79/* 71/*
80 * Tries to authenticate the user using password. Returns true if 72 * Tries to authenticate the user using password. Returns true if
81 * authentication succeeds. 73 * authentication succeeds.
82 */ 74 */
83int 75int
84auth_password(Authctxt *authctxt, const char *password) 76auth_password(struct ssh *ssh, const char *password)
85{ 77{
86 struct passwd * pw = authctxt->pw; 78 Authctxt *authctxt = ssh->authctxt;
79 struct passwd *pw = authctxt->pw;
87 int result, ok = authctxt->valid; 80 int result, ok = authctxt->valid;
88#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE) 81#if defined(USE_SHADOW) && defined(HAS_SHADOW_EXPIRE)
89 static int expire_checked = 0; 82 static int expire_checked = 0;
@@ -128,9 +121,9 @@ auth_password(Authctxt *authctxt, const char *password)
128 authctxt->force_pwchange = 1; 121 authctxt->force_pwchange = 1;
129 } 122 }
130#endif 123#endif
131 result = sys_auth_passwd(authctxt, password); 124 result = sys_auth_passwd(ssh, password);
132 if (authctxt->force_pwchange) 125 if (authctxt->force_pwchange)
133 disable_forwarding(); 126 auth_restrict_session(ssh);
134 return (result && ok); 127 return (result && ok);
135} 128}
136 129
@@ -170,19 +163,19 @@ warn_expiry(Authctxt *authctxt, auth_session_t *as)
170} 163}
171 164
172int 165int
173sys_auth_passwd(Authctxt *authctxt, const char *password) 166sys_auth_passwd(struct ssh *ssh, const char *password)
174{ 167{
175 struct passwd *pw = authctxt->pw; 168 Authctxt *authctxt = ssh->authctxt;
176 auth_session_t *as; 169 auth_session_t *as;
177 static int expire_checked = 0; 170 static int expire_checked = 0;
178 171
179 as = auth_usercheck(pw->pw_name, authctxt->style, "auth-ssh", 172 as = auth_usercheck(authctxt->pw->pw_name, authctxt->style, "auth-ssh",
180 (char *)password); 173 (char *)password);
181 if (as == NULL) 174 if (as == NULL)
182 return (0); 175 return (0);
183 if (auth_getstate(as) & AUTH_PWEXPIRED) { 176 if (auth_getstate(as) & AUTH_PWEXPIRED) {
184 auth_close(as); 177 auth_close(as);
185 disable_forwarding(); 178 auth_restrict_session(ssh);
186 authctxt->force_pwchange = 1; 179 authctxt->force_pwchange = 1;
187 return (1); 180 return (1);
188 } else { 181 } else {
@@ -195,8 +188,9 @@ sys_auth_passwd(Authctxt *authctxt, const char *password)
195} 188}
196#elif !defined(CUSTOM_SYS_AUTH_PASSWD) 189#elif !defined(CUSTOM_SYS_AUTH_PASSWD)
197int 190int
198sys_auth_passwd(Authctxt *authctxt, const char *password) 191sys_auth_passwd(struct ssh *ssh, const char *password)
199{ 192{
193 Authctxt *authctxt = ssh->authctxt;
200 struct passwd *pw = authctxt->pw; 194 struct passwd *pw = authctxt->pw;
201 char *encrypted_password, *salt = NULL; 195 char *encrypted_password, *salt = NULL;
202 196
diff --git a/auth-sia.c b/auth-sia.c
index a9e1c258c..7c97f03e5 100644
--- a/auth-sia.c
+++ b/auth-sia.c
@@ -36,6 +36,7 @@
36#include <string.h> 36#include <string.h>
37 37
38#include "ssh.h" 38#include "ssh.h"
39#include "ssh_api.h"
39#include "key.h" 40#include "key.h"
40#include "hostfile.h" 41#include "hostfile.h"
41#include "auth.h" 42#include "auth.h"
@@ -50,11 +51,12 @@ extern int saved_argc;
50extern char **saved_argv; 51extern char **saved_argv;
51 52
52int 53int
53sys_auth_passwd(Authctxt *authctxt, const char *pass) 54sys_auth_passwd(struct ssh *ssh, const char *pass)
54{ 55{
55 int ret; 56 int ret;
56 SIAENTITY *ent = NULL; 57 SIAENTITY *ent = NULL;
57 const char *host; 58 const char *host;
59 Authctxt *authctxt = ssh->authctxt;
58 60
59 host = get_canonical_hostname(options.use_dns); 61 host = get_canonical_hostname(options.use_dns);
60 62
diff --git a/auth.c b/auth.c
index a44906174..63366768a 100644
--- a/auth.c
+++ b/auth.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth.c,v 1.124 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: auth.c,v 1.127 2018/03/12 00:52:01 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -28,6 +28,7 @@
28#include <sys/types.h> 28#include <sys/types.h>
29#include <sys/stat.h> 29#include <sys/stat.h>
30#include <sys/socket.h> 30#include <sys/socket.h>
31#include <sys/wait.h>
31 32
32#include <netinet/in.h> 33#include <netinet/in.h>
33 34
@@ -73,12 +74,14 @@
73#include "authfile.h" 74#include "authfile.h"
74#include "ssherr.h" 75#include "ssherr.h"
75#include "compat.h" 76#include "compat.h"
77#include "channels.h"
76 78
77/* import */ 79/* import */
78extern ServerOptions options; 80extern ServerOptions options;
79extern int use_privsep; 81extern int use_privsep;
80extern Buffer loginmsg; 82extern Buffer loginmsg;
81extern struct passwd *privsep_pw; 83extern struct passwd *privsep_pw;
84extern struct sshauthopt *auth_opts;
82 85
83/* Debugging messages */ 86/* Debugging messages */
84Buffer auth_debug; 87Buffer auth_debug;
@@ -385,10 +388,8 @@ auth_maxtries_exceeded(Authctxt *authctxt)
385 * Check whether root logins are disallowed. 388 * Check whether root logins are disallowed.
386 */ 389 */
387int 390int
388auth_root_allowed(const char *method) 391auth_root_allowed(struct ssh *ssh, const char *method)
389{ 392{
390 struct ssh *ssh = active_state; /* XXX */
391
392 switch (options.permit_root_login) { 393 switch (options.permit_root_login) {
393 case PERMIT_YES: 394 case PERMIT_YES:
394 return 1; 395 return 1;
@@ -399,7 +400,7 @@ auth_root_allowed(const char *method)
399 return 1; 400 return 1;
400 break; 401 break;
401 case PERMIT_FORCED_ONLY: 402 case PERMIT_FORCED_ONLY:
402 if (forced_command) { 403 if (auth_opts->force_command != NULL) {
403 logit("Root login accepted for forced command."); 404 logit("Root login accepted for forced command.");
404 return 1; 405 return 1;
405 } 406 }
@@ -840,3 +841,343 @@ auth_get_canonical_hostname(struct ssh *ssh, int use_dns)
840 return dnsname; 841 return dnsname;
841 } 842 }
842} 843}
844
845/*
846 * Runs command in a subprocess wuth a minimal environment.
847 * Returns pid on success, 0 on failure.
848 * The child stdout and stderr maybe captured, left attached or sent to
849 * /dev/null depending on the contents of flags.
850 * "tag" is prepended to log messages.
851 * NB. "command" is only used for logging; the actual command executed is
852 * av[0].
853 */
854pid_t
855subprocess(const char *tag, struct passwd *pw, const char *command,
856 int ac, char **av, FILE **child, u_int flags)
857{
858 FILE *f = NULL;
859 struct stat st;
860 int fd, devnull, p[2], i;
861 pid_t pid;
862 char *cp, errmsg[512];
863 u_int envsize;
864 char **child_env;
865
866 if (child != NULL)
867 *child = NULL;
868
869 debug3("%s: %s command \"%s\" running as %s (flags 0x%x)", __func__,
870 tag, command, pw->pw_name, flags);
871
872 /* Check consistency */
873 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
874 (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) {
875 error("%s: inconsistent flags", __func__);
876 return 0;
877 }
878 if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) {
879 error("%s: inconsistent flags/output", __func__);
880 return 0;
881 }
882
883 /*
884 * If executing an explicit binary, then verify the it exists
885 * and appears safe-ish to execute
886 */
887 if (*av[0] != '/') {
888 error("%s path is not absolute", tag);
889 return 0;
890 }
891 temporarily_use_uid(pw);
892 if (stat(av[0], &st) < 0) {
893 error("Could not stat %s \"%s\": %s", tag,
894 av[0], strerror(errno));
895 restore_uid();
896 return 0;
897 }
898 if (safe_path(av[0], &st, NULL, 0, errmsg, sizeof(errmsg)) != 0) {
899 error("Unsafe %s \"%s\": %s", tag, av[0], errmsg);
900 restore_uid();
901 return 0;
902 }
903 /* Prepare to keep the child's stdout if requested */
904 if (pipe(p) != 0) {
905 error("%s: pipe: %s", tag, strerror(errno));
906 restore_uid();
907 return 0;
908 }
909 restore_uid();
910
911 switch ((pid = fork())) {
912 case -1: /* error */
913 error("%s: fork: %s", tag, strerror(errno));
914 close(p[0]);
915 close(p[1]);
916 return 0;
917 case 0: /* child */
918 /* Prepare a minimal environment for the child. */
919 envsize = 5;
920 child_env = xcalloc(sizeof(*child_env), envsize);
921 child_set_env(&child_env, &envsize, "PATH", _PATH_STDPATH);
922 child_set_env(&child_env, &envsize, "USER", pw->pw_name);
923 child_set_env(&child_env, &envsize, "LOGNAME", pw->pw_name);
924 child_set_env(&child_env, &envsize, "HOME", pw->pw_dir);
925 if ((cp = getenv("LANG")) != NULL)
926 child_set_env(&child_env, &envsize, "LANG", cp);
927
928 for (i = 0; i < NSIG; i++)
929 signal(i, SIG_DFL);
930
931 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) {
932 error("%s: open %s: %s", tag, _PATH_DEVNULL,
933 strerror(errno));
934 _exit(1);
935 }
936 if (dup2(devnull, STDIN_FILENO) == -1) {
937 error("%s: dup2: %s", tag, strerror(errno));
938 _exit(1);
939 }
940
941 /* Set up stdout as requested; leave stderr in place for now. */
942 fd = -1;
943 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0)
944 fd = p[1];
945 else if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0)
946 fd = devnull;
947 if (fd != -1 && dup2(fd, STDOUT_FILENO) == -1) {
948 error("%s: dup2: %s", tag, strerror(errno));
949 _exit(1);
950 }
951 closefrom(STDERR_FILENO + 1);
952
953 /* Don't use permanently_set_uid() here to avoid fatal() */
954 if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0) {
955 error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid,
956 strerror(errno));
957 _exit(1);
958 }
959 if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0) {
960 error("%s: setresuid %u: %s", tag, (u_int)pw->pw_uid,
961 strerror(errno));
962 _exit(1);
963 }
964 /* stdin is pointed to /dev/null at this point */
965 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
966 dup2(STDIN_FILENO, STDERR_FILENO) == -1) {
967 error("%s: dup2: %s", tag, strerror(errno));
968 _exit(1);
969 }
970
971 execve(av[0], av, child_env);
972 error("%s exec \"%s\": %s", tag, command, strerror(errno));
973 _exit(127);
974 default: /* parent */
975 break;
976 }
977
978 close(p[1]);
979 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0)
980 close(p[0]);
981 else if ((f = fdopen(p[0], "r")) == NULL) {
982 error("%s: fdopen: %s", tag, strerror(errno));
983 close(p[0]);
984 /* Don't leave zombie child */
985 kill(pid, SIGTERM);
986 while (waitpid(pid, NULL, 0) == -1 && errno == EINTR)
987 ;
988 return 0;
989 }
990 /* Success */
991 debug3("%s: %s pid %ld", __func__, tag, (long)pid);
992 if (child != NULL)
993 *child = f;
994 return pid;
995}
996
997/* These functions link key/cert options to the auth framework */
998
999/* Log sshauthopt options locally and (optionally) for remote transmission */
1000void
1001auth_log_authopts(const char *loc, const struct sshauthopt *opts, int do_remote)
1002{
1003 int do_env = options.permit_user_env && opts->nenv > 0;
1004 int do_permitopen = opts->npermitopen > 0 &&
1005 (options.allow_tcp_forwarding & FORWARD_LOCAL) != 0;
1006 size_t i;
1007 char msg[1024], buf[64];
1008
1009 snprintf(buf, sizeof(buf), "%d", opts->force_tun_device);
1010 /* Try to keep this alphabetically sorted */
1011 snprintf(msg, sizeof(msg), "key options:%s%s%s%s%s%s%s%s%s%s%s%s",
1012 opts->permit_agent_forwarding_flag ? " agent-forwarding" : "",
1013 opts->force_command == NULL ? "" : " command",
1014 do_env ? " environment" : "",
1015 opts->valid_before == 0 ? "" : "expires",
1016 do_permitopen ? " permitopen" : "",
1017 opts->permit_port_forwarding_flag ? " port-forwarding" : "",
1018 opts->cert_principals == NULL ? "" : " principals",
1019 opts->permit_pty_flag ? " pty" : "",
1020 opts->force_tun_device == -1 ? "" : " tun=",
1021 opts->force_tun_device == -1 ? "" : buf,
1022 opts->permit_user_rc ? " user-rc" : "",
1023 opts->permit_x11_forwarding_flag ? " x11-forwarding" : "");
1024
1025 debug("%s: %s", loc, msg);
1026 if (do_remote)
1027 auth_debug_add("%s: %s", loc, msg);
1028
1029 if (options.permit_user_env) {
1030 for (i = 0; i < opts->nenv; i++) {
1031 debug("%s: environment: %s", loc, opts->env[i]);
1032 if (do_remote) {
1033 auth_debug_add("%s: environment: %s",
1034 loc, opts->env[i]);
1035 }
1036 }
1037 }
1038
1039 /* Go into a little more details for the local logs. */
1040 if (opts->valid_before != 0) {
1041 format_absolute_time(opts->valid_before, buf, sizeof(buf));
1042 debug("%s: expires at %s", loc, buf);
1043 }
1044 if (opts->cert_principals != NULL) {
1045 debug("%s: authorized principals: \"%s\"",
1046 loc, opts->cert_principals);
1047 }
1048 if (opts->force_command != NULL)
1049 debug("%s: forced command: \"%s\"", loc, opts->force_command);
1050 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0) {
1051 for (i = 0; i < opts->npermitopen; i++) {
1052 debug("%s: permitted open: %s",
1053 loc, opts->permitopen[i]);
1054 }
1055 }
1056}
1057
1058/* Activate a new set of key/cert options; merging with what is there. */
1059int
1060auth_activate_options(struct ssh *ssh, struct sshauthopt *opts)
1061{
1062 struct sshauthopt *old = auth_opts;
1063 const char *emsg = NULL;
1064
1065 debug("%s: setting new authentication options", __func__);
1066 if ((auth_opts = sshauthopt_merge(old, opts, &emsg)) == NULL) {
1067 error("Inconsistent authentication options: %s", emsg);
1068 return -1;
1069 }
1070 return 0;
1071}
1072
1073/* Disable forwarding, etc for the session */
1074void
1075auth_restrict_session(struct ssh *ssh)
1076{
1077 struct sshauthopt *restricted;
1078
1079 debug("%s: restricting session", __func__);
1080
1081 /* A blank sshauthopt defaults to permitting nothing */
1082 restricted = sshauthopt_new();
1083 restricted->restricted = 1;
1084
1085 if (auth_activate_options(ssh, restricted) != 0)
1086 fatal("%s: failed to restrict session", __func__);
1087 sshauthopt_free(restricted);
1088}
1089
1090int
1091auth_authorise_keyopts(struct ssh *ssh, struct passwd *pw,
1092 struct sshauthopt *opts, int allow_cert_authority, const char *loc)
1093{
1094 const char *remote_ip = ssh_remote_ipaddr(ssh);
1095 const char *remote_host = auth_get_canonical_hostname(ssh,
1096 options.use_dns);
1097 time_t now = time(NULL);
1098 char buf[64];
1099
1100 /*
1101 * Check keys/principals file expiry time.
1102 * NB. validity interval in certificate is handled elsewhere.
1103 */
1104 if (opts->valid_before && now > 0 &&
1105 opts->valid_before < (uint64_t)now) {
1106 format_absolute_time(opts->valid_before, buf, sizeof(buf));
1107 debug("%s: entry expired at %s", loc, buf);
1108 auth_debug_add("%s: entry expired at %s", loc, buf);
1109 return -1;
1110 }
1111 /* Consistency checks */
1112 if (opts->cert_principals != NULL && !opts->cert_authority) {
1113 debug("%s: principals on non-CA key", loc);
1114 auth_debug_add("%s: principals on non-CA key", loc);
1115 /* deny access */
1116 return -1;
1117 }
1118 /* cert-authority flag isn't valid in authorized_principals files */
1119 if (!allow_cert_authority && opts->cert_authority) {
1120 debug("%s: cert-authority flag invalid here", loc);
1121 auth_debug_add("%s: cert-authority flag invalid here", loc);
1122 /* deny access */
1123 return -1;
1124 }
1125
1126 /* Perform from= checks */
1127 if (opts->required_from_host_keys != NULL) {
1128 switch (match_host_and_ip(remote_host, remote_ip,
1129 opts->required_from_host_keys )) {
1130 case 1:
1131 /* Host name matches. */
1132 break;
1133 case -1:
1134 default:
1135 debug("%s: invalid from criteria", loc);
1136 auth_debug_add("%s: invalid from criteria", loc);
1137 /* FALLTHROUGH */
1138 case 0:
1139 logit("%s: Authentication tried for %.100s with "
1140 "correct key but not from a permitted "
1141 "host (host=%.200s, ip=%.200s, required=%.200s).",
1142 loc, pw->pw_name, remote_host, remote_ip,
1143 opts->required_from_host_keys);
1144 auth_debug_add("%s: Your host '%.200s' is not "
1145 "permitted to use this key for login.",
1146 loc, remote_host);
1147 /* deny access */
1148 return -1;
1149 }
1150 }
1151 /* Check source-address restriction from certificate */
1152 if (opts->required_from_host_cert != NULL) {
1153 switch (addr_match_cidr_list(remote_ip,
1154 opts->required_from_host_cert)) {
1155 case 1:
1156 /* accepted */
1157 break;
1158 case -1:
1159 default:
1160 /* invalid */
1161 error("%s: Certificate source-address invalid",
1162 loc);
1163 /* FALLTHROUGH */
1164 case 0:
1165 logit("%s: Authentication tried for %.100s with valid "
1166 "certificate but not from a permitted source "
1167 "address (%.200s).", loc, pw->pw_name, remote_ip);
1168 auth_debug_add("%s: Your address '%.200s' is not "
1169 "permitted to use this certificate for login.",
1170 loc, remote_ip);
1171 return -1;
1172 }
1173 }
1174 /*
1175 *
1176 * XXX this is spammy. We should report remotely only for keys
1177 * that are successful in actual auth attempts, and not PK_OK
1178 * tests.
1179 */
1180 auth_log_authopts(loc, opts, 1);
1181
1182 return 0;
1183}
diff --git a/auth.h b/auth.h
index 29835ae92..23ce67caf 100644
--- a/auth.h
+++ b/auth.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth.h,v 1.93 2017/08/18 05:36:45 djm Exp $ */ 1/* $OpenBSD: auth.h,v 1.95 2018/03/03 03:15:51 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -42,9 +42,11 @@
42#include <krb5.h> 42#include <krb5.h>
43#endif 43#endif
44 44
45struct passwd;
45struct ssh; 46struct ssh;
46struct sshkey;
47struct sshbuf; 47struct sshbuf;
48struct sshkey;
49struct sshauthopt;
48 50
49typedef struct Authctxt Authctxt; 51typedef struct Authctxt Authctxt;
50typedef struct Authmethod Authmethod; 52typedef struct Authmethod Authmethod;
@@ -128,11 +130,12 @@ struct KbdintDevice
128int 130int
129auth_rhosts2(struct passwd *, const char *, const char *, const char *); 131auth_rhosts2(struct passwd *, const char *, const char *, const char *);
130 132
131int auth_password(Authctxt *, const char *); 133int auth_password(struct ssh *, const char *);
132 134
133int hostbased_key_allowed(struct passwd *, const char *, char *, 135int hostbased_key_allowed(struct passwd *, const char *, char *,
134 struct sshkey *); 136 struct sshkey *);
135int user_key_allowed(struct passwd *, struct sshkey *, int); 137int user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
138 struct sshauthopt **);
136int auth2_key_already_used(Authctxt *, const struct sshkey *); 139int auth2_key_already_used(Authctxt *, const struct sshkey *);
137 140
138/* 141/*
@@ -163,14 +166,12 @@ int auth_shadow_pwexpired(Authctxt *);
163#include "audit.h" 166#include "audit.h"
164void remove_kbdint_device(const char *); 167void remove_kbdint_device(const char *);
165 168
166void disable_forwarding(void);
167
168void do_authentication2(Authctxt *); 169void do_authentication2(Authctxt *);
169 170
170void auth_log(Authctxt *, int, int, const char *, const char *); 171void auth_log(Authctxt *, int, int, const char *, const char *);
171void auth_maxtries_exceeded(Authctxt *) __attribute__((noreturn)); 172void auth_maxtries_exceeded(Authctxt *) __attribute__((noreturn));
172void userauth_finish(struct ssh *, int, const char *, const char *); 173void userauth_finish(struct ssh *, int, const char *, const char *);
173int auth_root_allowed(const char *); 174int auth_root_allowed(struct ssh *, const char *);
174 175
175void userauth_send_banner(const char *); 176void userauth_send_banner(const char *);
176 177
@@ -214,14 +215,29 @@ int get_hostkey_index(struct sshkey *, int, struct ssh *);
214int sshd_hostkey_sign(struct sshkey *, struct sshkey *, u_char **, 215int sshd_hostkey_sign(struct sshkey *, struct sshkey *, u_char **,
215 size_t *, const u_char *, size_t, const char *, u_int); 216 size_t *, const u_char *, size_t, const char *, u_int);
216 217
218/* Key / cert options linkage to auth layer */
219const struct sshauthopt *auth_options(struct ssh *);
220int auth_activate_options(struct ssh *, struct sshauthopt *);
221void auth_restrict_session(struct ssh *);
222int auth_authorise_keyopts(struct ssh *, struct passwd *pw,
223 struct sshauthopt *, int, const char *);
224void auth_log_authopts(const char *, const struct sshauthopt *, int);
225
217/* debug messages during authentication */ 226/* debug messages during authentication */
218void auth_debug_add(const char *fmt,...) __attribute__((format(printf, 1, 2))); 227void auth_debug_add(const char *fmt,...)
228 __attribute__((format(printf, 1, 2)));
219void auth_debug_send(void); 229void auth_debug_send(void);
220void auth_debug_reset(void); 230void auth_debug_reset(void);
221 231
222struct passwd *fakepw(void); 232struct passwd *fakepw(void);
223 233
224int sys_auth_passwd(Authctxt *, const char *); 234#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */
235#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */
236#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */
237pid_t subprocess(const char *, struct passwd *,
238 const char *, int, char **, FILE **, u_int flags);
239
240int sys_auth_passwd(struct ssh *, const char *);
225 241
226#define SKEY_PROMPT "\nS/Key Password: " 242#define SKEY_PROMPT "\nS/Key Password: "
227 243
diff --git a/auth2-hostbased.c b/auth2-hostbased.c
index 92758b38c..8996f7e05 100644
--- a/auth2-hostbased.c
+++ b/auth2-hostbased.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-hostbased.c,v 1.31 2017/06/24 06:34:38 djm Exp $ */ 1/* $OpenBSD: auth2-hostbased.c,v 1.33 2018/01/23 05:27:21 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -62,7 +62,7 @@ userauth_hostbased(struct ssh *ssh)
62 Authctxt *authctxt = ssh->authctxt; 62 Authctxt *authctxt = ssh->authctxt;
63 struct sshbuf *b; 63 struct sshbuf *b;
64 struct sshkey *key = NULL; 64 struct sshkey *key = NULL;
65 char *pkalg, *cuser, *chost, *service; 65 char *pkalg, *cuser, *chost;
66 u_char *pkblob, *sig; 66 u_char *pkblob, *sig;
67 size_t alen, blen, slen; 67 size_t alen, blen, slen;
68 int r, pktype, authenticated = 0; 68 int r, pktype, authenticated = 0;
@@ -118,15 +118,13 @@ userauth_hostbased(struct ssh *ssh)
118 goto done; 118 goto done;
119 } 119 }
120 120
121 service = ssh->compat & SSH_BUG_HBSERVICE ? "ssh-userauth" :
122 authctxt->service;
123 if ((b = sshbuf_new()) == NULL) 121 if ((b = sshbuf_new()) == NULL)
124 fatal("%s: sshbuf_new failed", __func__); 122 fatal("%s: sshbuf_new failed", __func__);
125 /* reconstruct packet */ 123 /* reconstruct packet */
126 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || 124 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 ||
127 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 125 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
128 (r = sshbuf_put_cstring(b, authctxt->user)) != 0 || 126 (r = sshbuf_put_cstring(b, authctxt->user)) != 0 ||
129 (r = sshbuf_put_cstring(b, service)) != 0 || 127 (r = sshbuf_put_cstring(b, authctxt->service)) != 0 ||
130 (r = sshbuf_put_cstring(b, "hostbased")) != 0 || 128 (r = sshbuf_put_cstring(b, "hostbased")) != 0 ||
131 (r = sshbuf_put_string(b, pkalg, alen)) != 0 || 129 (r = sshbuf_put_string(b, pkalg, alen)) != 0 ||
132 (r = sshbuf_put_string(b, pkblob, blen)) != 0 || 130 (r = sshbuf_put_string(b, pkblob, blen)) != 0 ||
@@ -144,7 +142,7 @@ userauth_hostbased(struct ssh *ssh)
144 authenticated = 0; 142 authenticated = 0;
145 if (PRIVSEP(hostbased_key_allowed(authctxt->pw, cuser, chost, key)) && 143 if (PRIVSEP(hostbased_key_allowed(authctxt->pw, cuser, chost, key)) &&
146 PRIVSEP(sshkey_verify(key, sig, slen, 144 PRIVSEP(sshkey_verify(key, sig, slen,
147 sshbuf_ptr(b), sshbuf_len(b), ssh->compat)) == 0) 145 sshbuf_ptr(b), sshbuf_len(b), pkalg, ssh->compat)) == 0)
148 authenticated = 1; 146 authenticated = 1;
149 147
150 auth2_record_key(authctxt, authenticated, key); 148 auth2_record_key(authctxt, authenticated, key);
diff --git a/auth2-none.c b/auth2-none.c
index 35d25fa63..8d4e9bb8c 100644
--- a/auth2-none.c
+++ b/auth2-none.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-none.c,v 1.20 2017/05/30 14:29:59 markus Exp $ */ 1/* $OpenBSD: auth2-none.c,v 1.21 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -68,7 +68,7 @@ userauth_none(struct ssh *ssh)
68 if ((r = sshpkt_get_end(ssh)) != 0) 68 if ((r = sshpkt_get_end(ssh)) != 0)
69 fatal("%s: %s", __func__, ssh_err(r)); 69 fatal("%s: %s", __func__, ssh_err(r));
70 if (options.permit_empty_passwd && options.password_authentication) 70 if (options.permit_empty_passwd && options.password_authentication)
71 return (PRIVSEP(auth_password(ssh->authctxt, ""))); 71 return (PRIVSEP(auth_password(ssh, "")));
72 return (0); 72 return (0);
73} 73}
74 74
diff --git a/auth2-passwd.c b/auth2-passwd.c
index 5f7ba3244..445016aec 100644
--- a/auth2-passwd.c
+++ b/auth2-passwd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-passwd.c,v 1.14 2017/05/30 14:29:59 markus Exp $ */ 1/* $OpenBSD: auth2-passwd.c,v 1.15 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -63,7 +63,7 @@ userauth_passwd(struct ssh *ssh)
63 63
64 if (change) 64 if (change)
65 logit("password change not supported"); 65 logit("password change not supported");
66 else if (PRIVSEP(auth_password(ssh->authctxt, password)) == 1) 66 else if (PRIVSEP(auth_password(ssh, password)) == 1)
67 authenticated = 1; 67 authenticated = 1;
68 explicit_bzero(password, len); 68 explicit_bzero(password, len);
69 free(password); 69 free(password);
diff --git a/auth2-pubkey.c b/auth2-pubkey.c
index 169839b01..8024b1d6a 100644
--- a/auth2-pubkey.c
+++ b/auth2-pubkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2-pubkey.c,v 1.71 2017/09/07 23:48:09 djm Exp $ */ 1/* $OpenBSD: auth2-pubkey.c,v 1.77 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -73,42 +73,39 @@ extern ServerOptions options;
73extern u_char *session_id2; 73extern u_char *session_id2;
74extern u_int session_id2_len; 74extern u_int session_id2_len;
75 75
76static char *
77format_key(const struct sshkey *key)
78{
79 char *ret, *fp = sshkey_fingerprint(key,
80 options.fingerprint_hash, SSH_FP_DEFAULT);
81
82 xasprintf(&ret, "%s %s", sshkey_type(key), fp);
83 free(fp);
84 return ret;
85}
86
76static int 87static int
77userauth_pubkey(struct ssh *ssh) 88userauth_pubkey(struct ssh *ssh)
78{ 89{
79 Authctxt *authctxt = ssh->authctxt; 90 Authctxt *authctxt = ssh->authctxt;
91 struct passwd *pw = authctxt->pw;
80 struct sshbuf *b; 92 struct sshbuf *b;
81 struct sshkey *key = NULL; 93 struct sshkey *key = NULL;
82 char *pkalg, *userstyle = NULL, *fp = NULL; 94 char *pkalg, *userstyle = NULL, *key_s = NULL, *ca_s = NULL;
83 u_char *pkblob, *sig, have_sig; 95 u_char *pkblob, *sig, have_sig;
84 size_t blen, slen; 96 size_t blen, slen;
85 int r, pktype; 97 int r, pktype;
86 int authenticated = 0; 98 int authenticated = 0;
99 struct sshauthopt *authopts = NULL;
87 100
88 if (!authctxt->valid) { 101 if (!authctxt->valid) {
89 debug2("%s: disabled because of invalid user", __func__); 102 debug2("%s: disabled because of invalid user", __func__);
90 return 0; 103 return 0;
91 } 104 }
92 if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0) 105 if ((r = sshpkt_get_u8(ssh, &have_sig)) != 0 ||
93 fatal("%s: sshpkt_get_u8 failed: %s", __func__, ssh_err(r)); 106 (r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
94 if (ssh->compat & SSH_BUG_PKAUTH) { 107 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
95 debug2("%s: SSH_BUG_PKAUTH", __func__); 108 fatal("%s: parse request failed: %s", __func__, ssh_err(r));
96 if ((b = sshbuf_new()) == NULL)
97 fatal("%s: sshbuf_new failed", __func__);
98 /* no explicit pkalg given */
99 /* so we have to extract the pkalg from the pkblob */
100 /* XXX use sshbuf_from() */
101 if ((r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0 ||
102 (r = sshbuf_put(b, pkblob, blen)) != 0 ||
103 (r = sshbuf_get_cstring(b, &pkalg, NULL)) != 0)
104 fatal("%s: failed: %s", __func__, ssh_err(r));
105 sshbuf_free(b);
106 } else {
107 if ((r = sshpkt_get_cstring(ssh, &pkalg, NULL)) != 0 ||
108 (r = sshpkt_get_string(ssh, &pkblob, &blen)) != 0)
109 fatal("%s: sshpkt_get_cstring failed: %s",
110 __func__, ssh_err(r));
111 }
112 pktype = sshkey_type_from_name(pkalg); 109 pktype = sshkey_type_from_name(pkalg);
113 if (pktype == KEY_UNSPEC) { 110 if (pktype == KEY_UNSPEC) {
114 /* this is perfectly legal */ 111 /* this is perfectly legal */
@@ -135,7 +132,6 @@ userauth_pubkey(struct ssh *ssh)
135 "signature scheme"); 132 "signature scheme");
136 goto done; 133 goto done;
137 } 134 }
138 fp = sshkey_fingerprint(key, options.fingerprint_hash, SSH_FP_DEFAULT);
139 if (auth2_key_already_used(authctxt, key)) { 135 if (auth2_key_already_used(authctxt, key)) {
140 logit("refusing previously-used %s key", sshkey_type(key)); 136 logit("refusing previously-used %s key", sshkey_type(key));
141 goto done; 137 goto done;
@@ -147,9 +143,15 @@ userauth_pubkey(struct ssh *ssh)
147 goto done; 143 goto done;
148 } 144 }
149 145
146 key_s = format_key(key);
147 if (sshkey_is_cert(key))
148 ca_s = format_key(key->cert->signature_key);
149
150 if (have_sig) { 150 if (have_sig) {
151 debug3("%s: have signature for %s %s", 151 debug3("%s: have %s signature for %s%s%s",
152 __func__, sshkey_type(key), fp); 152 __func__, pkalg, key_s,
153 ca_s == NULL ? "" : " CA ",
154 ca_s == NULL ? "" : ca_s);
153 if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 || 155 if ((r = sshpkt_get_string(ssh, &sig, &slen)) != 0 ||
154 (r = sshpkt_get_end(ssh)) != 0) 156 (r = sshpkt_get_end(ssh)) != 0)
155 fatal("%s: %s", __func__, ssh_err(r)); 157 fatal("%s: %s", __func__, ssh_err(r));
@@ -172,22 +174,11 @@ userauth_pubkey(struct ssh *ssh)
172 authctxt->style ? authctxt->style : ""); 174 authctxt->style ? authctxt->style : "");
173 if ((r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 175 if ((r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
174 (r = sshbuf_put_cstring(b, userstyle)) != 0 || 176 (r = sshbuf_put_cstring(b, userstyle)) != 0 ||
175 (r = sshbuf_put_cstring(b, ssh->compat & SSH_BUG_PKSERVICE ? 177 (r = sshbuf_put_cstring(b, authctxt->service)) != 0 ||
176 "ssh-userauth" : authctxt->service)) != 0) 178 (r = sshbuf_put_cstring(b, "publickey")) != 0 ||
177 fatal("%s: build packet failed: %s", 179 (r = sshbuf_put_u8(b, have_sig)) != 0 ||
178 __func__, ssh_err(r)); 180 (r = sshbuf_put_cstring(b, pkalg) != 0) ||
179 if (ssh->compat & SSH_BUG_PKAUTH) { 181 (r = sshbuf_put_string(b, pkblob, blen)) != 0)
180 if ((r = sshbuf_put_u8(b, have_sig)) != 0)
181 fatal("%s: build packet failed: %s",
182 __func__, ssh_err(r));
183 } else {
184 if ((r = sshbuf_put_cstring(b, "publickey")) != 0 ||
185 (r = sshbuf_put_u8(b, have_sig)) != 0 ||
186 (r = sshbuf_put_cstring(b, pkalg) != 0))
187 fatal("%s: build packet failed: %s",
188 __func__, ssh_err(r));
189 }
190 if ((r = sshbuf_put_string(b, pkblob, blen)) != 0)
191 fatal("%s: build packet failed: %s", 182 fatal("%s: build packet failed: %s",
192 __func__, ssh_err(r)); 183 __func__, ssh_err(r));
193#ifdef DEBUG_PK 184#ifdef DEBUG_PK
@@ -196,17 +187,20 @@ userauth_pubkey(struct ssh *ssh)
196 187
197 /* test for correct signature */ 188 /* test for correct signature */
198 authenticated = 0; 189 authenticated = 0;
199 if (PRIVSEP(user_key_allowed(authctxt->pw, key, 1)) && 190 if (PRIVSEP(user_key_allowed(ssh, pw, key, 1, &authopts)) &&
200 PRIVSEP(sshkey_verify(key, sig, slen, sshbuf_ptr(b), 191 PRIVSEP(sshkey_verify(key, sig, slen, sshbuf_ptr(b),
201 sshbuf_len(b), ssh->compat)) == 0) { 192 sshbuf_len(b), NULL, ssh->compat)) == 0) {
202 authenticated = 1; 193 authenticated = 1;
203 } 194 }
204 sshbuf_free(b); 195 sshbuf_free(b);
205 free(sig); 196 free(sig);
206 auth2_record_key(authctxt, authenticated, key); 197 auth2_record_key(authctxt, authenticated, key);
207 } else { 198 } else {
208 debug("%s: test whether pkalg/pkblob are acceptable for %s %s", 199 debug("%s: test pkalg %s pkblob %s%s%s",
209 __func__, sshkey_type(key), fp); 200 __func__, pkalg, key_s,
201 ca_s == NULL ? "" : " CA ",
202 ca_s == NULL ? "" : ca_s);
203
210 if ((r = sshpkt_get_end(ssh)) != 0) 204 if ((r = sshpkt_get_end(ssh)) != 0)
211 fatal("%s: %s", __func__, ssh_err(r)); 205 fatal("%s: %s", __func__, ssh_err(r));
212 206
@@ -218,7 +212,7 @@ userauth_pubkey(struct ssh *ssh)
218 * if a user is not allowed to login. is this an 212 * if a user is not allowed to login. is this an
219 * issue? -markus 213 * issue? -markus
220 */ 214 */
221 if (PRIVSEP(user_key_allowed(authctxt->pw, key, 0))) { 215 if (PRIVSEP(user_key_allowed(ssh, pw, key, 0, NULL))) {
222 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_PK_OK)) 216 if ((r = sshpkt_start(ssh, SSH2_MSG_USERAUTH_PK_OK))
223 != 0 || 217 != 0 ||
224 (r = sshpkt_put_cstring(ssh, pkalg)) != 0 || 218 (r = sshpkt_put_cstring(ssh, pkalg)) != 0 ||
@@ -229,15 +223,20 @@ userauth_pubkey(struct ssh *ssh)
229 authctxt->postponed = 1; 223 authctxt->postponed = 1;
230 } 224 }
231 } 225 }
232 if (authenticated != 1)
233 auth_clear_options();
234done: 226done:
227 if (authenticated == 1 && auth_activate_options(ssh, authopts) != 0) {
228 debug("%s: key options inconsistent with existing", __func__);
229 authenticated = 0;
230 }
235 debug2("%s: authenticated %d pkalg %s", __func__, authenticated, pkalg); 231 debug2("%s: authenticated %d pkalg %s", __func__, authenticated, pkalg);
232
233 sshauthopt_free(authopts);
236 sshkey_free(key); 234 sshkey_free(key);
237 free(userstyle); 235 free(userstyle);
238 free(pkalg); 236 free(pkalg);
239 free(pkblob); 237 free(pkblob);
240 free(fp); 238 free(key_s);
239 free(ca_s);
241 return authenticated; 240 return authenticated;
242} 241}
243 242
@@ -261,18 +260,77 @@ match_principals_option(const char *principal_list, struct sshkey_cert *cert)
261 return 0; 260 return 0;
262} 261}
263 262
263/*
264 * Process a single authorized_principals format line. Returns 0 and sets
265 * authoptsp is principal is authorised, -1 otherwise. "loc" is used as a
266 * log preamble for file/line information.
267 */
268static int
269check_principals_line(struct ssh *ssh, char *cp, const struct sshkey_cert *cert,
270 const char *loc, struct sshauthopt **authoptsp)
271{
272 u_int i, found = 0;
273 char *ep, *line_opts;
274 const char *reason = NULL;
275 struct sshauthopt *opts = NULL;
276
277 if (authoptsp != NULL)
278 *authoptsp = NULL;
279
280 /* Trim trailing whitespace. */
281 ep = cp + strlen(cp) - 1;
282 while (ep > cp && (*ep == '\n' || *ep == ' ' || *ep == '\t'))
283 *ep-- = '\0';
284
285 /*
286 * If the line has internal whitespace then assume it has
287 * key options.
288 */
289 line_opts = NULL;
290 if ((ep = strrchr(cp, ' ')) != NULL ||
291 (ep = strrchr(cp, '\t')) != NULL) {
292 for (; *ep == ' ' || *ep == '\t'; ep++)
293 ;
294 line_opts = cp;
295 cp = ep;
296 }
297 if ((opts = sshauthopt_parse(line_opts, &reason)) == NULL) {
298 debug("%s: bad principals options: %s", loc, reason);
299 auth_debug_add("%s: bad principals options: %s", loc, reason);
300 return -1;
301 }
302 /* Check principals in cert against those on line */
303 for (i = 0; i < cert->nprincipals; i++) {
304 if (strcmp(cp, cert->principals[i]) != 0)
305 continue;
306 debug3("%s: matched principal \"%.100s\"",
307 loc, cert->principals[i]);
308 found = 1;
309 }
310 if (found && authoptsp != NULL) {
311 *authoptsp = opts;
312 opts = NULL;
313 }
314 sshauthopt_free(opts);
315 return found ? 0 : -1;
316}
317
264static int 318static int
265process_principals(FILE *f, const char *file, struct passwd *pw, 319process_principals(struct ssh *ssh, FILE *f, const char *file,
266 const struct sshkey_cert *cert) 320 const struct sshkey_cert *cert, struct sshauthopt **authoptsp)
267{ 321{
268 char line[SSH_MAX_PUBKEY_BYTES], *cp, *ep, *line_opts; 322 char loc[256], line[SSH_MAX_PUBKEY_BYTES], *cp, *ep;
269 u_long linenum = 0; 323 u_long linenum = 0;
270 u_int i, found_principal = 0; 324 u_int found_principal = 0;
325
326 if (authoptsp != NULL)
327 *authoptsp = NULL;
271 328
272 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) { 329 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
273 /* Always consume entire input */ 330 /* Always consume entire input */
274 if (found_principal) 331 if (found_principal)
275 continue; 332 continue;
333
276 /* Skip leading whitespace. */ 334 /* Skip leading whitespace. */
277 for (cp = line; *cp == ' ' || *cp == '\t'; cp++) 335 for (cp = line; *cp == ' ' || *cp == '\t'; cp++)
278 ; 336 ;
@@ -281,50 +339,33 @@ process_principals(FILE *f, const char *file, struct passwd *pw,
281 *ep = '\0'; 339 *ep = '\0';
282 if (!*cp || *cp == '\n') 340 if (!*cp || *cp == '\n')
283 continue; 341 continue;
284 /* Trim trailing whitespace. */ 342
285 ep = cp + strlen(cp) - 1; 343 snprintf(loc, sizeof(loc), "%.200s:%lu", file, linenum);
286 while (ep > cp && (*ep == '\n' || *ep == ' ' || *ep == '\t')) 344 if (check_principals_line(ssh, cp, cert, loc, authoptsp) == 0)
287 *ep-- = '\0'; 345 found_principal = 1;
288 /*
289 * If the line has internal whitespace then assume it has
290 * key options.
291 */
292 line_opts = NULL;
293 if ((ep = strrchr(cp, ' ')) != NULL ||
294 (ep = strrchr(cp, '\t')) != NULL) {
295 for (; *ep == ' ' || *ep == '\t'; ep++)
296 ;
297 line_opts = cp;
298 cp = ep;
299 }
300 for (i = 0; i < cert->nprincipals; i++) {
301 if (strcmp(cp, cert->principals[i]) == 0) {
302 debug3("%s:%lu: matched principal \"%.100s\"",
303 file, linenum, cert->principals[i]);
304 if (auth_parse_options(pw, line_opts,
305 file, linenum) != 1)
306 continue;
307 found_principal = 1;
308 continue;
309 }
310 }
311 } 346 }
312 return found_principal; 347 return found_principal;
313} 348}
314 349
350/* XXX remove pw args here and elsewhere once ssh->authctxt is guaranteed */
351
315static int 352static int
316match_principals_file(char *file, struct passwd *pw, struct sshkey_cert *cert) 353match_principals_file(struct ssh *ssh, struct passwd *pw, char *file,
354 struct sshkey_cert *cert, struct sshauthopt **authoptsp)
317{ 355{
318 FILE *f; 356 FILE *f;
319 int success; 357 int success;
320 358
359 if (authoptsp != NULL)
360 *authoptsp = NULL;
361
321 temporarily_use_uid(pw); 362 temporarily_use_uid(pw);
322 debug("trying authorized principals file %s", file); 363 debug("trying authorized principals file %s", file);
323 if ((f = auth_openprincipals(file, pw, options.strict_modes)) == NULL) { 364 if ((f = auth_openprincipals(file, pw, options.strict_modes)) == NULL) {
324 restore_uid(); 365 restore_uid();
325 return 0; 366 return 0;
326 } 367 }
327 success = process_principals(f, file, pw, cert); 368 success = process_principals(ssh, f, file, cert, authoptsp);
328 fclose(f); 369 fclose(f);
329 restore_uid(); 370 restore_uid();
330 return success; 371 return success;
@@ -335,12 +376,13 @@ match_principals_file(char *file, struct passwd *pw, struct sshkey_cert *cert)
335 * returns 1 if the principal is allowed or 0 otherwise. 376 * returns 1 if the principal is allowed or 0 otherwise.
336 */ 377 */
337static int 378static int
338match_principals_command(struct passwd *user_pw, const struct sshkey *key) 379match_principals_command(struct ssh *ssh, struct passwd *user_pw,
380 const struct sshkey *key, struct sshauthopt **authoptsp)
339{ 381{
382 struct passwd *runas_pw = NULL;
340 const struct sshkey_cert *cert = key->cert; 383 const struct sshkey_cert *cert = key->cert;
341 FILE *f = NULL; 384 FILE *f = NULL;
342 int r, ok, found_principal = 0; 385 int r, ok, found_principal = 0;
343 struct passwd *pw;
344 int i, ac = 0, uid_swapped = 0; 386 int i, ac = 0, uid_swapped = 0;
345 pid_t pid; 387 pid_t pid;
346 char *tmp, *username = NULL, *command = NULL, **av = NULL; 388 char *tmp, *username = NULL, *command = NULL, **av = NULL;
@@ -348,6 +390,8 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
348 char serial_s[16]; 390 char serial_s[16];
349 void (*osigchld)(int); 391 void (*osigchld)(int);
350 392
393 if (authoptsp != NULL)
394 *authoptsp = NULL;
351 if (options.authorized_principals_command == NULL) 395 if (options.authorized_principals_command == NULL)
352 return 0; 396 return 0;
353 if (options.authorized_principals_command_user == NULL) { 397 if (options.authorized_principals_command_user == NULL) {
@@ -365,8 +409,8 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
365 /* Prepare and verify the user for the command */ 409 /* Prepare and verify the user for the command */
366 username = percent_expand(options.authorized_principals_command_user, 410 username = percent_expand(options.authorized_principals_command_user,
367 "u", user_pw->pw_name, (char *)NULL); 411 "u", user_pw->pw_name, (char *)NULL);
368 pw = getpwnam(username); 412 runas_pw = getpwnam(username);
369 if (pw == NULL) { 413 if (runas_pw == NULL) {
370 error("AuthorizedPrincipalsCommandUser \"%s\" not found: %s", 414 error("AuthorizedPrincipalsCommandUser \"%s\" not found: %s",
371 username, strerror(errno)); 415 username, strerror(errno));
372 goto out; 416 goto out;
@@ -424,15 +468,15 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
424 /* Prepare a printable command for logs, etc. */ 468 /* Prepare a printable command for logs, etc. */
425 command = argv_assemble(ac, av); 469 command = argv_assemble(ac, av);
426 470
427 if ((pid = subprocess("AuthorizedPrincipalsCommand", pw, command, 471 if ((pid = subprocess("AuthorizedPrincipalsCommand", runas_pw, command,
428 ac, av, &f, 472 ac, av, &f,
429 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0) 473 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0)
430 goto out; 474 goto out;
431 475
432 uid_swapped = 1; 476 uid_swapped = 1;
433 temporarily_use_uid(pw); 477 temporarily_use_uid(runas_pw);
434 478
435 ok = process_principals(f, "(command)", pw, cert); 479 ok = process_principals(ssh, f, "(command)", cert, authoptsp);
436 480
437 fclose(f); 481 fclose(f);
438 f = NULL; 482 f = NULL;
@@ -459,132 +503,225 @@ match_principals_command(struct passwd *user_pw, const struct sshkey *key)
459 free(keytext); 503 free(keytext);
460 return found_principal; 504 return found_principal;
461} 505}
506
507static void
508skip_space(char **cpp)
509{
510 char *cp;
511
512 for (cp = *cpp; *cp == ' ' || *cp == '\t'; cp++)
513 ;
514 *cpp = cp;
515}
516
517/*
518 * Advanced *cpp past the end of key options, defined as the first unquoted
519 * whitespace character. Returns 0 on success or -1 on failure (e.g.
520 * unterminated quotes).
521 */
522static int
523advance_past_options(char **cpp)
524{
525 char *cp = *cpp;
526 int quoted = 0;
527
528 for (; *cp && (quoted || (*cp != ' ' && *cp != '\t')); cp++) {
529 if (*cp == '\\' && cp[1] == '"')
530 cp++; /* Skip both */
531 else if (*cp == '"')
532 quoted = !quoted;
533 }
534 *cpp = cp;
535 /* return failure for unterminated quotes */
536 return (*cp == '\0' && quoted) ? -1 : 0;
537}
538
539/*
540 * Check a single line of an authorized_keys-format file. Returns 0 if key
541 * matches, -1 otherwise. Will return key/cert options via *authoptsp
542 * on success. "loc" is used as file/line location in log messages.
543 */
544static int
545check_authkey_line(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
546 char *cp, const char *loc, struct sshauthopt **authoptsp)
547{
548 int want_keytype = sshkey_is_cert(key) ? KEY_UNSPEC : key->type;
549 struct sshkey *found = NULL;
550 struct sshauthopt *keyopts = NULL, *certopts = NULL, *finalopts = NULL;
551 char *key_options = NULL, *fp = NULL;
552 const char *reason = NULL;
553 int ret = -1;
554
555 if (authoptsp != NULL)
556 *authoptsp = NULL;
557
558 if ((found = sshkey_new(want_keytype)) == NULL) {
559 debug3("%s: keytype %d failed", __func__, want_keytype);
560 goto out;
561 }
562
563 /* XXX djm: peek at key type in line and skip if unwanted */
564
565 if (sshkey_read(found, &cp) != 0) {
566 /* no key? check for options */
567 debug2("%s: check options: '%s'", loc, cp);
568 key_options = cp;
569 if (advance_past_options(&cp) != 0) {
570 reason = "invalid key option string";
571 goto fail_reason;
572 }
573 skip_space(&cp);
574 if (sshkey_read(found, &cp) != 0) {
575 /* still no key? advance to next line*/
576 debug2("%s: advance: '%s'", loc, cp);
577 goto out;
578 }
579 }
580 /* Parse key options now; we need to know if this is a CA key */
581 if ((keyopts = sshauthopt_parse(key_options, &reason)) == NULL) {
582 debug("%s: bad key options: %s", loc, reason);
583 auth_debug_add("%s: bad key options: %s", loc, reason);
584 goto out;
585 }
586 /* Ignore keys that don't match or incorrectly marked as CAs */
587 if (sshkey_is_cert(key)) {
588 /* Certificate; check signature key against CA */
589 if (!sshkey_equal(found, key->cert->signature_key) ||
590 !keyopts->cert_authority)
591 goto out;
592 } else {
593 /* Plain key: check it against key found in file */
594 if (!sshkey_equal(found, key) || keyopts->cert_authority)
595 goto out;
596 }
597
598 /* We have a candidate key, perform authorisation checks */
599 if ((fp = sshkey_fingerprint(found,
600 options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL)
601 fatal("%s: fingerprint failed", __func__);
602
603 debug("%s: matching %s found: %s %s", loc,
604 sshkey_is_cert(key) ? "CA" : "key", sshkey_type(found), fp);
605
606 if (auth_authorise_keyopts(ssh, pw, keyopts,
607 sshkey_is_cert(key), loc) != 0) {
608 reason = "Refused by key options";
609 goto fail_reason;
610 }
611 /* That's all we need for plain keys. */
612 if (!sshkey_is_cert(key)) {
613 verbose("Accepted key %s %s found at %s",
614 sshkey_type(found), fp, loc);
615 finalopts = keyopts;
616 keyopts = NULL;
617 goto success;
618 }
619
620 /*
621 * Additional authorisation for certificates.
622 */
623
624 /* Parse and check options present in certificate */
625 if ((certopts = sshauthopt_from_cert(key)) == NULL) {
626 reason = "Invalid certificate options";
627 goto fail_reason;
628 }
629 if (auth_authorise_keyopts(ssh, pw, certopts, 0, loc) != 0) {
630 reason = "Refused by certificate options";
631 goto fail_reason;
632 }
633 if ((finalopts = sshauthopt_merge(keyopts, certopts, &reason)) == NULL)
634 goto fail_reason;
635
636 /*
637 * If the user has specified a list of principals as
638 * a key option, then prefer that list to matching
639 * their username in the certificate principals list.
640 */
641 if (keyopts->cert_principals != NULL &&
642 !match_principals_option(keyopts->cert_principals, key->cert)) {
643 reason = "Certificate does not contain an authorized principal";
644 goto fail_reason;
645 }
646 if (sshkey_cert_check_authority(key, 0, 0,
647 keyopts->cert_principals == NULL ? pw->pw_name : NULL, &reason) != 0)
648 goto fail_reason;
649
650 verbose("Accepted certificate ID \"%s\" (serial %llu) "
651 "signed by CA %s %s found at %s",
652 key->cert->key_id,
653 (unsigned long long)key->cert->serial,
654 sshkey_type(found), fp, loc);
655
656 success:
657 if (finalopts == NULL)
658 fatal("%s: internal error: missing options", __func__);
659 if (authoptsp != NULL) {
660 *authoptsp = finalopts;
661 finalopts = NULL;
662 }
663 /* success */
664 ret = 0;
665 goto out;
666
667 fail_reason:
668 error("%s", reason);
669 auth_debug_add("%s", reason);
670 out:
671 free(fp);
672 sshauthopt_free(keyopts);
673 sshauthopt_free(certopts);
674 sshauthopt_free(finalopts);
675 sshkey_free(found);
676 return ret;
677}
678
462/* 679/*
463 * Checks whether key is allowed in authorized_keys-format file, 680 * Checks whether key is allowed in authorized_keys-format file,
464 * returns 1 if the key is allowed or 0 otherwise. 681 * returns 1 if the key is allowed or 0 otherwise.
465 */ 682 */
466static int 683static int
467check_authkeys_file(FILE *f, char *file, struct sshkey *key, struct passwd *pw) 684check_authkeys_file(struct ssh *ssh, struct passwd *pw, FILE *f,
685 char *file, struct sshkey *key, struct sshauthopt **authoptsp)
468{ 686{
469 char line[SSH_MAX_PUBKEY_BYTES]; 687 char *cp, line[SSH_MAX_PUBKEY_BYTES], loc[256];
470 int found_key = 0; 688 int found_key = 0;
471 u_long linenum = 0; 689 u_long linenum = 0;
472 struct sshkey *found = NULL;
473 690
474 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) { 691 if (authoptsp != NULL)
475 char *cp, *key_options = NULL, *fp = NULL; 692 *authoptsp = NULL;
476 const char *reason = NULL;
477 693
694 while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
478 /* Always consume entire file */ 695 /* Always consume entire file */
479 if (found_key) 696 if (found_key)
480 continue; 697 continue;
481 if (found != NULL)
482 sshkey_free(found);
483 found = sshkey_new(sshkey_is_cert(key) ? KEY_UNSPEC : key->type);
484 if (found == NULL)
485 goto done;
486 auth_clear_options();
487 698
488 /* Skip leading whitespace, empty and comment lines. */ 699 /* Skip leading whitespace, empty and comment lines. */
489 for (cp = line; *cp == ' ' || *cp == '\t'; cp++) 700 cp = line;
490 ; 701 skip_space(&cp);
491 if (!*cp || *cp == '\n' || *cp == '#') 702 if (!*cp || *cp == '\n' || *cp == '#')
492 continue; 703 continue;
493 704 snprintf(loc, sizeof(loc), "%.200s:%lu", file, linenum);
494 if (sshkey_read(found, &cp) != 0) { 705 if (check_authkey_line(ssh, pw, key, cp, loc, authoptsp) == 0)
495 /* no key? check if there are options for this key */
496 int quoted = 0;
497 debug2("user_key_allowed: check options: '%s'", cp);
498 key_options = cp;
499 for (; *cp && (quoted || (*cp != ' ' && *cp != '\t')); cp++) {
500 if (*cp == '\\' && cp[1] == '"')
501 cp++; /* Skip both */
502 else if (*cp == '"')
503 quoted = !quoted;
504 }
505 /* Skip remaining whitespace. */
506 for (; *cp == ' ' || *cp == '\t'; cp++)
507 ;
508 if (sshkey_read(found, &cp) != 0) {
509 debug2("user_key_allowed: advance: '%s'", cp);
510 /* still no key? advance to next line*/
511 continue;
512 }
513 }
514 if (sshkey_is_cert(key)) {
515 if (!sshkey_equal(found, key->cert->signature_key))
516 continue;
517 if (auth_parse_options(pw, key_options, file,
518 linenum) != 1)
519 continue;
520 if (!key_is_cert_authority)
521 continue;
522 if ((fp = sshkey_fingerprint(found,
523 options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL)
524 continue;
525 debug("matching CA found: file %s, line %lu, %s %s",
526 file, linenum, sshkey_type(found), fp);
527 /*
528 * If the user has specified a list of principals as
529 * a key option, then prefer that list to matching
530 * their username in the certificate principals list.
531 */
532 if (authorized_principals != NULL &&
533 !match_principals_option(authorized_principals,
534 key->cert)) {
535 reason = "Certificate does not contain an "
536 "authorized principal";
537 fail_reason:
538 free(fp);
539 error("%s", reason);
540 auth_debug_add("%s", reason);
541 continue;
542 }
543 if (sshkey_cert_check_authority(key, 0, 0,
544 authorized_principals == NULL ? pw->pw_name : NULL,
545 &reason) != 0)
546 goto fail_reason;
547 if (auth_cert_options(key, pw, &reason) != 0)
548 goto fail_reason;
549 verbose("Accepted certificate ID \"%s\" (serial %llu) "
550 "signed by %s CA %s via %s", key->cert->key_id,
551 (unsigned long long)key->cert->serial,
552 sshkey_type(found), fp, file);
553 free(fp);
554 found_key = 1;
555 break;
556 } else if (sshkey_equal(found, key)) {
557 if (auth_parse_options(pw, key_options, file,
558 linenum) != 1)
559 continue;
560 if (key_is_cert_authority)
561 continue;
562 if ((fp = sshkey_fingerprint(found,
563 options.fingerprint_hash, SSH_FP_DEFAULT)) == NULL)
564 continue;
565 debug("matching key found: file %s, line %lu %s %s",
566 file, linenum, sshkey_type(found), fp);
567 free(fp);
568 found_key = 1; 706 found_key = 1;
569 continue;
570 }
571 } 707 }
572 done:
573 if (found != NULL)
574 sshkey_free(found);
575 if (!found_key)
576 debug2("key not found");
577 return found_key; 708 return found_key;
578} 709}
579 710
580/* Authenticate a certificate key against TrustedUserCAKeys */ 711/* Authenticate a certificate key against TrustedUserCAKeys */
581static int 712static int
582user_cert_trusted_ca(struct passwd *pw, struct sshkey *key) 713user_cert_trusted_ca(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
714 struct sshauthopt **authoptsp)
583{ 715{
584 char *ca_fp, *principals_file = NULL; 716 char *ca_fp, *principals_file = NULL;
585 const char *reason; 717 const char *reason;
718 struct sshauthopt *principals_opts = NULL, *cert_opts = NULL;
719 struct sshauthopt *final_opts = NULL;
586 int r, ret = 0, found_principal = 0, use_authorized_principals; 720 int r, ret = 0, found_principal = 0, use_authorized_principals;
587 721
722 if (authoptsp != NULL)
723 *authoptsp = NULL;
724
588 if (!sshkey_is_cert(key) || options.trusted_user_ca_keys == NULL) 725 if (!sshkey_is_cert(key) || options.trusted_user_ca_keys == NULL)
589 return 0; 726 return 0;
590 727
@@ -605,36 +742,69 @@ user_cert_trusted_ca(struct passwd *pw, struct sshkey *key)
605 * against the username. 742 * against the username.
606 */ 743 */
607 if ((principals_file = authorized_principals_file(pw)) != NULL) { 744 if ((principals_file = authorized_principals_file(pw)) != NULL) {
608 if (match_principals_file(principals_file, pw, key->cert)) 745 if (match_principals_file(ssh, pw, principals_file,
746 key->cert, &principals_opts))
609 found_principal = 1; 747 found_principal = 1;
610 } 748 }
611 /* Try querying command if specified */ 749 /* Try querying command if specified */
612 if (!found_principal && match_principals_command(pw, key)) 750 if (!found_principal && match_principals_command(ssh, pw, key,
751 &principals_opts))
613 found_principal = 1; 752 found_principal = 1;
614 /* If principals file or command is specified, then require a match */ 753 /* If principals file or command is specified, then require a match */
615 use_authorized_principals = principals_file != NULL || 754 use_authorized_principals = principals_file != NULL ||
616 options.authorized_principals_command != NULL; 755 options.authorized_principals_command != NULL;
617 if (!found_principal && use_authorized_principals) { 756 if (!found_principal && use_authorized_principals) {
618 reason = "Certificate does not contain an authorized principal"; 757 reason = "Certificate does not contain an authorized principal";
619 fail_reason: 758 goto fail_reason;
620 error("%s", reason);
621 auth_debug_add("%s", reason);
622 goto out;
623 } 759 }
760 if (use_authorized_principals && principals_opts == NULL)
761 fatal("%s: internal error: missing principals_opts", __func__);
624 if (sshkey_cert_check_authority(key, 0, 1, 762 if (sshkey_cert_check_authority(key, 0, 1,
625 use_authorized_principals ? NULL : pw->pw_name, &reason) != 0) 763 use_authorized_principals ? NULL : pw->pw_name, &reason) != 0)
626 goto fail_reason; 764 goto fail_reason;
627 if (auth_cert_options(key, pw, &reason) != 0) 765
766 /* Check authority from options in key and from principals file/cmd */
767 if ((cert_opts = sshauthopt_from_cert(key)) == NULL) {
768 reason = "Invalid certificate options";
769 goto fail_reason;
770 }
771 if (auth_authorise_keyopts(ssh, pw, cert_opts, 0, "cert") != 0) {
772 reason = "Refused by certificate options";
628 goto fail_reason; 773 goto fail_reason;
774 }
775 if (principals_opts == NULL) {
776 final_opts = cert_opts;
777 cert_opts = NULL;
778 } else {
779 if (auth_authorise_keyopts(ssh, pw, principals_opts, 0,
780 "principals") != 0) {
781 reason = "Refused by certificate principals options";
782 goto fail_reason;
783 }
784 if ((final_opts = sshauthopt_merge(principals_opts,
785 cert_opts, &reason)) == NULL) {
786 fail_reason:
787 error("%s", reason);
788 auth_debug_add("%s", reason);
789 goto out;
790 }
791 }
629 792
793 /* Success */
630 verbose("Accepted certificate ID \"%s\" (serial %llu) signed by " 794 verbose("Accepted certificate ID \"%s\" (serial %llu) signed by "
631 "%s CA %s via %s", key->cert->key_id, 795 "%s CA %s via %s", key->cert->key_id,
632 (unsigned long long)key->cert->serial, 796 (unsigned long long)key->cert->serial,
633 sshkey_type(key->cert->signature_key), ca_fp, 797 sshkey_type(key->cert->signature_key), ca_fp,
634 options.trusted_user_ca_keys); 798 options.trusted_user_ca_keys);
799 if (authoptsp != NULL) {
800 *authoptsp = final_opts;
801 final_opts = NULL;
802 }
635 ret = 1; 803 ret = 1;
636
637 out: 804 out:
805 sshauthopt_free(principals_opts);
806 sshauthopt_free(cert_opts);
807 sshauthopt_free(final_opts);
638 free(principals_file); 808 free(principals_file);
639 free(ca_fp); 809 free(ca_fp);
640 return ret; 810 return ret;
@@ -645,17 +815,22 @@ user_cert_trusted_ca(struct passwd *pw, struct sshkey *key)
645 * returns 1 if the key is allowed or 0 otherwise. 815 * returns 1 if the key is allowed or 0 otherwise.
646 */ 816 */
647static int 817static int
648user_key_allowed2(struct passwd *pw, struct sshkey *key, char *file) 818user_key_allowed2(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
819 char *file, struct sshauthopt **authoptsp)
649{ 820{
650 FILE *f; 821 FILE *f;
651 int found_key = 0; 822 int found_key = 0;
652 823
824 if (authoptsp != NULL)
825 *authoptsp = NULL;
826
653 /* Temporarily use the user's uid. */ 827 /* Temporarily use the user's uid. */
654 temporarily_use_uid(pw); 828 temporarily_use_uid(pw);
655 829
656 debug("trying public key file %s", file); 830 debug("trying public key file %s", file);
657 if ((f = auth_openkeyfile(file, pw, options.strict_modes)) != NULL) { 831 if ((f = auth_openkeyfile(file, pw, options.strict_modes)) != NULL) {
658 found_key = check_authkeys_file(f, file, key, pw); 832 found_key = check_authkeys_file(ssh, pw, f, file,
833 key, authoptsp);
659 fclose(f); 834 fclose(f);
660 } 835 }
661 836
@@ -668,17 +843,20 @@ user_key_allowed2(struct passwd *pw, struct sshkey *key, char *file)
668 * returns 1 if the key is allowed or 0 otherwise. 843 * returns 1 if the key is allowed or 0 otherwise.
669 */ 844 */
670static int 845static int
671user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key) 846user_key_command_allowed2(struct ssh *ssh, struct passwd *user_pw,
847 struct sshkey *key, struct sshauthopt **authoptsp)
672{ 848{
849 struct passwd *runas_pw = NULL;
673 FILE *f = NULL; 850 FILE *f = NULL;
674 int r, ok, found_key = 0; 851 int r, ok, found_key = 0;
675 struct passwd *pw;
676 int i, uid_swapped = 0, ac = 0; 852 int i, uid_swapped = 0, ac = 0;
677 pid_t pid; 853 pid_t pid;
678 char *username = NULL, *key_fp = NULL, *keytext = NULL; 854 char *username = NULL, *key_fp = NULL, *keytext = NULL;
679 char *tmp, *command = NULL, **av = NULL; 855 char *tmp, *command = NULL, **av = NULL;
680 void (*osigchld)(int); 856 void (*osigchld)(int);
681 857
858 if (authoptsp != NULL)
859 *authoptsp = NULL;
682 if (options.authorized_keys_command == NULL) 860 if (options.authorized_keys_command == NULL)
683 return 0; 861 return 0;
684 if (options.authorized_keys_command_user == NULL) { 862 if (options.authorized_keys_command_user == NULL) {
@@ -695,8 +873,8 @@ user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key)
695 /* Prepare and verify the user for the command */ 873 /* Prepare and verify the user for the command */
696 username = percent_expand(options.authorized_keys_command_user, 874 username = percent_expand(options.authorized_keys_command_user,
697 "u", user_pw->pw_name, (char *)NULL); 875 "u", user_pw->pw_name, (char *)NULL);
698 pw = getpwnam(username); 876 runas_pw = getpwnam(username);
699 if (pw == NULL) { 877 if (runas_pw == NULL) {
700 error("AuthorizedKeysCommandUser \"%s\" not found: %s", 878 error("AuthorizedKeysCommandUser \"%s\" not found: %s",
701 username, strerror(errno)); 879 username, strerror(errno));
702 goto out; 880 goto out;
@@ -754,15 +932,16 @@ user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key)
754 xasprintf(&command, "%s %s", av[0], av[1]); 932 xasprintf(&command, "%s %s", av[0], av[1]);
755 } 933 }
756 934
757 if ((pid = subprocess("AuthorizedKeysCommand", pw, command, 935 if ((pid = subprocess("AuthorizedKeysCommand", runas_pw, command,
758 ac, av, &f, 936 ac, av, &f,
759 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0) 937 SSH_SUBPROCESS_STDOUT_CAPTURE|SSH_SUBPROCESS_STDERR_DISCARD)) == 0)
760 goto out; 938 goto out;
761 939
762 uid_swapped = 1; 940 uid_swapped = 1;
763 temporarily_use_uid(pw); 941 temporarily_use_uid(runas_pw);
764 942
765 ok = check_authkeys_file(f, options.authorized_keys_command, key, pw); 943 ok = check_authkeys_file(ssh, user_pw, f,
944 options.authorized_keys_command, key, authoptsp);
766 945
767 fclose(f); 946 fclose(f);
768 f = NULL; 947 f = NULL;
@@ -792,10 +971,14 @@ user_key_command_allowed2(struct passwd *user_pw, struct sshkey *key)
792 * Check whether key authenticates and authorises the user. 971 * Check whether key authenticates and authorises the user.
793 */ 972 */
794int 973int
795user_key_allowed(struct passwd *pw, struct sshkey *key, int auth_attempt) 974user_key_allowed(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
975 int auth_attempt, struct sshauthopt **authoptsp)
796{ 976{
797 u_int success, i; 977 u_int success, i;
798 char *file; 978 char *file;
979 struct sshauthopt *opts = NULL;
980 if (authoptsp != NULL)
981 *authoptsp = NULL;
799 982
800 if (auth_key_is_revoked(key)) 983 if (auth_key_is_revoked(key))
801 return 0; 984 return 0;
@@ -803,25 +986,31 @@ user_key_allowed(struct passwd *pw, struct sshkey *key, int auth_attempt)
803 auth_key_is_revoked(key->cert->signature_key)) 986 auth_key_is_revoked(key->cert->signature_key))
804 return 0; 987 return 0;
805 988
806 success = user_cert_trusted_ca(pw, key); 989 if ((success = user_cert_trusted_ca(ssh, pw, key, &opts)) != 0)
807 if (success) 990 goto out;
808 return success; 991 sshauthopt_free(opts);
992 opts = NULL;
809 993
810 success = user_key_command_allowed2(pw, key); 994 if ((success = user_key_command_allowed2(ssh, pw, key, &opts)) != 0)
811 if (success > 0) 995 goto out;
812 return success; 996 sshauthopt_free(opts);
997 opts = NULL;
813 998
814 for (i = 0; !success && i < options.num_authkeys_files; i++) { 999 for (i = 0; !success && i < options.num_authkeys_files; i++) {
815
816 if (strcasecmp(options.authorized_keys_files[i], "none") == 0) 1000 if (strcasecmp(options.authorized_keys_files[i], "none") == 0)
817 continue; 1001 continue;
818 file = expand_authorized_keys( 1002 file = expand_authorized_keys(
819 options.authorized_keys_files[i], pw); 1003 options.authorized_keys_files[i], pw);
820 1004 success = user_key_allowed2(ssh, pw, key, file, &opts);
821 success = user_key_allowed2(pw, key, file);
822 free(file); 1005 free(file);
823 } 1006 }
824 1007
1008 out:
1009 if (success && authoptsp != NULL) {
1010 *authoptsp = opts;
1011 opts = NULL;
1012 }
1013 sshauthopt_free(opts);
825 return success; 1014 return success;
826} 1015}
827 1016
diff --git a/auth2.c b/auth2.c
index 862e09960..e0034229a 100644
--- a/auth2.c
+++ b/auth2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: auth2.c,v 1.143 2017/06/24 06:34:38 djm Exp $ */ 1/* $OpenBSD: auth2.c,v 1.145 2018/03/03 03:15:51 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -138,9 +138,6 @@ auth2_read_banner(void)
138void 138void
139userauth_send_banner(const char *msg) 139userauth_send_banner(const char *msg)
140{ 140{
141 if (datafellows & SSH_BUG_BANNER)
142 return;
143
144 packet_start(SSH2_MSG_USERAUTH_BANNER); 141 packet_start(SSH2_MSG_USERAUTH_BANNER);
145 packet_put_cstring(msg); 142 packet_put_cstring(msg);
146 packet_put_cstring(""); /* language, unused */ 143 packet_put_cstring(""); /* language, unused */
@@ -153,7 +150,7 @@ userauth_banner(void)
153{ 150{
154 char *banner = NULL; 151 char *banner = NULL;
155 152
156 if (options.banner == NULL || (datafellows & SSH_BUG_BANNER) != 0) 153 if (options.banner == NULL)
157 return; 154 return;
158 155
159 if ((banner = PRIVSEP(auth2_read_banner())) == NULL) 156 if ((banner = PRIVSEP(auth2_read_banner())) == NULL)
@@ -313,7 +310,7 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
313 310
314 /* Special handling for root */ 311 /* Special handling for root */
315 if (authenticated && authctxt->pw->pw_uid == 0 && 312 if (authenticated && authctxt->pw->pw_uid == 0 &&
316 !auth_root_allowed(method)) { 313 !auth_root_allowed(ssh, method)) {
317 authenticated = 0; 314 authenticated = 0;
318#ifdef SSH_AUDIT_EVENTS 315#ifdef SSH_AUDIT_EVENTS
319 PRIVSEP(audit_event(SSH_LOGIN_ROOT_DENIED)); 316 PRIVSEP(audit_event(SSH_LOGIN_ROOT_DENIED));
@@ -352,13 +349,6 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
352 } 349 }
353#endif 350#endif
354 351
355#ifdef _UNICOS
356 if (authenticated && cray_access_denied(authctxt->user)) {
357 authenticated = 0;
358 fatal("Access denied for user %s.", authctxt->user);
359 }
360#endif /* _UNICOS */
361
362 if (authenticated == 1) { 352 if (authenticated == 1) {
363 /* turn off userauth */ 353 /* turn off userauth */
364 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST, &dispatch_protocol_ignore); 354 ssh_dispatch_set(ssh, SSH2_MSG_USERAUTH_REQUEST, &dispatch_protocol_ignore);
@@ -369,7 +359,6 @@ userauth_finish(struct ssh *ssh, int authenticated, const char *method,
369 authctxt->success = 1; 359 authctxt->success = 1;
370 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); 360 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user);
371 } else { 361 } else {
372
373 /* Allow initial try of "none" auth without failure penalty */ 362 /* Allow initial try of "none" auth without failure penalty */
374 if (!partial && !authctxt->server_caused_failure && 363 if (!partial && !authctxt->server_caused_failure &&
375 (authctxt->attempt > 1 || strcmp(method, "none") != 0)) 364 (authctxt->attempt > 1 || strcmp(method, "none") != 0))
diff --git a/authfd.c b/authfd.c
index a460fa350..1eff7ba94 100644
--- a/authfd.c
+++ b/authfd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfd.c,v 1.105 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: authfd.c,v 1.108 2018/02/23 15:58:37 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
@@ -129,7 +129,7 @@ ssh_request_reply(int sock, struct sshbuf *request, struct sshbuf *reply)
129 129
130 /* Get the length of the message, and format it in the buffer. */ 130 /* Get the length of the message, and format it in the buffer. */
131 len = sshbuf_len(request); 131 len = sshbuf_len(request);
132 put_u32(buf, len); 132 POKE_U32(buf, len);
133 133
134 /* Send the length and then the packet to the agent. */ 134 /* Send the length and then the packet to the agent. */
135 if (atomicio(vwrite, sock, buf, 4) != 4 || 135 if (atomicio(vwrite, sock, buf, 4) != 4 ||
@@ -144,7 +144,7 @@ ssh_request_reply(int sock, struct sshbuf *request, struct sshbuf *reply)
144 return SSH_ERR_AGENT_COMMUNICATION; 144 return SSH_ERR_AGENT_COMMUNICATION;
145 145
146 /* Extract the length, and check it for sanity. */ 146 /* Extract the length, and check it for sanity. */
147 len = get_u32(buf); 147 len = PEEK_U32(buf);
148 if (len > MAX_AGENT_REPLY_LEN) 148 if (len > MAX_AGENT_REPLY_LEN)
149 return SSH_ERR_INVALID_FORMAT; 149 return SSH_ERR_INVALID_FORMAT;
150 150
@@ -353,8 +353,6 @@ ssh_agent_sign(int sock, const struct sshkey *key,
353 353
354 if (datalen > SSH_KEY_MAX_SIGN_DATA_SIZE) 354 if (datalen > SSH_KEY_MAX_SIGN_DATA_SIZE)
355 return SSH_ERR_INVALID_ARGUMENT; 355 return SSH_ERR_INVALID_ARGUMENT;
356 if (compat & SSH_BUG_SIGBLOB)
357 flags |= SSH_AGENT_OLD_SIGNATURE;
358 if ((msg = sshbuf_new()) == NULL) 356 if ((msg = sshbuf_new()) == NULL)
359 return SSH_ERR_ALLOC_FAIL; 357 return SSH_ERR_ALLOC_FAIL;
360 if ((r = sshkey_to_blob(key, &blob, &blen)) != 0) 358 if ((r = sshkey_to_blob(key, &blob, &blen)) != 0)
@@ -393,19 +391,7 @@ ssh_agent_sign(int sock, const struct sshkey *key,
393 391
394 392
395static int 393static int
396ssh_encode_identity_ssh2(struct sshbuf *b, struct sshkey *key, 394encode_constraints(struct sshbuf *m, u_int life, u_int confirm, u_int maxsign)
397 const char *comment)
398{
399 int r;
400
401 if ((r = sshkey_private_serialize(key, b)) != 0 ||
402 (r = sshbuf_put_cstring(b, comment)) != 0)
403 return r;
404 return 0;
405}
406
407static int
408encode_constraints(struct sshbuf *m, u_int life, u_int confirm)
409{ 395{
410 int r; 396 int r;
411 397
@@ -418,6 +404,11 @@ encode_constraints(struct sshbuf *m, u_int life, u_int confirm)
418 if ((r = sshbuf_put_u8(m, SSH_AGENT_CONSTRAIN_CONFIRM)) != 0) 404 if ((r = sshbuf_put_u8(m, SSH_AGENT_CONSTRAIN_CONFIRM)) != 0)
419 goto out; 405 goto out;
420 } 406 }
407 if (maxsign != 0) {
408 if ((r = sshbuf_put_u8(m, SSH_AGENT_CONSTRAIN_MAXSIGN)) != 0 ||
409 (r = sshbuf_put_u32(m, maxsign)) != 0)
410 goto out;
411 }
421 r = 0; 412 r = 0;
422 out: 413 out:
423 return r; 414 return r;
@@ -428,11 +419,11 @@ encode_constraints(struct sshbuf *m, u_int life, u_int confirm)
428 * This call is intended only for use by ssh-add(1) and like applications. 419 * This call is intended only for use by ssh-add(1) and like applications.
429 */ 420 */
430int 421int
431ssh_add_identity_constrained(int sock, struct sshkey *key, const char *comment, 422ssh_add_identity_constrained(int sock, const struct sshkey *key,
432 u_int life, u_int confirm) 423 const char *comment, u_int life, u_int confirm, u_int maxsign)
433{ 424{
434 struct sshbuf *msg; 425 struct sshbuf *msg;
435 int r, constrained = (life || confirm); 426 int r, constrained = (life || confirm || maxsign);
436 u_char type; 427 u_char type;
437 428
438 if ((msg = sshbuf_new()) == NULL) 429 if ((msg = sshbuf_new()) == NULL)
@@ -449,11 +440,15 @@ ssh_add_identity_constrained(int sock, struct sshkey *key, const char *comment,
449#endif 440#endif
450 case KEY_ED25519: 441 case KEY_ED25519:
451 case KEY_ED25519_CERT: 442 case KEY_ED25519_CERT:
443 case KEY_XMSS:
444 case KEY_XMSS_CERT:
452 type = constrained ? 445 type = constrained ?
453 SSH2_AGENTC_ADD_ID_CONSTRAINED : 446 SSH2_AGENTC_ADD_ID_CONSTRAINED :
454 SSH2_AGENTC_ADD_IDENTITY; 447 SSH2_AGENTC_ADD_IDENTITY;
455 if ((r = sshbuf_put_u8(msg, type)) != 0 || 448 if ((r = sshbuf_put_u8(msg, type)) != 0 ||
456 (r = ssh_encode_identity_ssh2(msg, key, comment)) != 0) 449 (r = sshkey_private_serialize_maxsign(key, msg, maxsign,
450 NULL)) != 0 ||
451 (r = sshbuf_put_cstring(msg, comment)) != 0)
457 goto out; 452 goto out;
458 break; 453 break;
459 default: 454 default:
@@ -461,7 +456,7 @@ ssh_add_identity_constrained(int sock, struct sshkey *key, const char *comment,
461 goto out; 456 goto out;
462 } 457 }
463 if (constrained && 458 if (constrained &&
464 (r = encode_constraints(msg, life, confirm)) != 0) 459 (r = encode_constraints(msg, life, confirm, maxsign)) != 0)
465 goto out; 460 goto out;
466 if ((r = ssh_request_reply(sock, msg, msg)) != 0) 461 if ((r = ssh_request_reply(sock, msg, msg)) != 0)
467 goto out; 462 goto out;
@@ -539,7 +534,7 @@ ssh_update_card(int sock, int add, const char *reader_id, const char *pin,
539 (r = sshbuf_put_cstring(msg, pin)) != 0) 534 (r = sshbuf_put_cstring(msg, pin)) != 0)
540 goto out; 535 goto out;
541 if (constrained && 536 if (constrained &&
542 (r = encode_constraints(msg, life, confirm)) != 0) 537 (r = encode_constraints(msg, life, confirm, 0)) != 0)
543 goto out; 538 goto out;
544 if ((r = ssh_request_reply(sock, msg, msg)) != 0) 539 if ((r = ssh_request_reply(sock, msg, msg)) != 0)
545 goto out; 540 goto out;
diff --git a/authfd.h b/authfd.h
index 43abf85da..ab954ffc0 100644
--- a/authfd.h
+++ b/authfd.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfd.h,v 1.41 2017/06/28 01:09:22 djm Exp $ */ 1/* $OpenBSD: authfd.h,v 1.43 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -29,8 +29,8 @@ void ssh_close_authentication_socket(int sock);
29int ssh_lock_agent(int sock, int lock, const char *password); 29int ssh_lock_agent(int sock, int lock, const char *password);
30int ssh_fetch_identitylist(int sock, struct ssh_identitylist **idlp); 30int ssh_fetch_identitylist(int sock, struct ssh_identitylist **idlp);
31void ssh_free_identitylist(struct ssh_identitylist *idl); 31void ssh_free_identitylist(struct ssh_identitylist *idl);
32int ssh_add_identity_constrained(int sock, struct sshkey *key, 32int ssh_add_identity_constrained(int sock, const struct sshkey *key,
33 const char *comment, u_int life, u_int confirm); 33 const char *comment, u_int life, u_int confirm, u_int maxsign);
34int ssh_remove_identity(int sock, struct sshkey *key); 34int ssh_remove_identity(int sock, struct sshkey *key);
35int ssh_update_card(int sock, int add, const char *reader_id, 35int ssh_update_card(int sock, int add, const char *reader_id,
36 const char *pin, u_int life, u_int confirm); 36 const char *pin, u_int life, u_int confirm);
@@ -77,6 +77,7 @@ int ssh_agent_sign(int sock, const struct sshkey *key,
77 77
78#define SSH_AGENT_CONSTRAIN_LIFETIME 1 78#define SSH_AGENT_CONSTRAIN_LIFETIME 1
79#define SSH_AGENT_CONSTRAIN_CONFIRM 2 79#define SSH_AGENT_CONSTRAIN_CONFIRM 2
80#define SSH_AGENT_CONSTRAIN_MAXSIGN 3
80 81
81/* extended failure messages */ 82/* extended failure messages */
82#define SSH2_AGENT_FAILURE 30 83#define SSH2_AGENT_FAILURE 30
diff --git a/authfile.c b/authfile.c
index d09b700d2..57dcd808c 100644
--- a/authfile.c
+++ b/authfile.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: authfile.c,v 1.127 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: authfile.c,v 1.128 2018/02/23 15:58:37 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2013 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
4 * 4 *
@@ -191,6 +191,8 @@ sshkey_load_private_type(int type, const char *filename, const char *passphrase,
191 *perm_ok = 1; 191 *perm_ok = 1;
192 192
193 r = sshkey_load_private_type_fd(fd, type, passphrase, keyp, commentp); 193 r = sshkey_load_private_type_fd(fd, type, passphrase, keyp, commentp);
194 if (r == 0 && keyp && *keyp)
195 r = sshkey_set_filename(*keyp, filename);
194 out: 196 out:
195 close(fd); 197 close(fd);
196 return r; 198 return r;
@@ -249,6 +251,9 @@ sshkey_load_private(const char *filename, const char *passphrase,
249 (r = sshkey_parse_private_fileblob(buffer, passphrase, keyp, 251 (r = sshkey_parse_private_fileblob(buffer, passphrase, keyp,
250 commentp)) != 0) 252 commentp)) != 0)
251 goto out; 253 goto out;
254 if (keyp && *keyp &&
255 (r = sshkey_set_filename(*keyp, filename)) != 0)
256 goto out;
252 r = 0; 257 r = 0;
253 out: 258 out:
254 close(fd); 259 close(fd);
@@ -397,6 +402,7 @@ sshkey_load_private_cert(int type, const char *filename, const char *passphrase,
397 case KEY_ECDSA: 402 case KEY_ECDSA:
398#endif /* WITH_OPENSSL */ 403#endif /* WITH_OPENSSL */
399 case KEY_ED25519: 404 case KEY_ED25519:
405 case KEY_XMSS:
400 case KEY_UNSPEC: 406 case KEY_UNSPEC:
401 break; 407 break;
402 default: 408 default:
diff --git a/bitmap.c b/bitmap.c
index 5089b0407..5ecfe68b8 100644
--- a/bitmap.c
+++ b/bitmap.c
@@ -1,3 +1,4 @@
1/* $OpenBSD: bitmap.c,v 1.9 2017/10/20 01:56:39 djm Exp $ */
1/* 2/*
2 * Copyright (c) 2015 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2015 Damien Miller <djm@mindrot.org>
3 * 4 *
diff --git a/bitmap.h b/bitmap.h
index c1bb1741a..336e90b06 100644
--- a/bitmap.h
+++ b/bitmap.h
@@ -1,3 +1,4 @@
1/* $OpenBSD: bitmap.h,v 1.2 2017/10/20 01:56:39 djm Exp $ */
1/* 2/*
2 * Copyright (c) 2015 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2015 Damien Miller <djm@mindrot.org>
3 * 4 *
diff --git a/blocks.c b/blocks.c
deleted file mode 100644
index ad93fe509..000000000
--- a/blocks.c
+++ /dev/null
@@ -1,248 +0,0 @@
1/* $OpenBSD: blocks.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */
2
3/*
4 * Public Domain, Author: Daniel J. Bernstein
5 * Copied from nacl-20110221/crypto_hashblocks/sha512/ref/blocks.c
6 */
7
8#include "includes.h"
9
10#include "crypto_api.h"
11
12typedef unsigned long long uint64;
13
14static uint64 load_bigendian(const unsigned char *x)
15{
16 return
17 (uint64) (x[7]) \
18 | (((uint64) (x[6])) << 8) \
19 | (((uint64) (x[5])) << 16) \
20 | (((uint64) (x[4])) << 24) \
21 | (((uint64) (x[3])) << 32) \
22 | (((uint64) (x[2])) << 40) \
23 | (((uint64) (x[1])) << 48) \
24 | (((uint64) (x[0])) << 56)
25 ;
26}
27
28static void store_bigendian(unsigned char *x,uint64 u)
29{
30 x[7] = u; u >>= 8;
31 x[6] = u; u >>= 8;
32 x[5] = u; u >>= 8;
33 x[4] = u; u >>= 8;
34 x[3] = u; u >>= 8;
35 x[2] = u; u >>= 8;
36 x[1] = u; u >>= 8;
37 x[0] = u;
38}
39
40#define SHR(x,c) ((x) >> (c))
41#define ROTR(x,c) (((x) >> (c)) | ((x) << (64 - (c))))
42
43#define Ch(x,y,z) ((x & y) ^ (~x & z))
44#define Maj(x,y,z) ((x & y) ^ (x & z) ^ (y & z))
45#define Sigma0(x) (ROTR(x,28) ^ ROTR(x,34) ^ ROTR(x,39))
46#define Sigma1(x) (ROTR(x,14) ^ ROTR(x,18) ^ ROTR(x,41))
47#define sigma0(x) (ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x,7))
48#define sigma1(x) (ROTR(x,19) ^ ROTR(x,61) ^ SHR(x,6))
49
50#define M(w0,w14,w9,w1) w0 = sigma1(w14) + w9 + sigma0(w1) + w0;
51
52#define EXPAND \
53 M(w0 ,w14,w9 ,w1 ) \
54 M(w1 ,w15,w10,w2 ) \
55 M(w2 ,w0 ,w11,w3 ) \
56 M(w3 ,w1 ,w12,w4 ) \
57 M(w4 ,w2 ,w13,w5 ) \
58 M(w5 ,w3 ,w14,w6 ) \
59 M(w6 ,w4 ,w15,w7 ) \
60 M(w7 ,w5 ,w0 ,w8 ) \
61 M(w8 ,w6 ,w1 ,w9 ) \
62 M(w9 ,w7 ,w2 ,w10) \
63 M(w10,w8 ,w3 ,w11) \
64 M(w11,w9 ,w4 ,w12) \
65 M(w12,w10,w5 ,w13) \
66 M(w13,w11,w6 ,w14) \
67 M(w14,w12,w7 ,w15) \
68 M(w15,w13,w8 ,w0 )
69
70#define F(w,k) \
71 T1 = h + Sigma1(e) + Ch(e,f,g) + k + w; \
72 T2 = Sigma0(a) + Maj(a,b,c); \
73 h = g; \
74 g = f; \
75 f = e; \
76 e = d + T1; \
77 d = c; \
78 c = b; \
79 b = a; \
80 a = T1 + T2;
81
82int crypto_hashblocks_sha512(unsigned char *statebytes,const unsigned char *in,unsigned long long inlen)
83{
84 uint64 state[8];
85 uint64 a;
86 uint64 b;
87 uint64 c;
88 uint64 d;
89 uint64 e;
90 uint64 f;
91 uint64 g;
92 uint64 h;
93 uint64 T1;
94 uint64 T2;
95
96 a = load_bigendian(statebytes + 0); state[0] = a;
97 b = load_bigendian(statebytes + 8); state[1] = b;
98 c = load_bigendian(statebytes + 16); state[2] = c;
99 d = load_bigendian(statebytes + 24); state[3] = d;
100 e = load_bigendian(statebytes + 32); state[4] = e;
101 f = load_bigendian(statebytes + 40); state[5] = f;
102 g = load_bigendian(statebytes + 48); state[6] = g;
103 h = load_bigendian(statebytes + 56); state[7] = h;
104
105 while (inlen >= 128) {
106 uint64 w0 = load_bigendian(in + 0);
107 uint64 w1 = load_bigendian(in + 8);
108 uint64 w2 = load_bigendian(in + 16);
109 uint64 w3 = load_bigendian(in + 24);
110 uint64 w4 = load_bigendian(in + 32);
111 uint64 w5 = load_bigendian(in + 40);
112 uint64 w6 = load_bigendian(in + 48);
113 uint64 w7 = load_bigendian(in + 56);
114 uint64 w8 = load_bigendian(in + 64);
115 uint64 w9 = load_bigendian(in + 72);
116 uint64 w10 = load_bigendian(in + 80);
117 uint64 w11 = load_bigendian(in + 88);
118 uint64 w12 = load_bigendian(in + 96);
119 uint64 w13 = load_bigendian(in + 104);
120 uint64 w14 = load_bigendian(in + 112);
121 uint64 w15 = load_bigendian(in + 120);
122
123 F(w0 ,0x428a2f98d728ae22ULL)
124 F(w1 ,0x7137449123ef65cdULL)
125 F(w2 ,0xb5c0fbcfec4d3b2fULL)
126 F(w3 ,0xe9b5dba58189dbbcULL)
127 F(w4 ,0x3956c25bf348b538ULL)
128 F(w5 ,0x59f111f1b605d019ULL)
129 F(w6 ,0x923f82a4af194f9bULL)
130 F(w7 ,0xab1c5ed5da6d8118ULL)
131 F(w8 ,0xd807aa98a3030242ULL)
132 F(w9 ,0x12835b0145706fbeULL)
133 F(w10,0x243185be4ee4b28cULL)
134 F(w11,0x550c7dc3d5ffb4e2ULL)
135 F(w12,0x72be5d74f27b896fULL)
136 F(w13,0x80deb1fe3b1696b1ULL)
137 F(w14,0x9bdc06a725c71235ULL)
138 F(w15,0xc19bf174cf692694ULL)
139
140 EXPAND
141
142 F(w0 ,0xe49b69c19ef14ad2ULL)
143 F(w1 ,0xefbe4786384f25e3ULL)
144 F(w2 ,0x0fc19dc68b8cd5b5ULL)
145 F(w3 ,0x240ca1cc77ac9c65ULL)
146 F(w4 ,0x2de92c6f592b0275ULL)
147 F(w5 ,0x4a7484aa6ea6e483ULL)
148 F(w6 ,0x5cb0a9dcbd41fbd4ULL)
149 F(w7 ,0x76f988da831153b5ULL)
150 F(w8 ,0x983e5152ee66dfabULL)
151 F(w9 ,0xa831c66d2db43210ULL)
152 F(w10,0xb00327c898fb213fULL)
153 F(w11,0xbf597fc7beef0ee4ULL)
154 F(w12,0xc6e00bf33da88fc2ULL)
155 F(w13,0xd5a79147930aa725ULL)
156 F(w14,0x06ca6351e003826fULL)
157 F(w15,0x142929670a0e6e70ULL)
158
159 EXPAND
160
161 F(w0 ,0x27b70a8546d22ffcULL)
162 F(w1 ,0x2e1b21385c26c926ULL)
163 F(w2 ,0x4d2c6dfc5ac42aedULL)
164 F(w3 ,0x53380d139d95b3dfULL)
165 F(w4 ,0x650a73548baf63deULL)
166 F(w5 ,0x766a0abb3c77b2a8ULL)
167 F(w6 ,0x81c2c92e47edaee6ULL)
168 F(w7 ,0x92722c851482353bULL)
169 F(w8 ,0xa2bfe8a14cf10364ULL)
170 F(w9 ,0xa81a664bbc423001ULL)
171 F(w10,0xc24b8b70d0f89791ULL)
172 F(w11,0xc76c51a30654be30ULL)
173 F(w12,0xd192e819d6ef5218ULL)
174 F(w13,0xd69906245565a910ULL)
175 F(w14,0xf40e35855771202aULL)
176 F(w15,0x106aa07032bbd1b8ULL)
177
178 EXPAND
179
180 F(w0 ,0x19a4c116b8d2d0c8ULL)
181 F(w1 ,0x1e376c085141ab53ULL)
182 F(w2 ,0x2748774cdf8eeb99ULL)
183 F(w3 ,0x34b0bcb5e19b48a8ULL)
184 F(w4 ,0x391c0cb3c5c95a63ULL)
185 F(w5 ,0x4ed8aa4ae3418acbULL)
186 F(w6 ,0x5b9cca4f7763e373ULL)
187 F(w7 ,0x682e6ff3d6b2b8a3ULL)
188 F(w8 ,0x748f82ee5defb2fcULL)
189 F(w9 ,0x78a5636f43172f60ULL)
190 F(w10,0x84c87814a1f0ab72ULL)
191 F(w11,0x8cc702081a6439ecULL)
192 F(w12,0x90befffa23631e28ULL)
193 F(w13,0xa4506cebde82bde9ULL)
194 F(w14,0xbef9a3f7b2c67915ULL)
195 F(w15,0xc67178f2e372532bULL)
196
197 EXPAND
198
199 F(w0 ,0xca273eceea26619cULL)
200 F(w1 ,0xd186b8c721c0c207ULL)
201 F(w2 ,0xeada7dd6cde0eb1eULL)
202 F(w3 ,0xf57d4f7fee6ed178ULL)
203 F(w4 ,0x06f067aa72176fbaULL)
204 F(w5 ,0x0a637dc5a2c898a6ULL)
205 F(w6 ,0x113f9804bef90daeULL)
206 F(w7 ,0x1b710b35131c471bULL)
207 F(w8 ,0x28db77f523047d84ULL)
208 F(w9 ,0x32caab7b40c72493ULL)
209 F(w10,0x3c9ebe0a15c9bebcULL)
210 F(w11,0x431d67c49c100d4cULL)
211 F(w12,0x4cc5d4becb3e42b6ULL)
212 F(w13,0x597f299cfc657e2aULL)
213 F(w14,0x5fcb6fab3ad6faecULL)
214 F(w15,0x6c44198c4a475817ULL)
215
216 a += state[0];
217 b += state[1];
218 c += state[2];
219 d += state[3];
220 e += state[4];
221 f += state[5];
222 g += state[6];
223 h += state[7];
224
225 state[0] = a;
226 state[1] = b;
227 state[2] = c;
228 state[3] = d;
229 state[4] = e;
230 state[5] = f;
231 state[6] = g;
232 state[7] = h;
233
234 in += 128;
235 inlen -= 128;
236 }
237
238 store_bigendian(statebytes + 0,state[0]);
239 store_bigendian(statebytes + 8,state[1]);
240 store_bigendian(statebytes + 16,state[2]);
241 store_bigendian(statebytes + 24,state[3]);
242 store_bigendian(statebytes + 32,state[4]);
243 store_bigendian(statebytes + 40,state[5]);
244 store_bigendian(statebytes + 48,state[6]);
245 store_bigendian(statebytes + 56,state[7]);
246
247 return inlen;
248}
diff --git a/channels.c b/channels.c
index 83442be06..bdee1f386 100644
--- a/channels.c
+++ b/channels.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: channels.c,v 1.375 2017/09/24 13:45:34 djm Exp $ */ 1/* $OpenBSD: channels.c,v 1.379 2018/02/05 05:36:49 tb 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
@@ -436,10 +436,15 @@ channel_close_fd(struct ssh *ssh, int *fdp)
436static void 436static void
437channel_close_fds(struct ssh *ssh, Channel *c) 437channel_close_fds(struct ssh *ssh, Channel *c)
438{ 438{
439 int sock = c->sock, rfd = c->rfd, wfd = c->wfd, efd = c->efd;
440
439 channel_close_fd(ssh, &c->sock); 441 channel_close_fd(ssh, &c->sock);
440 channel_close_fd(ssh, &c->rfd); 442 if (rfd != sock)
441 channel_close_fd(ssh, &c->wfd); 443 channel_close_fd(ssh, &c->rfd);
442 channel_close_fd(ssh, &c->efd); 444 if (wfd != sock && wfd != rfd)
445 channel_close_fd(ssh, &c->wfd);
446 if (efd != sock && efd != rfd && efd != wfd)
447 channel_close_fd(ssh, &c->efd);
443} 448}
444 449
445static void 450static void
@@ -1582,13 +1587,8 @@ channel_post_x11_listener(struct ssh *ssh, Channel *c,
1582 SSH_CHANNEL_OPENING, newsock, newsock, -1, 1587 SSH_CHANNEL_OPENING, newsock, newsock, -1,
1583 c->local_window_max, c->local_maxpacket, 0, buf, 1); 1588 c->local_window_max, c->local_maxpacket, 0, buf, 1);
1584 open_preamble(ssh, __func__, nc, "x11"); 1589 open_preamble(ssh, __func__, nc, "x11");
1585 if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0) { 1590 if ((r = sshpkt_put_cstring(ssh, remote_ipaddr)) != 0 ||
1586 fatal("%s: channel %i: reply %s", __func__, 1591 (r = sshpkt_put_u32(ssh, remote_port)) != 0) {
1587 c->self, ssh_err(r));
1588 }
1589 if ((datafellows & SSH_BUG_X11FWD) != 0)
1590 debug2("channel %d: ssh2 x11 bug compat mode", nc->self);
1591 else if ((r = sshpkt_put_u32(ssh, remote_port)) != 0) {
1592 fatal("%s: channel %i: reply %s", __func__, 1592 fatal("%s: channel %i: reply %s", __func__,
1593 c->self, ssh_err(r)); 1593 c->self, ssh_err(r));
1594 } 1594 }
@@ -1668,19 +1668,6 @@ port_open_helper(struct ssh *ssh, Channel *c, char *rtype)
1668 free(local_ipaddr); 1668 free(local_ipaddr);
1669} 1669}
1670 1670
1671static void
1672channel_set_reuseaddr(int fd)
1673{
1674 int on = 1;
1675
1676 /*
1677 * Set socket options.
1678 * Allow local port reuse in TIME_WAIT.
1679 */
1680 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1)
1681 error("setsockopt SO_REUSEADDR fd %d: %s", fd, strerror(errno));
1682}
1683
1684void 1671void
1685channel_set_x11_refuse_time(struct ssh *ssh, u_int refuse_time) 1672channel_set_x11_refuse_time(struct ssh *ssh, u_int refuse_time)
1686{ 1673{
@@ -1837,15 +1824,13 @@ channel_post_connecting(struct ssh *ssh, Channel *c,
1837 if ((r = sshpkt_start(ssh, 1824 if ((r = sshpkt_start(ssh,
1838 SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 || 1825 SSH2_MSG_CHANNEL_OPEN_FAILURE)) != 0 ||
1839 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 || 1826 (r = sshpkt_put_u32(ssh, c->remote_id)) != 0 ||
1840 (r = sshpkt_put_u32(ssh, SSH2_OPEN_CONNECT_FAILED)) 1827 (r = sshpkt_put_u32(ssh,
1841 != 0) 1828 SSH2_OPEN_CONNECT_FAILED)) != 0 ||
1842 fatal("%s: channel %i: failure: %s", __func__, 1829 (r = sshpkt_put_cstring(ssh, strerror(err))) != 0 ||
1843 c->self, ssh_err(r)); 1830 (r = sshpkt_put_cstring(ssh, "")) != 0) {
1844 if ((datafellows & SSH_BUG_OPENFAILURE) == 0 &&
1845 ((r = sshpkt_put_cstring(ssh, strerror(err))) != 0 ||
1846 (r = sshpkt_put_cstring(ssh, "")) != 0))
1847 fatal("%s: channel %i: failure: %s", __func__, 1831 fatal("%s: channel %i: failure: %s", __func__,
1848 c->self, ssh_err(r)); 1832 c->self, ssh_err(r));
1833 }
1849 if ((r = sshpkt_send(ssh)) != 0) 1834 if ((r = sshpkt_send(ssh)) != 0)
1850 fatal("%s: channel %i: %s", __func__, c->self, 1835 fatal("%s: channel %i: %s", __func__, c->self,
1851 ssh_err(r)); 1836 ssh_err(r));
@@ -3123,13 +3108,11 @@ channel_input_open_failure(int type, u_int32_t seq, struct ssh *ssh)
3123 error("%s: reason: %s", __func__, ssh_err(r)); 3108 error("%s: reason: %s", __func__, ssh_err(r));
3124 packet_disconnect("Invalid open failure message"); 3109 packet_disconnect("Invalid open failure message");
3125 } 3110 }
3126 if ((datafellows & SSH_BUG_OPENFAILURE) == 0) { 3111 /* skip language */
3127 /* skip language */ 3112 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 ||
3128 if ((r = sshpkt_get_cstring(ssh, &msg, NULL)) != 0 || 3113 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0) {
3129 (r = sshpkt_get_string_direct(ssh, NULL, NULL)) != 0) { 3114 error("%s: message/lang: %s", __func__, ssh_err(r));
3130 error("%s: message/lang: %s", __func__, ssh_err(r)); 3115 packet_disconnect("Invalid open failure message");
3131 packet_disconnect("Invalid open failure message");
3132 }
3133 } 3116 }
3134 ssh_packet_check_eom(ssh); 3117 ssh_packet_check_eom(ssh);
3135 logit("channel %d: open failed: %s%s%s", c->self, 3118 logit("channel %d: open failed: %s%s%s", c->self,
@@ -3364,11 +3347,12 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3364 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); 3347 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
3365 if (sock < 0) { 3348 if (sock < 0) {
3366 /* this is no error since kernel may not support ipv6 */ 3349 /* this is no error since kernel may not support ipv6 */
3367 verbose("socket: %.100s", strerror(errno)); 3350 verbose("socket [%s]:%s: %.100s", ntop, strport,
3351 strerror(errno));
3368 continue; 3352 continue;
3369 } 3353 }
3370 3354
3371 channel_set_reuseaddr(sock); 3355 set_reuseaddr(sock);
3372 if (ai->ai_family == AF_INET6) 3356 if (ai->ai_family == AF_INET6)
3373 sock_set_v6only(sock); 3357 sock_set_v6only(sock);
3374 3358
@@ -3382,9 +3366,11 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3382 * already bound 3366 * already bound
3383 */ 3367 */
3384 if (!ai->ai_next) 3368 if (!ai->ai_next)
3385 error("bind: %.100s", strerror(errno)); 3369 error("bind [%s]:%s: %.100s",
3370 ntop, strport, strerror(errno));
3386 else 3371 else
3387 verbose("bind: %.100s", strerror(errno)); 3372 verbose("bind [%s]:%s: %.100s",
3373 ntop, strport, strerror(errno));
3388 3374
3389 close(sock); 3375 close(sock);
3390 continue; 3376 continue;
@@ -3392,6 +3378,8 @@ channel_setup_fwd_listener_tcpip(struct ssh *ssh, int type,
3392 /* Start listening for connections on the socket. */ 3378 /* Start listening for connections on the socket. */
3393 if (listen(sock, SSH_LISTEN_BACKLOG) < 0) { 3379 if (listen(sock, SSH_LISTEN_BACKLOG) < 0) {
3394 error("listen: %.100s", strerror(errno)); 3380 error("listen: %.100s", strerror(errno));
3381 error("listen [%s]:%s: %.100s", ntop, strport,
3382 strerror(errno));
3395 close(sock); 3383 close(sock);
3396 continue; 3384 continue;
3397 } 3385 }
@@ -3672,15 +3660,9 @@ static const char *
3672channel_rfwd_bind_host(const char *listen_host) 3660channel_rfwd_bind_host(const char *listen_host)
3673{ 3661{
3674 if (listen_host == NULL) { 3662 if (listen_host == NULL) {
3675 if (datafellows & SSH_BUG_RFWD_ADDR) 3663 return "localhost";
3676 return "127.0.0.1";
3677 else
3678 return "localhost";
3679 } else if (*listen_host == '\0' || strcmp(listen_host, "*") == 0) { 3664 } else if (*listen_host == '\0' || strcmp(listen_host, "*") == 0) {
3680 if (datafellows & SSH_BUG_RFWD_ADDR) 3665 return "";
3681 return "0.0.0.0";
3682 else
3683 return "";
3684 } else 3666 } else
3685 return listen_host; 3667 return listen_host;
3686} 3668}
@@ -4439,7 +4421,7 @@ x11_create_display_inet(struct ssh *ssh, int x11_display_offset,
4439 if (ai->ai_family == AF_INET6) 4421 if (ai->ai_family == AF_INET6)
4440 sock_set_v6only(sock); 4422 sock_set_v6only(sock);
4441 if (x11_use_localhost) 4423 if (x11_use_localhost)
4442 channel_set_reuseaddr(sock); 4424 set_reuseaddr(sock);
4443 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) { 4425 if (bind(sock, ai->ai_addr, ai->ai_addrlen) < 0) {
4444 debug2("%s: bind port %d: %.100s", __func__, 4426 debug2("%s: bind port %d: %.100s", __func__,
4445 port, strerror(errno)); 4427 port, strerror(errno));
diff --git a/cipher.c b/cipher.c
index c3cd5dcf4..578763616 100644
--- a/cipher.c
+++ b/cipher.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: cipher.c,v 1.107 2017/05/07 23:12:57 djm Exp $ */ 1/* $OpenBSD: cipher.c,v 1.111 2018/02/23 15:58:37 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
@@ -310,8 +310,7 @@ cipher_init(struct sshcipher_ctx **ccp, const struct sshcipher *cipher,
310 } else { 310 } else {
311 if (cc != NULL) { 311 if (cc != NULL) {
312#ifdef WITH_OPENSSL 312#ifdef WITH_OPENSSL
313 if (cc->evp != NULL) 313 EVP_CIPHER_CTX_free(cc->evp);
314 EVP_CIPHER_CTX_free(cc->evp);
315#endif /* WITH_OPENSSL */ 314#endif /* WITH_OPENSSL */
316 explicit_bzero(cc, sizeof(*cc)); 315 explicit_bzero(cc, sizeof(*cc));
317 free(cc); 316 free(cc);
@@ -402,7 +401,7 @@ cipher_get_length(struct sshcipher_ctx *cc, u_int *plenp, u_int seqnr,
402 cp, len); 401 cp, len);
403 if (len < 4) 402 if (len < 4)
404 return SSH_ERR_MESSAGE_INCOMPLETE; 403 return SSH_ERR_MESSAGE_INCOMPLETE;
405 *plenp = get_u32(cp); 404 *plenp = PEEK_U32(cp);
406 return 0; 405 return 0;
407} 406}
408 407
@@ -416,10 +415,8 @@ cipher_free(struct sshcipher_ctx *cc)
416 else if ((cc->cipher->flags & CFLAG_AESCTR) != 0) 415 else if ((cc->cipher->flags & CFLAG_AESCTR) != 0)
417 explicit_bzero(&cc->ac_ctx, sizeof(cc->ac_ctx)); 416 explicit_bzero(&cc->ac_ctx, sizeof(cc->ac_ctx));
418#ifdef WITH_OPENSSL 417#ifdef WITH_OPENSSL
419 if (cc->evp != NULL) { 418 EVP_CIPHER_CTX_free(cc->evp);
420 EVP_CIPHER_CTX_free(cc->evp); 419 cc->evp = NULL;
421 cc->evp = NULL;
422 }
423#endif 420#endif
424 explicit_bzero(cc, sizeof(*cc)); 421 explicit_bzero(cc, sizeof(*cc));
425 free(cc); 422 free(cc);
@@ -449,9 +446,9 @@ cipher_get_keyiv_len(const struct sshcipher_ctx *cc)
449int 446int
450cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len) 447cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len)
451{ 448{
452 const struct sshcipher *c = cc->cipher;
453#ifdef WITH_OPENSSL 449#ifdef WITH_OPENSSL
454 int evplen; 450 const struct sshcipher *c = cc->cipher;
451 int evplen;
455#endif 452#endif
456 453
457 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) { 454 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) {
@@ -494,9 +491,9 @@ cipher_get_keyiv(struct sshcipher_ctx *cc, u_char *iv, u_int len)
494int 491int
495cipher_set_keyiv(struct sshcipher_ctx *cc, const u_char *iv) 492cipher_set_keyiv(struct sshcipher_ctx *cc, const u_char *iv)
496{ 493{
497 const struct sshcipher *c = cc->cipher;
498#ifdef WITH_OPENSSL 494#ifdef WITH_OPENSSL
499 int evplen = 0; 495 const struct sshcipher *c = cc->cipher;
496 int evplen = 0;
500#endif 497#endif
501 498
502 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0) 499 if ((cc->cipher->flags & CFLAG_CHACHAPOLY) != 0)
diff --git a/clientloop.c b/clientloop.c
index 791d336e3..7bcf22e38 100644
--- a/clientloop.c
+++ b/clientloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: clientloop.c,v 1.305 2017/09/19 04:24:22 djm Exp $ */ 1/* $OpenBSD: clientloop.c,v 1.311 2018/02/11 21:16:56 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
@@ -210,7 +210,6 @@ static void
210window_change_handler(int sig) 210window_change_handler(int sig)
211{ 211{
212 received_window_change_signal = 1; 212 received_window_change_signal = 1;
213 signal(SIGWINCH, window_change_handler);
214} 213}
215 214
216/* 215/*
@@ -226,19 +225,6 @@ signal_handler(int sig)
226} 225}
227 226
228/* 227/*
229 * Returns current time in seconds from Jan 1, 1970 with the maximum
230 * available resolution.
231 */
232
233static double
234get_current_time(void)
235{
236 struct timeval tv;
237 gettimeofday(&tv, NULL);
238 return (double) tv.tv_sec + (double) tv.tv_usec / 1000000.0;
239}
240
241/*
242 * Sets control_persist_exit_time to the absolute time when the 228 * Sets control_persist_exit_time to the absolute time when the
243 * backgrounded control master should exit due to expiry of the 229 * backgrounded control master should exit due to expiry of the
244 * ControlPersist timeout. Sets it to 0 if we are not a backgrounded 230 * ControlPersist timeout. Sets it to 0 if we are not a backgrounded
@@ -1256,7 +1242,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1256 fatal("%s pledge(): %s", __func__, strerror(errno)); 1242 fatal("%s pledge(): %s", __func__, strerror(errno));
1257 } 1243 }
1258 1244
1259 start_time = get_current_time(); 1245 start_time = monotime_double();
1260 1246
1261 /* Initialize variables. */ 1247 /* Initialize variables. */
1262 last_was_cr = 1; 1248 last_was_cr = 1;
@@ -1445,7 +1431,7 @@ client_loop(struct ssh *ssh, int have_pty, int escape_char_arg,
1445 buffer_free(&stderr_buffer); 1431 buffer_free(&stderr_buffer);
1446 1432
1447 /* Report bytes transferred, and transfer rates. */ 1433 /* Report bytes transferred, and transfer rates. */
1448 total_time = get_current_time() - start_time; 1434 total_time = monotime_double() - start_time;
1449 packet_get_bytes(&ibytes, &obytes); 1435 packet_get_bytes(&ibytes, &obytes);
1450 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds", 1436 verbose("Transferred: sent %llu, received %llu bytes, in %.1f seconds",
1451 (unsigned long long)obytes, (unsigned long long)ibytes, total_time); 1437 (unsigned long long)obytes, (unsigned long long)ibytes, total_time);
@@ -1554,12 +1540,7 @@ client_request_x11(struct ssh *ssh, const char *request_type, int rchan)
1554 return NULL; 1540 return NULL;
1555 } 1541 }
1556 originator = packet_get_string(NULL); 1542 originator = packet_get_string(NULL);
1557 if (datafellows & SSH_BUG_X11FWD) { 1543 originator_port = packet_get_int();
1558 debug2("buggy server: x11 request w/o originator_port");
1559 originator_port = 0;
1560 } else {
1561 originator_port = packet_get_int();
1562 }
1563 packet_check_eom(); 1544 packet_check_eom();
1564 /* XXX check permission */ 1545 /* XXX check permission */
1565 debug("client_request_x11: request from %s %d", originator, 1546 debug("client_request_x11: request from %s %d", originator,
@@ -1601,12 +1582,13 @@ client_request_agent(struct ssh *ssh, const char *request_type, int rchan)
1601 return c; 1582 return c;
1602} 1583}
1603 1584
1604int 1585char *
1605client_request_tun_fwd(struct ssh *ssh, int tun_mode, 1586client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1606 int local_tun, int remote_tun) 1587 int local_tun, int remote_tun)
1607{ 1588{
1608 Channel *c; 1589 Channel *c;
1609 int fd; 1590 int fd;
1591 char *ifname = NULL;
1610 1592
1611 if (tun_mode == SSH_TUNMODE_NO) 1593 if (tun_mode == SSH_TUNMODE_NO)
1612 return 0; 1594 return 0;
@@ -1614,10 +1596,11 @@ client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1614 debug("Requesting tun unit %d in mode %d", local_tun, tun_mode); 1596 debug("Requesting tun unit %d in mode %d", local_tun, tun_mode);
1615 1597
1616 /* Open local tunnel device */ 1598 /* Open local tunnel device */
1617 if ((fd = tun_open(local_tun, tun_mode)) == -1) { 1599 if ((fd = tun_open(local_tun, tun_mode, &ifname)) == -1) {
1618 error("Tunnel device open failed."); 1600 error("Tunnel device open failed.");
1619 return -1; 1601 return NULL;
1620 } 1602 }
1603 debug("Tunnel forwarding using interface %s", ifname);
1621 1604
1622 c = channel_new(ssh, "tun", SSH_CHANNEL_OPENING, fd, fd, -1, 1605 c = channel_new(ssh, "tun", SSH_CHANNEL_OPENING, fd, fd, -1,
1623 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1); 1606 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1);
@@ -1638,7 +1621,7 @@ client_request_tun_fwd(struct ssh *ssh, int tun_mode,
1638 packet_put_int(remote_tun); 1621 packet_put_int(remote_tun);
1639 packet_send(); 1622 packet_send();
1640 1623
1641 return 0; 1624 return ifname;
1642} 1625}
1643 1626
1644/* XXXX move to generic input handler */ 1627/* XXXX move to generic input handler */
@@ -1689,10 +1672,8 @@ client_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
1689 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE); 1672 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
1690 packet_put_int(rchan); 1673 packet_put_int(rchan);
1691 packet_put_int(SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED); 1674 packet_put_int(SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED);
1692 if (!(datafellows & SSH_BUG_OPENFAILURE)) { 1675 packet_put_cstring("open failed");
1693 packet_put_cstring("open failed"); 1676 packet_put_cstring("");
1694 packet_put_cstring("");
1695 }
1696 packet_send(); 1677 packet_send();
1697 } 1678 }
1698 free(ctype); 1679 free(ctype);
@@ -1904,7 +1885,7 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1904 struct hostkeys_update_ctx *ctx = (struct hostkeys_update_ctx *)_ctx; 1885 struct hostkeys_update_ctx *ctx = (struct hostkeys_update_ctx *)_ctx;
1905 size_t i, ndone; 1886 size_t i, ndone;
1906 struct sshbuf *signdata; 1887 struct sshbuf *signdata;
1907 int r; 1888 int r, kexsigtype, use_kexsigtype;
1908 const u_char *sig; 1889 const u_char *sig;
1909 size_t siglen; 1890 size_t siglen;
1910 1891
@@ -1916,6 +1897,9 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1916 hostkeys_update_ctx_free(ctx); 1897 hostkeys_update_ctx_free(ctx);
1917 return; 1898 return;
1918 } 1899 }
1900 kexsigtype = sshkey_type_plain(
1901 sshkey_type_from_name(ssh->kex->hostkey_alg));
1902
1919 if ((signdata = sshbuf_new()) == NULL) 1903 if ((signdata = sshbuf_new()) == NULL)
1920 fatal("%s: sshbuf_new failed", __func__); 1904 fatal("%s: sshbuf_new failed", __func__);
1921 /* Don't want to accidentally accept an unbound signature */ 1905 /* Don't want to accidentally accept an unbound signature */
@@ -1944,8 +1928,15 @@ client_global_hostkeys_private_confirm(struct ssh *ssh, int type,
1944 __func__, ssh_err(r)); 1928 __func__, ssh_err(r));
1945 goto out; 1929 goto out;
1946 } 1930 }
1931 /*
1932 * For RSA keys, prefer to use the signature type negotiated
1933 * during KEX to the default (SHA1).
1934 */
1935 use_kexsigtype = kexsigtype == KEY_RSA &&
1936 sshkey_type_plain(ctx->keys[i]->type) == KEY_RSA;
1947 if ((r = sshkey_verify(ctx->keys[i], sig, siglen, 1937 if ((r = sshkey_verify(ctx->keys[i], sig, siglen,
1948 sshbuf_ptr(signdata), sshbuf_len(signdata), 0)) != 0) { 1938 sshbuf_ptr(signdata), sshbuf_len(signdata),
1939 use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0)) != 0) {
1949 error("%s: server gave bad signature for %s key %zu", 1940 error("%s: server gave bad signature for %s key %zu",
1950 __func__, sshkey_type(ctx->keys[i]), i); 1941 __func__, sshkey_type(ctx->keys[i]), i);
1951 goto out; 1942 goto out;
diff --git a/clientloop.h b/clientloop.h
index a1975ccc8..8d1f0bff6 100644
--- a/clientloop.h
+++ b/clientloop.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: clientloop.h,v 1.34 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: clientloop.h,v 1.35 2017/10/23 05:08:00 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -46,7 +46,7 @@ int client_x11_get_proto(struct ssh *, const char *, const char *,
46void client_global_request_reply_fwd(int, u_int32_t, void *); 46void client_global_request_reply_fwd(int, u_int32_t, void *);
47void client_session2_setup(struct ssh *, int, int, int, 47void client_session2_setup(struct ssh *, int, int, int,
48 const char *, struct termios *, int, Buffer *, char **); 48 const char *, struct termios *, int, Buffer *, char **);
49int client_request_tun_fwd(struct ssh *, int, int, int); 49char *client_request_tun_fwd(struct ssh *, int, int, int);
50void client_stop_mux(void); 50void client_stop_mux(void);
51 51
52/* Escape filter for protocol 2 sessions */ 52/* Escape filter for protocol 2 sessions */
diff --git a/compat.c b/compat.c
index d82135e2b..861e9e21f 100644
--- a/compat.c
+++ b/compat.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: compat.c,v 1.104 2017/07/25 09:22:25 dtucker Exp $ */ 1/* $OpenBSD: compat.c,v 1.106 2018/02/16 04:43:11 dtucker Exp $ */
2/* 2/*
3 * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved. 3 * Copyright (c) 1999, 2000, 2001, 2002 Markus Friedl. All rights reserved.
4 * 4 *
@@ -50,83 +50,20 @@ compat_datafellows(const char *version)
50 char *pat; 50 char *pat;
51 int bugs; 51 int bugs;
52 } check[] = { 52 } check[] = {
53 { "OpenSSH-2.0*,"
54 "OpenSSH-2.1*,"
55 "OpenSSH_2.1*,"
56 "OpenSSH_2.2*", SSH_OLD_SESSIONID|SSH_BUG_BANNER|
57 SSH_OLD_DHGEX|SSH_BUG_NOREKEY|
58 SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
59 { "OpenSSH_2.3.0*", SSH_BUG_BANNER|SSH_BUG_BIGENDIANAES|
60 SSH_OLD_DHGEX|SSH_BUG_NOREKEY|
61 SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
62 { "OpenSSH_2.3.*", SSH_BUG_BIGENDIANAES|SSH_OLD_DHGEX|
63 SSH_BUG_NOREKEY|SSH_BUG_EXTEOF|
64 SSH_OLD_FORWARD_ADDR},
65 { "OpenSSH_2.5.0p1*,"
66 "OpenSSH_2.5.1p1*",
67 SSH_BUG_BIGENDIANAES|SSH_OLD_DHGEX|
68 SSH_BUG_NOREKEY|SSH_BUG_EXTEOF|
69 SSH_OLD_FORWARD_ADDR},
70 { "OpenSSH_2.5.0*,"
71 "OpenSSH_2.5.1*,"
72 "OpenSSH_2.5.2*", SSH_OLD_DHGEX|SSH_BUG_NOREKEY|
73 SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
74 { "OpenSSH_2.5.3*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF|
75 SSH_OLD_FORWARD_ADDR},
76 { "OpenSSH_2.*," 53 { "OpenSSH_2.*,"
77 "OpenSSH_3.0*," 54 "OpenSSH_3.0*,"
78 "OpenSSH_3.1*", SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR}, 55 "OpenSSH_3.1*", SSH_BUG_EXTEOF|SSH_OLD_FORWARD_ADDR},
79 { "OpenSSH_3.*", SSH_OLD_FORWARD_ADDR }, 56 { "OpenSSH_3.*", SSH_OLD_FORWARD_ADDR },
80 { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF}, 57 { "Sun_SSH_1.0*", SSH_BUG_NOREKEY|SSH_BUG_EXTEOF},
81 { "OpenSSH_4*", 0 }, 58 { "OpenSSH_2*,"
59 "OpenSSH_3*,"
60 "OpenSSH_4*", 0 },
82 { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT}, 61 { "OpenSSH_5*", SSH_NEW_OPENSSH|SSH_BUG_DYNAMIC_RPORT},
83 { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH}, 62 { "OpenSSH_6.6.1*", SSH_NEW_OPENSSH},
84 { "OpenSSH_6.5*," 63 { "OpenSSH_6.5*,"
85 "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD}, 64 "OpenSSH_6.6*", SSH_NEW_OPENSSH|SSH_BUG_CURVE25519PAD},
86 { "OpenSSH*", SSH_NEW_OPENSSH }, 65 { "OpenSSH*", SSH_NEW_OPENSSH },
87 { "*MindTerm*", 0 }, 66 { "*MindTerm*", 0 },
88 { "2.1.0*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
89 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
90 SSH_BUG_RSASIGMD5|SSH_BUG_HBSERVICE|
91 SSH_BUG_FIRSTKEX },
92 { "2.1 *", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
93 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
94 SSH_BUG_RSASIGMD5|SSH_BUG_HBSERVICE|
95 SSH_BUG_FIRSTKEX },
96 { "2.0.13*,"
97 "2.0.14*,"
98 "2.0.15*,"
99 "2.0.16*,"
100 "2.0.17*,"
101 "2.0.18*,"
102 "2.0.19*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
103 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
104 SSH_BUG_PKSERVICE|SSH_BUG_X11FWD|
105 SSH_BUG_PKOK|SSH_BUG_RSASIGMD5|
106 SSH_BUG_HBSERVICE|SSH_BUG_OPENFAILURE|
107 SSH_BUG_DUMMYCHAN|SSH_BUG_FIRSTKEX },
108 { "2.0.11*,"
109 "2.0.12*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
110 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
111 SSH_BUG_PKSERVICE|SSH_BUG_X11FWD|
112 SSH_BUG_PKAUTH|SSH_BUG_PKOK|
113 SSH_BUG_RSASIGMD5|SSH_BUG_OPENFAILURE|
114 SSH_BUG_DUMMYCHAN|SSH_BUG_FIRSTKEX },
115 { "2.0.*", SSH_BUG_SIGBLOB|SSH_BUG_HMAC|
116 SSH_OLD_SESSIONID|SSH_BUG_DEBUG|
117 SSH_BUG_PKSERVICE|SSH_BUG_X11FWD|
118 SSH_BUG_PKAUTH|SSH_BUG_PKOK|
119 SSH_BUG_RSASIGMD5|SSH_BUG_OPENFAILURE|
120 SSH_BUG_DERIVEKEY|SSH_BUG_DUMMYCHAN|
121 SSH_BUG_FIRSTKEX },
122 { "2.2.0*,"
123 "2.3.0*", SSH_BUG_HMAC|SSH_BUG_DEBUG|
124 SSH_BUG_RSASIGMD5|SSH_BUG_FIRSTKEX },
125 { "2.3.*", SSH_BUG_DEBUG|SSH_BUG_RSASIGMD5|
126 SSH_BUG_FIRSTKEX },
127 { "2.4", SSH_OLD_SESSIONID }, /* Van Dyke */
128 { "2.*", SSH_BUG_DEBUG|SSH_BUG_FIRSTKEX|
129 SSH_BUG_RFWD_ADDR },
130 { "3.0.*", SSH_BUG_DEBUG }, 67 { "3.0.*", SSH_BUG_DEBUG },
131 { "3.0 SecureCRT*", SSH_OLD_SESSIONID }, 68 { "3.0 SecureCRT*", SSH_OLD_SESSIONID },
132 { "1.7 SecureFX*", SSH_OLD_SESSIONID }, 69 { "1.7 SecureFX*", SSH_OLD_SESSIONID },
@@ -189,6 +126,8 @@ compat_datafellows(const char *version)
189 "WinSCP_release_5.7.3," 126 "WinSCP_release_5.7.3,"
190 "WinSCP_release_5.7.4", 127 "WinSCP_release_5.7.4",
191 SSH_OLD_DHGEX }, 128 SSH_OLD_DHGEX },
129 { "ConfD-*",
130 SSH_BUG_UTF8TTYMODE },
192 { NULL, 0 } 131 { NULL, 0 }
193 }; 132 };
194 133
diff --git a/compat.h b/compat.h
index 2e7830f1b..4fee3495a 100644
--- a/compat.h
+++ b/compat.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: compat.h,v 1.49 2017/04/30 23:13:25 djm Exp $ */ 1/* $OpenBSD: compat.h,v 1.51 2018/02/16 04:43:11 dtucker Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved. 4 * Copyright (c) 1999, 2000, 2001 Markus Friedl. All rights reserved.
@@ -32,31 +32,31 @@
32#define SSH_PROTO_1_PREFERRED 0x02 32#define SSH_PROTO_1_PREFERRED 0x02
33#define SSH_PROTO_2 0x04 33#define SSH_PROTO_2 0x04
34 34
35#define SSH_BUG_SIGBLOB 0x00000001 35#define SSH_BUG_UTF8TTYMODE 0x00000001
36#define SSH_BUG_PKSERVICE 0x00000002 36/* #define unused 0x00000002 */
37#define SSH_BUG_HMAC 0x00000004 37/* #define unused 0x00000004 */
38#define SSH_BUG_X11FWD 0x00000008 38/* #define unused 0x00000008 */
39#define SSH_OLD_SESSIONID 0x00000010 39#define SSH_OLD_SESSIONID 0x00000010
40#define SSH_BUG_PKAUTH 0x00000020 40/* #define unused 0x00000020 */
41#define SSH_BUG_DEBUG 0x00000040 41#define SSH_BUG_DEBUG 0x00000040
42#define SSH_BUG_BANNER 0x00000080 42/* #define unused 0x00000080 */
43#define SSH_BUG_IGNOREMSG 0x00000100 43#define SSH_BUG_IGNOREMSG 0x00000100
44#define SSH_BUG_PKOK 0x00000200 44/* #define unused 0x00000200 */
45#define SSH_BUG_PASSWORDPAD 0x00000400 45#define SSH_BUG_PASSWORDPAD 0x00000400
46#define SSH_BUG_SCANNER 0x00000800 46#define SSH_BUG_SCANNER 0x00000800
47#define SSH_BUG_BIGENDIANAES 0x00001000 47#define SSH_BUG_BIGENDIANAES 0x00001000
48#define SSH_BUG_RSASIGMD5 0x00002000 48#define SSH_BUG_RSASIGMD5 0x00002000
49#define SSH_OLD_DHGEX 0x00004000 49#define SSH_OLD_DHGEX 0x00004000
50#define SSH_BUG_NOREKEY 0x00008000 50#define SSH_BUG_NOREKEY 0x00008000
51#define SSH_BUG_HBSERVICE 0x00010000 51/* #define unused 0x00010000 */
52#define SSH_BUG_OPENFAILURE 0x00020000 52/* #define unused 0x00020000 */
53#define SSH_BUG_DERIVEKEY 0x00040000 53/* #define unused 0x00040000 */
54#define SSH_BUG_DUMMYCHAN 0x00100000 54/* #define unused 0x00100000 */
55#define SSH_BUG_EXTEOF 0x00200000 55#define SSH_BUG_EXTEOF 0x00200000
56#define SSH_BUG_PROBE 0x00400000 56#define SSH_BUG_PROBE 0x00400000
57#define SSH_BUG_FIRSTKEX 0x00800000 57/* #define unused 0x00800000 */
58#define SSH_OLD_FORWARD_ADDR 0x01000000 58#define SSH_OLD_FORWARD_ADDR 0x01000000
59#define SSH_BUG_RFWD_ADDR 0x02000000 59/* #define unused 0x02000000 */
60#define SSH_NEW_OPENSSH 0x04000000 60#define SSH_NEW_OPENSSH 0x04000000
61#define SSH_BUG_DYNAMIC_RPORT 0x08000000 61#define SSH_BUG_DYNAMIC_RPORT 0x08000000
62#define SSH_BUG_CURVE25519PAD 0x10000000 62#define SSH_BUG_CURVE25519PAD 0x10000000
diff --git a/config.h.in b/config.h.in
index 63fc548b5..572087407 100644
--- a/config.h.in
+++ b/config.h.in
@@ -34,9 +34,6 @@
34/* Define if you system's inet_ntoa is busted (e.g. Irix gcc issue) */ 34/* Define if you system's inet_ntoa is busted (e.g. Irix gcc issue) */
35#undef BROKEN_INET_NTOA 35#undef BROKEN_INET_NTOA
36 36
37/* ia_uinfo routines not supported by OS yet */
38#undef BROKEN_LIBIAF
39
40/* Define if your struct dirent expects you to allocate extra space for d_name 37/* Define if your struct dirent expects you to allocate extra space for d_name
41 */ 38 */
42#undef BROKEN_ONE_BYTE_DIRENT_D_NAME 39#undef BROKEN_ONE_BYTE_DIRENT_D_NAME
@@ -75,6 +72,12 @@
75/* Define if your snprintf is busted */ 72/* Define if your snprintf is busted */
76#undef BROKEN_SNPRINTF 73#undef BROKEN_SNPRINTF
77 74
75/* strndup broken, see APAR IY61211 */
76#undef BROKEN_STRNDUP
77
78/* strnlen broken, see APAR IY62551 */
79#undef BROKEN_STRNLEN
80
78/* strnvis detected broken */ 81/* strnvis detected broken */
79#undef BROKEN_STRNVIS 82#undef BROKEN_STRNVIS
80 83
@@ -132,6 +135,9 @@
132/* Enable for PKCS#11 support */ 135/* Enable for PKCS#11 support */
133#undef ENABLE_PKCS11 136#undef ENABLE_PKCS11
134 137
138/* define if fflush(NULL) does not work */
139#undef FFLUSH_NULL_BUG
140
135/* File names may not contain backslash characters */ 141/* File names may not contain backslash characters */
136#undef FILESYSTEM_NO_BACKSLASH 142#undef FILESYSTEM_NO_BACKSLASH
137 143
@@ -141,7 +147,7 @@
141/* fsid_t has member __val */ 147/* fsid_t has member __val */
142#undef FSID_HAS___VAL 148#undef FSID_HAS___VAL
143 149
144/* Define to 1 if the `getpgrp' function requires zero arguments. */ 150/* getpgrp takes one arg */
145#undef GETPGRP_VOID 151#undef GETPGRP_VOID
146 152
147/* Conflicting defs for getspnam */ 153/* Conflicting defs for getspnam */
@@ -252,7 +258,10 @@
252/* Define to 1 if you have the <bstring.h> header file. */ 258/* Define to 1 if you have the <bstring.h> header file. */
253#undef HAVE_BSTRING_H 259#undef HAVE_BSTRING_H
254 260
255/* calloc(x, 0) returns NULL */ 261/* Define to 1 if you have the `bzero' function. */
262#undef HAVE_BZERO
263
264/* calloc(0, x) returns NULL */
256#undef HAVE_CALLOC 265#undef HAVE_CALLOC
257 266
258/* Define to 1 if you have the `cap_rights_limit' function. */ 267/* Define to 1 if you have the `cap_rights_limit' function. */
@@ -299,6 +308,10 @@
299 don't. */ 308 don't. */
300#undef HAVE_DECL_AUTHENTICATE 309#undef HAVE_DECL_AUTHENTICATE
301 310
311/* Define to 1 if you have the declaration of `bzero', and to 0 if you don't.
312 */
313#undef HAVE_DECL_BZERO
314
302/* Define to 1 if you have the declaration of `GLOB_NOMATCH', and to 0 if you 315/* Define to 1 if you have the declaration of `GLOB_NOMATCH', and to 0 if you
303 don't. */ 316 don't. */
304#undef HAVE_DECL_GLOB_NOMATCH 317#undef HAVE_DECL_GLOB_NOMATCH
@@ -347,6 +360,10 @@
347 don't. */ 360 don't. */
348#undef HAVE_DECL_PASSWDEXPIRED 361#undef HAVE_DECL_PASSWDEXPIRED
349 362
363/* Define to 1 if you have the declaration of `readv', and to 0 if you don't.
364 */
365#undef HAVE_DECL_READV
366
350/* Define to 1 if you have the declaration of `setauthdb', and to 0 if you 367/* Define to 1 if you have the declaration of `setauthdb', and to 0 if you
351 don't. */ 368 don't. */
352#undef HAVE_DECL_SETAUTHDB 369#undef HAVE_DECL_SETAUTHDB
@@ -466,6 +483,9 @@
466/* Define to 1 if you have the <floatingpoint.h> header file. */ 483/* Define to 1 if you have the <floatingpoint.h> header file. */
467#undef HAVE_FLOATINGPOINT_H 484#undef HAVE_FLOATINGPOINT_H
468 485
486/* Define to 1 if you have the `flock' function. */
487#undef HAVE_FLOCK
488
469/* Define to 1 if you have the `fmt_scaled' function. */ 489/* Define to 1 if you have the `fmt_scaled' function. */
470#undef HAVE_FMT_SCALED 490#undef HAVE_FMT_SCALED
471 491
@@ -553,12 +573,12 @@
553/* Define if getrrsetbyname() exists */ 573/* Define if getrrsetbyname() exists */
554#undef HAVE_GETRRSETBYNAME 574#undef HAVE_GETRRSETBYNAME
555 575
556/* Define to 1 if you have the `getrusage' function. */
557#undef HAVE_GETRUSAGE
558
559/* Define to 1 if you have the `getseuserbyname' function. */ 576/* Define to 1 if you have the `getseuserbyname' function. */
560#undef HAVE_GETSEUSERBYNAME 577#undef HAVE_GETSEUSERBYNAME
561 578
579/* Define to 1 if you have the `getsid' function. */
580#undef HAVE_GETSID
581
562/* Define to 1 if you have the `gettimeofday' function. */ 582/* Define to 1 if you have the `gettimeofday' function. */
563#undef HAVE_GETTIMEOFDAY 583#undef HAVE_GETTIMEOFDAY
564 584
@@ -640,6 +660,9 @@
640/* Define if you have ut_id in utmpx.h */ 660/* Define if you have ut_id in utmpx.h */
641#undef HAVE_ID_IN_UTMPX 661#undef HAVE_ID_IN_UTMPX
642 662
663/* Define to 1 if you have the <ifaddrs.h> header file. */
664#undef HAVE_IFADDRS_H
665
643/* Define to 1 if you have the `inet_aton' function. */ 666/* Define to 1 if you have the `inet_aton' function. */
644#undef HAVE_INET_ATON 667#undef HAVE_INET_ATON
645 668
@@ -821,6 +844,9 @@
821/* Define to 1 if you have the <net/if_tun.h> header file. */ 844/* Define to 1 if you have the <net/if_tun.h> header file. */
822#undef HAVE_NET_IF_TUN_H 845#undef HAVE_NET_IF_TUN_H
823 846
847/* Define to 1 if you have the <net/route.h> header file. */
848#undef HAVE_NET_ROUTE_H
849
824/* Define if you are on NeXT */ 850/* Define if you are on NeXT */
825#undef HAVE_NEXT 851#undef HAVE_NEXT
826 852
@@ -903,6 +929,9 @@
903/* Define to 1 if you have the `pututxline' function. */ 929/* Define to 1 if you have the `pututxline' function. */
904#undef HAVE_PUTUTXLINE 930#undef HAVE_PUTUTXLINE
905 931
932/* Define to 1 if you have the `raise' function. */
933#undef HAVE_RAISE
934
906/* Define to 1 if you have the `readpassphrase' function. */ 935/* Define to 1 if you have the `readpassphrase' function. */
907#undef HAVE_READPASSPHRASE 936#undef HAVE_READPASSPHRASE
908 937
@@ -1120,6 +1149,9 @@
1120/* Define to 1 if you have the `strmode' function. */ 1149/* Define to 1 if you have the `strmode' function. */
1121#undef HAVE_STRMODE 1150#undef HAVE_STRMODE
1122 1151
1152/* Define to 1 if you have the `strndup' function. */
1153#undef HAVE_STRNDUP
1154
1123/* Define to 1 if you have the `strnlen' function. */ 1155/* Define to 1 if you have the `strnlen' function. */
1124#undef HAVE_STRNLEN 1156#undef HAVE_STRNLEN
1125 1157
@@ -1174,6 +1206,9 @@
1174/* define if you have struct sockaddr_storage data type */ 1206/* define if you have struct sockaddr_storage data type */
1175#undef HAVE_STRUCT_SOCKADDR_STORAGE 1207#undef HAVE_STRUCT_SOCKADDR_STORAGE
1176 1208
1209/* Define to 1 if `f_flags' is a member of `struct statfs'. */
1210#undef HAVE_STRUCT_STATFS_F_FLAGS
1211
1177/* Define to 1 if `st_blksize' is a member of `struct stat'. */ 1212/* Define to 1 if `st_blksize' is a member of `struct stat'. */
1178#undef HAVE_STRUCT_STAT_ST_BLKSIZE 1213#undef HAVE_STRUCT_STAT_ST_BLKSIZE
1179 1214
@@ -1219,6 +1254,12 @@
1219/* Define if your system defines sys_errlist[] */ 1254/* Define if your system defines sys_errlist[] */
1220#undef HAVE_SYS_ERRLIST 1255#undef HAVE_SYS_ERRLIST
1221 1256
1257/* Define to 1 if you have the <sys/file.h> header file. */
1258#undef HAVE_SYS_FILE_H
1259
1260/* Define to 1 if you have the <sys/label.h> header file. */
1261#undef HAVE_SYS_LABEL_H
1262
1222/* Define to 1 if you have the <sys/mman.h> header file. */ 1263/* Define to 1 if you have the <sys/mman.h> header file. */
1223#undef HAVE_SYS_MMAN_H 1264#undef HAVE_SYS_MMAN_H
1224 1265
@@ -1264,6 +1305,9 @@
1264/* Define to 1 if you have the <sys/strtio.h> header file. */ 1305/* Define to 1 if you have the <sys/strtio.h> header file. */
1265#undef HAVE_SYS_STRTIO_H 1306#undef HAVE_SYS_STRTIO_H
1266 1307
1308/* Define to 1 if you have the <sys/sysctl.h> header file. */
1309#undef HAVE_SYS_SYSCTL_H
1310
1267/* Force use of sys/syslog.h on Ultrix */ 1311/* Force use of sys/syslog.h on Ultrix */
1268#undef HAVE_SYS_SYSLOG_H 1312#undef HAVE_SYS_SYSLOG_H
1269 1313
@@ -1282,6 +1326,9 @@
1282/* Define to 1 if you have the <sys/un.h> header file. */ 1326/* Define to 1 if you have the <sys/un.h> header file. */
1283#undef HAVE_SYS_UN_H 1327#undef HAVE_SYS_UN_H
1284 1328
1329/* Define to 1 if you have the <sys/vfs.h> header file. */
1330#undef HAVE_SYS_VFS_H
1331
1285/* Define to 1 if you have the `tcgetpgrp' function. */ 1332/* Define to 1 if you have the `tcgetpgrp' function. */
1286#undef HAVE_TCGETPGRP 1333#undef HAVE_TCGETPGRP
1287 1334
@@ -1496,12 +1543,12 @@
1496/* Need setpgrp to acquire controlling tty */ 1543/* Need setpgrp to acquire controlling tty */
1497#undef NEED_SETPGRP 1544#undef NEED_SETPGRP
1498 1545
1546/* compiler does not accept __attribute__ on protoype args */
1547#undef NO_ATTRIBUTE_ON_PROTOTYPE_ARGS
1548
1499/* compiler does not accept __attribute__ on return types */ 1549/* compiler does not accept __attribute__ on return types */
1500#undef NO_ATTRIBUTE_ON_RETURN_TYPE 1550#undef NO_ATTRIBUTE_ON_RETURN_TYPE
1501 1551
1502/* Define if you don't want to use lastlog in session.c */
1503#undef NO_SSH_LASTLOG
1504
1505/* Define to disable UID restoration test */ 1552/* Define to disable UID restoration test */
1506#undef NO_UID_RESTORATION_TEST 1553#undef NO_UID_RESTORATION_TEST
1507 1554
@@ -1681,6 +1728,9 @@
1681/* syslog_r function is safe to use in in a signal handler */ 1728/* syslog_r function is safe to use in in a signal handler */
1682#undef SYSLOG_R_SAFE_IN_SIGHAND 1729#undef SYSLOG_R_SAFE_IN_SIGHAND
1683 1730
1731/* Support routing domains using Linux VRF */
1732#undef SYS_RDOMAIN_LINUX
1733
1684/* Support passwords > 8 chars */ 1734/* Support passwords > 8 chars */
1685#undef UNIXWARE_LONG_PASSWORDS 1735#undef UNIXWARE_LONG_PASSWORDS
1686 1736
diff --git a/configure b/configure
index b2c2c3b91..5f5536fa4 100755
--- a/configure
+++ b/configure
@@ -624,6 +624,7 @@ ac_includes_default="\
624#endif" 624#endif"
625 625
626ac_subst_vars='LTLIBOBJS 626ac_subst_vars='LTLIBOBJS
627DEPEND
627UNSUPPORTED_ALGORITHMS 628UNSUPPORTED_ALGORITHMS
628TEST_MALLOC_OPTIONS 629TEST_MALLOC_OPTIONS
629TEST_SSH_UTF8 630TEST_SSH_UTF8
@@ -663,11 +664,11 @@ SH
663TEST_MINUS_S_SH 664TEST_MINUS_S_SH
664ENT 665ENT
665SED 666SED
666PERL
667KILL 667KILL
668CAT 668CAT
669ac_ct_AR 669ac_ct_AR
670AR 670AR
671MKDIR_P
671INSTALL_DATA 672INSTALL_DATA
672INSTALL_SCRIPT 673INSTALL_SCRIPT
673INSTALL_PROGRAM 674INSTALL_PROGRAM
@@ -1473,7 +1474,7 @@ Optional Packages:
1473 --with-superuser-path= Specify different path for super-user 1474 --with-superuser-path= Specify different path for super-user
1474 --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses 1475 --with-4in6 Check for and convert IPv4 in IPv6 mapped addresses
1475 --with-bsd-auth Enable BSD auth support 1476 --with-bsd-auth Enable BSD auth support
1476 --with-pid-dir=PATH Specify location of ssh.pid file 1477 --with-pid-dir=PATH Specify location of sshd.pid file
1477 --with-lastlog=FILE|DIR specify lastlog location common locations 1478 --with-lastlog=FILE|DIR specify lastlog location common locations
1478 1479
1479Some influential environment variables: 1480Some influential environment variables:
@@ -4564,6 +4565,48 @@ $as_echo "$ac_cv_path_EGREP" >&6; }
4564 EGREP="$ac_cv_path_EGREP" 4565 EGREP="$ac_cv_path_EGREP"
4565 4566
4566 4567
4568{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
4569$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
4570if test -z "$MKDIR_P"; then
4571 if ${ac_cv_path_mkdir+:} false; then :
4572 $as_echo_n "(cached) " >&6
4573else
4574 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4575for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
4576do
4577 IFS=$as_save_IFS
4578 test -z "$as_dir" && as_dir=.
4579 for ac_prog in mkdir gmkdir; do
4580 for ac_exec_ext in '' $ac_executable_extensions; do
4581 as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
4582 case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
4583 'mkdir (GNU coreutils) '* | \
4584 'mkdir (coreutils) '* | \
4585 'mkdir (fileutils) '4.1*)
4586 ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
4587 break 3;;
4588 esac
4589 done
4590 done
4591 done
4592IFS=$as_save_IFS
4593
4594fi
4595
4596 test -d ./--version && rmdir ./--version
4597 if test "${ac_cv_path_mkdir+set}" = set; then
4598 MKDIR_P="$ac_cv_path_mkdir -p"
4599 else
4600 # As a last resort, use the slow shell script. Don't cache a
4601 # value for MKDIR_P within a source directory, because that will
4602 # break other packages using the cache if that directory is
4603 # removed, or if the value is a relative name.
4604 MKDIR_P="$ac_install_sh -d"
4605 fi
4606fi
4607{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
4608$as_echo "$MKDIR_P" >&6; }
4609
4567if test -n "$ac_tool_prefix"; then 4610if test -n "$ac_tool_prefix"; then
4568 for ac_prog in ar 4611 for ac_prog in ar
4569 do 4612 do
@@ -4744,51 +4787,6 @@ $as_echo "no" >&6; }
4744fi 4787fi
4745 4788
4746 4789
4747for ac_prog in perl5 perl
4748do
4749 # Extract the first word of "$ac_prog", so it can be a program name with args.
4750set dummy $ac_prog; ac_word=$2
4751{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
4752$as_echo_n "checking for $ac_word... " >&6; }
4753if ${ac_cv_path_PERL+:} false; then :
4754 $as_echo_n "(cached) " >&6
4755else
4756 case $PERL in
4757 [\\/]* | ?:[\\/]*)
4758 ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
4759 ;;
4760 *)
4761 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
4762for as_dir in $PATH
4763do
4764 IFS=$as_save_IFS
4765 test -z "$as_dir" && as_dir=.
4766 for ac_exec_ext in '' $ac_executable_extensions; do
4767 if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
4768 ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
4769 $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
4770 break 2
4771 fi
4772done
4773 done
4774IFS=$as_save_IFS
4775
4776 ;;
4777esac
4778fi
4779PERL=$ac_cv_path_PERL
4780if test -n "$PERL"; then
4781 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
4782$as_echo "$PERL" >&6; }
4783else
4784 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
4785$as_echo "no" >&6; }
4786fi
4787
4788
4789 test -n "$PERL" && break
4790done
4791
4792# Extract the first word of "sed", so it can be a program name with args. 4790# Extract the first word of "sed", so it can be a program name with args.
4793set dummy sed; ac_word=$2 4791set dummy sed; ac_word=$2
4794{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 4792{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -4829,7 +4827,6 @@ $as_echo "no" >&6; }
4829fi 4827fi
4830 4828
4831 4829
4832
4833# Extract the first word of "ent", so it can be a program name with args. 4830# Extract the first word of "ent", so it can be a program name with args.
4834set dummy ent; ac_word=$2 4831set dummy ent; ac_word=$2
4835{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 4832{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -6223,6 +6220,172 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6223} 6220}
6224 if test "x$use_toolchain_hardening" = "x1"; then 6221 if test "x$use_toolchain_hardening" = "x1"; then
6225 { 6222 {
6223 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -mfunction-return=thunk" >&5
6224$as_echo_n "checking if $CC supports compile flag -mfunction-return=thunk... " >&6; }
6225 saved_CFLAGS="$CFLAGS"
6226 CFLAGS="$CFLAGS $WERROR -mfunction-return=thunk"
6227 _define_flag=""
6228 test "x$_define_flag" = "x" && _define_flag="-mfunction-return=thunk"
6229 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6230/* end confdefs.h. */
6231
6232#include <stdlib.h>
6233#include <stdio.h>
6234int main(int argc, char **argv) {
6235 /* Some math to catch -ftrapv problems in the toolchain */
6236 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6237 float l = i * 2.1;
6238 double m = l / 0.5;
6239 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6240 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
6241 exit(0);
6242}
6243
6244_ACEOF
6245if ac_fn_c_try_compile "$LINENO"; then :
6246
6247if `grep -i "unrecognized option" conftest.err >/dev/null`
6248then
6249 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6250$as_echo "no" >&6; }
6251 CFLAGS="$saved_CFLAGS"
6252else
6253 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6254$as_echo "yes" >&6; }
6255 CFLAGS="$saved_CFLAGS $_define_flag"
6256fi
6257else
6258 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6259$as_echo "no" >&6; }
6260 CFLAGS="$saved_CFLAGS"
6261
6262fi
6263rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6264} # gcc
6265 {
6266 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -mindirect-branch=thunk" >&5
6267$as_echo_n "checking if $CC supports compile flag -mindirect-branch=thunk... " >&6; }
6268 saved_CFLAGS="$CFLAGS"
6269 CFLAGS="$CFLAGS $WERROR -mindirect-branch=thunk"
6270 _define_flag=""
6271 test "x$_define_flag" = "x" && _define_flag="-mindirect-branch=thunk"
6272 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6273/* end confdefs.h. */
6274
6275#include <stdlib.h>
6276#include <stdio.h>
6277int main(int argc, char **argv) {
6278 /* Some math to catch -ftrapv problems in the toolchain */
6279 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6280 float l = i * 2.1;
6281 double m = l / 0.5;
6282 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6283 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
6284 exit(0);
6285}
6286
6287_ACEOF
6288if ac_fn_c_try_compile "$LINENO"; then :
6289
6290if `grep -i "unrecognized option" conftest.err >/dev/null`
6291then
6292 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6293$as_echo "no" >&6; }
6294 CFLAGS="$saved_CFLAGS"
6295else
6296 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6297$as_echo "yes" >&6; }
6298 CFLAGS="$saved_CFLAGS $_define_flag"
6299fi
6300else
6301 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6302$as_echo "no" >&6; }
6303 CFLAGS="$saved_CFLAGS"
6304
6305fi
6306rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6307} # gcc
6308 {
6309 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -mretpoline" >&5
6310$as_echo_n "checking if $CC supports compile flag -mretpoline... " >&6; }
6311 saved_CFLAGS="$CFLAGS"
6312 CFLAGS="$CFLAGS $WERROR -mretpoline"
6313 _define_flag=""
6314 test "x$_define_flag" = "x" && _define_flag="-mretpoline"
6315 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6316/* end confdefs.h. */
6317
6318#include <stdlib.h>
6319#include <stdio.h>
6320int main(int argc, char **argv) {
6321 /* Some math to catch -ftrapv problems in the toolchain */
6322 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6323 float l = i * 2.1;
6324 double m = l / 0.5;
6325 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6326 printf("%d %d %d %f %f %lld %lld\n", i, j, k, l, m, n, o);
6327 exit(0);
6328}
6329
6330_ACEOF
6331if ac_fn_c_try_compile "$LINENO"; then :
6332
6333if `grep -i "unrecognized option" conftest.err >/dev/null`
6334then
6335 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6336$as_echo "no" >&6; }
6337 CFLAGS="$saved_CFLAGS"
6338else
6339 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6340$as_echo "yes" >&6; }
6341 CFLAGS="$saved_CFLAGS $_define_flag"
6342fi
6343else
6344 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6345$as_echo "no" >&6; }
6346 CFLAGS="$saved_CFLAGS"
6347
6348fi
6349rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6350} # clang
6351 {
6352 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $LD supports link flag -Wl,-z,retpolineplt" >&5
6353$as_echo_n "checking if $LD supports link flag -Wl,-z,retpolineplt... " >&6; }
6354 saved_LDFLAGS="$LDFLAGS"
6355 LDFLAGS="$LDFLAGS $WERROR -Wl,-z,retpolineplt"
6356 _define_flag=""
6357 test "x$_define_flag" = "x" && _define_flag="-Wl,-z,retpolineplt"
6358 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6359/* end confdefs.h. */
6360
6361#include <stdlib.h>
6362#include <stdio.h>
6363int main(int argc, char **argv) {
6364 /* Some math to catch -ftrapv problems in the toolchain */
6365 int i = 123 * argc, j = 456 + argc, k = 789 - argc;
6366 float l = i * 2.1;
6367 double m = l / 0.5;
6368 long long int n = argc * 12345LL, o = 12345LL * (long long int)argc;
6369 long long p = n * o;
6370 printf("%d %d %d %f %f %lld %lld %lld\n", i, j, k, l, m, n, o, p);
6371 exit(0);
6372}
6373
6374_ACEOF
6375if ac_fn_c_try_link "$LINENO"; then :
6376 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6377$as_echo "yes" >&6; }
6378 LDFLAGS="$saved_LDFLAGS $_define_flag"
6379else
6380 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6381$as_echo "no" >&6; }
6382 LDFLAGS="$saved_LDFLAGS"
6383
6384fi
6385rm -f core conftest.err conftest.$ac_objext \
6386 conftest$ac_exeext conftest.$ac_ext
6387}
6388 {
6226 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -D_FORTIFY_SOURCE=2" >&5 6389 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC supports compile flag -D_FORTIFY_SOURCE=2" >&5
6227$as_echo_n "checking if $CC supports compile flag -D_FORTIFY_SOURCE=2... " >&6; } 6390$as_echo_n "checking if $CC supports compile flag -D_FORTIFY_SOURCE=2... " >&6; }
6228 saved_CFLAGS="$CFLAGS" 6391 saved_CFLAGS="$CFLAGS"
@@ -6591,6 +6754,34 @@ $as_echo "#define NO_ATTRIBUTE_ON_RETURN_TYPE 1" >>confdefs.h
6591fi 6754fi
6592rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext 6755rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6593 6756
6757{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if compiler allows __attribute__ prototype args" >&5
6758$as_echo_n "checking if compiler allows __attribute__ prototype args... " >&6; }
6759cat confdefs.h - <<_ACEOF >conftest.$ac_ext
6760/* end confdefs.h. */
6761
6762#include <stdlib.h>
6763typedef void foo(const char *, ...) __attribute__((format(printf, 1, 2)));
6764int
6765main ()
6766{
6767 exit(0);
6768 ;
6769 return 0;
6770}
6771_ACEOF
6772if ac_fn_c_try_compile "$LINENO"; then :
6773 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
6774$as_echo "yes" >&6; }
6775else
6776 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
6777$as_echo "no" >&6; }
6778
6779$as_echo "#define NO_ATTRIBUTE_ON_PROTOTYPE_ARGS 1" >>confdefs.h
6780
6781
6782fi
6783rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
6784
6594if test "x$no_attrib_nonnull" != "x1" ; then 6785if test "x$no_attrib_nonnull" != "x1" ; then
6595 6786
6596$as_echo "#define HAVE_ATTRIBUTE__NONNULL__ 1" >>confdefs.h 6787$as_echo "#define HAVE_ATTRIBUTE__NONNULL__ 1" >>confdefs.h
@@ -6717,6 +6908,7 @@ for ac_header in \
6717 glob.h \ 6908 glob.h \
6718 ia.h \ 6909 ia.h \
6719 iaf.h \ 6910 iaf.h \
6911 ifaddrs.h \
6720 inttypes.h \ 6912 inttypes.h \
6721 langinfo.h \ 6913 langinfo.h \
6722 limits.h \ 6914 limits.h \
@@ -6740,12 +6932,13 @@ for ac_header in \
6740 stdint.h \ 6932 stdint.h \
6741 string.h \ 6933 string.h \
6742 strings.h \ 6934 strings.h \
6743 sys/audit.h \
6744 sys/bitypes.h \ 6935 sys/bitypes.h \
6745 sys/bsdtty.h \ 6936 sys/bsdtty.h \
6746 sys/cdefs.h \ 6937 sys/cdefs.h \
6747 sys/dir.h \ 6938 sys/dir.h \
6939 sys/file.h \
6748 sys/mman.h \ 6940 sys/mman.h \
6941 sys/label.h \
6749 sys/ndir.h \ 6942 sys/ndir.h \
6750 sys/poll.h \ 6943 sys/poll.h \
6751 sys/prctl.h \ 6944 sys/prctl.h \
@@ -6760,6 +6953,7 @@ for ac_header in \
6760 sys/sysmacros.h \ 6953 sys/sysmacros.h \
6761 sys/time.h \ 6954 sys/time.h \
6762 sys/timers.h \ 6955 sys/timers.h \
6956 sys/vfs.h \
6763 time.h \ 6957 time.h \
6764 tmpdir.h \ 6958 tmpdir.h \
6765 ttyent.h \ 6959 ttyent.h \
@@ -6786,6 +6980,32 @@ fi
6786done 6980done
6787 6981
6788 6982
6983# On some platforms (eg SunOS4) sys/audit.h requires sys/[time|types|label.h]
6984# to be included first.
6985for ac_header in sys/audit.h
6986do :
6987 ac_fn_c_check_header_compile "$LINENO" "sys/audit.h" "ac_cv_header_sys_audit_h" "
6988#ifdef HAVE_SYS_TIME_H
6989# include <sys/time.h>
6990#endif
6991#ifdef HAVE_SYS_TYPES_H
6992# include <sys/types.h>
6993#endif
6994#ifdef HAVE_SYS_LABEL_H
6995# include <sys/label.h>
6996#endif
6997
6998"
6999if test "x$ac_cv_header_sys_audit_h" = xyes; then :
7000 cat >>confdefs.h <<_ACEOF
7001#define HAVE_SYS_AUDIT_H 1
7002_ACEOF
7003
7004fi
7005
7006done
7007
7008
6789# sys/capsicum.h requires sys/types.h 7009# sys/capsicum.h requires sys/types.h
6790for ac_header in sys/capsicum.h 7010for ac_header in sys/capsicum.h
6791do : 7011do :
@@ -6805,6 +7025,29 @@ fi
6805done 7025done
6806 7026
6807 7027
7028# net/route.h requires sys/socket.h and sys/types.h.
7029# sys/sysctl.h also requires sys/param.h
7030for ac_header in net/route.h sys/sysctl.h
7031do :
7032 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
7033ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "
7034#ifdef HAVE_SYS_TYPES_H
7035# include <sys/types.h>
7036#endif
7037#include <sys/param.h>
7038#include <sys/socket.h>
7039
7040"
7041if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
7042 cat >>confdefs.h <<_ACEOF
7043#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
7044_ACEOF
7045
7046fi
7047
7048done
7049
7050
6808# lastlog.h requires sys/time.h to be included first on Solaris 7051# lastlog.h requires sys/time.h to be included first on Solaris
6809for ac_header in lastlog.h 7052for ac_header in lastlog.h
6810do : 7053do :
@@ -7185,6 +7428,12 @@ $as_echo "#define PTY_ZEROREAD 1" >>confdefs.h
7185 7428
7186$as_echo "#define PLATFORM_SYS_DIR_UID 2" >>confdefs.h 7429$as_echo "#define PLATFORM_SYS_DIR_UID 2" >>confdefs.h
7187 7430
7431
7432$as_echo "#define BROKEN_STRNDUP 1" >>confdefs.h
7433
7434
7435$as_echo "#define BROKEN_STRNLEN 1" >>confdefs.h
7436
7188 ;; 7437 ;;
7189*-*-android*) 7438*-*-android*)
7190 7439
@@ -7695,6 +7944,19 @@ $as_echo "#define SSH_TUN_COMPAT_AF 1" >>confdefs.h
7695$as_echo "#define SSH_TUN_PREPEND_AF 1" >>confdefs.h 7944$as_echo "#define SSH_TUN_PREPEND_AF 1" >>confdefs.h
7696 7945
7697 fi 7946 fi
7947 ac_fn_c_check_header_compile "$LINENO" "linux/if.h" "ac_cv_header_linux_if_h" "
7948#ifdef HAVE_SYS_TYPES_H
7949# include <sys/types.H>
7950#endif
7951
7952"
7953if test "x$ac_cv_header_linux_if_h" = xyes; then :
7954
7955$as_echo "#define SYS_RDOMAIN_LINUX 1" >>confdefs.h
7956
7957fi
7958
7959
7698 for ac_header in linux/seccomp.h linux/filter.h linux/audit.h 7960 for ac_header in linux/seccomp.h linux/filter.h linux/audit.h
7699do : 7961do :
7700 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` 7962 as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -7709,6 +7971,75 @@ fi
7709 7971
7710done 7972done
7711 7973
7974 # Obtain MIPS ABI
7975 case "$host" in
7976 mips*)
7977 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7978/* end confdefs.h. */
7979
7980#if _MIPS_SIM != _ABIO32
7981#error
7982#endif
7983
7984int
7985main ()
7986{
7987
7988 ;
7989 return 0;
7990}
7991_ACEOF
7992if ac_fn_c_try_compile "$LINENO"; then :
7993 mips_abi="o32"
7994else
7995 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
7996/* end confdefs.h. */
7997
7998#if _MIPS_SIM != _ABIN32
7999#error
8000#endif
8001
8002int
8003main ()
8004{
8005
8006 ;
8007 return 0;
8008}
8009_ACEOF
8010if ac_fn_c_try_compile "$LINENO"; then :
8011 mips_abi="n32"
8012else
8013 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
8014/* end confdefs.h. */
8015
8016#if _MIPS_SIM != _ABI64
8017#error
8018#endif
8019
8020int
8021main ()
8022{
8023
8024 ;
8025 return 0;
8026}
8027_ACEOF
8028if ac_fn_c_try_compile "$LINENO"; then :
8029 mips_abi="n64"
8030else
8031 as_fn_error $? "unknown MIPS ABI" "$LINENO" 5
8032
8033fi
8034rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
8035
8036fi
8037rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
8038
8039fi
8040rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
8041 ;;
8042 esac
7712 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for seccomp architecture" >&5 8043 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for seccomp architecture" >&5
7713$as_echo_n "checking for seccomp architecture... " >&6; } 8044$as_echo_n "checking for seccomp architecture... " >&6; }
7714 seccomp_audit_arch= 8045 seccomp_audit_arch=
@@ -7744,10 +8075,24 @@ $as_echo_n "checking for seccomp architecture... " >&6; }
7744 seccomp_audit_arch=AUDIT_ARCH_MIPSEL 8075 seccomp_audit_arch=AUDIT_ARCH_MIPSEL
7745 ;; 8076 ;;
7746 mips64-*) 8077 mips64-*)
7747 seccomp_audit_arch=AUDIT_ARCH_MIPS64 8078 case "$mips_abi" in
8079 "n32")
8080 seccomp_audit_arch=AUDIT_ARCH_MIPS64N32
8081 ;;
8082 "n64")
8083 seccomp_audit_arch=AUDIT_ARCH_MIPS64
8084 ;;
8085 esac
7748 ;; 8086 ;;
7749 mips64el-*) 8087 mips64el-*)
7750 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64 8088 case "$mips_abi" in
8089 "n32")
8090 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64N32
8091 ;;
8092 "n64")
8093 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64
8094 ;;
8095 esac
7751 ;; 8096 ;;
7752 esac 8097 esac
7753 if test "x$seccomp_audit_arch" != "x" ; then 8098 if test "x$seccomp_audit_arch" != "x" ; then
@@ -8102,6 +8447,9 @@ done
8102 conf_lastlog_location=/var/adm/lastlog 8447 conf_lastlog_location=/var/adm/lastlog
8103 $as_echo "#define USE_PIPES 1" >>confdefs.h 8448 $as_echo "#define USE_PIPES 1" >>confdefs.h
8104 8449
8450
8451$as_echo "#define DISABLE_UTMPX 1" >>confdefs.h
8452
8105 ;; 8453 ;;
8106*-ncr-sysv*) 8454*-ncr-sysv*)
8107 LIBS="$LIBS -lc89" 8455 LIBS="$LIBS -lc89"
@@ -8260,12 +8608,10 @@ $as_echo "#define UNIXWARE_LONG_PASSWORDS 1" >>confdefs.h
8260 $as_echo "#define BROKEN_TCGETATTR_ICANON 1" >>confdefs.h 8608 $as_echo "#define BROKEN_TCGETATTR_ICANON 1" >>confdefs.h
8261 8609
8262 TEST_SHELL=$SHELL # let configure find us a capable shell 8610 TEST_SHELL=$SHELL # let configure find us a capable shell
8611 check_for_libcrypt_later=1
8263 case "$host" in 8612 case "$host" in
8264 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x 8613 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
8265 maildir=/var/spool/mail 8614 maildir=/var/spool/mail
8266
8267$as_echo "#define BROKEN_LIBIAF 1" >>confdefs.h
8268
8269 $as_echo "#define BROKEN_UPDWTMPX 1" >>confdefs.h 8615 $as_echo "#define BROKEN_UPDWTMPX 1" >>confdefs.h
8270 8616
8271 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getluid in -lprot" >&5 8617 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getluid in -lprot" >&5
@@ -8318,17 +8664,12 @@ _ACEOF
8318fi 8664fi
8319done 8665done
8320 8666
8321 $as_echo "#define HAVE_SECUREWARE 1" >>confdefs.h
8322
8323 $as_echo "#define DISABLE_SHADOW 1" >>confdefs.h
8324
8325 8667
8326fi 8668fi
8327 8669
8328 ;; 8670 ;;
8329 *) $as_echo "#define LOCKED_PASSWD_STRING \"*LK*\"" >>confdefs.h 8671 *) $as_echo "#define LOCKED_PASSWD_STRING \"*LK*\"" >>confdefs.h
8330 8672
8331 check_for_libcrypt_later=1
8332 ;; 8673 ;;
8333 esac 8674 esac
8334 ;; 8675 ;;
@@ -8383,58 +8724,6 @@ done
8383 TEST_SHELL=$SHELL # let configure find us a capable shell 8724 TEST_SHELL=$SHELL # let configure find us a capable shell
8384 SKIP_DISABLE_LASTLOG_DEFINE=yes 8725 SKIP_DISABLE_LASTLOG_DEFINE=yes
8385 ;; 8726 ;;
8386*-*-unicosmk*)
8387
8388$as_echo "#define NO_SSH_LASTLOG 1" >>confdefs.h
8389
8390 $as_echo "#define SETEUID_BREAKS_SETUID 1" >>confdefs.h
8391
8392 $as_echo "#define BROKEN_SETREUID 1" >>confdefs.h
8393
8394 $as_echo "#define BROKEN_SETREGID 1" >>confdefs.h
8395
8396 $as_echo "#define USE_PIPES 1" >>confdefs.h
8397
8398 $as_echo "#define DISABLE_FD_PASSING 1" >>confdefs.h
8399
8400 LDFLAGS="$LDFLAGS"
8401 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
8402 MANTYPE=cat
8403 ;;
8404*-*-unicosmp*)
8405 $as_echo "#define SETEUID_BREAKS_SETUID 1" >>confdefs.h
8406
8407 $as_echo "#define BROKEN_SETREUID 1" >>confdefs.h
8408
8409 $as_echo "#define BROKEN_SETREGID 1" >>confdefs.h
8410
8411 $as_echo "#define WITH_ABBREV_NO_TTY 1" >>confdefs.h
8412
8413 $as_echo "#define USE_PIPES 1" >>confdefs.h
8414
8415 $as_echo "#define DISABLE_FD_PASSING 1" >>confdefs.h
8416
8417 LDFLAGS="$LDFLAGS"
8418 LIBS="$LIBS -lgen -lacid -ldb"
8419 MANTYPE=cat
8420 ;;
8421*-*-unicos*)
8422 $as_echo "#define SETEUID_BREAKS_SETUID 1" >>confdefs.h
8423
8424 $as_echo "#define BROKEN_SETREUID 1" >>confdefs.h
8425
8426 $as_echo "#define BROKEN_SETREGID 1" >>confdefs.h
8427
8428 $as_echo "#define USE_PIPES 1" >>confdefs.h
8429
8430 $as_echo "#define DISABLE_FD_PASSING 1" >>confdefs.h
8431
8432 $as_echo "#define NO_SSH_LASTLOG 1" >>confdefs.h
8433
8434 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
8435 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
8436 MANTYPE=cat
8437 ;;
8438*-dec-osf*) 8727*-dec-osf*)
8439 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Digital Unix SIA" >&5 8728 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Digital Unix SIA" >&5
8440$as_echo_n "checking for Digital Unix SIA... " >&6; } 8729$as_echo_n "checking for Digital Unix SIA... " >&6; }
@@ -9874,7 +10163,43 @@ fi
9874 10163
9875 10164
9876# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL; 10165# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL;
9877if test "x$ac_cv_func_malloc_0_nonnull" != "xyes"; then 10166{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if calloc(0, N) returns non-null" >&5
10167$as_echo_n "checking if calloc(0, N) returns non-null... " >&6; }
10168if test "$cross_compiling" = yes; then :
10169 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling: assuming same as malloc" >&5
10170$as_echo "$as_me: WARNING: cross compiling: assuming same as malloc" >&2;}
10171 func_calloc_0_nonnull="$ac_cv_func_malloc_0_nonnull"
10172
10173else
10174 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
10175/* end confdefs.h. */
10176 #include <stdlib.h>
10177int
10178main ()
10179{
10180 void *p = calloc(0, 1); exit(p == NULL);
10181
10182 ;
10183 return 0;
10184}
10185_ACEOF
10186if ac_fn_c_try_run "$LINENO"; then :
10187 func_calloc_0_nonnull=yes
10188else
10189 func_calloc_0_nonnull=no
10190fi
10191rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
10192 conftest.$ac_objext conftest.beam conftest.$ac_ext
10193fi
10194
10195{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $func_calloc_0_nonnull" >&5
10196$as_echo "$func_calloc_0_nonnull" >&6; }
10197
10198if test "x$func_calloc_0_nonnull" == "xyes"; then
10199
10200$as_echo "#define HAVE_CALLOC 1" >>confdefs.h
10201
10202else
9878 10203
9879$as_echo "#define HAVE_CALLOC 0" >>confdefs.h 10204$as_echo "#define HAVE_CALLOC 0" >>confdefs.h
9880 10205
@@ -10256,7 +10581,7 @@ else
10256 LDNSCONFIG="$ac_cv_path_LDNSCONFIG" 10581 LDNSCONFIG="$ac_cv_path_LDNSCONFIG"
10257fi 10582fi
10258 10583
10259 if test "x$PKGCONFIG" = "xno"; then 10584 if test "x$LDNSCONFIG" = "xno"; then
10260 CPPFLAGS="$CPPFLAGS -I${withval}/include" 10585 CPPFLAGS="$CPPFLAGS -I${withval}/include"
10261 LDFLAGS="$LDFLAGS -L${withval}/lib" 10586 LDFLAGS="$LDFLAGS -L${withval}/lib"
10262 LIBS="-lldns $LIBS" 10587 LIBS="-lldns $LIBS"
@@ -10833,6 +11158,7 @@ for ac_func in \
10833 bcrypt_pbkdf \ 11158 bcrypt_pbkdf \
10834 bindresvport_sa \ 11159 bindresvport_sa \
10835 blf_enc \ 11160 blf_enc \
11161 bzero \
10836 cap_rights_limit \ 11162 cap_rights_limit \
10837 clock \ 11163 clock \
10838 closefrom \ 11164 closefrom \
@@ -10843,6 +11169,7 @@ for ac_func in \
10843 explicit_bzero \ 11169 explicit_bzero \
10844 fchmod \ 11170 fchmod \
10845 fchown \ 11171 fchown \
11172 flock \
10846 freeaddrinfo \ 11173 freeaddrinfo \
10847 freezero \ 11174 freezero \
10848 fstatfs \ 11175 fstatfs \
@@ -10857,9 +11184,9 @@ for ac_func in \
10857 getpeereid \ 11184 getpeereid \
10858 getpeerucred \ 11185 getpeerucred \
10859 getpgid \ 11186 getpgid \
10860 getpgrp \
10861 _getpty \ 11187 _getpty \
10862 getrlimit \ 11188 getrlimit \
11189 getsid \
10863 getttyent \ 11190 getttyent \
10864 glob \ 11191 glob \
10865 group_from_gid \ 11192 group_from_gid \
@@ -10881,6 +11208,7 @@ for ac_func in \
10881 poll \ 11208 poll \
10882 prctl \ 11209 prctl \
10883 pstat \ 11210 pstat \
11211 raise \
10884 readpassphrase \ 11212 readpassphrase \
10885 reallocarray \ 11213 reallocarray \
10886 recvmsg \ 11214 recvmsg \
@@ -10915,6 +11243,7 @@ for ac_func in \
10915 strlcat \ 11243 strlcat \
10916 strlcpy \ 11244 strlcpy \
10917 strmode \ 11245 strmode \
11246 strndup \
10918 strnlen \ 11247 strnlen \
10919 strnvis \ 11248 strnvis \
10920 strptime \ 11249 strptime \
@@ -10949,6 +11278,18 @@ fi
10949done 11278done
10950 11279
10951 11280
11281ac_fn_c_check_decl "$LINENO" "bzero" "ac_cv_have_decl_bzero" "$ac_includes_default"
11282if test "x$ac_cv_have_decl_bzero" = xyes; then :
11283 ac_have_decl=1
11284else
11285 ac_have_decl=0
11286fi
11287
11288cat >>confdefs.h <<_ACEOF
11289#define HAVE_DECL_BZERO $ac_have_decl
11290_ACEOF
11291
11292
10952for ac_func in mblen mbtowc nl_langinfo wcwidth 11293for ac_func in mblen mbtowc nl_langinfo wcwidth
10953do : 11294do :
10954 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` 11295 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -11090,9 +11431,15 @@ $as_echo "$ac_cv_search_dlopen" >&6; }
11090ac_res=$ac_cv_search_dlopen 11431ac_res=$ac_cv_search_dlopen
11091if test "$ac_res" != no; then : 11432if test "$ac_res" != no; then :
11092 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" 11433 test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
11434 ac_fn_c_check_decl "$LINENO" "RTLD_NOW" "ac_cv_have_decl_RTLD_NOW" "#include <dlfcn.h>
11435
11436"
11437if test "x$ac_cv_have_decl_RTLD_NOW" = xyes; then :
11093 11438
11094$as_echo "#define ENABLE_PKCS11 /**/" >>confdefs.h 11439$as_echo "#define ENABLE_PKCS11 /**/" >>confdefs.h
11095 11440
11441fi
11442
11096 11443
11097fi 11444fi
11098 11445
@@ -11258,21 +11605,6 @@ $as_echo "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h
11258fi 11605fi
11259 11606
11260 11607
11261ac_fn_c_check_decl "$LINENO" "getrusage" "ac_cv_have_decl_getrusage" "$ac_includes_default"
11262if test "x$ac_cv_have_decl_getrusage" = xyes; then :
11263 for ac_func in getrusage
11264do :
11265 ac_fn_c_check_func "$LINENO" "getrusage" "ac_cv_func_getrusage"
11266if test "x$ac_cv_func_getrusage" = xyes; then :
11267 cat >>confdefs.h <<_ACEOF
11268#define HAVE_GETRUSAGE 1
11269_ACEOF
11270
11271fi
11272done
11273
11274fi
11275
11276ac_fn_c_check_decl "$LINENO" "strsep" "ac_cv_have_decl_strsep" " 11608ac_fn_c_check_decl "$LINENO" "strsep" "ac_cv_have_decl_strsep" "
11277#ifdef HAVE_STRING_H 11609#ifdef HAVE_STRING_H
11278# include <string.h> 11610# include <string.h>
@@ -11365,6 +11697,21 @@ cat >>confdefs.h <<_ACEOF
11365_ACEOF 11697_ACEOF
11366 11698
11367 11699
11700ac_fn_c_check_decl "$LINENO" "readv" "ac_cv_have_decl_readv" "
11701#include <sys/types.h>
11702#include <sys/uio.h>
11703#include <unistd.h>
11704
11705"
11706if test "x$ac_cv_have_decl_readv" = xyes; then :
11707 ac_have_decl=1
11708else
11709 ac_have_decl=0
11710fi
11711
11712cat >>confdefs.h <<_ACEOF
11713#define HAVE_DECL_READV $ac_have_decl
11714_ACEOF
11368ac_fn_c_check_decl "$LINENO" "writev" "ac_cv_have_decl_writev" " 11715ac_fn_c_check_decl "$LINENO" "writev" "ac_cv_have_decl_writev" "
11369#include <sys/types.h> 11716#include <sys/types.h>
11370#include <sys/uio.h> 11717#include <sys/uio.h>
@@ -11655,6 +12002,39 @@ fi
11655done 12002done
11656 12003
11657 12004
12005{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fflush(NULL)" >&5
12006$as_echo_n "checking for working fflush(NULL)... " >&6; }
12007if test "$cross_compiling" = yes; then :
12008 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling: assuming working" >&5
12009$as_echo "$as_me: WARNING: cross compiling: assuming working" >&2;}
12010
12011else
12012 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12013/* end confdefs.h. */
12014#include <stdio.h>
12015int
12016main ()
12017{
12018fflush(NULL); exit(0);
12019 ;
12020 return 0;
12021}
12022_ACEOF
12023if ac_fn_c_try_run "$LINENO"; then :
12024 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
12025$as_echo "yes" >&6; }
12026else
12027 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12028$as_echo "no" >&6; }
12029
12030$as_echo "#define FFLUSH_NULL_BUG 1" >>confdefs.h
12031
12032fi
12033rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
12034 conftest.$ac_objext conftest.beam conftest.$ac_ext
12035fi
12036
12037
11658for ac_func in gettimeofday time 12038for ac_func in gettimeofday time
11659do : 12039do :
11660 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` 12040 as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -12396,38 +12776,45 @@ fi
12396 12776
12397fi 12777fi
12398 12778
12399{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpgrp requires zero arguments" >&5 12779for ac_func in getpgrp
12400$as_echo_n "checking whether getpgrp requires zero arguments... " >&6; } 12780do :
12401if ${ac_cv_func_getpgrp_void+:} false; then : 12781 ac_fn_c_check_func "$LINENO" "getpgrp" "ac_cv_func_getpgrp"
12402 $as_echo_n "(cached) " >&6 12782if test "x$ac_cv_func_getpgrp" = xyes; then :
12403else 12783 cat >>confdefs.h <<_ACEOF
12404 # Use it with a single arg. 12784#define HAVE_GETPGRP 1
12405cat confdefs.h - <<_ACEOF >conftest.$ac_ext 12785_ACEOF
12786
12787 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpgrp accepts zero args" >&5
12788$as_echo_n "checking if getpgrp accepts zero args... " >&6; }
12789 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
12406/* end confdefs.h. */ 12790/* end confdefs.h. */
12407$ac_includes_default 12791$ac_includes_default
12408int 12792int
12409main () 12793main ()
12410{ 12794{
12411getpgrp (0); 12795 getpgrp();
12412 ; 12796 ;
12413 return 0; 12797 return 0;
12414} 12798}
12415_ACEOF 12799_ACEOF
12416if ac_fn_c_try_compile "$LINENO"; then : 12800if ac_fn_c_try_compile "$LINENO"; then :
12417 ac_cv_func_getpgrp_void=no 12801 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
12802$as_echo "yes" >&6; }
12803
12804$as_echo "#define GETPGRP_VOID 1" >>confdefs.h
12805
12418else 12806else
12419 ac_cv_func_getpgrp_void=yes 12807 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
12420fi 12808$as_echo "no" >&6; }
12421rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12422 12809
12423fi 12810$as_echo "#define GETPGRP_VOID 0" >>confdefs.h
12424{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_getpgrp_void" >&5
12425$as_echo "$ac_cv_func_getpgrp_void" >&6; }
12426if test $ac_cv_func_getpgrp_void = yes; then
12427 12811
12428$as_echo "#define GETPGRP_VOID 1" >>confdefs.h
12429 12812
12430fi 12813fi
12814rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
12815
12816fi
12817done
12431 12818
12432 12819
12433# Search for OpenSSL 12820# Search for OpenSSL
@@ -15193,6 +15580,33 @@ _ACEOF
15193fi 15580fi
15194 15581
15195 15582
15583ac_fn_c_check_member "$LINENO" "struct statfs" "f_flags" "ac_cv_member_struct_statfs_f_flags" "
15584#include <sys/types.h>
15585#ifdef HAVE_SYS_BITYPES_H
15586#include <sys/bitypes.h>
15587#endif
15588#ifdef HAVE_SYS_STATFS_H
15589#include <sys/statfs.h>
15590#endif
15591#ifdef HAVE_SYS_STATVFS_H
15592#include <sys/statvfs.h>
15593#endif
15594#ifdef HAVE_SYS_VFS_H
15595#include <sys/vfs.h>
15596#endif
15597
15598"
15599if test "x$ac_cv_member_struct_statfs_f_flags" = xyes; then :
15600
15601cat >>confdefs.h <<_ACEOF
15602#define HAVE_STRUCT_STATFS_F_FLAGS 1
15603_ACEOF
15604
15605
15606fi
15607
15608
15609
15196ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "#include <sys/types.h> 15610ac_fn_c_check_type "$LINENO" "in_addr_t" "ac_cv_type_in_addr_t" "#include <sys/types.h>
15197#include <netinet/in.h> 15611#include <netinet/in.h>
15198" 15612"
@@ -19272,6 +19686,8 @@ TEST_MALLOC_OPTIONS=$TEST_MALLOC_OPTIONS
19272 19686
19273UNSUPPORTED_ALGORITHMS=$unsupported_algorithms 19687UNSUPPORTED_ALGORITHMS=$unsupported_algorithms
19274 19688
19689DEPEND=$(cat $srcdir/.depend)
19690
19275 19691
19276CFLAGS="${CFLAGS} ${CFLAGS_AFTER}" 19692CFLAGS="${CFLAGS} ${CFLAGS_AFTER}"
19277LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}" 19693LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}"
@@ -19859,6 +20275,7 @@ gives unlimited permission to copy, distribute and modify it."
19859ac_pwd='$ac_pwd' 20275ac_pwd='$ac_pwd'
19860srcdir='$srcdir' 20276srcdir='$srcdir'
19861INSTALL='$INSTALL' 20277INSTALL='$INSTALL'
20278MKDIR_P='$MKDIR_P'
19862AWK='$AWK' 20279AWK='$AWK'
19863test -n "\$AWK" || AWK=awk 20280test -n "\$AWK" || AWK=awk
19864_ACEOF 20281_ACEOF
@@ -20426,6 +20843,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
20426 [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; 20843 [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
20427 *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; 20844 *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
20428 esac 20845 esac
20846 ac_MKDIR_P=$MKDIR_P
20847 case $MKDIR_P in
20848 [\\/$]* | ?:[\\/]* ) ;;
20849 */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
20850 esac
20429_ACEOF 20851_ACEOF
20430 20852
20431cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 20853cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -20480,6 +20902,7 @@ s&@builddir@&$ac_builddir&;t t
20480s&@abs_builddir@&$ac_abs_builddir&;t t 20902s&@abs_builddir@&$ac_abs_builddir&;t t
20481s&@abs_top_builddir@&$ac_abs_top_builddir&;t t 20903s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
20482s&@INSTALL@&$ac_INSTALL&;t t 20904s&@INSTALL@&$ac_INSTALL&;t t
20905s&@MKDIR_P@&$ac_MKDIR_P&;t t
20483$ac_datarootdir_hack 20906$ac_datarootdir_hack
20484" 20907"
20485eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ 20908eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
@@ -20607,7 +21030,6 @@ echo " PAM support: $PAM_MSG"
20607echo " OSF SIA support: $SIA_MSG" 21030echo " OSF SIA support: $SIA_MSG"
20608echo " KerberosV support: $KRB5_MSG" 21031echo " KerberosV support: $KRB5_MSG"
20609echo " SELinux support: $SELINUX_MSG" 21032echo " SELinux support: $SELINUX_MSG"
20610echo " Smartcard support: $SCARD_MSG"
20611echo " S/KEY support: $SKEY_MSG" 21033echo " S/KEY support: $SKEY_MSG"
20612echo " MD5 password support: $MD5_MSG" 21034echo " MD5 password support: $MD5_MSG"
20613echo " libedit support: $LIBEDIT_MSG" 21035echo " libedit support: $LIBEDIT_MSG"
diff --git a/configure.ac b/configure.ac
index 889f50637..663062bef 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,3 @@
1# $Id: configure.ac,v 1.583 2014/08/26 20:32:01 djm Exp $
2# 1#
3# Copyright (c) 1999-2004 Damien Miller 2# Copyright (c) 1999-2004 Damien Miller
4# 3#
@@ -30,12 +29,11 @@ AC_PROG_CPP
30AC_PROG_RANLIB 29AC_PROG_RANLIB
31AC_PROG_INSTALL 30AC_PROG_INSTALL
32AC_PROG_EGREP 31AC_PROG_EGREP
32AC_PROG_MKDIR_P
33AC_CHECK_TOOLS([AR], [ar]) 33AC_CHECK_TOOLS([AR], [ar])
34AC_PATH_PROG([CAT], [cat]) 34AC_PATH_PROG([CAT], [cat])
35AC_PATH_PROG([KILL], [kill]) 35AC_PATH_PROG([KILL], [kill])
36AC_PATH_PROGS([PERL], [perl5 perl])
37AC_PATH_PROG([SED], [sed]) 36AC_PATH_PROG([SED], [sed])
38AC_SUBST([PERL])
39AC_PATH_PROG([ENT], [ent]) 37AC_PATH_PROG([ENT], [ent])
40AC_SUBST([ENT]) 38AC_SUBST([ENT])
41AC_PATH_PROG([TEST_MINUS_S_SH], [bash]) 39AC_PATH_PROG([TEST_MINUS_S_SH], [bash])
@@ -164,6 +162,10 @@ if test "$GCC" = "yes" || test "$GCC" = "egcs"; then
164 OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result]) 162 OSSH_CHECK_CFLAG_COMPILE([-Wunused-result], [-Wno-unused-result])
165 OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing]) 163 OSSH_CHECK_CFLAG_COMPILE([-fno-strict-aliasing])
166 if test "x$use_toolchain_hardening" = "x1"; then 164 if test "x$use_toolchain_hardening" = "x1"; then
165 OSSH_CHECK_CFLAG_COMPILE([-mfunction-return=thunk]) # gcc
166 OSSH_CHECK_CFLAG_COMPILE([-mindirect-branch=thunk]) # gcc
167 OSSH_CHECK_CFLAG_COMPILE([-mretpoline]) # clang
168 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,retpolineplt])
167 OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2]) 169 OSSH_CHECK_CFLAG_COMPILE([-D_FORTIFY_SOURCE=2])
168 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,relro]) 170 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,relro])
169 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,now]) 171 OSSH_CHECK_LDFLAG_LINK([-Wl,-z,now])
@@ -263,6 +265,18 @@ __attribute__((__unused__)) static void foo(void){return;}]],
263 [compiler does not accept __attribute__ on return types]) ] 265 [compiler does not accept __attribute__ on return types]) ]
264) 266)
265 267
268AC_MSG_CHECKING([if compiler allows __attribute__ prototype args])
269AC_COMPILE_IFELSE(
270 [AC_LANG_PROGRAM([[
271#include <stdlib.h>
272typedef void foo(const char *, ...) __attribute__((format(printf, 1, 2)));]],
273 [[ exit(0); ]])],
274 [ AC_MSG_RESULT([yes]) ],
275 [ AC_MSG_RESULT([no])
276 AC_DEFINE(NO_ATTRIBUTE_ON_PROTOTYPE_ARGS, 1,
277 [compiler does not accept __attribute__ on protoype args]) ]
278)
279
266if test "x$no_attrib_nonnull" != "x1" ; then 280if test "x$no_attrib_nonnull" != "x1" ; then
267 AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull]) 281 AC_DEFINE([HAVE_ATTRIBUTE__NONNULL__], [1], [Have attribute nonnull])
268fi 282fi
@@ -363,6 +377,7 @@ AC_CHECK_HEADERS([ \
363 glob.h \ 377 glob.h \
364 ia.h \ 378 ia.h \
365 iaf.h \ 379 iaf.h \
380 ifaddrs.h \
366 inttypes.h \ 381 inttypes.h \
367 langinfo.h \ 382 langinfo.h \
368 limits.h \ 383 limits.h \
@@ -386,12 +401,13 @@ AC_CHECK_HEADERS([ \
386 stdint.h \ 401 stdint.h \
387 string.h \ 402 string.h \
388 strings.h \ 403 strings.h \
389 sys/audit.h \
390 sys/bitypes.h \ 404 sys/bitypes.h \
391 sys/bsdtty.h \ 405 sys/bsdtty.h \
392 sys/cdefs.h \ 406 sys/cdefs.h \
393 sys/dir.h \ 407 sys/dir.h \
408 sys/file.h \
394 sys/mman.h \ 409 sys/mman.h \
410 sys/label.h \
395 sys/ndir.h \ 411 sys/ndir.h \
396 sys/poll.h \ 412 sys/poll.h \
397 sys/prctl.h \ 413 sys/prctl.h \
@@ -406,6 +422,7 @@ AC_CHECK_HEADERS([ \
406 sys/sysmacros.h \ 422 sys/sysmacros.h \
407 sys/time.h \ 423 sys/time.h \
408 sys/timers.h \ 424 sys/timers.h \
425 sys/vfs.h \
409 time.h \ 426 time.h \
410 tmpdir.h \ 427 tmpdir.h \
411 ttyent.h \ 428 ttyent.h \
@@ -420,6 +437,20 @@ AC_CHECK_HEADERS([ \
420 wchar.h \ 437 wchar.h \
421]) 438])
422 439
440# On some platforms (eg SunOS4) sys/audit.h requires sys/[time|types|label.h]
441# to be included first.
442AC_CHECK_HEADERS([sys/audit.h], [], [], [
443#ifdef HAVE_SYS_TIME_H
444# include <sys/time.h>
445#endif
446#ifdef HAVE_SYS_TYPES_H
447# include <sys/types.h>
448#endif
449#ifdef HAVE_SYS_LABEL_H
450# include <sys/label.h>
451#endif
452])
453
423# sys/capsicum.h requires sys/types.h 454# sys/capsicum.h requires sys/types.h
424AC_CHECK_HEADERS([sys/capsicum.h], [], [], [ 455AC_CHECK_HEADERS([sys/capsicum.h], [], [], [
425#ifdef HAVE_SYS_TYPES_H 456#ifdef HAVE_SYS_TYPES_H
@@ -427,6 +458,16 @@ AC_CHECK_HEADERS([sys/capsicum.h], [], [], [
427#endif 458#endif
428]) 459])
429 460
461# net/route.h requires sys/socket.h and sys/types.h.
462# sys/sysctl.h also requires sys/param.h
463AC_CHECK_HEADERS([net/route.h sys/sysctl.h], [], [], [
464#ifdef HAVE_SYS_TYPES_H
465# include <sys/types.h>
466#endif
467#include <sys/param.h>
468#include <sys/socket.h>
469])
470
430# lastlog.h requires sys/time.h to be included first on Solaris 471# lastlog.h requires sys/time.h to be included first on Solaris
431AC_CHECK_HEADERS([lastlog.h], [], [], [ 472AC_CHECK_HEADERS([lastlog.h], [], [], [
432#ifdef HAVE_SYS_TIME_H 473#ifdef HAVE_SYS_TIME_H
@@ -562,6 +603,8 @@ case "$host" in
562 [AIX 5.2 and 5.3 (and presumably newer) require this]) 603 [AIX 5.2 and 5.3 (and presumably newer) require this])
563 AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd]) 604 AC_DEFINE([PTY_ZEROREAD], [1], [read(1) can return 0 for a non-closed fd])
564 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)]) 605 AC_DEFINE([PLATFORM_SYS_DIR_UID], 2, [System dirs owned by bin (uid 2)])
606 AC_DEFINE([BROKEN_STRNDUP], 1, [strndup broken, see APAR IY61211])
607 AC_DEFINE([BROKEN_STRNLEN], 1, [strnlen broken, see APAR IY62551])
565 ;; 608 ;;
566*-*-android*) 609*-*-android*)
567 AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp]) 610 AC_DEFINE([DISABLE_UTMP], [1], [Define if you don't want to use utmp])
@@ -769,8 +812,36 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
769 AC_DEFINE([SSH_TUN_PREPEND_AF], [1], 812 AC_DEFINE([SSH_TUN_PREPEND_AF], [1],
770 [Prepend the address family to IP tunnel traffic]) 813 [Prepend the address family to IP tunnel traffic])
771 fi 814 fi
815 AC_CHECK_HEADER([linux/if.h],
816 AC_DEFINE([SYS_RDOMAIN_LINUX], [1],
817 [Support routing domains using Linux VRF]), [], [
818#ifdef HAVE_SYS_TYPES_H
819# include <sys/types.H>
820#endif
821 ])
772 AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h linux/audit.h], [], 822 AC_CHECK_HEADERS([linux/seccomp.h linux/filter.h linux/audit.h], [],
773 [], [#include <linux/types.h>]) 823 [], [#include <linux/types.h>])
824 # Obtain MIPS ABI
825 case "$host" in
826 mips*)
827 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
828#if _MIPS_SIM != _ABIO32
829#error
830#endif
831 ]])],[mips_abi="o32"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
832#if _MIPS_SIM != _ABIN32
833#error
834#endif
835 ]])],[mips_abi="n32"],[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
836#if _MIPS_SIM != _ABI64
837#error
838#endif
839 ]])],[mips_abi="n64"],[AC_MSG_ERROR([unknown MIPS ABI])
840 ])
841 ])
842 ])
843 ;;
844 esac
774 AC_MSG_CHECKING([for seccomp architecture]) 845 AC_MSG_CHECKING([for seccomp architecture])
775 seccomp_audit_arch= 846 seccomp_audit_arch=
776 case "$host" in 847 case "$host" in
@@ -805,10 +876,24 @@ main() { if (NSVersionOfRunTimeLibrary("System") >= (60 << 16))
805 seccomp_audit_arch=AUDIT_ARCH_MIPSEL 876 seccomp_audit_arch=AUDIT_ARCH_MIPSEL
806 ;; 877 ;;
807 mips64-*) 878 mips64-*)
808 seccomp_audit_arch=AUDIT_ARCH_MIPS64 879 case "$mips_abi" in
880 "n32")
881 seccomp_audit_arch=AUDIT_ARCH_MIPS64N32
882 ;;
883 "n64")
884 seccomp_audit_arch=AUDIT_ARCH_MIPS64
885 ;;
886 esac
809 ;; 887 ;;
810 mips64el-*) 888 mips64el-*)
811 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64 889 case "$mips_abi" in
890 "n32")
891 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64N32
892 ;;
893 "n64")
894 seccomp_audit_arch=AUDIT_ARCH_MIPSEL64
895 ;;
896 esac
812 ;; 897 ;;
813 esac 898 esac
814 if test "x$seccomp_audit_arch" != "x" ; then 899 if test "x$seccomp_audit_arch" != "x" ; then
@@ -959,6 +1044,7 @@ mips-sony-bsd|mips-sony-newsos4)
959 conf_wtmp_location=/var/adm/wtmp 1044 conf_wtmp_location=/var/adm/wtmp
960 conf_lastlog_location=/var/adm/lastlog 1045 conf_lastlog_location=/var/adm/lastlog
961 AC_DEFINE([USE_PIPES]) 1046 AC_DEFINE([USE_PIPES])
1047 AC_DEFINE([DISABLE_UTMPX], [1], [no utmpx])
962 ;; 1048 ;;
963*-ncr-sysv*) 1049*-ncr-sysv*)
964 LIBS="$LIBS -lc89" 1050 LIBS="$LIBS -lc89"
@@ -1007,20 +1093,16 @@ mips-sony-bsd|mips-sony-newsos4)
1007 AC_DEFINE([PASSWD_NEEDS_USERNAME]) 1093 AC_DEFINE([PASSWD_NEEDS_USERNAME])
1008 AC_DEFINE([BROKEN_TCGETATTR_ICANON]) 1094 AC_DEFINE([BROKEN_TCGETATTR_ICANON])
1009 TEST_SHELL=$SHELL # let configure find us a capable shell 1095 TEST_SHELL=$SHELL # let configure find us a capable shell
1096 check_for_libcrypt_later=1
1010 case "$host" in 1097 case "$host" in
1011 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x 1098 *-*-sysv5SCO_SV*) # SCO OpenServer 6.x
1012 maildir=/var/spool/mail 1099 maildir=/var/spool/mail
1013 AC_DEFINE([BROKEN_LIBIAF], [1],
1014 [ia_uinfo routines not supported by OS yet])
1015 AC_DEFINE([BROKEN_UPDWTMPX]) 1100 AC_DEFINE([BROKEN_UPDWTMPX])
1016 AC_CHECK_LIB([prot], [getluid], [ LIBS="$LIBS -lprot" 1101 AC_CHECK_LIB([prot], [getluid], [ LIBS="$LIBS -lprot"
1017 AC_CHECK_FUNCS([getluid setluid], , , [-lprot]) 1102 AC_CHECK_FUNCS([getluid setluid], , , [-lprot])
1018 AC_DEFINE([HAVE_SECUREWARE])
1019 AC_DEFINE([DISABLE_SHADOW])
1020 ], , ) 1103 ], , )
1021 ;; 1104 ;;
1022 *) AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"]) 1105 *) AC_DEFINE([LOCKED_PASSWD_STRING], ["*LK*"])
1023 check_for_libcrypt_later=1
1024 ;; 1106 ;;
1025 esac 1107 esac
1026 ;; 1108 ;;
@@ -1053,40 +1135,6 @@ mips-sony-bsd|mips-sony-newsos4)
1053 TEST_SHELL=$SHELL # let configure find us a capable shell 1135 TEST_SHELL=$SHELL # let configure find us a capable shell
1054 SKIP_DISABLE_LASTLOG_DEFINE=yes 1136 SKIP_DISABLE_LASTLOG_DEFINE=yes
1055 ;; 1137 ;;
1056*-*-unicosmk*)
1057 AC_DEFINE([NO_SSH_LASTLOG], [1],
1058 [Define if you don't want to use lastlog in session.c])
1059 AC_DEFINE([SETEUID_BREAKS_SETUID])
1060 AC_DEFINE([BROKEN_SETREUID])
1061 AC_DEFINE([BROKEN_SETREGID])
1062 AC_DEFINE([USE_PIPES])
1063 AC_DEFINE([DISABLE_FD_PASSING])
1064 LDFLAGS="$LDFLAGS"
1065 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
1066 MANTYPE=cat
1067 ;;
1068*-*-unicosmp*)
1069 AC_DEFINE([SETEUID_BREAKS_SETUID])
1070 AC_DEFINE([BROKEN_SETREUID])
1071 AC_DEFINE([BROKEN_SETREGID])
1072 AC_DEFINE([WITH_ABBREV_NO_TTY])
1073 AC_DEFINE([USE_PIPES])
1074 AC_DEFINE([DISABLE_FD_PASSING])
1075 LDFLAGS="$LDFLAGS"
1076 LIBS="$LIBS -lgen -lacid -ldb"
1077 MANTYPE=cat
1078 ;;
1079*-*-unicos*)
1080 AC_DEFINE([SETEUID_BREAKS_SETUID])
1081 AC_DEFINE([BROKEN_SETREUID])
1082 AC_DEFINE([BROKEN_SETREGID])
1083 AC_DEFINE([USE_PIPES])
1084 AC_DEFINE([DISABLE_FD_PASSING])
1085 AC_DEFINE([NO_SSH_LASTLOG])
1086 LDFLAGS="$LDFLAGS -Wl,-Dmsglevel=334:fatal"
1087 LIBS="$LIBS -lgen -lrsc -lshare -luex -lacm"
1088 MANTYPE=cat
1089 ;;
1090*-dec-osf*) 1138*-dec-osf*)
1091 AC_MSG_CHECKING([for Digital Unix SIA]) 1139 AC_MSG_CHECKING([for Digital Unix SIA])
1092 no_osfsia="" 1140 no_osfsia=""
@@ -1337,8 +1385,23 @@ AC_FUNC_STRFTIME
1337AC_FUNC_MALLOC 1385AC_FUNC_MALLOC
1338AC_FUNC_REALLOC 1386AC_FUNC_REALLOC
1339# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL; 1387# autoconf doesn't have AC_FUNC_CALLOC so fake it if malloc returns NULL;
1340if test "x$ac_cv_func_malloc_0_nonnull" != "xyes"; then 1388AC_MSG_CHECKING([if calloc(0, N) returns non-null])
1341 AC_DEFINE(HAVE_CALLOC, 0, [calloc(x, 0) returns NULL]) 1389AC_RUN_IFELSE(
1390 [AC_LANG_PROGRAM(
1391 [[ #include <stdlib.h> ]],
1392 [[ void *p = calloc(0, 1); exit(p == NULL); ]]
1393 )],
1394 [ func_calloc_0_nonnull=yes ],
1395 [ func_calloc_0_nonnull=no ],
1396 [ AC_MSG_WARN([cross compiling: assuming same as malloc])
1397 func_calloc_0_nonnull="$ac_cv_func_malloc_0_nonnull"]
1398)
1399AC_MSG_RESULT([$func_calloc_0_nonnull])
1400
1401if test "x$func_calloc_0_nonnull" == "xyes"; then
1402 AC_DEFINE(HAVE_CALLOC, 1, [calloc(0, x) returns non-null])
1403else
1404 AC_DEFINE(HAVE_CALLOC, 0, [calloc(0, x) returns NULL])
1342 AC_DEFINE(calloc, rpl_calloc, 1405 AC_DEFINE(calloc, rpl_calloc,
1343 [Define to rpl_calloc if the replacement function should be used.]) 1406 [Define to rpl_calloc if the replacement function should be used.])
1344fi 1407fi
@@ -1487,7 +1550,7 @@ AC_ARG_WITH(ldns,
1487 ldns="" 1550 ldns=""
1488 if test "x$withval" = "xyes" ; then 1551 if test "x$withval" = "xyes" ; then
1489 AC_PATH_TOOL([LDNSCONFIG], [ldns-config], [no]) 1552 AC_PATH_TOOL([LDNSCONFIG], [ldns-config], [no])
1490 if test "x$PKGCONFIG" = "xno"; then 1553 if test "x$LDNSCONFIG" = "xno"; then
1491 CPPFLAGS="$CPPFLAGS -I${withval}/include" 1554 CPPFLAGS="$CPPFLAGS -I${withval}/include"
1492 LDFLAGS="$LDFLAGS -L${withval}/lib" 1555 LDFLAGS="$LDFLAGS -L${withval}/lib"
1493 LIBS="-lldns $LIBS" 1556 LIBS="-lldns $LIBS"
@@ -1695,6 +1758,7 @@ AC_CHECK_FUNCS([ \
1695 bcrypt_pbkdf \ 1758 bcrypt_pbkdf \
1696 bindresvport_sa \ 1759 bindresvport_sa \
1697 blf_enc \ 1760 blf_enc \
1761 bzero \
1698 cap_rights_limit \ 1762 cap_rights_limit \
1699 clock \ 1763 clock \
1700 closefrom \ 1764 closefrom \
@@ -1705,6 +1769,7 @@ AC_CHECK_FUNCS([ \
1705 explicit_bzero \ 1769 explicit_bzero \
1706 fchmod \ 1770 fchmod \
1707 fchown \ 1771 fchown \
1772 flock \
1708 freeaddrinfo \ 1773 freeaddrinfo \
1709 freezero \ 1774 freezero \
1710 fstatfs \ 1775 fstatfs \
@@ -1719,9 +1784,9 @@ AC_CHECK_FUNCS([ \
1719 getpeereid \ 1784 getpeereid \
1720 getpeerucred \ 1785 getpeerucred \
1721 getpgid \ 1786 getpgid \
1722 getpgrp \
1723 _getpty \ 1787 _getpty \
1724 getrlimit \ 1788 getrlimit \
1789 getsid \
1725 getttyent \ 1790 getttyent \
1726 glob \ 1791 glob \
1727 group_from_gid \ 1792 group_from_gid \
@@ -1743,6 +1808,7 @@ AC_CHECK_FUNCS([ \
1743 poll \ 1808 poll \
1744 prctl \ 1809 prctl \
1745 pstat \ 1810 pstat \
1811 raise \
1746 readpassphrase \ 1812 readpassphrase \
1747 reallocarray \ 1813 reallocarray \
1748 recvmsg \ 1814 recvmsg \
@@ -1777,6 +1843,7 @@ AC_CHECK_FUNCS([ \
1777 strlcat \ 1843 strlcat \
1778 strlcpy \ 1844 strlcpy \
1779 strmode \ 1845 strmode \
1846 strndup \
1780 strnlen \ 1847 strnlen \
1781 strnvis \ 1848 strnvis \
1782 strptime \ 1849 strptime \
@@ -1800,6 +1867,8 @@ AC_CHECK_FUNCS([ \
1800 warn \ 1867 warn \
1801]) 1868])
1802 1869
1870AC_CHECK_DECLS([bzero])
1871
1803dnl Wide character support. 1872dnl Wide character support.
1804AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth]) 1873AC_CHECK_FUNCS([mblen mbtowc nl_langinfo wcwidth])
1805 1874
@@ -1842,7 +1911,10 @@ AC_ARG_ENABLE([pkcs11],
1842if test "x$openssl" = "xyes" && test "x$disable_pkcs11" = "x"; then 1911if test "x$openssl" = "xyes" && test "x$disable_pkcs11" = "x"; then
1843 # PKCS#11 support requires dlopen() and co 1912 # PKCS#11 support requires dlopen() and co
1844 AC_SEARCH_LIBS([dlopen], [dl], 1913 AC_SEARCH_LIBS([dlopen], [dl],
1845 [AC_DEFINE([ENABLE_PKCS11], [], [Enable for PKCS#11 support])] 1914 AC_CHECK_DECL([RTLD_NOW],
1915 AC_DEFINE([ENABLE_PKCS11], [], [Enable for PKCS#11 support]),
1916 [], [#include <dlfcn.h>]
1917 )
1846 ) 1918 )
1847fi 1919fi
1848 1920
@@ -1869,7 +1941,6 @@ AC_SEARCH_LIBS([clock_gettime], [rt],
1869 [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Have clock_gettime])]) 1941 [AC_DEFINE([HAVE_CLOCK_GETTIME], [1], [Have clock_gettime])])
1870 1942
1871dnl Make sure prototypes are defined for these before using them. 1943dnl Make sure prototypes are defined for these before using them.
1872AC_CHECK_DECL([getrusage], [AC_CHECK_FUNCS([getrusage])])
1873AC_CHECK_DECL([strsep], 1944AC_CHECK_DECL([strsep],
1874 [AC_CHECK_FUNCS([strsep])], 1945 [AC_CHECK_FUNCS([strsep])],
1875 [], 1946 [],
@@ -1905,7 +1976,7 @@ AC_CHECK_DECLS([O_NONBLOCK], , ,
1905#endif 1976#endif
1906 ]) 1977 ])
1907 1978
1908AC_CHECK_DECLS([writev], , , [ 1979AC_CHECK_DECLS([readv, writev], , , [
1909#include <sys/types.h> 1980#include <sys/types.h>
1910#include <sys/uio.h> 1981#include <sys/uio.h>
1911#include <unistd.h> 1982#include <unistd.h>
@@ -2022,6 +2093,16 @@ AC_CHECK_FUNCS([realpath], [
2022 ) 2093 )
2023]) 2094])
2024 2095
2096AC_MSG_CHECKING([for working fflush(NULL)])
2097AC_RUN_IFELSE(
2098 [AC_LANG_PROGRAM([[#include <stdio.h>]], [[fflush(NULL); exit(0);]])],
2099 AC_MSG_RESULT([yes]),
2100 [AC_MSG_RESULT([no])
2101 AC_DEFINE([FFLUSH_NULL_BUG], [1],
2102 [define if fflush(NULL) does not work])],
2103 AC_MSG_WARN([cross compiling: assuming working])
2104)
2105
2025dnl Checks for time functions 2106dnl Checks for time functions
2026AC_CHECK_FUNCS([gettimeofday time]) 2107AC_CHECK_FUNCS([gettimeofday time])
2027dnl Checks for utmp functions 2108dnl Checks for utmp functions
@@ -2393,7 +2474,16 @@ static void sighandler(int sig) { _exit(1); }
2393 ) 2474 )
2394fi 2475fi
2395 2476
2396AC_FUNC_GETPGRP 2477AC_CHECK_FUNCS([getpgrp],[
2478 AC_MSG_CHECKING([if getpgrp accepts zero args])
2479 AC_COMPILE_IFELSE(
2480 [AC_LANG_PROGRAM([[$ac_includes_default]], [[ getpgrp(); ]])],
2481 [ AC_MSG_RESULT([yes])
2482 AC_DEFINE([GETPGRP_VOID], [1], [getpgrp takes zero args])],
2483 [ AC_MSG_RESULT([no])
2484 AC_DEFINE([GETPGRP_VOID], [0], [getpgrp takes one arg])]
2485 )
2486])
2397 2487
2398# Search for OpenSSL 2488# Search for OpenSSL
2399saved_CPPFLAGS="$CPPFLAGS" 2489saved_CPPFLAGS="$CPPFLAGS"
@@ -3641,6 +3731,23 @@ AC_CHECK_TYPES([fsblkcnt_t, fsfilcnt_t], , , [
3641#endif 3731#endif
3642]) 3732])
3643 3733
3734AC_CHECK_MEMBERS([struct statfs.f_flags], [], [], [[
3735#include <sys/types.h>
3736#ifdef HAVE_SYS_BITYPES_H
3737#include <sys/bitypes.h>
3738#endif
3739#ifdef HAVE_SYS_STATFS_H
3740#include <sys/statfs.h>
3741#endif
3742#ifdef HAVE_SYS_STATVFS_H
3743#include <sys/statvfs.h>
3744#endif
3745#ifdef HAVE_SYS_VFS_H
3746#include <sys/vfs.h>
3747#endif
3748]])
3749
3750
3644AC_CHECK_TYPES([in_addr_t, in_port_t], , , 3751AC_CHECK_TYPES([in_addr_t, in_port_t], , ,
3645[#include <sys/types.h> 3752[#include <sys/types.h>
3646#include <netinet/in.h>]) 3753#include <netinet/in.h>])
@@ -4755,7 +4862,7 @@ if test ! -d $piddir ; then
4755fi 4862fi
4756 4863
4757AC_ARG_WITH([pid-dir], 4864AC_ARG_WITH([pid-dir],
4758 [ --with-pid-dir=PATH Specify location of ssh.pid file], 4865 [ --with-pid-dir=PATH Specify location of sshd.pid file],
4759 [ 4866 [
4760 if test -n "$withval" && test "x$withval" != "xno" && \ 4867 if test -n "$withval" && test "x$withval" != "xno" && \
4761 test "x${withval}" != "xyes"; then 4868 test "x${withval}" != "xyes"; then
@@ -5056,6 +5163,7 @@ AC_SUBST([TEST_SSH_IPV6], [$TEST_SSH_IPV6])
5056AC_SUBST([TEST_SSH_UTF8], [$TEST_SSH_UTF8]) 5163AC_SUBST([TEST_SSH_UTF8], [$TEST_SSH_UTF8])
5057AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS]) 5164AC_SUBST([TEST_MALLOC_OPTIONS], [$TEST_MALLOC_OPTIONS])
5058AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms]) 5165AC_SUBST([UNSUPPORTED_ALGORITHMS], [$unsupported_algorithms])
5166AC_SUBST([DEPEND], [$(cat $srcdir/.depend)])
5059 5167
5060CFLAGS="${CFLAGS} ${CFLAGS_AFTER}" 5168CFLAGS="${CFLAGS} ${CFLAGS_AFTER}"
5061LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}" 5169LDFLAGS="${LDFLAGS} ${LDFLAGS_AFTER}"
@@ -5107,7 +5215,6 @@ echo " PAM support: $PAM_MSG"
5107echo " OSF SIA support: $SIA_MSG" 5215echo " OSF SIA support: $SIA_MSG"
5108echo " KerberosV support: $KRB5_MSG" 5216echo " KerberosV support: $KRB5_MSG"
5109echo " SELinux support: $SELINUX_MSG" 5217echo " SELinux support: $SELINUX_MSG"
5110echo " Smartcard support: $SCARD_MSG"
5111echo " S/KEY support: $SKEY_MSG" 5218echo " S/KEY support: $SKEY_MSG"
5112echo " MD5 password support: $MD5_MSG" 5219echo " MD5 password support: $MD5_MSG"
5113echo " libedit support: $LIBEDIT_MSG" 5220echo " libedit support: $LIBEDIT_MSG"
diff --git a/contrib/aix/README b/contrib/aix/README
index 4a11ae703..1aa591978 100644
--- a/contrib/aix/README
+++ b/contrib/aix/README
@@ -47,4 +47,3 @@ you get to keep both pieces.
47 - Darren Tucker (dtucker at zip dot com dot au) 47 - Darren Tucker (dtucker at zip dot com dot au)
48 2002/03/01 48 2002/03/01
49 49
50$Id: README,v 1.4 2003/08/25 05:01:04 dtucker Exp $
diff --git a/contrib/aix/buildbff.sh b/contrib/aix/buildbff.sh
index 81d8cc301..00b384dc7 100755
--- a/contrib/aix/buildbff.sh
+++ b/contrib/aix/buildbff.sh
@@ -1,7 +1,6 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3# buildbff.sh: Create AIX SMIT-installable OpenSSH packages 3# buildbff.sh: Create AIX SMIT-installable OpenSSH packages
4# $Id: buildbff.sh,v 1.13 2011/05/05 03:48:41 djm Exp $
5# 4#
6# Author: Darren Tucker (dtucker at zip dot com dot au) 5# Author: Darren Tucker (dtucker at zip dot com dot au)
7# This file is placed in the public domain and comes with absolutely 6# This file is placed in the public domain and comes with absolutely
diff --git a/contrib/aix/inventory.sh b/contrib/aix/inventory.sh
index e2641e79c..7d76f4971 100755
--- a/contrib/aix/inventory.sh
+++ b/contrib/aix/inventory.sh
@@ -1,7 +1,6 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3# inventory.sh 3# inventory.sh
4# $Id: inventory.sh,v 1.6 2003/11/21 12:48:56 djm Exp $
5# 4#
6# Originally written by Ben Lindstrom, modified by Darren Tucker to use perl 5# Originally written by Ben Lindstrom, modified by Darren Tucker to use perl
7# This file is placed into the public domain. 6# This file is placed into the public domain.
diff --git a/contrib/cygwin/Makefile b/contrib/cygwin/Makefile
index a0261f48d..4b78cd950 100644
--- a/contrib/cygwin/Makefile
+++ b/contrib/cygwin/Makefile
@@ -13,6 +13,7 @@ defaultsdir=$(sysconfdir)/defaults/etc
13inetdefdir=$(defaultsdir)/inetd.d 13inetdefdir=$(defaultsdir)/inetd.d
14PRIVSEP_PATH=/var/empty 14PRIVSEP_PATH=/var/empty
15INSTALL=/usr/bin/install -c 15INSTALL=/usr/bin/install -c
16MKDIR_P=$(srcdir)/mkinstalldirs
16 17
17DESTDIR= 18DESTDIR=
18 19
@@ -23,7 +24,7 @@ all:
23 @echo 24 @echo
24 25
25move-config-files: $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(sysconfdir)/sshd_config 26move-config-files: $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(sysconfdir)/sshd_config
26 $(srcdir)/mkinstalldirs $(DESTDIR)$(defaultsdir) 27 $(MKDIR_P) $(DESTDIR)$(defaultsdir)
27 mv $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(defaultsdir) 28 mv $(DESTDIR)$(sysconfdir)/ssh_config $(DESTDIR)$(defaultsdir)
28 mv $(DESTDIR)$(sysconfdir)/sshd_config $(DESTDIR)$(defaultsdir) 29 mv $(DESTDIR)$(sysconfdir)/sshd_config $(DESTDIR)$(defaultsdir)
29 30
@@ -31,11 +32,11 @@ remove-empty-dir:
31 rm -rf $(DESTDIR)$(PRIVSEP_PATH) 32 rm -rf $(DESTDIR)$(PRIVSEP_PATH)
32 33
33install-inetd-config: 34install-inetd-config:
34 $(srcdir)/mkinstalldirs $(DESTDIR)$(inetdefdir) 35 $(MKDIR_P) $(DESTDIR)$(inetdefdir)
35 $(INSTALL) -m 644 sshd-inetd $(DESTDIR)$(inetdefdir)/sshd-inetd 36 $(INSTALL) -m 644 sshd-inetd $(DESTDIR)$(inetdefdir)/sshd-inetd
36 37
37install-sshdoc: 38install-sshdoc:
38 $(srcdir)/mkinstalldirs $(DESTDIR)$(sshdocdir) 39 $(MKDIR_P) $(DESTDIR)$(sshdocdir)
39 -$(INSTALL) -m 644 $(srcdir)/CREDITS $(DESTDIR)$(sshdocdir)/CREDITS 40 -$(INSTALL) -m 644 $(srcdir)/CREDITS $(DESTDIR)$(sshdocdir)/CREDITS
40 -$(INSTALL) -m 644 $(srcdir)/ChangeLog $(DESTDIR)$(sshdocdir)/ChangeLog 41 -$(INSTALL) -m 644 $(srcdir)/ChangeLog $(DESTDIR)$(sshdocdir)/ChangeLog
41 -$(INSTALL) -m 644 $(srcdir)/LICENCE $(DESTDIR)$(sshdocdir)/LICENCE 42 -$(INSTALL) -m 644 $(srcdir)/LICENCE $(DESTDIR)$(sshdocdir)/LICENCE
@@ -52,13 +53,13 @@ install-sshdoc:
52 -$(INSTALL) -m 644 $(srcdir)/TODO $(DESTDIR)$(sshdocdir)/TODO 53 -$(INSTALL) -m 644 $(srcdir)/TODO $(DESTDIR)$(sshdocdir)/TODO
53 54
54install-cygwindoc: README 55install-cygwindoc: README
55 $(srcdir)/mkinstalldirs $(DESTDIR)$(cygdocdir) 56 $(MKDIR_P) $(DESTDIR)$(cygdocdir)
56 $(INSTALL) -m 644 README $(DESTDIR)$(cygdocdir)/openssh.README 57 $(INSTALL) -m 644 README $(DESTDIR)$(cygdocdir)/openssh.README
57 58
58install-doc: install-sshdoc install-cygwindoc 59install-doc: install-sshdoc install-cygwindoc
59 60
60install-scripts: ssh-host-config ssh-user-config 61install-scripts: ssh-host-config ssh-user-config
61 $(srcdir)/mkinstalldirs $(DESTDIR)$(bindir) 62 $(MKDIR_P) $(DESTDIR)$(bindir)
62 $(INSTALL) -m 755 ssh-host-config $(DESTDIR)$(bindir)/ssh-host-config 63 $(INSTALL) -m 755 ssh-host-config $(DESTDIR)$(bindir)/ssh-host-config
63 $(INSTALL) -m 755 ssh-user-config $(DESTDIR)$(bindir)/ssh-user-config 64 $(INSTALL) -m 755 ssh-user-config $(DESTDIR)$(bindir)/ssh-user-config
64 65
diff --git a/contrib/findssl.sh b/contrib/findssl.sh
index 263fd2644..95a0d66df 100644
--- a/contrib/findssl.sh
+++ b/contrib/findssl.sh
@@ -1,7 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2# 2#
3# $Id: findssl.sh,v 1.4 2007/02/19 11:44:25 dtucker Exp $
4#
5# findssl.sh 3# findssl.sh
6# Search for all instances of OpenSSL headers and libraries 4# Search for all instances of OpenSSL headers and libraries
7# and print their versions. 5# and print their versions.
diff --git a/contrib/redhat/openssh.spec b/contrib/redhat/openssh.spec
index a96a36e49..a0d5e2071 100644
--- a/contrib/redhat/openssh.spec
+++ b/contrib/redhat/openssh.spec
@@ -1,5 +1,5 @@
1%define ver 7.6p1 1%define ver 7.7p1
2%define rel 1 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
5%define sshd_uid 74 5%define sshd_uid 74
@@ -23,8 +23,19 @@
23# Use GTK2 instead of GNOME in gnome-ssh-askpass 23# Use GTK2 instead of GNOME in gnome-ssh-askpass
24%define gtk2 1 24%define gtk2 1
25 25
26# Is this build for RHL 6.x? 26# Use build6x options for older RHEL builds
27# RHEL 7 not yet supported
28%if 0%{?rhel} > 6
27%define build6x 0 29%define build6x 0
30%else
31%define build6x 1
32%endif
33
34%if 0%{?fedora} >= 26
35%define compat_openssl 1
36%else
37%define compat_openssl 0
38%endif
28 39
29# Do we want kerberos5 support (1=yes 0=no) 40# Do we want kerberos5 support (1=yes 0=no)
30%define kerberos5 1 41%define kerberos5 1
@@ -64,7 +75,7 @@
64%define kerberos5 0 75%define kerberos5 0
65%endif 76%endif
66 77
67Summary: The OpenSSH implementation of SSH protocol versions 1 and 2. 78Summary: The OpenSSH implementation of SSH protocol version 2.
68Name: openssh 79Name: openssh
69Version: %{ver} 80Version: %{ver}
70%if %{rescue} 81%if %{rescue}
@@ -74,9 +85,7 @@ Release: %{rel}
74%endif 85%endif
75URL: https://www.openssh.com/portable.html 86URL: https://www.openssh.com/portable.html
76Source0: https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz 87Source0: https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-%{version}.tar.gz
77%if ! %{no_x11_askpass}
78Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{aversion}.tar.gz 88Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{aversion}.tar.gz
79%endif
80License: BSD 89License: BSD
81Group: Applications/Internet 90Group: Applications/Internet
82BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot 91BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
@@ -86,7 +95,13 @@ PreReq: initscripts >= 5.00
86%else 95%else
87Requires: initscripts >= 5.20 96Requires: initscripts >= 5.20
88%endif 97%endif
89BuildRequires: perl, openssl-devel 98BuildRequires: perl
99%if %{compat_openssl}
100BuildRequires: compat-openssl10-devel
101%else
102BuildRequires: openssl-devel >= 1.0.1
103BuildRequires: openssl-devel < 1.1
104%endif
90BuildRequires: /bin/login 105BuildRequires: /bin/login
91%if ! %{build6x} 106%if ! %{build6x}
92BuildRequires: glibc-devel, pam 107BuildRequires: glibc-devel, pam
@@ -95,6 +110,12 @@ BuildRequires: /usr/include/security/pam_appl.h
95%endif 110%endif
96%if ! %{no_x11_askpass} 111%if ! %{no_x11_askpass}
97BuildRequires: /usr/include/X11/Xlib.h 112BuildRequires: /usr/include/X11/Xlib.h
113# Xt development tools
114BuildRequires: libXt-devel
115# Provides xmkmf
116BuildRequires: imake
117# Rely on relatively recent gtk
118BuildRequires: gtk2-devel
98%endif 119%endif
99%if ! %{no_gnome_askpass} 120%if ! %{no_gnome_askpass}
100BuildRequires: pkgconfig 121BuildRequires: pkgconfig
@@ -183,11 +204,6 @@ environment.
183CFLAGS="$RPM_OPT_FLAGS -Os"; export CFLAGS 204CFLAGS="$RPM_OPT_FLAGS -Os"; export CFLAGS
184%endif 205%endif
185 206
186%if %{kerberos5}
187K5DIR=`rpm -ql krb5-devel | grep 'include/krb5\.h' | sed 's,\/include\/krb5.h,,'`
188echo K5DIR=$K5DIR
189%endif
190
191%configure \ 207%configure \
192 --sysconfdir=%{_sysconfdir}/ssh \ 208 --sysconfdir=%{_sysconfdir}/ssh \
193 --libexecdir=%{_libexecdir}/openssh \ 209 --libexecdir=%{_libexecdir}/openssh \
@@ -196,6 +212,9 @@ echo K5DIR=$K5DIR
196 --with-superuser-path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin \ 212 --with-superuser-path=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin \
197 --with-privsep-path=%{_var}/empty/sshd \ 213 --with-privsep-path=%{_var}/empty/sshd \
198 --with-md5-passwords \ 214 --with-md5-passwords \
215 --mandir=%{_mandir} \
216 --with-mantype=man \
217 --disable-strip \
199%if %{scard} 218%if %{scard}
200 --with-smartcard \ 219 --with-smartcard \
201%endif 220%endif
@@ -262,12 +281,12 @@ install -m644 contrib/redhat/sshd.pam $RPM_BUILD_ROOT/etc/pam.d/sshd
262install -m755 contrib/redhat/sshd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/sshd 281install -m755 contrib/redhat/sshd.init $RPM_BUILD_ROOT/etc/rc.d/init.d/sshd
263 282
264%if ! %{no_x11_askpass} 283%if ! %{no_x11_askpass}
265install -s x11-ssh-askpass-%{aversion}/x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/x11-ssh-askpass 284install x11-ssh-askpass-%{aversion}/x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/x11-ssh-askpass
266ln -s x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/ssh-askpass 285ln -s x11-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/ssh-askpass
267%endif 286%endif
268 287
269%if ! %{no_gnome_askpass} 288%if ! %{no_gnome_askpass}
270install -s contrib/gnome-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/gnome-ssh-askpass 289install contrib/gnome-ssh-askpass $RPM_BUILD_ROOT%{_libexecdir}/openssh/gnome-ssh-askpass
271%endif 290%endif
272 291
273%if ! %{scard} 292%if ! %{scard}
@@ -391,7 +410,7 @@ fi
391%doc x11-ssh-askpass-%{aversion}/README 410%doc x11-ssh-askpass-%{aversion}/README
392%doc x11-ssh-askpass-%{aversion}/ChangeLog 411%doc x11-ssh-askpass-%{aversion}/ChangeLog
393%doc x11-ssh-askpass-%{aversion}/SshAskpass*.ad 412%doc x11-ssh-askpass-%{aversion}/SshAskpass*.ad
394%attr(0755,root,root) %{_libexecdir}/openssh/ssh-askpass 413%{_libexecdir}/openssh/ssh-askpass
395%attr(0755,root,root) %{_libexecdir}/openssh/x11-ssh-askpass 414%attr(0755,root,root) %{_libexecdir}/openssh/x11-ssh-askpass
396%endif 415%endif
397 416
@@ -403,6 +422,22 @@ fi
403%endif 422%endif
404 423
405%changelog 424%changelog
425* Sat Feb 10 2018 Darren Tucker <dtucker@dtucker.net>
426- Update openssl-devel dependency to match current requirements.
427- Handle Fedora >=6 openssl 1.0 compat libs.
428- Remove SSH1 from description.
429- Don't strip binaries at build time so that debuginfo package can be
430 created.
431
432* Sun Nov 16 2014 Nico Kadel-Garcia <nakdel@gmail.com>
433- Add '--mandir' and '--with-mantype' for RHEL 5 compatibility
434- Add 'dist' option to 'ver' so package names reflect OS at build time
435- Always include x11-ssh-askpass tarball in SRPM
436- Add openssh-x11-aspass BuildRequires for libXT-devel, imake, gtk2-devel
437- Discard 'K5DIR' reporting, not usable inside 'mock' for RHEL 5 compatibility
438- Discard obsolete '--with-rsh' configure option
439- Update openssl-devel dependency to 0.9.8f, as found in autoconf
440
406* Wed Jul 14 2010 Tim Rice <tim@multitalents.net> 441* Wed Jul 14 2010 Tim Rice <tim@multitalents.net>
407- test for skip_x11_askpass (line 77) should have been for no_x11_askpass 442- test for skip_x11_askpass (line 77) should have been for no_x11_askpass
408 443
@@ -414,7 +449,7 @@ fi
414- Don't install profile.d scripts when not building with GNOME/GTK askpass 449- Don't install profile.d scripts when not building with GNOME/GTK askpass
415 (patch from bet@rahul.net) 450 (patch from bet@rahul.net)
416 451
417* Wed Oct 01 2002 Damien Miller <djm@mindrot.org> 452* Tue Oct 01 2002 Damien Miller <djm@mindrot.org>
418- Install ssh-agent setgid nobody to prevent ptrace() key theft attacks 453- Install ssh-agent setgid nobody to prevent ptrace() key theft attacks
419 454
420* Mon Sep 30 2002 Damien Miller <djm@mindrot.org> 455* Mon Sep 30 2002 Damien Miller <djm@mindrot.org>
@@ -460,7 +495,7 @@ fi
460- remove dependency on db1-devel, which has just been swallowed up whole 495- remove dependency on db1-devel, which has just been swallowed up whole
461 by gnome-libs-devel 496 by gnome-libs-devel
462 497
463* Sun Dec 29 2001 Nalin Dahyabhai <nalin@redhat.com> 498* Sat Dec 29 2001 Nalin Dahyabhai <nalin@redhat.com>
464- adjust build dependencies so that build6x actually works right (fix 499- adjust build dependencies so that build6x actually works right (fix
465 from Hugo van der Kooij) 500 from Hugo van der Kooij)
466 501
diff --git a/contrib/redhat/sshd.init b/contrib/redhat/sshd.init
index 40c8dfd9f..8ee5fcd3b 100755
--- a/contrib/redhat/sshd.init
+++ b/contrib/redhat/sshd.init
@@ -40,7 +40,6 @@ start()
40 # Create keys if necessary 40 # Create keys if necessary
41 /usr/bin/ssh-keygen -A 41 /usr/bin/ssh-keygen -A
42 if [ -x /sbin/restorecon ]; then 42 if [ -x /sbin/restorecon ]; then
43 /sbin/restorecon /etc/ssh/ssh_host_key.pub
44 /sbin/restorecon /etc/ssh/ssh_host_rsa_key.pub 43 /sbin/restorecon /etc/ssh/ssh_host_rsa_key.pub
45 /sbin/restorecon /etc/ssh/ssh_host_dsa_key.pub 44 /sbin/restorecon /etc/ssh/ssh_host_dsa_key.pub
46 /sbin/restorecon /etc/ssh/ssh_host_ecdsa_key.pub 45 /sbin/restorecon /etc/ssh/ssh_host_ecdsa_key.pub
diff --git a/contrib/redhat/sshd.init.old b/contrib/redhat/sshd.init.old
index 0deb6080e..8a30f7da4 100755
--- a/contrib/redhat/sshd.init.old
+++ b/contrib/redhat/sshd.init.old
@@ -24,7 +24,6 @@ prog="sshd"
24# Some functions to make the below more readable 24# Some functions to make the below more readable
25KEYGEN=/usr/bin/ssh-keygen 25KEYGEN=/usr/bin/ssh-keygen
26SSHD=/usr/sbin/sshd 26SSHD=/usr/sbin/sshd
27RSA1_KEY=/etc/ssh/ssh_host_key
28RSA_KEY=/etc/ssh/ssh_host_rsa_key 27RSA_KEY=/etc/ssh/ssh_host_rsa_key
29DSA_KEY=/etc/ssh/ssh_host_dsa_key 28DSA_KEY=/etc/ssh/ssh_host_dsa_key
30PID_FILE=/var/run/sshd.pid 29PID_FILE=/var/run/sshd.pid
@@ -61,21 +60,6 @@ my_failure() {
61 ;; 60 ;;
62 esac 61 esac
63} 62}
64do_rsa1_keygen() {
65 if [ ! -s $RSA1_KEY ]; then
66 echo -n "Generating SSH1 RSA host key: "
67 if $KEYGEN -q -t rsa1 -f $RSA1_KEY -C '' -N '' >&/dev/null; then
68 chmod 600 $RSA1_KEY
69 chmod 644 $RSA1_KEY.pub
70 my_success "RSA1 key generation"
71 echo
72 else
73 my_failure "RSA1 key generation"
74 echo
75 exit 1
76 fi
77 fi
78}
79do_rsa_keygen() { 63do_rsa_keygen() {
80 if [ ! -s $RSA_KEY ]; then 64 if [ ! -s $RSA_KEY ]; then
81 echo -n "Generating SSH2 RSA host key: " 65 echo -n "Generating SSH2 RSA host key: "
@@ -119,7 +103,6 @@ do_restart_sanity_check() {
119case "$1" in 103case "$1" in
120 start) 104 start)
121 # Create keys if necessary 105 # Create keys if necessary
122 do_rsa1_keygen;
123 do_rsa_keygen; 106 do_rsa_keygen;
124 do_dsa_keygen; 107 do_dsa_keygen;
125 108
diff --git a/contrib/suse/openssh.spec b/contrib/suse/openssh.spec
index fdb3578cb..d9c4298f1 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.6p1 16Version: 7.7p1
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 5820ce8fa..7f45bbd69 100644
--- a/crypto_api.h
+++ b/crypto_api.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: crypto_api.h,v 1.3 2013/12/17 10:36:38 markus Exp $ */ 1/* $OpenBSD: crypto_api.h,v 1.4 2017/12/14 21:07:39 naddy 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.
@@ -8,6 +8,8 @@
8#ifndef crypto_api_h 8#ifndef crypto_api_h
9#define crypto_api_h 9#define crypto_api_h
10 10
11#include "includes.h"
12
11#ifdef HAVE_STDINT_H 13#ifdef HAVE_STDINT_H
12# include <stdint.h> 14# include <stdint.h>
13#endif 15#endif
@@ -18,12 +20,6 @@ typedef uint32_t crypto_uint32;
18 20
19#define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len)) 21#define randombytes(buf, buf_len) arc4random_buf((buf), (buf_len))
20 22
21#define crypto_hashblocks_sha512_STATEBYTES 64U
22#define crypto_hashblocks_sha512_BLOCKBYTES 128U
23
24int crypto_hashblocks_sha512(unsigned char *, const unsigned char *,
25 unsigned long long);
26
27#define crypto_hash_sha512_BYTES 64U 23#define crypto_hash_sha512_BYTES 64U
28 24
29int crypto_hash_sha512(unsigned char *, const unsigned char *, 25int crypto_hash_sha512(unsigned char *, const unsigned char *,
diff --git a/defines.h b/defines.h
index f1662edcf..3fa5ec5a9 100644
--- a/defines.h
+++ b/defines.h
@@ -214,24 +214,12 @@ typedef signed char int8_t;
214# if (SIZEOF_SHORT_INT == 2) 214# if (SIZEOF_SHORT_INT == 2)
215typedef short int int16_t; 215typedef short int int16_t;
216# else 216# else
217# ifdef _UNICOS
218# if (SIZEOF_SHORT_INT == 4)
219typedef short int16_t;
220# else
221typedef long int16_t;
222# endif
223# else
224# error "16 bit int type not found." 217# error "16 bit int type not found."
225# endif /* _UNICOS */
226# endif 218# endif
227# if (SIZEOF_INT == 4) 219# if (SIZEOF_INT == 4)
228typedef int int32_t; 220typedef int int32_t;
229# else 221# else
230# ifdef _UNICOS
231typedef long int32_t;
232# else
233# error "32 bit int type not found." 222# error "32 bit int type not found."
234# endif /* _UNICOS */
235# endif 223# endif
236#endif 224#endif
237 225
@@ -247,24 +235,12 @@ typedef unsigned char u_int8_t;
247# if (SIZEOF_SHORT_INT == 2) 235# if (SIZEOF_SHORT_INT == 2)
248typedef unsigned short int u_int16_t; 236typedef unsigned short int u_int16_t;
249# else 237# else
250# ifdef _UNICOS
251# if (SIZEOF_SHORT_INT == 4)
252typedef unsigned short u_int16_t;
253# else
254typedef unsigned long u_int16_t;
255# endif
256# else
257# error "16 bit int type not found." 238# error "16 bit int type not found."
258# endif
259# endif 239# endif
260# if (SIZEOF_INT == 4) 240# if (SIZEOF_INT == 4)
261typedef unsigned int u_int32_t; 241typedef unsigned int u_int32_t;
262# else 242# else
263# ifdef _UNICOS
264typedef unsigned long u_int32_t;
265# else
266# error "32 bit int type not found." 243# error "32 bit int type not found."
267# endif
268# endif 244# endif
269# endif 245# endif
270#define __BIT_TYPES_DEFINED__ 246#define __BIT_TYPES_DEFINED__
diff --git a/dh.c b/dh.c
index 475312427..46afba033 100644
--- a/dh.c
+++ b/dh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dh.c,v 1.62 2016/12/15 21:20:41 dtucker Exp $ */ 1/* $OpenBSD: dh.c,v 1.63 2018/02/07 02:06:50 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Niels Provos. All rights reserved. 3 * Copyright (c) 2000 Niels Provos. All rights reserved.
4 * 4 *
@@ -25,6 +25,7 @@
25 25
26#include "includes.h" 26#include "includes.h"
27 27
28#ifdef WITH_OPENSSL
28 29
29#include <openssl/bn.h> 30#include <openssl/bn.h>
30#include <openssl/dh.h> 31#include <openssl/dh.h>
@@ -134,10 +135,8 @@ parse_prime(int linenum, char *line, struct dhgroup *dhg)
134 return 1; 135 return 1;
135 136
136 fail: 137 fail:
137 if (dhg->g != NULL) 138 BN_clear_free(dhg->g);
138 BN_clear_free(dhg->g); 139 BN_clear_free(dhg->p);
139 if (dhg->p != NULL)
140 BN_clear_free(dhg->p);
141 dhg->g = dhg->p = NULL; 140 dhg->g = dhg->p = NULL;
142 return 0; 141 return 0;
143} 142}
@@ -465,3 +464,5 @@ dh_estimate(int bits)
465 return 7680; 464 return 7680;
466 return 8192; 465 return 8192;
467} 466}
467
468#endif /* WITH_OPENSSL */
diff --git a/dns.c b/dns.c
index 6e1abb530..ff1a2c41c 100644
--- a/dns.c
+++ b/dns.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: dns.c,v 1.37 2017/09/14 04:32:21 djm Exp $ */ 1/* $OpenBSD: dns.c,v 1.38 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2003 Wesley Griffin. All rights reserved. 4 * Copyright (c) 2003 Wesley Griffin. All rights reserved.
@@ -105,6 +105,11 @@ dns_read_key(u_int8_t *algorithm, u_int8_t *digest_type,
105 if (!*digest_type) 105 if (!*digest_type)
106 *digest_type = SSHFP_HASH_SHA256; 106 *digest_type = SSHFP_HASH_SHA256;
107 break; 107 break;
108 case KEY_XMSS:
109 *algorithm = SSHFP_KEY_XMSS;
110 if (!*digest_type)
111 *digest_type = SSHFP_HASH_SHA256;
112 break;
108 default: 113 default:
109 *algorithm = SSHFP_KEY_RESERVED; /* 0 */ 114 *algorithm = SSHFP_KEY_RESERVED; /* 0 */
110 *digest_type = SSHFP_HASH_RESERVED; /* 0 */ 115 *digest_type = SSHFP_HASH_RESERVED; /* 0 */
diff --git a/dns.h b/dns.h
index 68443f7cb..91f3c632d 100644
--- a/dns.h
+++ b/dns.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: dns.h,v 1.17 2017/09/14 04:32:21 djm Exp $ */ 1/* $OpenBSD: dns.h,v 1.18 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2003 Wesley Griffin. All rights reserved. 4 * Copyright (c) 2003 Wesley Griffin. All rights reserved.
@@ -33,7 +33,8 @@ enum sshfp_types {
33 SSHFP_KEY_RSA = 1, 33 SSHFP_KEY_RSA = 1,
34 SSHFP_KEY_DSA = 2, 34 SSHFP_KEY_DSA = 2,
35 SSHFP_KEY_ECDSA = 3, 35 SSHFP_KEY_ECDSA = 3,
36 SSHFP_KEY_ED25519 = 4 36 SSHFP_KEY_ED25519 = 4,
37 SSHFP_KEY_XMSS = 5
37}; 38};
38 39
39enum sshfp_hashes { 40enum sshfp_hashes {
diff --git a/entropy.c b/entropy.c
index 9305f89ae..14b98f188 100644
--- a/entropy.c
+++ b/entropy.c
@@ -108,7 +108,7 @@ get_random_bytes_prngd(unsigned char *buf, int len,
108 strlen(socket_path) + 1; 108 strlen(socket_path) + 1;
109 } 109 }
110 110
111 old_sigpipe = mysignal(SIGPIPE, SIG_IGN); 111 old_sigpipe = signal(SIGPIPE, SIG_IGN);
112 112
113 errors = 0; 113 errors = 0;
114 rval = -1; 114 rval = -1;
@@ -158,7 +158,7 @@ reopen:
158 158
159 rval = 0; 159 rval = 0;
160done: 160done:
161 mysignal(SIGPIPE, old_sigpipe); 161 signal(SIGPIPE, old_sigpipe);
162 if (fd != -1) 162 if (fd != -1)
163 close(fd); 163 close(fd);
164 return rval; 164 return rval;
diff --git a/fixprogs b/fixprogs
deleted file mode 100755
index af76ee392..000000000
--- a/fixprogs
+++ /dev/null
@@ -1,72 +0,0 @@
1#!/usr/bin/perl
2#
3# fixprogs - run through the list of entropy commands and
4# score out the losers
5#
6
7$entscale = 50; # divisor for optional entropy measurement
8
9sub usage {
10 return("Usage: $0 <command file>\n");
11}
12
13if (($#ARGV == -1) || ($#ARGV>1)) {
14 die(&usage);
15}
16
17# 'undocumented' option - run ent (in second param) on the output
18if ($#ARGV==1) {
19 $entcmd=$ARGV[1]
20} else {
21 $entcmd = ""
22};
23
24$infilename = $ARGV[0];
25
26if (!open(IN, "<".$infilename)) {
27 die("Couldn't open input file");
28}
29$outfilename=$infilename.".out";
30if (!open(OUT, ">$outfilename")) {
31 die("Couldn't open output file $outfilename");
32}
33@infile=<IN>;
34
35select(OUT); $|=1; select(STDOUT);
36
37foreach (@infile) {
38 if (/^\s*\#/ || /^\s*$/) {
39 print OUT;
40 next;
41 }
42 ($cmd, $path, $est) = /^\"([^\"]+)\"\s+([\w\/_-]+)\s+([\d\.\-]+)/o;
43 @args = split(/ /, $cmd);
44 if (! ($pid = fork())) {
45 # child
46 close STDIN; close STDOUT; close STDERR;
47 open (STDIN, "</dev/null");
48 open (STDOUT, ">/dev/null");
49 open (STDERR, ">/dev/null");
50 exec $path @args;
51 exit 1; # shouldn't be here
52 }
53 # parent
54 waitpid ($pid, 0); $ret=$? >> 8;
55
56 if ($ret != 0) {
57 $path = "undef";
58 } else {
59 if ($entcmd ne "") {
60 # now try to run ent on the command
61 $mostargs=join(" ", splice(@args,1));
62 print "Evaluating '$path $mostargs'\n";
63 @ent = qx{$path $mostargs | $entcmd -b -t};
64 @ent = grep(/^1,/, @ent);
65 ($null, $null, $rate) = split(/,/, $ent[0]);
66 $est = $rate / $entscale; # scale the estimate back
67 }
68 }
69 print OUT "\"$cmd\" $path $est\n";
70}
71
72close(IN);
diff --git a/hash.c b/hash.c
index 734c6bee2..5875d41fa 100644
--- a/hash.c
+++ b/hash.c
@@ -1,76 +1,27 @@
1/* $OpenBSD: hash.c,v 1.3 2013/12/09 11:03:45 markus Exp $ */ 1/* $OpenBSD: hash.c,v 1.4 2017/12/14 21:07:39 naddy Exp $ */
2
3/* Copied from nacl-20110221/crypto_hash/sha512/ref/hash.c */
4 2
3/* $OpenBSD: hash.c,v 1.5 2018/01/13 00:24:09 naddy Exp $ */
5/* 4/*
620080913 5 * Public domain. Author: Christian Weisgerber <naddy@openbsd.org>
7D. J. Bernstein 6 * API compatible reimplementation of function from nacl
8Public domain. 7 */
9*/
10
11#include "includes.h"
12 8
13#include "crypto_api.h" 9#include "crypto_api.h"
14 10
15#define blocks crypto_hashblocks_sha512 11#include <stdarg.h>
16 12
17static const unsigned char iv[64] = { 13#include "digest.h"
18 0x6a,0x09,0xe6,0x67,0xf3,0xbc,0xc9,0x08, 14#include "log.h"
19 0xbb,0x67,0xae,0x85,0x84,0xca,0xa7,0x3b, 15#include "ssherr.h"
20 0x3c,0x6e,0xf3,0x72,0xfe,0x94,0xf8,0x2b,
21 0xa5,0x4f,0xf5,0x3a,0x5f,0x1d,0x36,0xf1,
22 0x51,0x0e,0x52,0x7f,0xad,0xe6,0x82,0xd1,
23 0x9b,0x05,0x68,0x8c,0x2b,0x3e,0x6c,0x1f,
24 0x1f,0x83,0xd9,0xab,0xfb,0x41,0xbd,0x6b,
25 0x5b,0xe0,0xcd,0x19,0x13,0x7e,0x21,0x79
26} ;
27 16
28typedef unsigned long long uint64; 17int
29 18crypto_hash_sha512(unsigned char *out, const unsigned char *in,
30int crypto_hash_sha512(unsigned char *out,const unsigned char *in,unsigned long long inlen) 19 unsigned long long inlen)
31{ 20{
32 unsigned char h[64]; 21 int r;
33 unsigned char padded[256];
34 unsigned int i;
35 unsigned long long bytes = inlen;
36
37 for (i = 0;i < 64;++i) h[i] = iv[i];
38
39 blocks(h,in,inlen);
40 in += inlen;
41 inlen &= 127;
42 in -= inlen;
43
44 for (i = 0;i < inlen;++i) padded[i] = in[i];
45 padded[inlen] = 0x80;
46
47 if (inlen < 112) {
48 for (i = inlen + 1;i < 119;++i) padded[i] = 0;
49 padded[119] = bytes >> 61;
50 padded[120] = bytes >> 53;
51 padded[121] = bytes >> 45;
52 padded[122] = bytes >> 37;
53 padded[123] = bytes >> 29;
54 padded[124] = bytes >> 21;
55 padded[125] = bytes >> 13;
56 padded[126] = bytes >> 5;
57 padded[127] = bytes << 3;
58 blocks(h,padded,128);
59 } else {
60 for (i = inlen + 1;i < 247;++i) padded[i] = 0;
61 padded[247] = bytes >> 61;
62 padded[248] = bytes >> 53;
63 padded[249] = bytes >> 45;
64 padded[250] = bytes >> 37;
65 padded[251] = bytes >> 29;
66 padded[252] = bytes >> 21;
67 padded[253] = bytes >> 13;
68 padded[254] = bytes >> 5;
69 padded[255] = bytes << 3;
70 blocks(h,padded,256);
71 }
72
73 for (i = 0;i < 64;++i) out[i] = h[i];
74 22
75 return 0; 23 if ((r = ssh_digest_memory(SSH_DIGEST_SHA512, in, inlen, out,
24 crypto_hash_sha512_BYTES)) != 0)
25 fatal("%s: %s", __func__, ssh_err(r));
26 return 0;
76} 27}
diff --git a/install-sh b/install-sh
index 220abbf61..377bb8687 100755
--- a/install-sh
+++ b/install-sh
@@ -1,251 +1,527 @@
1#!/bin/sh 1#!/bin/sh
2#
3# install - install a program, script, or datafile 2# install - install a program, script, or datafile
4# This comes from X11R5 (mit/util/scripts/install.sh). 3
4scriptversion=2011-11-20.07; # UTC
5
6# This originates from X11R5 (mit/util/scripts/install.sh), which was
7# later released in X11R6 (xc/config/util/install.sh) with the
8# following copyright and license.
9#
10# Copyright (C) 1994 X Consortium
11#
12# Permission is hereby granted, free of charge, to any person obtaining a copy
13# of this software and associated documentation files (the "Software"), to
14# deal in the Software without restriction, including without limitation the
15# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
16# sell copies of the Software, and to permit persons to whom the Software is
17# furnished to do so, subject to the following conditions:
18#
19# The above copyright notice and this permission notice shall be included in
20# all copies or substantial portions of the Software.
21#
22# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
26# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
27# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
5# 28#
6# Copyright 1991 by the Massachusetts Institute of Technology 29# Except as contained in this notice, the name of the X Consortium shall not
30# be used in advertising or otherwise to promote the sale, use or other deal-
31# ings in this Software without prior written authorization from the X Consor-
32# tium.
7# 33#
8# Permission to use, copy, modify, distribute, and sell this software and its 34#
9# documentation for any purpose is hereby granted without fee, provided that 35# FSF changes to this file are in the public domain.
10# the above copyright notice appear in all copies and that both that
11# copyright notice and this permission notice appear in supporting
12# documentation, and that the name of M.I.T. not be used in advertising or
13# publicity pertaining to distribution of the software without specific,
14# written prior permission. M.I.T. makes no representations about the
15# suitability of this software for any purpose. It is provided "as is"
16# without express or implied warranty.
17# 36#
18# Calling this script install-sh is preferred over install.sh, to prevent 37# Calling this script install-sh is preferred over install.sh, to prevent
19# `make' implicit rules from creating a file called install from it 38# 'make' implicit rules from creating a file called install from it
20# when there is no Makefile. 39# when there is no Makefile.
21# 40#
22# This script is compatible with the BSD install script, but was written 41# This script is compatible with the BSD install script, but was written
23# from scratch. It can only install one file at a time, a restriction 42# from scratch.
24# shared with many OS's install programs.
25 43
44nl='
45'
46IFS=" "" $nl"
26 47
27# set DOITPROG to echo to test this script 48# set DOITPROG to echo to test this script
28 49
29# Don't use :- since 4.3BSD and earlier shells don't like it. 50# Don't use :- since 4.3BSD and earlier shells don't like it.
30doit="${DOITPROG-}" 51doit=${DOITPROG-}
31 52if test -z "$doit"; then
32 53 doit_exec=exec
33# put in absolute paths if you don't have them in your path; or use env. vars.
34
35mvprog="${MVPROG-mv}"
36cpprog="${CPPROG-cp}"
37chmodprog="${CHMODPROG-chmod}"
38chownprog="${CHOWNPROG-chown}"
39chgrpprog="${CHGRPPROG-chgrp}"
40stripprog="${STRIPPROG-strip}"
41rmprog="${RMPROG-rm}"
42mkdirprog="${MKDIRPROG-mkdir}"
43
44transformbasename=""
45transform_arg=""
46instcmd="$mvprog"
47chmodcmd="$chmodprog 0755"
48chowncmd=""
49chgrpcmd=""
50stripcmd=""
51rmcmd="$rmprog -f"
52mvcmd="$mvprog"
53src=""
54dst=""
55dir_arg=""
56
57while [ x"$1" != x ]; do
58 case $1 in
59 -c) instcmd="$cpprog"
60 shift
61 continue;;
62
63 -d) dir_arg=true
64 shift
65 continue;;
66
67 -m) chmodcmd="$chmodprog $2"
68 shift
69 shift
70 continue;;
71
72 -o) chowncmd="$chownprog $2"
73 shift
74 shift
75 continue;;
76
77 -g) chgrpcmd="$chgrpprog $2"
78 shift
79 shift
80 continue;;
81
82 -s) stripcmd="$stripprog"
83 shift
84 continue;;
85
86 -t=*) transformarg=`echo $1 | sed 's/-t=//'`
87 shift
88 continue;;
89
90 -b=*) transformbasename=`echo $1 | sed 's/-b=//'`
91 shift
92 continue;;
93
94 *) if [ x"$src" = x ]
95 then
96 src=$1
97 else
98 # this colon is to work around a 386BSD /bin/sh bug
99 :
100 dst=$1
101 fi
102 shift
103 continue;;
104 esac
105done
106
107if [ x"$src" = x ]
108then
109 echo "install: no input file specified"
110 exit 1
111else 54else
112 true 55 doit_exec=$doit
113fi 56fi
114 57
115if [ x"$dir_arg" != x ]; then 58# Put in absolute file names if you don't have them in your path;
116 dst=$src 59# or use environment vars.
117 src="" 60
118 61chgrpprog=${CHGRPPROG-chgrp}
119 if [ -d $dst ]; then 62chmodprog=${CHMODPROG-chmod}
120 instcmd=: 63chownprog=${CHOWNPROG-chown}
121 chmodcmd="" 64cmpprog=${CMPPROG-cmp}
122 else 65cpprog=${CPPROG-cp}
123 instcmd=mkdir 66mkdirprog=${MKDIRPROG-mkdir}
124 fi 67mvprog=${MVPROG-mv}
125else 68rmprog=${RMPROG-rm}
69stripprog=${STRIPPROG-strip}
70
71posix_glob='?'
72initialize_posix_glob='
73 test "$posix_glob" != "?" || {
74 if (set -f) 2>/dev/null; then
75 posix_glob=
76 else
77 posix_glob=:
78 fi
79 }
80'
126 81
127# Waiting for this to be detected by the "$instcmd $src $dsttmp" command 82posix_mkdir=
128# might cause directories to be created, which would be especially bad
129# if $src (and thus $dsttmp) contains '*'.
130 83
131 if [ -f $src -o -d $src ] 84# Desired mode of installed file.
132 then 85mode=0755
133 true
134 else
135 echo "install: $src does not exist"
136 exit 1
137 fi
138
139 if [ x"$dst" = x ]
140 then
141 echo "install: no destination specified"
142 exit 1
143 else
144 true
145 fi
146 86
147# If destination is a directory, append the input filename; if your system 87chgrpcmd=
148# does not like double slashes in filenames, you may need to add some logic 88chmodcmd=$chmodprog
89chowncmd=
90mvcmd=$mvprog
91rmcmd="$rmprog -f"
92stripcmd=
149 93
150 if [ -d $dst ] 94src=
151 then 95dst=
152 dst="$dst"/`basename $src` 96dir_arg=
153 else 97dst_arg=
154 true
155 fi
156fi
157 98
158## this sed command emulates the dirname command 99copy_on_change=false
159dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` 100no_target_directory=
160 101
161# Make sure that the destination directory exists. 102usage="\
162# this part is taken from Noah Friedman's mkinstalldirs script 103Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
104 or: $0 [OPTION]... SRCFILES... DIRECTORY
105 or: $0 [OPTION]... -t DIRECTORY SRCFILES...
106 or: $0 [OPTION]... -d DIRECTORIES...
163 107
164# Skip lots of stat calls in the usual case. 108In the 1st form, copy SRCFILE to DSTFILE.
165if [ ! -d "$dstdir" ]; then 109In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
166defaultIFS=' 110In the 4th, create DIRECTORIES.
167'
168IFS="${IFS-${defaultIFS}}"
169 111
170oIFS="${IFS}" 112Options:
171# Some sh's can't handle IFS=/ for some reason. 113 --help display this help and exit.
172IFS='%' 114 --version display version info and exit.
173set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
174IFS="${oIFS}"
175 115
176pathcomp='' 116 -c (ignored)
117 -C install only if different (preserve the last data modification time)
118 -d create directories instead of installing files.
119 -g GROUP $chgrpprog installed files to GROUP.
120 -m MODE $chmodprog installed files to MODE.
121 -o USER $chownprog installed files to USER.
122 -s $stripprog installed files.
123 -t DIRECTORY install into DIRECTORY.
124 -T report an error if DSTFILE is a directory.
177 125
178while [ $# -ne 0 ] ; do 126Environment variables override the default commands:
179 pathcomp="${pathcomp}${1}" 127 CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
180 shift 128 RMPROG STRIPPROG
129"
181 130
182 if [ ! -d "${pathcomp}" ] ; 131while test $# -ne 0; do
183 then 132 case $1 in
184 $mkdirprog "${pathcomp}" 133 -c) ;;
185 else
186 true
187 fi
188 134
189 pathcomp="${pathcomp}/" 135 -C) copy_on_change=true;;
190done
191fi
192 136
193if [ x"$dir_arg" != x ] 137 -d) dir_arg=true;;
194then
195 $doit $instcmd $dst &&
196 138
197 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && 139 -g) chgrpcmd="$chgrpprog $2"
198 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && 140 shift;;
199 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
200 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
201else
202 141
203# If we're going to rename the final executable, determine the name now. 142 --help) echo "$usage"; exit $?;;
204 143
205 if [ x"$transformarg" = x ] 144 -m) mode=$2
206 then 145 case $mode in
207 dstfile=`basename $dst` 146 *' '* | *' '* | *'
208 else 147'* | *'*'* | *'?'* | *'['*)
209 dstfile=`basename $dst $transformbasename | 148 echo "$0: invalid mode: $mode" >&2
210 sed $transformarg`$transformbasename 149 exit 1;;
211 fi 150 esac
151 shift;;
212 152
213# don't allow the sed command to completely eliminate the filename 153 -o) chowncmd="$chownprog $2"
154 shift;;
214 155
215 if [ x"$dstfile" = x ] 156 -s) stripcmd=$stripprog;;
216 then
217 dstfile=`basename $dst`
218 else
219 true
220 fi
221 157
222# Make a temp file name in the proper directory. 158 -t) dst_arg=$2
159 # Protect names problematic for 'test' and other utilities.
160 case $dst_arg in
161 -* | [=\(\)!]) dst_arg=./$dst_arg;;
162 esac
163 shift;;
223 164
224 dsttmp=$dstdir/#inst.$$# 165 -T) no_target_directory=true;;
225 166
226# Move or copy the file name to the temp name 167 --version) echo "$0 $scriptversion"; exit $?;;
227 168
228 $doit $instcmd $src $dsttmp && 169 --) shift
170 break;;
229 171
230 trap "rm -f ${dsttmp}" 0 && 172 -*) echo "$0: invalid option: $1" >&2
173 exit 1;;
231 174
232# and set any options; do chmod last to preserve setuid bits 175 *) break;;
176 esac
177 shift
178done
233 179
234# If any of these fail, we abort the whole thing. If we want to 180if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
235# ignore errors from any of these, just make sure not to ignore 181 # When -d is used, all remaining arguments are directories to create.
236# errors from the above "$doit $instcmd $src $dsttmp" command. 182 # When -t is used, the destination is already specified.
183 # Otherwise, the last argument is the destination. Remove it from $@.
184 for arg
185 do
186 if test -n "$dst_arg"; then
187 # $@ is not empty: it contains at least $arg.
188 set fnord "$@" "$dst_arg"
189 shift # fnord
190 fi
191 shift # arg
192 dst_arg=$arg
193 # Protect names problematic for 'test' and other utilities.
194 case $dst_arg in
195 -* | [=\(\)!]) dst_arg=./$dst_arg;;
196 esac
197 done
198fi
237 199
238 if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && 200if test $# -eq 0; then
239 if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && 201 if test -z "$dir_arg"; then
240 if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && 202 echo "$0: no input file specified." >&2
241 if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && 203 exit 1
204 fi
205 # It's OK to call 'install-sh -d' without argument.
206 # This can happen when creating conditional directories.
207 exit 0
208fi
242 209
243# Now rename the file to the real destination. 210if test -z "$dir_arg"; then
211 do_exit='(exit $ret); exit $ret'
212 trap "ret=129; $do_exit" 1
213 trap "ret=130; $do_exit" 2
214 trap "ret=141; $do_exit" 13
215 trap "ret=143; $do_exit" 15
216
217 # Set umask so as not to create temps with too-generous modes.
218 # However, 'strip' requires both read and write access to temps.
219 case $mode in
220 # Optimize common cases.
221 *644) cp_umask=133;;
222 *755) cp_umask=22;;
223
224 *[0-7])
225 if test -z "$stripcmd"; then
226 u_plus_rw=
227 else
228 u_plus_rw='% 200'
229 fi
230 cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
231 *)
232 if test -z "$stripcmd"; then
233 u_plus_rw=
234 else
235 u_plus_rw=,u+rw
236 fi
237 cp_umask=$mode$u_plus_rw;;
238 esac
239fi
244 240
245 $doit $rmcmd -f $dstdir/$dstfile && 241for src
246 $doit $mvcmd $dsttmp $dstdir/$dstfile 242do
243 # Protect names problematic for 'test' and other utilities.
244 case $src in
245 -* | [=\(\)!]) src=./$src;;
246 esac
247
248 if test -n "$dir_arg"; then
249 dst=$src
250 dstdir=$dst
251 test -d "$dstdir"
252 dstdir_status=$?
253 else
254
255 # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
256 # might cause directories to be created, which would be especially bad
257 # if $src (and thus $dsttmp) contains '*'.
258 if test ! -f "$src" && test ! -d "$src"; then
259 echo "$0: $src does not exist." >&2
260 exit 1
261 fi
262
263 if test -z "$dst_arg"; then
264 echo "$0: no destination specified." >&2
265 exit 1
266 fi
267 dst=$dst_arg
268
269 # If destination is a directory, append the input filename; won't work
270 # if double slashes aren't ignored.
271 if test -d "$dst"; then
272 if test -n "$no_target_directory"; then
273 echo "$0: $dst_arg: Is a directory" >&2
274 exit 1
275 fi
276 dstdir=$dst
277 dst=$dstdir/`basename "$src"`
278 dstdir_status=0
279 else
280 # Prefer dirname, but fall back on a substitute if dirname fails.
281 dstdir=`
282 (dirname "$dst") 2>/dev/null ||
283 expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
284 X"$dst" : 'X\(//\)[^/]' \| \
285 X"$dst" : 'X\(//\)$' \| \
286 X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
287 echo X"$dst" |
288 sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
289 s//\1/
290 q
291 }
292 /^X\(\/\/\)[^/].*/{
293 s//\1/
294 q
295 }
296 /^X\(\/\/\)$/{
297 s//\1/
298 q
299 }
300 /^X\(\/\).*/{
301 s//\1/
302 q
303 }
304 s/.*/./; q'
305 `
306
307 test -d "$dstdir"
308 dstdir_status=$?
309 fi
310 fi
311
312 obsolete_mkdir_used=false
313
314 if test $dstdir_status != 0; then
315 case $posix_mkdir in
316 '')
317 # Create intermediate dirs using mode 755 as modified by the umask.
318 # This is like FreeBSD 'install' as of 1997-10-28.
319 umask=`umask`
320 case $stripcmd.$umask in
321 # Optimize common cases.
322 *[2367][2367]) mkdir_umask=$umask;;
323 .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
324
325 *[0-7])
326 mkdir_umask=`expr $umask + 22 \
327 - $umask % 100 % 40 + $umask % 20 \
328 - $umask % 10 % 4 + $umask % 2
329 `;;
330 *) mkdir_umask=$umask,go-w;;
331 esac
332
333 # With -d, create the new directory with the user-specified mode.
334 # Otherwise, rely on $mkdir_umask.
335 if test -n "$dir_arg"; then
336 mkdir_mode=-m$mode
337 else
338 mkdir_mode=
339 fi
247 340
248fi && 341 posix_mkdir=false
342 case $umask in
343 *[123567][0-7][0-7])
344 # POSIX mkdir -p sets u+wx bits regardless of umask, which
345 # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
346 ;;
347 *)
348 tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
349 trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
350
351 if (umask $mkdir_umask &&
352 exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
353 then
354 if test -z "$dir_arg" || {
355 # Check for POSIX incompatibilities with -m.
356 # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
357 # other-writable bit of parent directory when it shouldn't.
358 # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
359 ls_ld_tmpdir=`ls -ld "$tmpdir"`
360 case $ls_ld_tmpdir in
361 d????-?r-*) different_mode=700;;
362 d????-?--*) different_mode=755;;
363 *) false;;
364 esac &&
365 $mkdirprog -m$different_mode -p -- "$tmpdir" && {
366 ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
367 test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
368 }
369 }
370 then posix_mkdir=:
371 fi
372 rmdir "$tmpdir/d" "$tmpdir"
373 else
374 # Remove any dirs left behind by ancient mkdir implementations.
375 rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
376 fi
377 trap '' 0;;
378 esac;;
379 esac
249 380
381 if
382 $posix_mkdir && (
383 umask $mkdir_umask &&
384 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
385 )
386 then :
387 else
388
389 # The umask is ridiculous, or mkdir does not conform to POSIX,
390 # or it failed possibly due to a race condition. Create the
391 # directory the slow way, step by step, checking for races as we go.
392
393 case $dstdir in
394 /*) prefix='/';;
395 [-=\(\)!]*) prefix='./';;
396 *) prefix='';;
397 esac
398
399 eval "$initialize_posix_glob"
400
401 oIFS=$IFS
402 IFS=/
403 $posix_glob set -f
404 set fnord $dstdir
405 shift
406 $posix_glob set +f
407 IFS=$oIFS
408
409 prefixes=
410
411 for d
412 do
413 test X"$d" = X && continue
414
415 prefix=$prefix$d
416 if test -d "$prefix"; then
417 prefixes=
418 else
419 if $posix_mkdir; then
420 (umask=$mkdir_umask &&
421 $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
422 # Don't fail if two instances are running concurrently.
423 test -d "$prefix" || exit 1
424 else
425 case $prefix in
426 *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
427 *) qprefix=$prefix;;
428 esac
429 prefixes="$prefixes '$qprefix'"
430 fi
431 fi
432 prefix=$prefix/
433 done
434
435 if test -n "$prefixes"; then
436 # Don't fail if two instances are running concurrently.
437 (umask $mkdir_umask &&
438 eval "\$doit_exec \$mkdirprog $prefixes") ||
439 test -d "$dstdir" || exit 1
440 obsolete_mkdir_used=true
441 fi
442 fi
443 fi
444
445 if test -n "$dir_arg"; then
446 { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
447 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
448 { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
449 test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
450 else
451
452 # Make a couple of temp file names in the proper directory.
453 dsttmp=$dstdir/_inst.$$_
454 rmtmp=$dstdir/_rm.$$_
455
456 # Trap to clean up those temp files at exit.
457 trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
458
459 # Copy the file name to the temp name.
460 (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
461
462 # and set any options; do chmod last to preserve setuid bits.
463 #
464 # If any of these fail, we abort the whole thing. If we want to
465 # ignore errors from any of these, just make sure not to ignore
466 # errors from the above "$doit $cpprog $src $dsttmp" command.
467 #
468 { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
469 { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
470 { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
471 { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
472
473 # If -C, don't bother to copy if it wouldn't change the file.
474 if $copy_on_change &&
475 old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
476 new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
477
478 eval "$initialize_posix_glob" &&
479 $posix_glob set -f &&
480 set X $old && old=:$2:$4:$5:$6 &&
481 set X $new && new=:$2:$4:$5:$6 &&
482 $posix_glob set +f &&
483
484 test "$old" = "$new" &&
485 $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
486 then
487 rm -f "$dsttmp"
488 else
489 # Rename the file to the real destination.
490 $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
491
492 # The rename failed, perhaps because mv can't rename something else
493 # to itself, or perhaps because mv is so ancient that it does not
494 # support -f.
495 {
496 # Now remove or move aside any old file at destination location.
497 # We try this two ways since rm can't unlink itself on some
498 # systems and the destination file might be busy for other
499 # reasons. In this case, the final cleanup might fail but the new
500 # file should still install successfully.
501 {
502 test ! -f "$dst" ||
503 $doit $rmcmd -f "$dst" 2>/dev/null ||
504 { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
505 { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
506 } ||
507 { echo "$0: cannot unlink or rename $dst" >&2
508 (exit 1); exit 1
509 }
510 } &&
511
512 # Now rename the file to the real destination.
513 $doit $mvcmd "$dsttmp" "$dst"
514 }
515 fi || exit 1
516
517 trap '' 0
518 fi
519done
250 520
251exit 0 521# Local variables:
522# eval: (add-hook 'write-file-hooks 'time-stamp)
523# time-stamp-start: "scriptversion="
524# time-stamp-format: "%:y-%02m-%02d.%02H"
525# time-stamp-time-zone: "UTC"
526# time-stamp-end: "; # UTC"
527# End:
diff --git a/kex.c b/kex.c
index d5d5a9dae..15ea28b07 100644
--- a/kex.c
+++ b/kex.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kex.c,v 1.134 2017/06/13 12:13:59 djm Exp $ */ 1/* $OpenBSD: kex.c,v 1.136 2018/02/07 02:06:50 jsing 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 *
@@ -587,11 +587,9 @@ kex_free(struct kex *kex)
587 u_int mode; 587 u_int mode;
588 588
589#ifdef WITH_OPENSSL 589#ifdef WITH_OPENSSL
590 if (kex->dh) 590 DH_free(kex->dh);
591 DH_free(kex->dh);
592#ifdef OPENSSL_HAS_ECC 591#ifdef OPENSSL_HAS_ECC
593 if (kex->ec_client_key) 592 EC_KEY_free(kex->ec_client_key);
594 EC_KEY_free(kex->ec_client_key);
595#endif /* OPENSSL_HAS_ECC */ 593#endif /* OPENSSL_HAS_ECC */
596#endif /* WITH_OPENSSL */ 594#endif /* WITH_OPENSSL */
597 for (mode = 0; mode < MODE_MAX; mode++) { 595 for (mode = 0; mode < MODE_MAX; mode++) {
@@ -675,9 +673,6 @@ choose_mac(struct ssh *ssh, struct sshmac *mac, char *client, char *server)
675 free(name); 673 free(name);
676 return SSH_ERR_INTERNAL_ERROR; 674 return SSH_ERR_INTERNAL_ERROR;
677 } 675 }
678 /* truncate the key */
679 if (ssh->compat & SSH_BUG_HMAC)
680 mac->key_len = 16;
681 mac->name = name; 676 mac->name = name;
682 mac->key = NULL; 677 mac->key = NULL;
683 mac->enabled = 0; 678 mac->enabled = 0;
@@ -866,8 +861,7 @@ kex_choose_conf(struct ssh *ssh)
866 kex->dh_need = dh_need; 861 kex->dh_need = dh_need;
867 862
868 /* ignore the next message if the proposals do not match */ 863 /* ignore the next message if the proposals do not match */
869 if (first_kex_follows && !proposals_match(my, peer) && 864 if (first_kex_follows && !proposals_match(my, peer))
870 !(ssh->compat & SSH_BUG_FIRSTKEX))
871 ssh->dispatch_skip_packets = 1; 865 ssh->dispatch_skip_packets = 1;
872 r = 0; 866 r = 0;
873 out: 867 out:
diff --git a/kexc25519c.c b/kexc25519c.c
index e488013e9..a8d92149c 100644
--- a/kexc25519c.c
+++ b/kexc25519c.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexc25519c.c,v 1.8 2017/05/31 04:17:12 djm Exp $ */ 1/* $OpenBSD: kexc25519c.c,v 1.9 2017/12/18 02:25:15 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -141,7 +141,7 @@ input_kex_c25519_reply(int type, u_int32_t seq, struct ssh *ssh)
141 goto out; 141 goto out;
142 142
143 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen, 143 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
144 ssh->compat)) != 0) 144 kex->hostkey_alg, ssh->compat)) != 0)
145 goto out; 145 goto out;
146 146
147 /* save session id */ 147 /* save session id */
diff --git a/kexc25519s.c b/kexc25519s.c
index 0a008d447..0800a7a4b 100644
--- a/kexc25519s.c
+++ b/kexc25519s.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexc25519s.c,v 1.10 2015/12/04 16:41:28 markus Exp $ */ 1/* $OpenBSD: kexc25519s.c,v 1.11 2017/05/31 04:19:28 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
diff --git a/kexdhc.c b/kexdhc.c
index 9864ee2ec..9a9f1ea78 100644
--- a/kexdhc.c
+++ b/kexdhc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexdhc.c,v 1.20 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexdhc.c,v 1.22 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -183,7 +183,7 @@ input_kex_dh(int type, u_int32_t seq, struct ssh *ssh)
183 goto out; 183 goto out;
184 184
185 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen, 185 if ((r = sshkey_verify(server_host_key, signature, slen, hash, hashlen,
186 ssh->compat)) != 0) 186 kex->hostkey_alg, ssh->compat)) != 0)
187 goto out; 187 goto out;
188 188
189 /* save session id */ 189 /* save session id */
@@ -203,14 +203,12 @@ input_kex_dh(int type, u_int32_t seq, struct ssh *ssh)
203 explicit_bzero(hash, sizeof(hash)); 203 explicit_bzero(hash, sizeof(hash));
204 DH_free(kex->dh); 204 DH_free(kex->dh);
205 kex->dh = NULL; 205 kex->dh = NULL;
206 if (dh_server_pub) 206 BN_clear_free(dh_server_pub);
207 BN_clear_free(dh_server_pub);
208 if (kbuf) { 207 if (kbuf) {
209 explicit_bzero(kbuf, klen); 208 explicit_bzero(kbuf, klen);
210 free(kbuf); 209 free(kbuf);
211 } 210 }
212 if (shared_secret) 211 BN_clear_free(shared_secret);
213 BN_clear_free(shared_secret);
214 sshkey_free(server_host_key); 212 sshkey_free(server_host_key);
215 free(server_host_key_blob); 213 free(server_host_key_blob);
216 free(signature); 214 free(signature);
diff --git a/kexdhs.c b/kexdhs.c
index 81ce56d7a..da8f4c439 100644
--- a/kexdhs.c
+++ b/kexdhs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexdhs.c,v 1.25 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexdhs.c,v 1.26 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * 4 *
@@ -208,14 +208,12 @@ input_kex_dh_init(int type, u_int32_t seq, struct ssh *ssh)
208 explicit_bzero(hash, sizeof(hash)); 208 explicit_bzero(hash, sizeof(hash));
209 DH_free(kex->dh); 209 DH_free(kex->dh);
210 kex->dh = NULL; 210 kex->dh = NULL;
211 if (dh_client_pub) 211 BN_clear_free(dh_client_pub);
212 BN_clear_free(dh_client_pub);
213 if (kbuf) { 212 if (kbuf) {
214 explicit_bzero(kbuf, klen); 213 explicit_bzero(kbuf, klen);
215 free(kbuf); 214 free(kbuf);
216 } 215 }
217 if (shared_secret) 216 BN_clear_free(shared_secret);
218 BN_clear_free(shared_secret);
219 free(server_host_key_blob); 217 free(server_host_key_blob);
220 free(signature); 218 free(signature);
221 return r; 219 return r;
diff --git a/kexecdhc.c b/kexecdhc.c
index d8a8b660f..ac146a362 100644
--- a/kexecdhc.c
+++ b/kexecdhc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexecdhc.c,v 1.11 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexecdhc.c,v 1.13 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -89,8 +89,7 @@ kexecdh_client(struct ssh *ssh)
89 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_ecdh_reply); 89 ssh_dispatch_set(ssh, SSH2_MSG_KEX_ECDH_REPLY, &input_kex_ecdh_reply);
90 r = 0; 90 r = 0;
91 out: 91 out:
92 if (client_key) 92 EC_KEY_free(client_key);
93 EC_KEY_free(client_key);
94 return r; 93 return r;
95} 94}
96 95
@@ -188,7 +187,7 @@ input_kex_ecdh_reply(int type, u_int32_t seq, struct ssh *ssh)
188 goto out; 187 goto out;
189 188
190 if ((r = sshkey_verify(server_host_key, signature, slen, hash, 189 if ((r = sshkey_verify(server_host_key, signature, slen, hash,
191 hashlen, ssh->compat)) != 0) 190 hashlen, kex->hostkey_alg, ssh->compat)) != 0)
192 goto out; 191 goto out;
193 192
194 /* save session id */ 193 /* save session id */
@@ -206,18 +205,14 @@ input_kex_ecdh_reply(int type, u_int32_t seq, struct ssh *ssh)
206 r = kex_send_newkeys(ssh); 205 r = kex_send_newkeys(ssh);
207 out: 206 out:
208 explicit_bzero(hash, sizeof(hash)); 207 explicit_bzero(hash, sizeof(hash));
209 if (kex->ec_client_key) { 208 EC_KEY_free(kex->ec_client_key);
210 EC_KEY_free(kex->ec_client_key); 209 kex->ec_client_key = NULL;
211 kex->ec_client_key = NULL; 210 EC_POINT_clear_free(server_public);
212 }
213 if (server_public)
214 EC_POINT_clear_free(server_public);
215 if (kbuf) { 211 if (kbuf) {
216 explicit_bzero(kbuf, klen); 212 explicit_bzero(kbuf, klen);
217 free(kbuf); 213 free(kbuf);
218 } 214 }
219 if (shared_secret) 215 BN_clear_free(shared_secret);
220 BN_clear_free(shared_secret);
221 sshkey_free(server_host_key); 216 sshkey_free(server_host_key);
222 free(server_host_key_blob); 217 free(server_host_key_blob);
223 free(signature); 218 free(signature);
diff --git a/kexecdhs.c b/kexecdhs.c
index dc24a3af6..af4f30309 100644
--- a/kexecdhs.c
+++ b/kexecdhs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexecdhs.c,v 1.16 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexecdhs.c,v 1.17 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2001 Markus Friedl. All rights reserved. 3 * Copyright (c) 2001 Markus Friedl. All rights reserved.
4 * Copyright (c) 2010 Damien Miller. All rights reserved. 4 * Copyright (c) 2010 Damien Miller. All rights reserved.
@@ -187,18 +187,14 @@ input_kex_ecdh_init(int type, u_int32_t seq, struct ssh *ssh)
187 r = kex_send_newkeys(ssh); 187 r = kex_send_newkeys(ssh);
188 out: 188 out:
189 explicit_bzero(hash, sizeof(hash)); 189 explicit_bzero(hash, sizeof(hash));
190 if (kex->ec_client_key) { 190 EC_KEY_free(kex->ec_client_key);
191 EC_KEY_free(kex->ec_client_key); 191 kex->ec_client_key = NULL;
192 kex->ec_client_key = NULL; 192 EC_KEY_free(server_key);
193 }
194 if (server_key)
195 EC_KEY_free(server_key);
196 if (kbuf) { 193 if (kbuf) {
197 explicit_bzero(kbuf, klen); 194 explicit_bzero(kbuf, klen);
198 free(kbuf); 195 free(kbuf);
199 } 196 }
200 if (shared_secret) 197 BN_clear_free(shared_secret);
201 BN_clear_free(shared_secret);
202 free(server_host_key_blob); 198 free(server_host_key_blob);
203 free(signature); 199 free(signature);
204 return r; 200 return r;
diff --git a/kexgexc.c b/kexgexc.c
index cd1128752..762a9a322 100644
--- a/kexgexc.c
+++ b/kexgexc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexc.c,v 1.25 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexgexc.c,v 1.27 2018/02/07 02:06:51 jsing 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.
@@ -134,10 +134,8 @@ input_kex_dh_gex_group(int type, u_int32_t seq, struct ssh *ssh)
134 ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &input_kex_dh_gex_reply); 134 ssh_dispatch_set(ssh, SSH2_MSG_KEX_DH_GEX_REPLY, &input_kex_dh_gex_reply);
135 r = 0; 135 r = 0;
136out: 136out:
137 if (p) 137 BN_clear_free(p);
138 BN_clear_free(p); 138 BN_clear_free(g);
139 if (g)
140 BN_clear_free(g);
141 return r; 139 return r;
142} 140}
143 141
@@ -230,7 +228,7 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
230 goto out; 228 goto out;
231 229
232 if ((r = sshkey_verify(server_host_key, signature, slen, hash, 230 if ((r = sshkey_verify(server_host_key, signature, slen, hash,
233 hashlen, ssh->compat)) != 0) 231 hashlen, kex->hostkey_alg, ssh->compat)) != 0)
234 goto out; 232 goto out;
235 233
236 /* save session id */ 234 /* save session id */
@@ -250,14 +248,12 @@ input_kex_dh_gex_reply(int type, u_int32_t seq, struct ssh *ssh)
250 explicit_bzero(hash, sizeof(hash)); 248 explicit_bzero(hash, sizeof(hash));
251 DH_free(kex->dh); 249 DH_free(kex->dh);
252 kex->dh = NULL; 250 kex->dh = NULL;
253 if (dh_server_pub) 251 BN_clear_free(dh_server_pub);
254 BN_clear_free(dh_server_pub);
255 if (kbuf) { 252 if (kbuf) {
256 explicit_bzero(kbuf, klen); 253 explicit_bzero(kbuf, klen);
257 free(kbuf); 254 free(kbuf);
258 } 255 }
259 if (shared_secret) 256 BN_clear_free(shared_secret);
260 BN_clear_free(shared_secret);
261 sshkey_free(server_host_key); 257 sshkey_free(server_host_key);
262 free(server_host_key_blob); 258 free(server_host_key_blob);
263 free(signature); 259 free(signature);
diff --git a/kexgexs.c b/kexgexs.c
index c5dd00578..d7b48ea88 100644
--- a/kexgexs.c
+++ b/kexgexs.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: kexgexs.c,v 1.31 2017/05/30 14:23:52 markus Exp $ */ 1/* $OpenBSD: kexgexs.c,v 1.32 2018/02/07 02:06:51 jsing 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.
@@ -237,14 +237,12 @@ input_kex_dh_gex_init(int type, u_int32_t seq, struct ssh *ssh)
237 out: 237 out:
238 DH_free(kex->dh); 238 DH_free(kex->dh);
239 kex->dh = NULL; 239 kex->dh = NULL;
240 if (dh_client_pub) 240 BN_clear_free(dh_client_pub);
241 BN_clear_free(dh_client_pub);
242 if (kbuf) { 241 if (kbuf) {
243 explicit_bzero(kbuf, klen); 242 explicit_bzero(kbuf, klen);
244 free(kbuf); 243 free(kbuf);
245 } 244 }
246 if (shared_secret) 245 BN_clear_free(shared_secret);
247 BN_clear_free(shared_secret);
248 free(server_host_key_blob); 246 free(server_host_key_blob);
249 free(signature); 247 free(signature);
250 return r; 248 return r;
diff --git a/key.c b/key.c
index 6e338c495..a05fdd3c0 100644
--- a/key.c
+++ b/key.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: key.c,v 1.131 2017/05/30 14:16:41 markus Exp $ */ 1/* $OpenBSD: key.c,v 1.132 2017/12/18 02:25:15 djm Exp $ */
2/* 2/*
3 * placed in the public domain 3 * placed in the public domain
4 */ 4 */
@@ -95,21 +95,6 @@ key_sign(const Key *key, u_char **sigp, u_int *lenp,
95 return 0; 95 return 0;
96} 96}
97 97
98int
99key_verify(const Key *key, const u_char *signature, u_int signaturelen,
100 const u_char *data, u_int datalen)
101{
102 int r;
103
104 if ((r = sshkey_verify(key, signature, signaturelen,
105 data, datalen, datafellows)) != 0) {
106 fatal_on_fatal_errors(r, __func__, 0);
107 error("%s: %s", __func__, ssh_err(r));
108 return r == SSH_ERR_SIGNATURE_INVALID ? 0 : -1;
109 }
110 return 1;
111}
112
113Key * 98Key *
114key_demote(const Key *k) 99key_demote(const Key *k)
115{ 100{
diff --git a/key.h b/key.h
index a14f37037..fd59cbf54 100644
--- a/key.h
+++ b/key.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: key.h,v 1.51 2017/05/30 14:16:41 markus Exp $ */ 1/* $OpenBSD: key.h,v 1.52 2017/12/18 02:25:15 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.
@@ -58,7 +58,6 @@ int key_to_blob(const Key *, u_char **, u_int *);
58 58
59int key_sign(const Key *, u_char **, u_int *, const u_char *, u_int, 59int key_sign(const Key *, u_char **, u_int *, const u_char *, u_int,
60 const char *); 60 const char *);
61int key_verify(const Key *, const u_char *, u_int, const u_char *, u_int);
62 61
63/* authfile.c */ 62/* authfile.c */
64Key *key_load_cert(const char *); 63Key *key_load_cert(const char *);
diff --git a/krl.c b/krl.c
index 086fc20e5..379153247 100644
--- a/krl.c
+++ b/krl.c
@@ -14,7 +14,7 @@
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */ 15 */
16 16
17/* $OpenBSD: krl.c,v 1.40 2017/05/31 09:15:42 deraadt Exp $ */ 17/* $OpenBSD: krl.c,v 1.41 2017/12/18 02:25:15 djm Exp $ */
18 18
19#include "includes.h" 19#include "includes.h"
20 20
@@ -1014,7 +1014,7 @@ ssh_krl_from_blob(struct sshbuf *buf, struct ssh_krl **krlp,
1014 } 1014 }
1015 /* Check signature over entire KRL up to this point */ 1015 /* Check signature over entire KRL up to this point */
1016 if ((r = sshkey_verify(key, blob, blen, 1016 if ((r = sshkey_verify(key, blob, blen,
1017 sshbuf_ptr(buf), sig_off, 0)) != 0) 1017 sshbuf_ptr(buf), sig_off, NULL, 0)) != 0)
1018 goto out; 1018 goto out;
1019 /* Check if this key has already signed this KRL */ 1019 /* Check if this key has already signed this KRL */
1020 for (i = 0; i < nca_used; i++) { 1020 for (i = 0; i < nca_used; i++) {
diff --git a/loginrec.c b/loginrec.c
index 788553e92..bdbc9bbf4 100644
--- a/loginrec.c
+++ b/loginrec.c
@@ -663,15 +663,9 @@ construct_utmp(struct logininfo *li,
663 switch (li->type) { 663 switch (li->type) {
664 case LTYPE_LOGIN: 664 case LTYPE_LOGIN:
665 ut->ut_type = USER_PROCESS; 665 ut->ut_type = USER_PROCESS;
666#ifdef _UNICOS
667 cray_set_tmpdir(ut);
668#endif
669 break; 666 break;
670 case LTYPE_LOGOUT: 667 case LTYPE_LOGOUT:
671 ut->ut_type = DEAD_PROCESS; 668 ut->ut_type = DEAD_PROCESS;
672#ifdef _UNICOS
673 cray_retain_utmp(ut, li->pid);
674#endif
675 break; 669 break;
676 } 670 }
677# endif 671# endif
diff --git a/md5crypt.c b/md5crypt.c
index 22ef98933..52cf2959a 100644
--- a/md5crypt.c
+++ b/md5crypt.c
@@ -50,7 +50,7 @@ is_md5_salt(const char *salt)
50char * 50char *
51md5_crypt(const char *pw, const char *salt) 51md5_crypt(const char *pw, const char *salt)
52{ 52{
53 static char passwd[120], salt_copy[9], *p; 53 static char passwd[120], salt_copy[9];
54 static const char *sp, *ep; 54 static const char *sp, *ep;
55 unsigned char final[16]; 55 unsigned char final[16];
56 int sl, pl, i, j; 56 int sl, pl, i, j;
@@ -139,8 +139,6 @@ md5_crypt(const char *pw, const char *salt)
139 MD5_Final(final, &ctx1); 139 MD5_Final(final, &ctx1);
140 } 140 }
141 141
142 p = passwd + strlen(passwd);
143
144 l = (final[ 0]<<16) | (final[ 6]<<8) | final[12]; 142 l = (final[ 0]<<16) | (final[ 6]<<8) | final[12];
145 strlcat(passwd, to64(l, 4), sizeof(passwd)); 143 strlcat(passwd, to64(l, 4), sizeof(passwd));
146 l = (final[ 1]<<16) | (final[ 7]<<8) | final[13]; 144 l = (final[ 1]<<16) | (final[ 7]<<8) | final[13];
diff --git a/mdoc2man.awk b/mdoc2man.awk
index 3e8725452..d393ae6f1 100644
--- a/mdoc2man.awk
+++ b/mdoc2man.awk
@@ -1,7 +1,5 @@
1#!/usr/bin/awk 1#!/usr/bin/awk
2# 2#
3# $Id: mdoc2man.awk,v 1.9 2009/10/24 00:52:42 dtucker Exp $
4#
5# Version history: 3# Version history:
6# v4+ Adapted for OpenSSH Portable (see cvs Id and history) 4# v4+ Adapted for OpenSSH Portable (see cvs Id and history)
7# v3, I put the program under a proper license 5# v3, I put the program under a proper license
diff --git a/misc.c b/misc.c
index 05950a471..874dcc8a2 100644
--- a/misc.c
+++ b/misc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.c,v 1.113 2017/08/18 05:48:04 djm Exp $ */ 1/* $OpenBSD: misc.c,v 1.127 2018/03/12 00:52:01 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) 2005,2006 Damien Miller. All rights reserved. 4 * Copyright (c) 2005,2006 Damien Miller. All rights reserved.
@@ -167,6 +167,73 @@ set_nodelay(int fd)
167 error("setsockopt TCP_NODELAY: %.100s", strerror(errno)); 167 error("setsockopt TCP_NODELAY: %.100s", strerror(errno));
168} 168}
169 169
170/* Allow local port reuse in TIME_WAIT */
171int
172set_reuseaddr(int fd)
173{
174 int on = 1;
175
176 if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) == -1) {
177 error("setsockopt SO_REUSEADDR fd %d: %s", fd, strerror(errno));
178 return -1;
179 }
180 return 0;
181}
182
183/* Get/set routing domain */
184char *
185get_rdomain(int fd)
186{
187#if defined(HAVE_SYS_GET_RDOMAIN)
188 return sys_get_rdomain(fd);
189#elif defined(__OpenBSD__)
190 int rtable;
191 char *ret;
192 socklen_t len = sizeof(rtable);
193
194 if (getsockopt(fd, SOL_SOCKET, SO_RTABLE, &rtable, &len) == -1) {
195 error("Failed to get routing domain for fd %d: %s",
196 fd, strerror(errno));
197 return NULL;
198 }
199 xasprintf(&ret, "%d", rtable);
200 return ret;
201#else /* defined(__OpenBSD__) */
202 return NULL;
203#endif
204}
205
206int
207set_rdomain(int fd, const char *name)
208{
209#if defined(HAVE_SYS_SET_RDOMAIN)
210 return sys_set_rdomain(fd, name);
211#elif defined(__OpenBSD__)
212 int rtable;
213 const char *errstr;
214
215 if (name == NULL)
216 return 0; /* default table */
217
218 rtable = (int)strtonum(name, 0, 255, &errstr);
219 if (errstr != NULL) {
220 /* Shouldn't happen */
221 error("Invalid routing domain \"%s\": %s", name, errstr);
222 return -1;
223 }
224 if (setsockopt(fd, SOL_SOCKET, SO_RTABLE,
225 &rtable, sizeof(rtable)) == -1) {
226 error("Failed to set routing domain %d on fd %d: %s",
227 rtable, fd, strerror(errno));
228 return -1;
229 }
230 return 0;
231#else /* defined(__OpenBSD__) */
232 error("Setting routing domain is not supported on this platform");
233 return -1;
234#endif
235}
236
170/* Characters considered whitespace in strsep calls. */ 237/* Characters considered whitespace in strsep calls. */
171#define WHITESPACE " \t\r\n" 238#define WHITESPACE " \t\r\n"
172#define QUOTE "\"" 239#define QUOTE "\""
@@ -395,11 +462,12 @@ put_host_port(const char *host, u_short port)
395 * Search for next delimiter between hostnames/addresses and ports. 462 * Search for next delimiter between hostnames/addresses and ports.
396 * Argument may be modified (for termination). 463 * Argument may be modified (for termination).
397 * Returns *cp if parsing succeeds. 464 * Returns *cp if parsing succeeds.
398 * *cp is set to the start of the next delimiter, if one was found. 465 * *cp is set to the start of the next field, if one was found.
466 * The delimiter char, if present, is stored in delim.
399 * If this is the last field, *cp is set to NULL. 467 * If this is the last field, *cp is set to NULL.
400 */ 468 */
401char * 469static char *
402hpdelim(char **cp) 470hpdelim2(char **cp, char *delim)
403{ 471{
404 char *s, *old; 472 char *s, *old;
405 473
@@ -422,6 +490,8 @@ hpdelim(char **cp)
422 490
423 case ':': 491 case ':':
424 case '/': 492 case '/':
493 if (delim != NULL)
494 *delim = *s;
425 *s = '\0'; /* terminate */ 495 *s = '\0'; /* terminate */
426 *cp = s + 1; 496 *cp = s + 1;
427 break; 497 break;
@@ -434,6 +504,12 @@ hpdelim(char **cp)
434} 504}
435 505
436char * 506char *
507hpdelim(char **cp)
508{
509 return hpdelim2(cp, NULL);
510}
511
512char *
437cleanhostname(char *host) 513cleanhostname(char *host)
438{ 514{
439 if (*host == '[' && host[strlen(host) - 1] == ']') { 515 if (*host == '[' && host[strlen(host) - 1] == ']') {
@@ -467,6 +543,75 @@ colon(char *cp)
467} 543}
468 544
469/* 545/*
546 * Parse a [user@]host:[path] string.
547 * Caller must free returned user, host and path.
548 * Any of the pointer return arguments may be NULL (useful for syntax checking).
549 * If user was not specified then *userp will be set to NULL.
550 * If host was not specified then *hostp will be set to NULL.
551 * If path was not specified then *pathp will be set to ".".
552 * Returns 0 on success, -1 on failure.
553 */
554int
555parse_user_host_path(const char *s, char **userp, char **hostp, char **pathp)
556{
557 char *user = NULL, *host = NULL, *path = NULL;
558 char *sdup, *tmp;
559 int ret = -1;
560
561 if (userp != NULL)
562 *userp = NULL;
563 if (hostp != NULL)
564 *hostp = NULL;
565 if (pathp != NULL)
566 *pathp = NULL;
567
568 sdup = xstrdup(s);
569
570 /* Check for remote syntax: [user@]host:[path] */
571 if ((tmp = colon(sdup)) == NULL)
572 goto out;
573
574 /* Extract optional path */
575 *tmp++ = '\0';
576 if (*tmp == '\0')
577 tmp = ".";
578 path = xstrdup(tmp);
579
580 /* Extract optional user and mandatory host */
581 tmp = strrchr(sdup, '@');
582 if (tmp != NULL) {
583 *tmp++ = '\0';
584 host = xstrdup(cleanhostname(tmp));
585 if (*sdup != '\0')
586 user = xstrdup(sdup);
587 } else {
588 host = xstrdup(cleanhostname(sdup));
589 user = NULL;
590 }
591
592 /* Success */
593 if (userp != NULL) {
594 *userp = user;
595 user = NULL;
596 }
597 if (hostp != NULL) {
598 *hostp = host;
599 host = NULL;
600 }
601 if (pathp != NULL) {
602 *pathp = path;
603 path = NULL;
604 }
605 ret = 0;
606out:
607 free(sdup);
608 free(user);
609 free(host);
610 free(path);
611 return ret;
612}
613
614/*
470 * Parse a [user@]host[:port] string. 615 * Parse a [user@]host[:port] string.
471 * Caller must free returned user and host. 616 * Caller must free returned user and host.
472 * Any of the pointer return arguments may be NULL (useful for syntax checking). 617 * Any of the pointer return arguments may be NULL (useful for syntax checking).
@@ -491,7 +636,7 @@ parse_user_host_port(const char *s, char **userp, char **hostp, int *portp)
491 if ((sdup = tmp = strdup(s)) == NULL) 636 if ((sdup = tmp = strdup(s)) == NULL)
492 return -1; 637 return -1;
493 /* Extract optional username */ 638 /* Extract optional username */
494 if ((cp = strchr(tmp, '@')) != NULL) { 639 if ((cp = strrchr(tmp, '@')) != NULL) {
495 *cp = '\0'; 640 *cp = '\0';
496 if (*tmp == '\0') 641 if (*tmp == '\0')
497 goto out; 642 goto out;
@@ -527,6 +672,168 @@ parse_user_host_port(const char *s, char **userp, char **hostp, int *portp)
527 return ret; 672 return ret;
528} 673}
529 674
675/*
676 * Converts a two-byte hex string to decimal.
677 * Returns the decimal value or -1 for invalid input.
678 */
679static int
680hexchar(const char *s)
681{
682 unsigned char result[2];
683 int i;
684
685 for (i = 0; i < 2; i++) {
686 if (s[i] >= '0' && s[i] <= '9')
687 result[i] = (unsigned char)(s[i] - '0');
688 else if (s[i] >= 'a' && s[i] <= 'f')
689 result[i] = (unsigned char)(s[i] - 'a') + 10;
690 else if (s[i] >= 'A' && s[i] <= 'F')
691 result[i] = (unsigned char)(s[i] - 'A') + 10;
692 else
693 return -1;
694 }
695 return (result[0] << 4) | result[1];
696}
697
698/*
699 * Decode an url-encoded string.
700 * Returns a newly allocated string on success or NULL on failure.
701 */
702static char *
703urldecode(const char *src)
704{
705 char *ret, *dst;
706 int ch;
707
708 ret = xmalloc(strlen(src) + 1);
709 for (dst = ret; *src != '\0'; src++) {
710 switch (*src) {
711 case '+':
712 *dst++ = ' ';
713 break;
714 case '%':
715 if (!isxdigit((unsigned char)src[1]) ||
716 !isxdigit((unsigned char)src[2]) ||
717 (ch = hexchar(src + 1)) == -1) {
718 free(ret);
719 return NULL;
720 }
721 *dst++ = ch;
722 src += 2;
723 break;
724 default:
725 *dst++ = *src;
726 break;
727 }
728 }
729 *dst = '\0';
730
731 return ret;
732}
733
734/*
735 * Parse an (scp|ssh|sftp)://[user@]host[:port][/path] URI.
736 * See https://tools.ietf.org/html/draft-ietf-secsh-scp-sftp-ssh-uri-04
737 * Either user or path may be url-encoded (but not host or port).
738 * Caller must free returned user, host and path.
739 * Any of the pointer return arguments may be NULL (useful for syntax checking)
740 * but the scheme must always be specified.
741 * If user was not specified then *userp will be set to NULL.
742 * If port was not specified then *portp will be -1.
743 * If path was not specified then *pathp will be set to NULL.
744 * Returns 0 on success, 1 if non-uri/wrong scheme, -1 on error/invalid uri.
745 */
746int
747parse_uri(const char *scheme, const char *uri, char **userp, char **hostp,
748 int *portp, char **pathp)
749{
750 char *uridup, *cp, *tmp, ch;
751 char *user = NULL, *host = NULL, *path = NULL;
752 int port = -1, ret = -1;
753 size_t len;
754
755 len = strlen(scheme);
756 if (strncmp(uri, scheme, len) != 0 || strncmp(uri + len, "://", 3) != 0)
757 return 1;
758 uri += len + 3;
759
760 if (userp != NULL)
761 *userp = NULL;
762 if (hostp != NULL)
763 *hostp = NULL;
764 if (portp != NULL)
765 *portp = -1;
766 if (pathp != NULL)
767 *pathp = NULL;
768
769 uridup = tmp = xstrdup(uri);
770
771 /* Extract optional ssh-info (username + connection params) */
772 if ((cp = strchr(tmp, '@')) != NULL) {
773 char *delim;
774
775 *cp = '\0';
776 /* Extract username and connection params */
777 if ((delim = strchr(tmp, ';')) != NULL) {
778 /* Just ignore connection params for now */
779 *delim = '\0';
780 }
781 if (*tmp == '\0') {
782 /* Empty username */
783 goto out;
784 }
785 if ((user = urldecode(tmp)) == NULL)
786 goto out;
787 tmp = cp + 1;
788 }
789
790 /* Extract mandatory hostname */
791 if ((cp = hpdelim2(&tmp, &ch)) == NULL || *cp == '\0')
792 goto out;
793 host = xstrdup(cleanhostname(cp));
794 if (!valid_domain(host, 0, NULL))
795 goto out;
796
797 if (tmp != NULL && *tmp != '\0') {
798 if (ch == ':') {
799 /* Convert and verify port. */
800 if ((cp = strchr(tmp, '/')) != NULL)
801 *cp = '\0';
802 if ((port = a2port(tmp)) <= 0)
803 goto out;
804 tmp = cp ? cp + 1 : NULL;
805 }
806 if (tmp != NULL && *tmp != '\0') {
807 /* Extract optional path */
808 if ((path = urldecode(tmp)) == NULL)
809 goto out;
810 }
811 }
812
813 /* Success */
814 if (userp != NULL) {
815 *userp = user;
816 user = NULL;
817 }
818 if (hostp != NULL) {
819 *hostp = host;
820 host = NULL;
821 }
822 if (portp != NULL)
823 *portp = port;
824 if (pathp != NULL) {
825 *pathp = path;
826 path = NULL;
827 }
828 ret = 0;
829 out:
830 free(uridup);
831 free(user);
832 free(host);
833 free(path);
834 return ret;
835}
836
530/* function to assist building execv() arguments */ 837/* function to assist building execv() arguments */
531void 838void
532addargs(arglist *args, char *fmt, ...) 839addargs(arglist *args, char *fmt, ...)
@@ -724,16 +1031,19 @@ read_keyfile_line(FILE *f, const char *filename, char *buf, size_t bufsz,
724} 1031}
725 1032
726int 1033int
727tun_open(int tun, int mode) 1034tun_open(int tun, int mode, char **ifname)
728{ 1035{
729#if defined(CUSTOM_SYS_TUN_OPEN) 1036#if defined(CUSTOM_SYS_TUN_OPEN)
730 return (sys_tun_open(tun, mode)); 1037 return (sys_tun_open(tun, mode, ifname));
731#elif defined(SSH_TUN_OPENBSD) 1038#elif defined(SSH_TUN_OPENBSD)
732 struct ifreq ifr; 1039 struct ifreq ifr;
733 char name[100]; 1040 char name[100];
734 int fd = -1, sock; 1041 int fd = -1, sock;
735 const char *tunbase = "tun"; 1042 const char *tunbase = "tun";
736 1043
1044 if (ifname != NULL)
1045 *ifname = NULL;
1046
737 if (mode == SSH_TUNMODE_ETHERNET) 1047 if (mode == SSH_TUNMODE_ETHERNET)
738 tunbase = "tap"; 1048 tunbase = "tap";
739 1049
@@ -780,6 +1090,9 @@ tun_open(int tun, int mode)
780 } 1090 }
781 } 1091 }
782 1092
1093 if (ifname != NULL)
1094 *ifname = xstrdup(ifr.ifr_name);
1095
783 close(sock); 1096 close(sock);
784 return fd; 1097 return fd;
785 1098
@@ -946,8 +1259,8 @@ ms_subtract_diff(struct timeval *start, int *ms)
946{ 1259{
947 struct timeval diff, finish; 1260 struct timeval diff, finish;
948 1261
949 gettimeofday(&finish, NULL); 1262 monotime_tv(&finish);
950 timersub(&finish, start, &diff); 1263 timersub(&finish, start, &diff);
951 *ms -= (diff.tv_sec * 1000) + (diff.tv_usec / 1000); 1264 *ms -= (diff.tv_sec * 1000) + (diff.tv_usec / 1000);
952} 1265}
953 1266
@@ -960,54 +1273,63 @@ ms_to_timeval(struct timeval *tv, int ms)
960 tv->tv_usec = (ms % 1000) * 1000; 1273 tv->tv_usec = (ms % 1000) * 1000;
961} 1274}
962 1275
963time_t 1276void
964monotime(void) 1277monotime_ts(struct timespec *ts)
965{ 1278{
966#if defined(HAVE_CLOCK_GETTIME) && \ 1279 struct timeval tv;
967 (defined(CLOCK_MONOTONIC) || defined(CLOCK_BOOTTIME)) 1280#if defined(HAVE_CLOCK_GETTIME) && (defined(CLOCK_BOOTTIME) || \
968 struct timespec ts; 1281 defined(CLOCK_MONOTONIC) || defined(CLOCK_REALTIME))
969 static int gettime_failed = 0; 1282 static int gettime_failed = 0;
970 1283
971 if (!gettime_failed) { 1284 if (!gettime_failed) {
972#if defined(CLOCK_BOOTTIME) 1285# ifdef CLOCK_BOOTTIME
973 if (clock_gettime(CLOCK_BOOTTIME, &ts) == 0) 1286 if (clock_gettime(CLOCK_BOOTTIME, ts) == 0)
974 return (ts.tv_sec); 1287 return;
975#endif 1288# endif /* CLOCK_BOOTTIME */
976#if defined(CLOCK_MONOTONIC) 1289# ifdef CLOCK_MONOTONIC
977 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0) 1290 if (clock_gettime(CLOCK_MONOTONIC, ts) == 0)
978 return (ts.tv_sec); 1291 return;
979#endif 1292# endif /* CLOCK_MONOTONIC */
1293# ifdef CLOCK_REALTIME
1294 /* Not monotonic, but we're almost out of options here. */
1295 if (clock_gettime(CLOCK_REALTIME, ts) == 0)
1296 return;
1297# endif /* CLOCK_REALTIME */
980 debug3("clock_gettime: %s", strerror(errno)); 1298 debug3("clock_gettime: %s", strerror(errno));
981 gettime_failed = 1; 1299 gettime_failed = 1;
982 } 1300 }
983#endif /* HAVE_CLOCK_GETTIME && (CLOCK_MONOTONIC || CLOCK_BOOTTIME */ 1301#endif /* HAVE_CLOCK_GETTIME && (BOOTTIME || MONOTONIC || REALTIME) */
1302 gettimeofday(&tv, NULL);
1303 ts->tv_sec = tv.tv_sec;
1304 ts->tv_nsec = (long)tv.tv_usec * 1000;
1305}
984 1306
985 return time(NULL); 1307void
1308monotime_tv(struct timeval *tv)
1309{
1310 struct timespec ts;
1311
1312 monotime_ts(&ts);
1313 tv->tv_sec = ts.tv_sec;
1314 tv->tv_usec = ts.tv_nsec / 1000;
1315}
1316
1317time_t
1318monotime(void)
1319{
1320 struct timespec ts;
1321
1322 monotime_ts(&ts);
1323 return ts.tv_sec;
986} 1324}
987 1325
988double 1326double
989monotime_double(void) 1327monotime_double(void)
990{ 1328{
991#if defined(HAVE_CLOCK_GETTIME) && \
992 (defined(CLOCK_MONOTONIC) || defined(CLOCK_BOOTTIME))
993 struct timespec ts; 1329 struct timespec ts;
994 static int gettime_failed = 0;
995
996 if (!gettime_failed) {
997#if defined(CLOCK_BOOTTIME)
998 if (clock_gettime(CLOCK_BOOTTIME, &ts) == 0)
999 return (ts.tv_sec + (double)ts.tv_nsec / 1000000000);
1000#endif
1001#if defined(CLOCK_MONOTONIC)
1002 if (clock_gettime(CLOCK_MONOTONIC, &ts) == 0)
1003 return (ts.tv_sec + (double)ts.tv_nsec / 1000000000);
1004#endif
1005 debug3("clock_gettime: %s", strerror(errno));
1006 gettime_failed = 1;
1007 }
1008#endif /* HAVE_CLOCK_GETTIME && (CLOCK_MONOTONIC || CLOCK_BOOTTIME */
1009 1330
1010 return (double)time(NULL); 1331 monotime_ts(&ts);
1332 return ts.tv_sec + ((double)ts.tv_nsec / 1000000000);
1011} 1333}
1012 1334
1013void 1335void
@@ -1029,7 +1351,7 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1029 struct timespec ts, rm; 1351 struct timespec ts, rm;
1030 1352
1031 if (!timerisset(&bw->bwstart)) { 1353 if (!timerisset(&bw->bwstart)) {
1032 gettimeofday(&bw->bwstart, NULL); 1354 monotime_tv(&bw->bwstart);
1033 return; 1355 return;
1034 } 1356 }
1035 1357
@@ -1037,7 +1359,7 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1037 if (bw->lamt < bw->thresh) 1359 if (bw->lamt < bw->thresh)
1038 return; 1360 return;
1039 1361
1040 gettimeofday(&bw->bwend, NULL); 1362 monotime_tv(&bw->bwend);
1041 timersub(&bw->bwend, &bw->bwstart, &bw->bwend); 1363 timersub(&bw->bwend, &bw->bwstart, &bw->bwend);
1042 if (!timerisset(&bw->bwend)) 1364 if (!timerisset(&bw->bwend))
1043 return; 1365 return;
@@ -1071,7 +1393,7 @@ bandwidth_limit(struct bwlimit *bw, size_t read_len)
1071 } 1393 }
1072 1394
1073 bw->lamt = 0; 1395 bw->lamt = 0;
1074 gettimeofday(&bw->bwstart, NULL); 1396 monotime_tv(&bw->bwstart);
1075} 1397}
1076 1398
1077/* Make a template filename for mk[sd]temp() */ 1399/* Make a template filename for mk[sd]temp() */
@@ -1172,9 +1494,10 @@ unix_listener(const char *path, int backlog, int unlink_first)
1172 1494
1173 memset(&sunaddr, 0, sizeof(sunaddr)); 1495 memset(&sunaddr, 0, sizeof(sunaddr));
1174 sunaddr.sun_family = AF_UNIX; 1496 sunaddr.sun_family = AF_UNIX;
1175 if (strlcpy(sunaddr.sun_path, path, sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) { 1497 if (strlcpy(sunaddr.sun_path, path,
1176 error("%s: \"%s\" too long for Unix domain socket", __func__, 1498 sizeof(sunaddr.sun_path)) >= sizeof(sunaddr.sun_path)) {
1177 path); 1499 error("%s: path \"%s\" too long for Unix domain socket",
1500 __func__, path);
1178 errno = ENAMETOOLONG; 1501 errno = ENAMETOOLONG;
1179 return -1; 1502 return -1;
1180 } 1503 }
@@ -1182,7 +1505,7 @@ unix_listener(const char *path, int backlog, int unlink_first)
1182 sock = socket(PF_UNIX, SOCK_STREAM, 0); 1505 sock = socket(PF_UNIX, SOCK_STREAM, 0);
1183 if (sock < 0) { 1506 if (sock < 0) {
1184 saved_errno = errno; 1507 saved_errno = errno;
1185 error("socket: %.100s", strerror(errno)); 1508 error("%s: socket: %.100s", __func__, strerror(errno));
1186 errno = saved_errno; 1509 errno = saved_errno;
1187 return -1; 1510 return -1;
1188 } 1511 }
@@ -1192,18 +1515,18 @@ unix_listener(const char *path, int backlog, int unlink_first)
1192 } 1515 }
1193 if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) { 1516 if (bind(sock, (struct sockaddr *)&sunaddr, sizeof(sunaddr)) < 0) {
1194 saved_errno = errno; 1517 saved_errno = errno;
1195 error("bind: %.100s", strerror(errno)); 1518 error("%s: cannot bind to path %s: %s",
1519 __func__, path, strerror(errno));
1196 close(sock); 1520 close(sock);
1197 error("%s: cannot bind to path: %s", __func__, path);
1198 errno = saved_errno; 1521 errno = saved_errno;
1199 return -1; 1522 return -1;
1200 } 1523 }
1201 if (listen(sock, backlog) < 0) { 1524 if (listen(sock, backlog) < 0) {
1202 saved_errno = errno; 1525 saved_errno = errno;
1203 error("listen: %.100s", strerror(errno)); 1526 error("%s: cannot listen on path %s: %s",
1527 __func__, path, strerror(errno));
1204 close(sock); 1528 close(sock);
1205 unlink(path); 1529 unlink(path);
1206 error("%s: cannot listen on path: %s", __func__, path);
1207 errno = saved_errno; 1530 errno = saved_errno;
1208 return -1; 1531 return -1;
1209 } 1532 }
@@ -1417,158 +1740,6 @@ argv_assemble(int argc, char **argv)
1417 return ret; 1740 return ret;
1418} 1741}
1419 1742
1420/*
1421 * Runs command in a subprocess wuth a minimal environment.
1422 * Returns pid on success, 0 on failure.
1423 * The child stdout and stderr maybe captured, left attached or sent to
1424 * /dev/null depending on the contents of flags.
1425 * "tag" is prepended to log messages.
1426 * NB. "command" is only used for logging; the actual command executed is
1427 * av[0].
1428 */
1429pid_t
1430subprocess(const char *tag, struct passwd *pw, const char *command,
1431 int ac, char **av, FILE **child, u_int flags)
1432{
1433 FILE *f = NULL;
1434 struct stat st;
1435 int fd, devnull, p[2], i;
1436 pid_t pid;
1437 char *cp, errmsg[512];
1438 u_int envsize;
1439 char **child_env;
1440
1441 if (child != NULL)
1442 *child = NULL;
1443
1444 debug3("%s: %s command \"%s\" running as %s (flags 0x%x)", __func__,
1445 tag, command, pw->pw_name, flags);
1446
1447 /* Check consistency */
1448 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
1449 (flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0) {
1450 error("%s: inconsistent flags", __func__);
1451 return 0;
1452 }
1453 if (((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0) != (child == NULL)) {
1454 error("%s: inconsistent flags/output", __func__);
1455 return 0;
1456 }
1457
1458 /*
1459 * If executing an explicit binary, then verify the it exists
1460 * and appears safe-ish to execute
1461 */
1462 if (*av[0] != '/') {
1463 error("%s path is not absolute", tag);
1464 return 0;
1465 }
1466 temporarily_use_uid(pw);
1467 if (stat(av[0], &st) < 0) {
1468 error("Could not stat %s \"%s\": %s", tag,
1469 av[0], strerror(errno));
1470 restore_uid();
1471 return 0;
1472 }
1473 if (safe_path(av[0], &st, NULL, 0, errmsg, sizeof(errmsg)) != 0) {
1474 error("Unsafe %s \"%s\": %s", tag, av[0], errmsg);
1475 restore_uid();
1476 return 0;
1477 }
1478 /* Prepare to keep the child's stdout if requested */
1479 if (pipe(p) != 0) {
1480 error("%s: pipe: %s", tag, strerror(errno));
1481 restore_uid();
1482 return 0;
1483 }
1484 restore_uid();
1485
1486 switch ((pid = fork())) {
1487 case -1: /* error */
1488 error("%s: fork: %s", tag, strerror(errno));
1489 close(p[0]);
1490 close(p[1]);
1491 return 0;
1492 case 0: /* child */
1493 /* Prepare a minimal environment for the child. */
1494 envsize = 5;
1495 child_env = xcalloc(sizeof(*child_env), envsize);
1496 child_set_env(&child_env, &envsize, "PATH", _PATH_STDPATH);
1497 child_set_env(&child_env, &envsize, "USER", pw->pw_name);
1498 child_set_env(&child_env, &envsize, "LOGNAME", pw->pw_name);
1499 child_set_env(&child_env, &envsize, "HOME", pw->pw_dir);
1500 if ((cp = getenv("LANG")) != NULL)
1501 child_set_env(&child_env, &envsize, "LANG", cp);
1502
1503 for (i = 0; i < NSIG; i++)
1504 signal(i, SIG_DFL);
1505
1506 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) {
1507 error("%s: open %s: %s", tag, _PATH_DEVNULL,
1508 strerror(errno));
1509 _exit(1);
1510 }
1511 if (dup2(devnull, STDIN_FILENO) == -1) {
1512 error("%s: dup2: %s", tag, strerror(errno));
1513 _exit(1);
1514 }
1515
1516 /* Set up stdout as requested; leave stderr in place for now. */
1517 fd = -1;
1518 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) != 0)
1519 fd = p[1];
1520 else if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0)
1521 fd = devnull;
1522 if (fd != -1 && dup2(fd, STDOUT_FILENO) == -1) {
1523 error("%s: dup2: %s", tag, strerror(errno));
1524 _exit(1);
1525 }
1526 closefrom(STDERR_FILENO + 1);
1527
1528 /* Don't use permanently_set_uid() here to avoid fatal() */
1529 if (setresgid(pw->pw_gid, pw->pw_gid, pw->pw_gid) != 0) {
1530 error("%s: setresgid %u: %s", tag, (u_int)pw->pw_gid,
1531 strerror(errno));
1532 _exit(1);
1533 }
1534 if (setresuid(pw->pw_uid, pw->pw_uid, pw->pw_uid) != 0) {
1535 error("%s: setresuid %u: %s", tag, (u_int)pw->pw_uid,
1536 strerror(errno));
1537 _exit(1);
1538 }
1539 /* stdin is pointed to /dev/null at this point */
1540 if ((flags & SSH_SUBPROCESS_STDOUT_DISCARD) != 0 &&
1541 dup2(STDIN_FILENO, STDERR_FILENO) == -1) {
1542 error("%s: dup2: %s", tag, strerror(errno));
1543 _exit(1);
1544 }
1545
1546 execve(av[0], av, child_env);
1547 error("%s exec \"%s\": %s", tag, command, strerror(errno));
1548 _exit(127);
1549 default: /* parent */
1550 break;
1551 }
1552
1553 close(p[1]);
1554 if ((flags & SSH_SUBPROCESS_STDOUT_CAPTURE) == 0)
1555 close(p[0]);
1556 else if ((f = fdopen(p[0], "r")) == NULL) {
1557 error("%s: fdopen: %s", tag, strerror(errno));
1558 close(p[0]);
1559 /* Don't leave zombie child */
1560 kill(pid, SIGTERM);
1561 while (waitpid(pid, NULL, 0) == -1 && errno == EINTR)
1562 ;
1563 return 0;
1564 }
1565 /* Success */
1566 debug3("%s: %s pid %ld", __func__, tag, (long)pid);
1567 if (child != NULL)
1568 *child = f;
1569 return pid;
1570}
1571
1572/* Returns 0 if pid exited cleanly, non-zero otherwise */ 1743/* Returns 0 if pid exited cleanly, non-zero otherwise */
1573int 1744int
1574exited_cleanly(pid_t pid, const char *tag, const char *cmd, int quiet) 1745exited_cleanly(pid_t pid, const char *tag, const char *cmd, int quiet)
@@ -1739,7 +1910,122 @@ child_set_env(char ***envp, u_int *envsizep, const char *name,
1739 } 1910 }
1740 1911
1741 /* Allocate space and format the variable in the appropriate slot. */ 1912 /* Allocate space and format the variable in the appropriate slot. */
1913 /* XXX xasprintf */
1742 env[i] = xmalloc(strlen(name) + 1 + strlen(value) + 1); 1914 env[i] = xmalloc(strlen(name) + 1 + strlen(value) + 1);
1743 snprintf(env[i], strlen(name) + 1 + strlen(value) + 1, "%s=%s", name, value); 1915 snprintf(env[i], strlen(name) + 1 + strlen(value) + 1, "%s=%s", name, value);
1744} 1916}
1745 1917
1918/*
1919 * Check and optionally lowercase a domain name, also removes trailing '.'
1920 * Returns 1 on success and 0 on failure, storing an error message in errstr.
1921 */
1922int
1923valid_domain(char *name, int makelower, const char **errstr)
1924{
1925 size_t i, l = strlen(name);
1926 u_char c, last = '\0';
1927 static char errbuf[256];
1928
1929 if (l == 0) {
1930 strlcpy(errbuf, "empty domain name", sizeof(errbuf));
1931 goto bad;
1932 }
1933 if (!isalpha((u_char)name[0]) && !isdigit((u_char)name[0])) {
1934 snprintf(errbuf, sizeof(errbuf), "domain name \"%.100s\" "
1935 "starts with invalid character", name);
1936 goto bad;
1937 }
1938 for (i = 0; i < l; i++) {
1939 c = tolower((u_char)name[i]);
1940 if (makelower)
1941 name[i] = (char)c;
1942 if (last == '.' && c == '.') {
1943 snprintf(errbuf, sizeof(errbuf), "domain name "
1944 "\"%.100s\" contains consecutive separators", name);
1945 goto bad;
1946 }
1947 if (c != '.' && c != '-' && !isalnum(c) &&
1948 c != '_') /* technically invalid, but common */ {
1949 snprintf(errbuf, sizeof(errbuf), "domain name "
1950 "\"%.100s\" contains invalid characters", name);
1951 goto bad;
1952 }
1953 last = c;
1954 }
1955 if (name[l - 1] == '.')
1956 name[l - 1] = '\0';
1957 if (errstr != NULL)
1958 *errstr = NULL;
1959 return 1;
1960bad:
1961 if (errstr != NULL)
1962 *errstr = errbuf;
1963 return 0;
1964}
1965
1966const char *
1967atoi_err(const char *nptr, int *val)
1968{
1969 const char *errstr = NULL;
1970 long long num;
1971
1972 if (nptr == NULL || *nptr == '\0')
1973 return "missing";
1974 num = strtonum(nptr, 0, INT_MAX, &errstr);
1975 if (errstr == NULL)
1976 *val = (int)num;
1977 return errstr;
1978}
1979
1980int
1981parse_absolute_time(const char *s, uint64_t *tp)
1982{
1983 struct tm tm;
1984 time_t tt;
1985 char buf[32], *fmt;
1986
1987 *tp = 0;
1988
1989 /*
1990 * POSIX strptime says "The application shall ensure that there
1991 * is white-space or other non-alphanumeric characters between
1992 * any two conversion specifications" so arrange things this way.
1993 */
1994 switch (strlen(s)) {
1995 case 8: /* YYYYMMDD */
1996 fmt = "%Y-%m-%d";
1997 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2s", s, s + 4, s + 6);
1998 break;
1999 case 12: /* YYYYMMDDHHMM */
2000 fmt = "%Y-%m-%dT%H:%M";
2001 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s",
2002 s, s + 4, s + 6, s + 8, s + 10);
2003 break;
2004 case 14: /* YYYYMMDDHHMMSS */
2005 fmt = "%Y-%m-%dT%H:%M:%S";
2006 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s:%.2s",
2007 s, s + 4, s + 6, s + 8, s + 10, s + 12);
2008 break;
2009 default:
2010 return SSH_ERR_INVALID_FORMAT;
2011 }
2012
2013 memset(&tm, 0, sizeof(tm));
2014 if (strptime(buf, fmt, &tm) == NULL)
2015 return SSH_ERR_INVALID_FORMAT;
2016 if ((tt = mktime(&tm)) < 0)
2017 return SSH_ERR_INVALID_FORMAT;
2018 /* success */
2019 *tp = (uint64_t)tt;
2020 return 0;
2021}
2022
2023void
2024format_absolute_time(uint64_t t, char *buf, size_t len)
2025{
2026 time_t tt = t > INT_MAX ? INT_MAX : t; /* XXX revisit in 2038 :P */
2027 struct tm tm;
2028
2029 localtime_r(&tt, &tm);
2030 strftime(buf, len, "%Y-%m-%dT%H:%M:%S", &tm);
2031}
diff --git a/misc.h b/misc.h
index 153d11375..cdafea735 100644
--- a/misc.h
+++ b/misc.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: misc.h,v 1.63 2017/08/18 05:48:04 djm Exp $ */ 1/* $OpenBSD: misc.h,v 1.71 2018/03/12 00:52:01 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -48,13 +48,18 @@ char *strdelim(char **);
48int set_nonblock(int); 48int set_nonblock(int);
49int unset_nonblock(int); 49int unset_nonblock(int);
50void set_nodelay(int); 50void set_nodelay(int);
51int set_reuseaddr(int);
52char *get_rdomain(int);
53int set_rdomain(int, const char *);
51int a2port(const char *); 54int a2port(const char *);
52int a2tun(const char *, int *); 55int a2tun(const char *, int *);
53char *put_host_port(const char *, u_short); 56char *put_host_port(const char *, u_short);
54char *hpdelim(char **); 57char *hpdelim(char **);
55char *cleanhostname(char *); 58char *cleanhostname(char *);
56char *colon(char *); 59char *colon(char *);
60int parse_user_host_path(const char *, char **, char **, char **);
57int parse_user_host_port(const char *, char **, char **, int *); 61int parse_user_host_port(const char *, char **, char **, int *);
62int parse_uri(const char *, const char *, char **, char **, int *, char **);
58long convtime(const char *); 63long convtime(const char *);
59char *tilde_expand_filename(const char *, uid_t); 64char *tilde_expand_filename(const char *, uid_t);
60char *percent_expand(const char *, ...) __attribute__((__sentinel__)); 65char *percent_expand(const char *, ...) __attribute__((__sentinel__));
@@ -62,10 +67,16 @@ char *tohex(const void *, size_t);
62void sanitise_stdfd(void); 67void sanitise_stdfd(void);
63void ms_subtract_diff(struct timeval *, int *); 68void ms_subtract_diff(struct timeval *, int *);
64void ms_to_timeval(struct timeval *, int); 69void ms_to_timeval(struct timeval *, int);
70void monotime_ts(struct timespec *);
71void monotime_tv(struct timeval *);
65time_t monotime(void); 72time_t monotime(void);
66double monotime_double(void); 73double monotime_double(void);
67void lowercase(char *s); 74void lowercase(char *s);
68int unix_listener(const char *, int, int); 75int unix_listener(const char *, int, int);
76int valid_domain(char *, int, const char **);
77const char *atoi_err(const char *, int *);
78int parse_absolute_time(const char *, uint64_t *);
79void format_absolute_time(uint64_t, char *, size_t);
69 80
70void sock_set_v6only(int); 81void sock_set_v6only(int);
71 82
@@ -84,7 +95,7 @@ void replacearg(arglist *, u_int, char *, ...)
84 __attribute__((format(printf, 3, 4))); 95 __attribute__((format(printf, 3, 4)));
85void freeargs(arglist *); 96void freeargs(arglist *);
86 97
87int tun_open(int, int); 98int tun_open(int, int, char **);
88 99
89/* Common definitions for ssh tunnel device forwarding */ 100/* Common definitions for ssh tunnel device forwarding */
90#define SSH_TUNMODE_NO 0x00 101#define SSH_TUNMODE_NO 0x00
@@ -140,12 +151,6 @@ int argv_split(const char *, int *, char ***);
140char *argv_assemble(int, char **argv); 151char *argv_assemble(int, char **argv);
141int exited_cleanly(pid_t, const char *, const char *, int); 152int exited_cleanly(pid_t, const char *, const char *, int);
142 153
143#define SSH_SUBPROCESS_STDOUT_DISCARD (1) /* Discard stdout */
144#define SSH_SUBPROCESS_STDOUT_CAPTURE (1<<1) /* Redirect stdout */
145#define SSH_SUBPROCESS_STDERR_DISCARD (1<<2) /* Discard stderr */
146pid_t subprocess(const char *, struct passwd *,
147 const char *, int, char **, FILE **, u_int flags);
148
149struct stat; 154struct stat;
150int safe_path(const char *, struct stat *, const char *, uid_t, 155int safe_path(const char *, struct stat *, const char *, uid_t,
151 char *, size_t); 156 char *, size_t);
diff --git a/mkinstalldirs b/mkinstalldirs
index 47d5f43fe..399f40925 100755
--- a/mkinstalldirs
+++ b/mkinstalldirs
@@ -4,8 +4,6 @@
4# Created: 1993-05-16 4# Created: 1993-05-16
5# Public domain 5# Public domain
6 6
7# $Id: mkinstalldirs,v 1.2 2003/11/21 12:48:55 djm Exp $
8
9errstatus=0 7errstatus=0
10 8
11for file 9for file
diff --git a/moduli b/moduli
index 00b5a6937..cf28bd36b 100644
--- a/moduli
+++ b/moduli
@@ -1,431 +1,407 @@
1# $OpenBSD: moduli,v 1.18 2016/08/11 01:42:11 dtucker Exp $ 1# $OpenBSD: moduli,v 1.20 2017/11/29 05:49:54 dtucker Exp $
2# Time Type Tests Tries Size Generator Modulus 2# Time Type Tests Tries Size Generator Modulus
320160301052556 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D19F4647 320170623034823 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAE4E76CB
420160301052601 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1A5C13B 420170623034906 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAEB63283
520160301052612 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1B7A3EF 520170623034928 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAEE49C27
620160301052620 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1C4C33B 620170623034936 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAEF2BE1B
720160301052628 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1CFFACB 720170623034957 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAF22F2D7
820160301052645 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D1F31D8B 820170623035029 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAF68D3A7
920160301052703 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D218C293 920170623035052 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EAF9A9793
1020160301052723 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D24116E3 1020170623035228 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB085C01B
1120160301052732 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D25321F3 1120170623035326 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1140217
1220160301052741 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D260D8E3 1220170623035332 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB11ACBD7
1320160301052748 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D26CD3D3 1320170623035408 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB16AD187
1420160301052756 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2791F7B 1420170623035414 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1737B53
1520160301052823 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2B71133 1520170623035442 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1B1C483
1620160301052827 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2BABBA3 1620170623035454 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1C8B93B
1720160301052832 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D2BFC957 1720170623035510 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB1EAD06B
1820160301052931 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D3514117 1820170623035525 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB208DA8B
1920160301053017 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D3BF91F7 1920170623035553 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB2498F17
2020160301053037 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D3E9113F 2020170623035604 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB25D82D3
2120160301053101 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D41BFA83 2120170623035609 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB262420F
2220160301053129 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D45A369F 2220170623035735 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB3376DEF
2320160301053217 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D4CB8683 2320170623035801 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB370E193
2420160301053222 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D4D01463 2420170623035916 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB426D9CF
2520160301053251 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D50F62C3 2520170623035935 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB44E559B
2620160301053309 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D5351887 2620170623035955 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4777177
2720160301053333 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D568358B 2720170623040012 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4995E77
2820160301053350 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D58AA31F 2820170623040023 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4ACAF8B
2920160301053359 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D5991AF3 2920170623040032 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB4BB1ADB
3020160301053438 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D5F65E07 3020170623040120 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB52D4F1F
3120160301053523 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D65F37D3 3120170623040131 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB542306B
3220160301053556 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D6AB7E73 3220170623040202 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5899CB7
3320160301053608 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D6C131CB 3320170623040216 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5A317FB
3420160301053631 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D6F18A93 3420170623040224 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5AEBE43
3520160301053647 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7132B7F 3520170623040246 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5E190BF
3620160301053724 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D76995EB 3620170623040254 2 6 100 2047 2 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB5EBE533
3720160301053743 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D793D27B 3720170623040334 2 6 100 2047 5 F740D04A6CFD4547DDBE874AEED3DF220F4ABD1EEA9BB022EDB3019835812EB327F3F0BBD0D137702856B499924C1A0D78D467EFBCB2215008FC3918FF88710ED5CA4F3554494F3AC374C8695B1DA006470F1C5C751825389DF3FBAC83DFEFAE2B07FA30E3B6B13D2BF9FAA27DCBD03FEB6847F08C3C6C89B04366A78D8C43E1E26B63ED5BB9A3E1AAE00BD4A4BF058B41B70E9F599C7DAE2E42701C68FDDEFE7213432E77342F785D64B723FF33A2D9C6F85F149776F898EF8BEFE3D03D2163974A3C0F13520F4BE92A246DED5A6FC997B2657D1A72A1210E881D0A0F14E93522268E3D8FFB84ABB3B9B064985E891C7C0DC09E166008A5E13A777EB649ECAF
3820160301053757 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7AE856B 3820170623040448 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C4B50D13
3920160301053820 2 6 100 2047 5 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7E1810F 3920170623040459 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C4C9F477
4020160301053828 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7EC09EB 4020170623040510 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C4DDC50B
4120160301053831 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D7ECC2FB 4120170623040603 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C55E2BE7
4220160301053958 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D8B829CB 4220170623040614 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C5715757
4320160301054042 2 6 100 2047 2 DA57B18976E9C55CEAC3BFFF70419A1550258EA7359400BD4FAC8F4203B73E0BC54D62C0A2D9AA9B543FACA0290514EA426DE6FEF897CB858243511DCE5170420C799D888DCFDC4502FF49B66F34E75C00E98A55408A791FF5CFEA7C288F8E6664226A6A90BE237D2E40C207B5AD0CAEDFDA4946E63AEA351A09EF462515FED4098694241CD07E2CB7727B39B8B1B9467D72DFB908D8169F5DB3CD5A6BEBE1344C585A882508B760402E86EB9B5548A7B98635ECFCDC02FF62B29C53847142FC598ADC66F622F6E9F73BDF02B3D795C0DF23D00E5A3A7748F3E1D5B06F46D4568CE3F4CC57E67D4C36DF5C12800620698C727CC5F5BCACF3B7E17E37D91CFCF3 4320170623040626 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C58A0617
4420160301054134 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251903103B 4420170623040632 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C5910FF7
4520160301054139 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519072B8B 4520170623040709 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C5E85ABB
4620160301054157 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF25192F631F 4620170623040729 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C61714B7
4720160301054207 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF25193F9E7F 4720170623040745 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C6362DF7
4820160301054213 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519475A1F 4820170623040759 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C64F9EEB
4920160301054301 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519BA6807 4920170623040829 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C6949627
5020160301054320 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF2519E2FA7F 5020170623040836 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C69F6763
5120160301054340 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251A0CD913 5120170623040925 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C712B23B
5220160301054413 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251A5B8A43 5220170623040941 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7336C6F
5320160301054511 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251AE66597 5320170623041004 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C76418FB
5420160301054527 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B03A57F 5420170623041040 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7B6A153
5520160301054544 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B276FBB 5520170623041049 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7C6F12F
5620160301054548 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B2915B3 5620170623041059 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C7D798EF
5720160301054621 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251B79A4BB 5720170623041129 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C81D54F3
5820160301054714 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251BF77377 5820170623041311 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C919987F
5920160301054737 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251C28D853 5920170623041314 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C91A831B
6020160301054819 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251C8C959B 6020170623041341 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C95422FF
6120160301054844 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251CC0A39B 6120170623041350 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C9646B7F
6220160301055002 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251D7C0A9F 6220170623041354 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3C9662E87
6320160301055021 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA0A72F 6320170623041503 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA105123
6420160301055024 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA1003F 6420170623041522 2 6 100 2047 5 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA3BE707
6520160301055029 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA4B607 6520170623041541 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA620DAB
6620160301055034 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DA82003 6620170623041546 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CA66FFC3
6720160301055101 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251DE323BB 6720170623041620 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CAB69493
6820160301055123 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E13DB33 6820170623041704 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CB1C2B4B
6920160301055136 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E2A2203 6920170623041709 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CB1FD10B
7020160301055141 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E2F180B 7020170623041747 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CB7550DB
7120160301055208 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251E6B2E8B 7120170623041822 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CBC63D2B
7220160301055248 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251ECCA61B 7220170623041830 2 6 100 2047 2 EDB5FA2E865AD05F06510EFBFC71F9DFBAA5C1EEF3F6FDC2650C1D8C507DECA3422AE18746EA7D7BEA600C0AE9A0812A3DC02C099F8AF046EF014EC2A58734A716F156FCE4F19E3A9EB38F225A1CA0B868F70B3BE0CAE3AC2A20F330EF3CC33CB27D1FCB2D27505409144F957AC592567AC0B2A8099F6D58B546C7EE734FD806CDFDDE5F41C38966EB61005CA78D970BFA2C77F099BB19543B559AA118B6F303644D541E83B293138BEF5B8F0B0382ACA8DBDD693845FF6B7EE6ABF1B8B4733998F31DBF74F9CBA5145A0C5345EDC5B056CDCAA3AF605701C56651B8A968AD6D7E421DD3B5F3765865D5FDC55252F25C9661CD71A43A20B13A16CFF3CBD499AB
7320160301055312 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251EFFD5C7 7320170623043901 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5508B03E93
7420160301055319 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251F08AD6B 7420170623044452 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5509C5C937
7520160301055413 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251F881A4B 7520170623044600 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5509F436FB
7620160301055420 2 6 100 2047 5 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251F8FC967 7620170623044825 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550A640733
7720160301055438 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251FB8102B 7720170623045050 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550AD6755B
7820160301055505 2 6 100 2047 2 F030C513D5C6694FB09539ECF9D8290608A96280EDDEB74FD66DD43CACE3A5BFD6BC4F02EF38E44F68296DA50091214D9E6C518D715D76E19CCCA0578886B93ADA36E8AFDC23B311DA04EB8AC2FF31F3B87BD27C283519DF9CFCAA9D4EF822ECD2AD5593D3819399CEF3FAF0B786071496A9BD94164F739A2D1E0DEBB798BAEF0540B4388D3762523B68E100D6EE231DD95BEB4F4472E9E2236A24E0891DF5A19222A6C69D531C9E73DEF6ADAC84D61BC4EEA36E2A9FD64902461BFAF9BF81D699E141EE77A03996DC4586D3487A0E6189696C1D67F91E91595EB584AD1DF9EF5FC64160EAC3F2D88B4FB0E20A7925FE133D71EF9E1DD018101AAF251FF16983 7820170623045124 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550AE93B43
7920160301061411 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C5D83833 7920170623045420 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550B6F1ED3
8020160301061835 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C6AAA907 8020170623045805 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550C20298F
8120160301062447 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C7D2DF17 8120170623045930 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550C5914BF
8220160301062535 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C7F0856B 8220170623050341 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550D1A1773
8320160301062652 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C8266573 8320170623050720 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550DC219FB
8420160301062708 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26C82B4297 8420170623051801 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB550FBDD1AF
8520160301063801 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CA342897 8520170623052216 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5510842093
8620160301063920 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CA6B6B53 8620170623052416 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5510DBFCD7
8720160301064001 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CA83D25B 8720170623052526 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55110BB843
8820160301064133 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CAC6E0AF 8820170623052831 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551196B36B
8920160301064312 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CB0B8B2F 8920170623053119 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551217A237
9020160301064624 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CB9E9EBB 9020170623053458 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5512C20307
9120160301064954 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CC41F773 9120170623053734 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55133990CB
9220160301065030 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CC56680F 9220170623054412 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5514721AB3
9320160301065134 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CC82B2B3 9320170623054517 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55149F4D0B
9420160301065432 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CD0A0833 9420170623055017 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551583DD9B
9520160301065614 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CD54CA17 9520170623055422 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55163A7903
9620160301070010 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE0A7B73 9620170623055449 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516475E5F
9720160301070046 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE21045B 9720170623055516 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516556F37
9820160301070141 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE4560CB 9820170623055539 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55165F8F67
9920160301070334 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CE9951EF 9920170623055716 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516A5CA13
10020160301070607 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CF0C830B 10020170623055812 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516C8A4A3
10120160301070911 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CF96B75B 10120170623055846 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5516DBF96B
10220160301070931 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26CF9EB207 10220170623060438 2 6 100 3071 2 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5517E20F03
10320160301071405 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D07614DB 10320170623060534 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB551803F1D7
10420160301071648 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D0F1177B 10420170623060551 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55180824C7
10520160301071915 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D15E484F 10520170623060759 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB5518622977
10620160301071932 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D16371F3 10620170623061152 2 6 100 3071 5 E795DA675C82260F11D7C50B677AE8A8D94BF342724BB06FA0D426CE2E83E8971A1BE2AC59516488B25D561568B14DBBFFB5F33686D2952409B9C20FC19A13CB91C9176420F59F464DC198E254B87C765DC12B885CF1A463858C3CB0A918AF66C6A2CA06A48B4D5BDEB5A56B24C36BA330488DFCBDD499957E755CCE704F183CB4549441A7D761C22B7F7CB66BE50F0A6591F17778F51E73544B765E83A3C00BD3309F8CE1B135A3DD481DBE8C2CEE54E8DDF1351015E70D9012662E69F654A5A9F68C416167685A1695C8139BA1825287C98680945506D5AB750BEB68C6D2B430E7E4043D0A00DECDA77F81A2432929F530C5BC0CBBC011095D897BD81FB98792345F5372BA53E53F31FB09730C58E8FDA9F7C1EBA0AEA4FE50B2B5CE146043CB18BFB3A12F06ED1D3287242D3D59E85E0A5E243626525D3EAD946126B9F32590011EEA0EDD5E2025037D51940B3E1A45B614A23F48278977535E3773F0AA2A24413F4A397AC0881582E8832C7B140C0BA4818A55C8620FD2BEBB55190DD957
10720160301072032 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D18BD843 10720170623061950 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EBBB813F
10820160301072158 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D1C7632B 10820170623062054 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EBE73A63
10920160301072445 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D2450187 10920170623062250 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EC3B7BBB
11020160301072709 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D2B15CFB 11020170623062850 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21ED5538D7
11120160301073130 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D37B3327 11120170623063051 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDADBD87
11220160301073142 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D37C7FA3 11220170623063106 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDB14127
11320160301073822 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D4B57B13 11320170623063228 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDEBD58B
11420160301074016 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D50A615F 11420170623063242 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDEE14B3
11520160301074134 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D5419827 11520170623063301 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EDF542E7
11620160301074208 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D554AA2F 11620170623063538 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EE64F8A3
11720160301074359 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D5A29FEB 11720170623063759 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21EEC9D597
11820160301074457 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D5C6DA83 11820170623064815 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F0A8EB1F
11920160301074620 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D601594B 11920170623065609 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F21F5CB7
12020160301074846 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D66D7E6B 12020170623070150 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F32604CB
12120160301074917 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D67D64E7 12120170623070933 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F48C5ED3
12220160301075053 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D6C27B8B 12220170623071215 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5044ECB
12320160301075132 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D6DB9C33 12320170623071504 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5815613
12420160301075225 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D6FE9337 12420170623071625 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5B8F8AB
12520160301075252 2 6 100 3071 5 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D70AF577 12520170623071723 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F5DE3F7B
12620160301075345 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D72CB613 12620170623071945 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F645009B
12720160301075358 2 6 100 3071 2 E2871F8AF82B8E1038DDACF268D3690580ED64FC99F13D64B8322F1F6F19B0860BD4CB74BD2FF72ADF1090B0506E77743EA2C3102093C10A5045A17F92E403AE24B4E9276F9999A4AAD7DF5F2C03EB72B6BB303FE894149BFD670A13ADEDEFBD726A12A7F32919BC4FFFC8FA3E2E73645B432EB894D6906D1E6E8CD5C8BB882953EAA0306508205B6BC0B99177C81E9E9192D8185185CE82CF310AD42A24DB83039A4F10D1C55E7EA7D4C020BD12947A25732829D1AC6100ED9DA3F4D834D8EB28875F37B399C5AE21D6A122950A41680857CEB6A25158A108E8E0338047A2DD979AB97E9F84ABA18FB1DD43FD630F494CEACF0F7FFEF38BC14968B0FDF4942927D0169B46E84D52356EB1B7D04EFCDF2239AEA21A63B6F64E83AC18F81EB6EAEF03328B830860C184B4434B39FA6AE31C751FB5BA1AEA1BD8D41457D9AE58C6EFD230493454BA3C5EB791E74CAB907D0AF1173FFB99D78953660B23127550350A9A09B0116099087A04B56078C274874507ED92ECD2D98A7F064C26D72F088B 12720170623072445 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F721A837
12820160301080151 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F1FA94507 12820170623072516 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F731AF17
12920160301080332 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F1FF62A2F 12920170623073343 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F8B6F58F
13020160301080512 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F203E0E3F 13020170623073442 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F8DA7A47
13120160301080759 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F20BE897F 13120170623073826 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21F983F783
13220160301081008 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F211E8DAB 13220170623074239 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FA40B7CF
13320160301081510 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F220FBEBB 13320170623074307 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FA4F193B
13420160301081725 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F22727C13 13420170623074345 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FA61D323
13520160301082213 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2352279F 13520170623074648 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FAEB991B
13620160301083400 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F25905AEF 13620170623074919 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FB5876F7
13720160301083955 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F26AB557B 13720170623075011 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FB79557F
13820160301084035 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F26C1D647 13820170623075040 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FB88E5F7
13920160301084145 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F26F0E75B 13920170623075211 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FBC86DF3
14020160301084827 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F282FE7DB 14020170623075233 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FBD19D1B
14120160301084906 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2847CBF7 14120170623075313 2 6 100 3071 5 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FBE8A97F
14220160301085226 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F28E1E963 14220170623080026 2 6 100 3071 2 E787C1EA14A0022F3F98A02847D293441332B2EB8BFF8C4D74ECFF730CCA9D1AFC6433A6DD4BA7089EC18D8D314550FCDC6DA23FEFDE48622BB6FFD89AB71CC0BA6C8C0930593E85A442A9C589ECF35E17D9CC7E2AE713B3704D69B61EF6E79A41AE02ADBF7966DF94B1C6861795B7EDFA8D7418EBAEB47F26F158AEF3DB418FD1632DBB93B431204964B78C7AE9ED796E39F1B6DE1FEE4CE77815462F36342E80B44B052BADC06F78CFEA7D3D0B294C5C8E8E623F95F5D3C1A17D911A0E78FE7754AA4A440FE75498D9AA47AACF2FC2F716630AEF10950F1FACD4CF847A7E4B0C20F507A7322996DBC4D2250A99CB213CB95AAF7A8B6A0B5317BE8FF728D3A0A0AAEA1B86729DDD59566916640F9AF7A455145CE29CB58884CC2E9DD705B1E87D10E139945FBE70D20D718FED9AF202A22673D76128A5FCB2860419675ADB97512628C7C65C7078B0C730A258C8979912C18EC065367791A404C71318B78FE29CC115ECD74C4EFCDE86C35BD0CFC3ADC41B4F24243A262B251F6E21FD35417B
14320160301085254 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F28EF835B 14320170623082844 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069919E3F0A3
14420160301085737 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F29D012DB 14420170623084111 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906991AE37AEB
14520160301085933 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2A259503 14520170623091322 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906991D857A5F
14620160301090045 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2A569E5F 14620170623095654 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699210172E7
14720160301090201 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2A89EEB7 14720170623095828 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069921188C6B
14820160301090441 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2B037B2F 14820170623095901 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699211B667F
14920160301090534 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2B2559FB 14920170623100423 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069921818383
15020160301090628 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2B484193 15020170623101338 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699223C1F3B
15120160301092125 2 6 100 3071 5 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2E1E1337 15120170623101757 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699228B3683
15220160301092513 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2ECC261B 15220170623104910 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699250221BB
15320160301093051 2 6 100 3071 2 F5B3EB8BEBA51E3899E7F8C7E202FBB132EF5731B3C2AC07945AEDA6A77A194E69538E08ABB8BBC3FC5AC2D3F66E582AA280D1832065E63F462AE71CD69CB3523656358545BF625F0F0BA9A8902D2A09484BE915E4AB809B8C767F84AADC75744E07F691893DA5DCCCD3FE8A7140858A9CF09A52E3A8F1050913A592B5750BC54682523B6920F626D87A717D6680B4EE430317DDF7B36458D479ADF6855FE46D865D02F8161D8BD8F4D0F330EE27B28AA40D48B6EA8E183223FCBC4E9C4F1F615DE750A5F8BE130EE46DC23970AD5A3CB93F5822A53084553A3B27A72ADD55958935D98B06D6398B00A718EA6BCE075DD6708F714002AF5A75C67D087DB8308B6FCEC775DBE8415F57CCD39C13496F0782D4834C03241D1B2EFE5CD07D702BD489DE25DAF08CA1DE5FDA5962A8CC6E0283B992640B8706B076531844CF66D26BEC2DD5A0BCDABE6A048BA55F8C25621E8CAA55F2D9E011896DEA823CF9FFBC76143FF7F4653C3BBDC34138A482A150A221E2CA2BE774B7BD22B2481F2FD6418B 15320170623110231 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699260AC373
15420160301101954 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29E60ED3CB 15420170623110814 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992672C113
15520160301104238 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29E7F21B53 15520170623113826 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069928D90D4F
15620160301105433 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29E8EA1923 15620170623120249 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992AC1BA3F
15720160301110823 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EA099523 15720170623121815 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992BFC1B7B
15820160301111806 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EAD0379B 15820170623122456 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992C7EB0CF
15920160301112515 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EB5F9FF7 15920170623123432 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992D3D886B
16020160301112655 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EB7A3C73 16020170623125910 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992F34AA0B
16120160301113152 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EBD8A1AF 16120170623130350 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906992F8B1CFF
16220160301114603 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29ED0421CF 16220170623131900 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069930BE28FB
16320160301115854 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EE10BE07 16320170623132006 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069930CCBBC3
16420160301122138 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29EFED1757 16420170623134400 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069932B40887
16520160301124138 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F18BB82B 16520170623134659 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069932E77127
16620160301124341 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F1AE9F93 16620170623140059 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069934031953
16720160301130540 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F378431B 16720170623140936 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069934AC3B0F
16820160301132038 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F4B041CB 16820170623142309 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069935BCCF33
16920160301132156 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F4C33A3B 16920170623142743 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB47998481906993611A26B
17020160301133248 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F59F1817 17020170623150027 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069938A6965B
17120160301135039 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F70D3707 17120170623150107 2 6 100 4095 2 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB479984819069938AB78CB
17220160301135200 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F720CFD3 17220170623150738 2 6 100 4095 5 DCFD3F9E0CF8187E955D8AEB347A5E4250C2B78E67E73E1DCDB99D67EC98180AE5FEF9119D38E50CBDBF46C8B2F62240FF5E1B28FB01276B82DB7422A777AA30AC5A9423D9AC3D33C9FECCC85823BD1138919E8F831364B093CF13B11CDD11394AA8D2256D58264266F780EABBA494E99EF63EC1F69997D180ABBA50B091AFD7FF478DAFF435CE2529E5F8FC81316AB0EA636014E125715FC77D653B142734C93FCD825C28CB928D579E9ED2C6C11E89C64B9C4B91CA962FB11C824F302BDEF7F67D1F7AC95F52B49FD4A044101BA3BDDD59C7663AB270D24DC846B90925F615EBFA5182F261938182E301C83FDC027381BD0FA753C84E57CC51531E7D0C468988B67D0B312E73C65E21D93C69C7862553F60BC9B26C6B5FB68BEDA3D7B0770C1116FF2B88484C7FB29A9D46D01719E89CB76A25C1B8349E3F8DA38CC00B3C1502BA6775BE363D27FA71A72DE0094E6805DEABB343B4A6DC98CD5F5191017B4E1CB0E5EE2FA979642305B8FDE9EE6A26E469C03C8B806F9492C0C544D7A0FE7773B3940812AE6B76C447BC28AA8127D9A7FEB7F98B9720C889CE2FF4806225B012B06F2FC0737D2A73A3046BD7ACBF0A8CF02BB3FAB81A60A29C0AA5B3B731541F62B542F4EF8224C6BAF6A087D0A9FE43492E5CE13F855E80457A516155CCA04A6144E402A1A3D71D657556B9124837730953505EB4799848190699392AA267
17320160301135955 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F7BFD4BF 17320170623152234 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DA657F33
17420160301141625 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29F9118567 17420170623152823 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DAD58DFF
17520160301143329 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FA446E3B 17520170623153243 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DB1F719B
17620160301143411 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FA4A5D73 17620170623153719 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DB76316F
17720160301143511 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FA57571B 17720170623154606 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DC289BA3
17820160301145341 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FBCEC3DB 17820170623155435 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DCCFF757
17920160301150532 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FCBAFB3B 17920170623161905 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988DEC7BD43
18020160301150756 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FCE5B5B3 18020170623163928 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E064A38B
18120160301151026 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FD119B83 18120170623164410 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E0BD160B
18220160301152435 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FE2CAD43 18220170623172908 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E467E87B
18320160301152638 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FE504DD3 18320170623174045 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E54CE16F
18420160301153829 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF425A73 18420170623175902 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E6CA185F
18520160301154015 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF5FBCDB 18520170623180229 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E706D14B
18620160301154135 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF725ADF 18620170623180811 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E76F7CD3
18720160301154325 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F29FF9005B3 18720170623180923 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E77E8123
18820160301155218 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A00430653 18820170623182724 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988E8D82A2B
18920160301160626 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A01612A43 18920170623185420 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988EAF9DAE7
19020160301160831 2 6 100 4095 5 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A01842FE7 19020170623195226 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988EFA2202B
19120160301161542 2 6 100 4095 2 EF7840BC7248E3E12D223BD86584358750562F5FCB298632E269C7F4347DC441CEBCBAF5B8AD25C3A3EE85A97FC342EF2B320425ACE6A816200E4A46596E6D911E8E5940E4ED1F64275D1A2A1E2DC8A34E26026A8DD9D20AF2E36B2BEB467168E516F1DF9145DBA60CE4BE46B34E918D36F581B2860BEBD153A09BF5B51348137CEB0BFA43FDEF5398C538CB9854BED966017DC918E4EA26E0E1A283AEA90F41B2D27CBC34E6AA64FE7E370D532BE4A0DB2E77958CA6E570DEDA817FB91351B65E227BAF96383323820AC5CF785CD686E99398773DF19C1E33D7199A5104337AD3C8CF78FE1AF5D8A4A2B8C092E1FD2688F2829E006C050257DC4C16576AB12AC01AE40F35785586902058735024E0CF90B1DD3B547647AC6F98A70BE3CA9EF80E9A1E408D29FDBE7935625B9AB863891D6D30A54903DD23933303055B8E864751CEB7A153A841D2E1CD3C5943C7F6F1BB2836ED387BE4FB3075363317A1E813965497F5CC621A72B1CF5B50813B418F391FB7C4530B6C19416B4A942063012798536BBF853166697747F39827832A3D135ABFB03BF15990787F64D25E629ED1A6009BADF5447730445ACF2684715A84ECBC4B3A1E2C93E3EFCF4D9373E1355740776F66353576D7359C69EAE48FCFB06CA7536F4B132BFCE6DB2FDBD687B24E7A0AD1EBCBF887A7258C24D8AC9BB86BF847D9AC980919AD9BAF3F2A020ED50B 19120170623195633 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988EFEED5BF
19220160301165149 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE54C87A80B 19220170623201051 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F10F59CB
19320160301165241 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE54C91EA2B 19320170623202959 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F2921927
19420160301165750 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE54CFA74E3 19420170623203734 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F32287EB
19520160301173839 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5504AEAFB 19520170623204218 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F37F8B03
19620160301174247 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5509AF4D7 19620170623204329 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F38F411F
19720160301174504 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE550BFB1D7 19720170623204840 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F3EE7B13
19820160301180608 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5526F5F0F 19820170623205709 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F493374B
19920160301181854 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55377C36B 19920170623205814 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F4A24813
20020160301182221 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE553B4B8F3 20020170623210627 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F53F787B
20120160301183911 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55510470B 20120170623210958 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F57EC8EB
20220160301184110 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE555338897 20220170623211248 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F5B1A9D7
20320160301184426 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55571A23F 20320170623213826 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F7B2A7AF
20420160301190148 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE556DEB983 20420170623213924 2 6 100 4095 2 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F7BDBA73
20520160301192446 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE558BD1523 20520170623214723 2 6 100 4095 5 F2D0058FA043FB189699D118DE484B66A10DCE703B27209CFC6D23D9178067C9D560D7D8BA9D4439A22AED66322F25D886C0A5CD41821B49AAE3D7A7B72F9B0E2D823709AF5444C7E9474DF5867E605E638923A2FAD546A86B8014BA460D238A939B445D7489C91977B54AB531D75B0F4264F187218F885129751EC78654F4B21191365FEA1B7FEFC40842BBC07C4F1D1AD153F6A39B582406F6B5895336A1199F7556EE957EAC716AE6678CBE5390730F0EBB3CC5210242A80CB128BFD747ED1B61AF6BBD5B5DC07B34C5CA7AF73D1EE973B93E13918801AEFD674DF92A0AD84BFA2A8CEE1AD26140DA1D5FC0C450A1EAEBC88F8EA8E703A0F3A814E1F6975AA5BE732473575D16F137D2CE5F7A546CE4371ECB5E8052295E122A9CF89A026E2D09BDE56B8B04CC4CAE66CD0C5E0DFE30695DD798C50E39C911C887FEBACAAEFD2BFE7D454E051C432D66AD84680DA7C126F1A9C7C540283CCB863B9414BB536BA358259104ECB406B4976F97558FA4E5854888A8D13C96A14025DA0C55F869F6AF954B1E7AA1D317262C52099860E870A7EAF72F9910ACA809FF2DEA37FCA3EFB31FD43A308E4138E40178BEAC0FBB0E79ED7D1DCF8F8A81A4ABBFE6749F4C1B96BD65A14822490BC0A71E854BC8077C7A8F2C6FE308F86DEC97F600A4A0015F086B021F7F0BCAFDE3DA4D7E38A9AA1E992539389E99412FD22988F8513E37
20620160301193428 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE559875F5F 20620170623233949 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D915376BC3
20720160301193505 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5598BF0AB 20720170624020214 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D918FF036F
20820160301194148 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55A0E82C3 20820170624030028 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D91A80668F
20920160301195020 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55AB8837B 20920170624033630 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D91B697BC3
21020160301195917 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55B6C5AB3 21020170624052652 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D91E5556DB
21120160301200332 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55BBC661B 21120170624075515 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D922262F73
21220160301201317 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55C7D9887 21220170624103157 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92638CCD7
21320160301201523 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55CA30A3B 21320170624120558 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92895C273
21420160301202029 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55D044403 21420170624130210 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92A0429E7
21520160301203514 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55E324A43 21520170624131317 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92A441063
21620160301203700 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55E4D607B 21620170624132538 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92A8E794F
21720160301204309 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55EC519A7 21720170624133715 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92AD26E07
21820160301205135 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55F6BDE23 21820170624145051 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92CB7412F
21920160301205244 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55F7B0B23 21920170624163751 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D92F668E7B
22020160301205520 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55FA81627 22020170624172739 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D930A8FC4B
22120160301205558 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE55FACF2AF 22120170624174055 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D930F6B80B
22220160301213318 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE562B75737 22220170624185924 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D932ED85B7
22320160301214847 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE563F5D2EB 22320170624220917 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D937BF2B3B
22420160301215746 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE564AA7C23 22420170624222456 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9381B839B
22520160301220025 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE564DC00EB 22520170625033902 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94007305B
22620160301222154 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5669AE6CF 22620170625053719 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D942F8C1E7
22720160301223932 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE567FEFC33 22720170625062259 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D944178FAB
22820160301225302 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE569139497 22820170625072908 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D945B1B3DF
22920160301225705 2 6 100 4095 5 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE5695E7AB7 22920170625075138 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9463A10C3
23020160301230308 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE569D3D2B3 23020170625080610 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94691AE5B
23120160301230751 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56A2CD9CB 23120170625112146 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94B5B8CDB
23220160301231012 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56A537EDB 23220170625113648 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94BB43777
23320160301231655 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56AD78EE3 23320170625131459 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94E2020A7
23420160301232437 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56B7299EB 23420170625141110 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D94F7F2B87
23520160301232518 2 6 100 4095 2 E268D4796069A7E90EC81DC69831656A982D57FD2C1E7810FD32855F3A67C150F52C2B45EC5C1183DE82AE98202BCD0CA7D1CD0A4D15AE296B23B6FCC0BD171005C939D9D1D75DEA733A6B4F3DA9A96759881B7482ABC3CF967763F261D0D6BEDDEE374F138597B347A57A4E21F8F801CD8F8A33FB3638FE0CE021E052AD5CE00E23E3A6644C844E8F79749384DBD4AC2D46B7804D797174F4BF19F92D8710B18BAE576F69449EA91681A92B0E8E95EECB47CCB0720DA611EF8686A09A7DB37726E1357EA9A1CFB7B2DB04529147BD30F96515123A7B5540890860D45C7C033DC0FAF079A0A7825C6A6DFD9B87189F2EEFBE5F68BA9B1DDA8E3BF26ECA3A8A261BF5C67E2A01C8E4BDFAA1C221950596216C69468493E424DBBCEFB8BCCF0A83C773123087F355A15EE7515BC3C6536FFCA05B50F8FB7F3A57103DDB6FA82E2B902991086E2EA9284CB09FEC7A4184EBA09A700930188711313FD16C27B338BA4BA55736E0C7B4C6E731933BD9FD7DDC80BC3A23676FF871FE3E21945BFC83B22C3992E2219F75A6C7AD05F66F2D09B8C805C2E1FFBEDBE5115FD9FB023B58B37FAFEA2CDE16C52A54BD7090C03438EF19F04D8FC630055FC96AFEA891B8CDF6016A6E101A9C27C1E6A5A3B81DC785B6E8808EF59414B58C1CBC5E3E1428DA520F1AA2E8BF6A6554F2DCA1CE30972E13BED33D2744621C763D387AE56B78E563 23520170625144415 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9504A46D3
23620160302001351 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF880CFD33 23620170625145639 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D9508CDF97
23720160302060207 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF915C8E67 23720170625203254 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D958CDC1DB
23820160302080221 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9484D603 23820170625215049 2 6 100 6143 2 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D95AA6BE13
23920160302085858 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF95FD5243 23920170625220255 2 6 100 6143 5 E30D9BCD65DA0EAEF6A1D4D083834D4724538836AE04DFB6A7DAF235F5D9992B7E42128D43E229BF4906EF0C6A27F60B95A1FC514C2D55A0D616B3B6924F08E9C0BCD8AE1CB624F645785C2AA552C94E125D6602CF63CF52014A1B0A4AE0DE823B03B6ABFA25839ABC3E8E050C295B8B3471EC58EAD9B659294C72EA65229E4E8EB21CA79CBB41BB552118A3CD32108E51D5FCE5C46A6CD03E4246CB57E32BAA09B15503FBFA4F4C943B2378F10EE312C1F12A14010AFD1698B8EBCCFC8D0DF17829A153199154EBF9E40FD81B8E1AF5881D0EC1D3BEDB2D0F1DB9C44C9D8E7047310623D4FAAE28D2C16612CFB9AE9A8FD05B8FE22930346ECF7B21B5800778EA0D5D3B7BDF18B03ABF33C9D0B4648CF687ED229C811CE290CFAF94F9C9AF4EC3E47480955E5C81E85DA9EBCE99652DA07225C7CCEF39E224556E48D6371981C7232E00F3419F7B335FF36FE3989558277654DB356063ABC8F7BD0EF828B40D3BFC06D12FEC51278ACD32C3B67D4E2A0BBA1E20BDDA06DB9AF6AB250179DE3332EAC0A6D381963B51E8E167B8285BA3E6538B1D38B16B32196ABE009ADFDAF5E686E0107F76ED10414B6249D6895188456505CDB897FFCCEB8931802F87C02DFDC62825C6255DF2654712BE230CC86A30229D9E3438DB35CEED8F8447B9209CDECFC1776D2C43B4B98E9EEA3F4C049C1287CDB4540D395A4BC992602150CCC0479597E221E201B778DCA9701C517C89B95004FC19373ED9755C90FF32C44013678876EAD3FE5E637BF2F1959130EAF79E7A93088F52AA0AC993324294536CF3787C3A3F06F2DC201A070967E6F4525803DC83F5160B560465A4CE4BF20315858BE0E62A07C55B3A772CBF93DE99AADFCB304D2B544A9F17A22C2BEB791D98F714CA7CFF701CB7CAEC55C292A25A147935D7BBD1E66F2ED3EBC66E763209169033CE5A2D9884DC0CBAFF37517372544E1EB780A26CC71E5649EDFD5DA2FCFB58093D74D76FC2DAEC54567104701C31E3872C15BAC5F2A96833EEDAB9B7FF731F827DB3273D271BA8F9DE06181C1E38D031896971D801C571954337D95AE8D4FF
24020160302110323 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF99425D23 24020170626000351 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A06777EB
24120160302115537 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9AA4530F 24120170626010044 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A1E685DB
24220160302121026 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9AFF17B3 24220170626011405 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A237A0AB
24320160302125303 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9C1752FB 24320170626020723 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A39C76DB
24420160302132855 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9D055A3B 24420170626021405 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A3C0D837
24520160302145027 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDF9F210C3B 24520170626025354 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A4CB1E73
24620160302160128 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFA0F799CF 24620170626025848 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A4E33427
24720160302164318 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFA205C49B 24720170626034407 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A60D840F
24820160302193543 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFA66F725B 24820170626042648 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973A7271AD3
24920160302223446 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFAB045BFF 24920170626063327 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973AA7A8227
25020160302230706 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFABD44B9F 25020170626073301 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973AC001F7B
25120160303005014 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFAE7817DB 25120170626073912 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973AC204247
25220160303013053 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFAF76805B 25220170626083935 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973ADB29CEF
25320160303031806 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB234F5BB 25320170626085130 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973ADFA675B
25420160303034446 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB2DCD713 25420170626103016 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B0702723
25520160303042131 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB3CABEBB 25520170626110918 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B1648BFF
25620160303052710 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB569F28F 25620170626113343 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B1F924B3
25720160303064237 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB744D6A7 25720170626150922 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B78B107B
25820160303074318 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFB8C38E87 25820170626162428 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973B972EB6B
25920160303091435 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBB0B707F 25920170626171558 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973BAC16547
26020160303111232 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBE003643 26020170626231518 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973C3C4E533
26120160303112343 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBE40A0B3 26120170627001636 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973C53DC917
26220160303113550 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBE87B0BF 26220170627023229 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973C8A24E33
26320160303120708 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBF49A92B 26320170627055348 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973CDB0A037
26420160303122005 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFBF954093 26420170627085558 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973D234059B
26520160303134821 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFC1C0AD17 26520170627111046 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973D57B1B3B
26620160303183137 2 6 100 6143 5 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFC8B45457 26620170627114331 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973D63E6527
26720160303204451 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFCBFBCF5B 26720170627143549 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DA76351B
26820160303210530 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFCC756893 26820170627150713 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DB2FF40B
26920160303224116 2 6 100 6143 2 D9752DD196C5E138B7F542FD56561455DDBDF05DCC107F8A5C8F393529CEBAE3CECA54E85766015CBFE1856D830D7A20385951C0941FF754570F697951C77F6FC064C28B708E8A691BDA8C6C1921C7559288EE8A024EB50D923EFF9F143E76B053D2B5FF1779C1CDC0E5856BBE4396928E605009866CFD212C68183120D5A7EA14BD3878690406069F8BC9AED334AEB6C25FD4CD9421F860893256B1A7741F729982BC109E3B6DF4D86CCFCDC1EBAB2EB13836E7988CB9F32F3EC5120E6B2DD74FF13E456A1A01E313E00A728D2ED690A656DACB1C71C6BADCA959CD944EBA762FC8B0B3CEF237386ED3D4FC6983A8F950B956DC76C09B6AAE22B5B8501B73B6E685FA40AA56139A8C02F6E0B7836E3F08EB5F9D4EC83A8BDA394FC5DA24D2CF078AE7491E3856A18FCA2C68BF9BC82ABCDE494CDFB31F82E5FE8C20D7832412F478BFC67A2B4B2CF5F266DDF53CB62372957861B95FFD2C82C46E48ACD75CAEC30E8453C8A24020ABB6143665441179478D8E33E505C2E34C1EA8F22205CA8FB31A48209BCF10ACD56B6B0060DE1836A4C9EF3C062C552C1BC8528D262FF0A2BEB56626C69A8CC7BA24F65FC39768212BB7C41BFFEDDAFD1A1528F6258F2ABC102F693425FDDF20D9EC9601FBFDC6FCD43E551C082A8A1373A1CB5E83BCD8175D9B60662D03ED5894D3EF4325180633C33FA1DD0964CC0CAEDE403146E7A5B8ED74FC6AB359EE1909A45A445429B17C04658E7F4F31F84DD194FDFBF3EF345C1B4EF2563E16351808FE4262B52D0C8AA748DF502FEF3A92C9F6A6A03BDE903DD1392177265313C08E767B003614AC6C6BFC501AAC24737BB3C8CC0160D81FC3BC6244974E1D83D15E676976F92999AEE25A66E7FE124A94D52A902E035FA5F866833D7AD3387BE2423095930671D8588E49510AEC9430ED1F03A02F3160124D893833D44FA4B51FED9044AE5B4136105466D5CD711FDFC37690183BA1D4930347148433D76B98A857EF4962FE0F48A16F20454555411EC778B248529F50503C4E0D62A122EEF42CA6BEFC7B3517CCB75A293AF2532E29FC2889DFDFCEC94F0B 26920170627151417 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DB566CC3
27020160304002011 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F213AE3B5BB 27020170627162358 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DD096627
27120160304013213 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F213CCC818F 27120170627175138 2 6 100 6143 5 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DF2B3477
27220160304014837 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F213D3357F7 27220170627180034 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973DF5CD463
27320160304050100 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F21426DAC33 27320170627192816 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973E16B337B
27420160304070516 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2145B0AFE3 27420170627194138 2 6 100 6143 2 FE3AFB7EA9CBCB633757EA982ED0DDFF120459E69D35DB36ACC5F69B04A5CCEE59A0312A97687F2B3DBC20917F4BF0B16D97B75EDCA16B58BDEB8BB1A726F6CB8BF5D7FC483777129A1C19CB559943EF201323760672C63859E830C6E99AFE5DD7A4E89BAD41C63B687558DD277F4E06A29D1E14A21CAA6FDD4E6F21EB8B146F2C04F93B1C94234E6295F2F8773B16BA3D51758841EA48ADD1A626E252DB3B78594B4586AC9E9EAF100F294ADC82BEBBF8CAB96B671EE7050B42733EB741107C5D2199D305C84F93C6AEEE6BD607DB7C0EFED773FB1DB73B04EFA72EB36111B99EBE6EEE899307FD288329FB2DB7E81776AEF0F935FFEE77611BDCFEC309F97EEB6E36FE42CA4C8EFAA0B4B93F5D83606B8FA7B49DD1DBB8F828B9C805381CB5DF4AC7FFAE27C62CBCD2FE80BB4157EB7F3267041255AC2F7EA3B450951878166049E5FF1BD3B361082FB184E342DDA1961ACFD90944F37E09A06AFE463AA9AA66EE699D28C4D109F3E8111CF4D625161B2855C11593AE408AE44DC026091119744FF09A4AB3C00717ACA004E26ACA53BF6444D839CF477A56FEAFFBF2E4CB946512815269D8E3C163FC29288A917A4A0ACC6DF54454CE2D54AC79AE05BF816DE1E3E9D3A9CC69DBE674880F98ECB8D8D4C4247AC07BC9B7C40FB89C4B9D4DA4604B37D15047DFB28C5D241CDFA327C3996872A0C05B84342F81A308D7796CA4A4038E47A5D4658F757C3F9645F11DEA92AE4D2E77FDB1A5D12519FF947F39A68152528CB02F915894D728C0E755B8BC4A99FCFC778A4099558A06D5FECC4C22DAA7E23C3B5E8E99B5365D5046C8C65846D949A521C0B25EFE5F5CD0845F09C29C096C4A80755120A299EA652B204775E53B2D521F366F4EF9FA65B1D8CB048295C39BE92667200E2889B1577CBD0AC23B2280B758A3650BE60D55F215DBF166873592253B1254968B5A46A61C792A153342C3ADE408676F4B27B7F22C50B079D0E32AEA134168A53A36F18E2FFA2459EDBA89BEC13D19C342235F6E9CF8F721B608F6297A3486173A7D5CED5E2AF6343775668C1B1FB0B745157973E1B23A4B
27520160304085926 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2148A9E96B 27520170627235654 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CE22848CB
27620160304092251 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F21493F5C9B 27620170628025708 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CE4C7FC03
27720160304092815 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F21495C2BA3 27720170628090844 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEA316C0F
27820160304115839 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F214D4FED23 27820170628104935 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEB9D111B
27920160304122842 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F214E130FAF 27920170628114328 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEC57837B
28020160304143749 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215161823F 28020170628155547 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CEFEB085F
28120160304160139 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2153888D53 28120170628161354 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CF024A37B
28220160304160440 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215394B933 28220170629103301 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CF75BD46F
28320160304162214 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215400CF9B 28320170629121023 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6CF8B74F97
28420160304212008 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215BACC633 28420170630003105 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D0331EC63
28520160304221341 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215D065E4F 28520170630052003 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D04F2C61B
28620160304221614 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F215D0E8A6F 28620170630145450 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D0CF7BF93
28720160305022340 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216368CBBB 28720170701010810 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D1578081F
28820160305044620 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216709F6C7 28820170701015400 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D161119BF
28920160305053801 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2168484233 28920170701082405 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D1B5FB48B
29020160305060125 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2168D0E0E7 29020170701092427 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D1C2B0E47
29120160305081042 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216C1797FB 29120170701161137 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D21ABD21B
29220160305094218 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216E608403 29220170702022204 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D29CF7033
29320160305095044 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216E8BAD0F 29320170702023811 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D29FB9AAF
29420160305095440 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F216E9B001F 29420170702062241 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D2CED4213
29520160305111737 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2170A72F1B 29520170702082528 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D2E88DA5F
29620160305152313 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2176C19D53 29620170702151719 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D33FAA757
29720160305152947 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2176E37BCB 29720170702175101 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D360021F3
29820160305154608 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F217744E9E3 29820170702200102 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D37A9C6C7
29920160305161226 2 6 100 6143 5 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2177E547CF 29920170703011731 2 6 100 7679 5 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D3BCD4977
30020160305173357 2 6 100 6143 2 FC87210E608B51094653AB8D5963CAEF1C053FBDBBEDF91B83BBD945C79B4F67E96E8FA2C32DD50643434724257CC86C29F3CA2D266A719934B4D350E933D37153610C332F148D4B22D7D790A2A83995B0600254F640BD5E48B7D97D1BCEE76515FE078CE062EFB08529A5670F773DF514EC5392403D50C33577AFCDDE7D90224AEED69799AE17968CADDBFDC81A6E10B1CDE4A0D3F41C4B82CE346E0621973BE07918EAD36D7C67BCF2984D0F78BCD1E540847CA4DC90D909845862D4F699ABFA17F5749554774BC2C59443265CE386C655055202009B32590EB0FD85F203E63425342E756AB57F5BA14BD2E283B617A230E11A955442F0C1F53AF4F08DFD1D2606DD5DD04486C40A0E6D2DB2B390D664A97D32ED7868A6AAC5F2E534B7C880EE0F6834EC100D547B823547443D02980F1EBB2EBB6D57E9368BC70C440BB5406220630583D59AB11C489B0B0B8591A7F9FF322BFD4B9FE0672800A402F9734652EF151B44180D4EA7A713C66873A245691AAF295272BFF02979772EC48D65CF34540F38EDF2B95BDF8E7A88062866A8F5471F29993E1D4A4F1638A447D237964907CA1090C0CE1D4FDD79277219F9E1CE63E3E95BAFF8017639969710AE8520769B09C318BDD8A0CB3560DDC3A6281E1816EF16D942980934B6B381D44FD19311FDE8457113B6F8FBC9101EC20F6F216712BC17A63A753F0724BA90EA9A4766FF93BBA39020CC72E0B33CB6CC3C3D87A13CB86BA9C1A9B9086DBD905F62B29782E5AAD4C27704913415E583A0EF1F2586C612DCA66CA31FD1F797752EC984E543616C7575ADC6BDAB9788F82C9258DF1E58777440BDAD5D93A2CBEAC466D6BE37CC4307CA0534B00B6EBEE4C3958BC587117E8E26D13E36B1D4A9D0F7DB2F00E9568EB21F6530EF635650C51DC9D04B788439BE01ACBF5501D673896A170037E0048882DCF5A09F7605AEFEA5615A534B5CAE77D46B00E27CAC0C7685AA235EBC0941B056FCE7737E3BD6597EF0C5774D1535F294645B12025F17474F9066DA7DFD867B72E3706FAEECD892C05D92494D7A3BEE52080BAC6FCA8F2179D3586B 30020170703155054 2 6 100 7679 2 E411B879FDA69428A30BDE74B417706E5936E16C5E1F2B64A07EAE1D69C857C23126701460740D93467EB3A3386827E658069CAC4D55CC4929493C193D53A0D91141135B2F0B19E659BB541883E569D38B329761EDF3C409D34A49870356F3723AD2F720383E49B1752B837DF80F48632A469A0A96AC8F02E5B766B590D722B5BD3ED9191BB70C1D4044A3D5CE850489216C3184D73BAE2B655D76B30EC1851951A756E2A45CD1FF82A83BDC1803005034BEB2EAC35FF7362831D8FBE02E07B1CCA351D47AD65B5282151FB2711A880410CED2C1CF205CC2072F6F244189F5BDB3AFDBA7FB02DD21C99D1EF72C1EF8BC6C68A273D16CB2D3CA190C30BDDEEAD7CA2E519F3AF806B5CBD436B971C1F1981EB35CB4007D129F43E660F7E47E807C889A1DC5FEFA7C304DB41B36982FEFB7390DC6C8E9474D3EEB84B3F757C367475EB1B4CB5B86F9507090F2CB37533E2B96BBC6F75B3BF1F4CECF18F67E7492A681845CF5AFA1B70FB3B0A09CDD3375BCF716CBF2A594533D157CB6C4008CF8C4818C9418E44A995028487B0346BD399BFB431CA94B3FC2AF9822520153105ADACEBE719CC24D1D043AC2AC24BD41759AA452000C43CB885D5F0D71DC2451A2C5C04B0B085BD23B5295B7A109DCD729C34479D51EAB4617FDD163128B25F5803B262C3D97E2D63B3E84D85B67ECDFDE6FA377E208BD2EF867072D341AC731338268AD82285DD6D219DE44EB0588E477CBFCD5F5C068D2FA877339424F324012D346C3E2B3C4408E4FD84535C5D4EA02137ABE0426BC4C3AD6EABAA221579CBA22023F8204ECCC98D143652DEBF5869CD73A81C0E4C6FC9A22F9E648B6783AA1D0F0A1F76B1C4E8692339A6A259F3D8419CF7FD22A26023678BFE4F70C79E7F113882E6C7A0606C5AA9094DB161683E43CCEC8C73FEBC7B82617B90541C2BC15EBA18B55E430373CF21DD235BA332EE6D7A6D042BAB4DEF94939AAD2A1F6FD235B09CA6CCFB45A614C79F3C83253B82BB73826DD22127F3F14292A9B682D607D6C9313DF5324712F976C8978AEDC97B40095E66BF850BCB83F477E1F5AB045844EA5CA0652C7C2C284B90FFDCAE2D5F3C165F66FCE871A5D0AFAA158E77099BFA7A969C8F3425E326D24E7E875D588B5E652ED331ABE4A72AFF7D89CFA9D55116B2610AEA4D1D16BCE1FE8D22849827677FEC8EC9864F5A4B874E7AA3228E31DACECA3ED7E1F31675CCA03E599E748BBCA483821DDC5F1C7ED376EDE7A650AD06CE3FC4E76062354B7D89093EBBF9717CED067846349E8BBEEC4CDDE0907F2DD1C31125F1DBB7B9A94E07677C4EBC756A5ED3D8DB30FB5772328272C6D431F42D3
30120160305235825 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B0B4DFC33 30120170704184253 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936A2722BB3
30220160306022229 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B0D65D0DB 30220170704204537 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936A4446CCB
30320160306093737 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B13D7D927 30320170705051520 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936ABC7F083
30420160306094452 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B13E933BB 30420170705084652 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936AED1CC73
30520160306160337 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B1971D123 30520170705094007 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936AF8A26FF
30620160306224032 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B1F3B6DAB 30620170705115139 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B15913CF
30720160306225345 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B1F6160BF 30720170705123819 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B1FD105B
30820160306233854 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B2005324F 30820170705150548 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B411305B
30920160307010902 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B214E9673 30920170705152103 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B43D87FB
31020160307051433 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B24C9A09F 31020170705174143 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936B637D557
31120160307062817 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B25CA759B 31120170706120313 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C5C0BE63
31220160307113227 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B2A201EFB 31220170706131942 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C6CA2F0F
31320160307123109 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B2AEC017F 31320170706141404 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C781A68B
31420160307185147 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3059D223 31420170706153843 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936C8A1C2AB
31520160308031623 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3779276B 31520170706173242 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CA322EEF
31620160308074434 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3B36AF7F 31620170706183451 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CB02939B
31720160308080500 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3B735E1B 31720170706184330 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CB163C7B
31820160308090559 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B3C46A863 31820170706195815 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CC15613B
31920160308204809 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B45F50A43 31920170707002909 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936CFBE39B3
32020160308220844 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B47098FDB 32020170707012259 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D06F0ADF
32120160309000534 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B4893E51B 32120170707064939 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D4E0A703
32220160309035855 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B4B9D5AF3 32220170707065604 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D4EE0BAF
32320160309042540 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B4BEF4FBB 32320170707120623 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D9082CA3
32420160309152136 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B54B515AB 32420170707121752 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936D928FC67
32520160309192852 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B57FBEBF7 32520170707164931 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936DCD75823
32620160310013359 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B5CE29283 32620170707220455 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E0F28243
32720160310035549 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B5EB8EE13 32720170707233018 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E20BF7B3
32820160310075706 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B61EA384F 32820170708014205 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E3C89587
32920160310173812 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B6993761B 32920170708023140 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E469C123
33020160310190029 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B6A9FDA07 33020170708053646 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E6DBCAE7
33120160310193821 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B6B156863 33120170708071735 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E8297A7F
33220160311033330 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B714D2463 33220170708072409 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936E836D247
33320160311043906 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B7225A617 33320170708102649 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936EA984FCF
33420160311054129 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B72E8A083 33420170708144918 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936EE06AB6B
33520160311060123 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B7320D78F 33520170708163647 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936EF6DD803
33620160311060829 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B732F58C3 33620170708181531 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936F0B07D83
33720160311071819 2 6 100 7679 2 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B740FC84B 33720170708234000 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936F4E4D5BF
33820160311081031 2 6 100 7679 5 CDE6C545B0D2F4A803F7AA7269ADA925DA60EAE55764AE38A7C61738B71DA67096F9E2CABF9B30B2E33E1FE97BFE4CE54B53041F2B2A0DAEF6135B6FB4990BE5C32AA56F223B6FDA4599B58517C6B78EA50C8E17CBB37865B5DB8AB5AB0F9A30B27AD76B11F758F10643A569346816280CE9368A159957E161B5E877CBD33D838B725F3CBAA53F6BC1B8F0062B9ED6D756CBB077B92A0A010636B4B92D570C8E0E3BA5553A92B7F1BF41C7AF7354849491B1C63886EE4A52DDBCF24444D5EA1636F883C1B5482E5ECBCA45BB5C741E9A302554B218DEC84908A75D6A2FB12CD96B1C6046A27FCBEDF260AA445C90A156DC17A1147861792E81840E71D0C8DA6BFC54BE0AA2409B7B23807FC07EF4B2B88B6AA9755809D084448E20D06890B4F299F4A38653F34BB52F38E06E4BC7AECD019E6E06FE39238F661726D7FD4AF8F5CFD49177CE8F8D324C99A00D4FF37B5CE5845106893B0AB4600F0A47BC5C3A536969498548EB86BC2ADB0155F9D2F94B02E7198CCE6E03D091191F63F7CD9AF5F2781D32C105A5DD8425090F90FD2099FE37630A69DB179A7161A226B0CD24C93C087B3AC90EF711C2358DC39EA53C0B9BEAF30851B9DCC5BCE27B4595D391DB68336FF330D3A1E90358A2CB1B35765C6F629D737EF13D6565390D25F3DC8E5A17FDDAF740568659F064CC5DB9F4A3A6CA3BA027A58CD18880F4941CC9B372BDB9B3398FBC357B7672EFEA922537846A4F4B7F393B927786A30DEEC3E5234CFB2D9CE459D1CB2140DE33052CF325BF81C4AA80928FB4906B6700F9CC2628747894CDF90FE2C2F07303F435CFD182F661B19E802092BEDB3E22C275A9AB635DD60A442E2E3D6B61CB204898EB0F0D888CE8903FA8521B9EF18046904F63B66C70B2C503CD1E2A2EEF203274D59D5A86F1B2758B9DDC9F97708841322C99BE9A47524A8BE01D7152B9ACF12C0181BB8C1884DD03FF26FA916FD95A4325DAC03139C80F7931F24694AFDDC150848579C28276BC4DA72400277F560A1E9701186148B5ADADDA2BCC8F7ED47A999DC77C3D6C7E20AD7F3C0A4DFAD3B8EEA0C0C402A28B27B01EAE661CF48CB7A8E14FF0597612798D954B1AC078984BAC3353F2A9829E9F29D88562F5EF90DF5A5E81A97C4BC9565F2F915B43ECD333B189D3C774E18B397D3B6640D8F4902DE3A90BF4E2646302A4BE7341A40F83AEC49B7DC31C0B91CF4BF022EBC8623CDFAD234CECD39942649B386CC65EBED4676F6B0FBC015D2C300B252A7DE8DC6434270DF9918D48FF541CAFFEE9485166EFB82C4F4FB2FA109C6C16D475052E530B12FB81DF189F77C08A9DC2F6A4F37E38601B74B68FAF 33820170709023719 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936F727B0C3
33920160311170649 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9B171F787 33920170709063946 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936FA3DA1B3
34020160311195449 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9B3EAFC07 34020170709093311 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145936FC71EB57
34120160312113901 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9C1FC4A03 34120170709151341 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D14593700D34957
34220160312141825 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9C45A6C9B 34220170709162318 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D14593701B3041F
34320160312221956 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9CB35C95F 34320170709184215 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D1459370374B3A3
34420160313023234 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9CED021AB 34420170709215933 2 6 100 7679 5 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D14593705ED75E7
34520160313062450 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9D2124DF7 34520170710000252 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D145937077174C3
34620160313135733 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9D880F89B 34620170710052851 2 6 100 7679 2 C0388038628CD48D5377C99911D89CEDF70AC54721EE6974975D61C9E25580D2108B48CBCDB8B647B271FA822546C00580DB013D19EE5A49EFD9AAECA2036A83BB3E2F96C3E7CB273AA9ACEFCA5A3E4C7C8FCF3332DE11288D8BD76E17B4C530F5F6EFB0D757F63E3B2B519EE960FA8206DF81E7B9DA463CE389E3164588BF5B66355D481DC620F0B2F352782105DF3AB86076DD7D612CE9839CB251D5C975166859A41B740E08E66B746B710479FAA430E2891E60647E04FE71D8F8BC9A6BCD20CFB42299142DC016E672CC350D497809379F54F6F3D1649ADCE72ADECEAAE1ECA85EEE8006700379DE3687A67AF796E1F317815461CFF6E58615CD453265612315FA8F99DC65D9CC218004671E43CE58C9F54862D86B58FD71212199A2A562B1AB9604BF43676A403E8EA56A69E68F1CF0C60C83B8EB31D9C0A23D8410C3A6898D749CAD8CDA9F17A224536BD08436B25E50BA67BAD09276BB55583CEDF48AEEFFD8FA3DBE4F609760DF1EDED136B38792CD164D2EA3C5443F0D8F9117544A9A6AAC615ADE01440B7948B2B53BC3F7218DEDEB16D23C3B0C2AA4BEB99F9A9225D87B6CCB037D8E9A2918C20FE9F2BFF429FD0F23AE370E820842AEDD823DD5B6DDD7F4AD3A06735A2E4144DBABEA5DD83A6AA98EED5F6F3021C246FBABD280986A1E7A24CCBE11BC3050CC04DB566277CECBA8B5BDC1D15E1F066B25B668C7B87EA54894EC7559B64F1400934DCE1C06A10955988E3B3F4A40566B3989608404859335C53EBD6BEE21614EB7C954D543DBA7EB61555B7CED9D08EF560426DBCE3018FBEF788CF69AEAB433B692A9E28CBAFEFC048BD9AB423678D4DD5807329BCC417CF77EC7FD8E50B6D9A8D6B2017B24F6890557AF327980D086499B7C4ED6518B9C23DAB9571CA9E8E949C039C5CC002CBC9BDD08728D543143AFE577738AD309AB2493A8157272196B73C28A4826B37A8274198A4E8188CDADB1D7BB209C84D03500F79B9DFEC1E4441F34069CC01D6B9A57940914F56217C0F3A5CE0C75DE2815EE396D4AB00EC9695DFBCDD88EA6C8017CC29B1257EED39B50E0D075CCF9564D4B22F59F4B5E6667E4CACAC6B63D8CC1C9AB2CC6309A319E559D2062FB99D15B62F08E4DAD676698813D227FF8967B3B3830970E92277B2446A3C269A74FB437800824A8987DA3636A17A53C7E55C66077BE0FBD63441402F19C6C4E1F1C46185A3F3F5D7D7F553F0066EBFCF2ECD74CFC6DB48F6A458AE66EC12532B691FA3AE9A0C19809B3A1AF06340EFB012A33D484D272CA09D5862DAC5E3A00006F260BDE5CE74E007AB12A8F686373949308E574DCE7EA9D1459370B975DE3
34720160314002320 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9E14CBED3 34720170710074510 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C8898200FD23
34820160314074608 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9E75C54D3 34820170710114649 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88984F315BB
34920160314135741 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9EC7E3DAB 34920170711033842 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88990A1C3A7
35020160314140815 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9EC9AC0E7 35020170711064933 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88992F18383
35120160314202745 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F1BD98C3 35120170711070835 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C8899321BE1B
35220160314223316 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F36F08D3 35220170712081942 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889A5694573
35320160315005016 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F54715BF 35320170712175235 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889AC1C9503
35420160315013952 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F5E3A7F3 35420170712184856 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889ACBA643B
35520160315060542 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9F968A573 35520170712224446 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889AF76B1E3
35620160315072619 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FA7969D3 35620170713034208 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889B2F38EEF
35720160315105849 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FD4C31DB 35720170713034622 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889B2F6567F
35820160315120521 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FE292087 35820170713071216 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889B55B411B
35920160315121136 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073B9FE352FC3 35920170713222010 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889BFD2C803
36020160315152946 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA00CB151B 36020170714013005 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889C1EF6397
36120160315165331 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA01DFD347 36120170714094721 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889C7A27293
36220160315184225 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA034D7527 36220170714141853 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CAA42B27
36320160315214330 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA05A75E33 36320170714204505 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CEF31E77
36420160316020204 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA0912D52F 36420170714205139 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CEFD860B
36520160316065014 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA0CD7441F 36520170714214942 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889CF9B7253
36620160316121031 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA1102A093 36620170714230801 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889D071D153
36720160316165356 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA14B5C017 36720170715054028 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889D4C6B33F
36820160316191831 2 6 100 7679 2 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA168B1623 36820170715152910 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889DB4248D3
36920160316230539 2 6 100 7679 5 EC435B7E292EBAAEC94B8E8A53ED9F3FF717BB820D4893F0BBE6589BD3AF344B765A6000950C6244B2E4262E7E500BF699AF0FF49605A15EB80C61429C9FB79F658C3E0F8DB516AF9703BCB5E84ABA314292808DC70D183C513609A6D345F5D8676256E25108EE70B210C0293B5C804CF21FD843D2F5F79F91F57CF2C2EFB7052CA5F73544F0568A68FA5583CA6EDD300817AAB25E650B0AB9523C6C60156726F4B5243A8BE580308BB6297E23785893119D49B2407D4D8DACD551D08A5F9BB32BD7965313EC6C9DDCD685A62F7AFC8E71DF10F9E1FA25EB3DCD41D7DBDEFE5DB565BAE0CB62F192AA573A126FB92C9638457E73EB4C007268142D9506B17D20A4D73B51E21983D9AC86F7ABBDCE9B9D10BE307642C49382E27B45ADB32E9FF7A2203F395C71EAF7656DF83F57E527CCA37A2BE9AFBA89FB718DB95CC041BF4025FF1CB5F463C8A09FD374AF3F143EE53FF4B369117BDBE0743335B1B5650B68C5B4F64E42D4CF0B329316F4FCD5E66F4A1359F2B29684961CA04EC5AC787FD4BF990F3FBE698D69FAF946DE12A4215392928E29ACF24F940AE4046C74BC6E799EE1D85BA8264C6C7DFF62A244CA2D05C4352870E0E8EF71F884AEFA4A4CA704B6C6607D2E59D36253350AF73C1FBE9C5D61A26A9024B715B45ECF1487D23970C5E405B46029403DD95B2F5672E61863E48CBB280300B2CF87C749F0ACC52940819688C819250B71E54397C8792AAB31655BCE19FAD3A7C59BD64904CC806304AEB6DC8B534081CD2EFD2808977FAC9BAB540EC153DD98D8B33984EC40BCFBC0C5D5B95AB3E183961DB2EE8883B174A3CFEC21CBE7F200FDD2879C1BA808B65A03B02793688FBB1F753333A23A4139766DD3ECD30742E55C25474D068CAB008BA6957CB014E4D46C4BF3084C8343D61231B6B997A8BCEE761D907E4323B92EED55575A38048D686B04F6614B7F931BF1F7D2CF35912E3472F424B11FEBA41F6D569B1A13002A33D5660844A896436AA4D8BC74B6951C75F883D747690B6AD3501B84C6C5B4E29C4153A98C0F2DF38CAFDF00E15CFE8DB0939E5611518DB4547CB2880B5F2D431526082D608384FA3BDD78B75157F25C7A2448249E635C20051C39577AE777C75E7B424CB647B76C9880E905E401DA09DE7A6A5F3E59376B24DCAC613C6EF263741FA15E83B64C78C03016FD34AB608D77100FD8733F130F63A0725B8E7CCD344F5E9A460D2F4F5BE139A6B57A3955A47726A02D6425EF8D1440709517F2DE1D8BB1D054BF69B77E44B4C4427F26EC6303F91CF197298214820264AFACBD355F08E278734BDBF1E116ADF6C1C03ADF5E73212A7073BA1974D157 36920170715213011 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889DF38680B
37020160317204037 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F505984F7 37020170716095854 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889E75F9737
37120160317232704 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F52635AA3 37120170716115603 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889E896321F
37220160318065706 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F57FAD16B 37220170717072754 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889F528B29F
37320160318115527 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F5BAEDEAF 37320170718103850 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889FB304F4F
37420160318183751 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F608FC39F 37420170718123146 2 6 100 8191 5 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C889FC58729F
37520160318220732 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F6315D9EB 37520170718203220 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88A012AA89B
37620160318231533 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F63E5739F 37620170718211015 2 6 100 8191 2 DDFBC1CD4FB7E30639422038F1FFBA2CD3EC3915F3C923282C6588F6EB218FF7B24870C0FE4B48213AB0948E101686FB7B0093ED467B6CA413EDD4B0BFE2155AEBC4DA3D2DD0C78DA9AD989A0E989010D6D5E86A123C169E126F97826EE5F602FF641FDF642A107E7538CB61740CBAF69F6C7DC5DD4DF28998AB61B8672F0B74A3A8DD7D165828D69DCC1BAE4D45F707C3894E040BCC0AF7AA810A6D5CB89276217EB7AFAFE4966D68C10318E8C8CB23CA593E8057F29FF9154908B11D6530E6352F9406C81D9DAC5C298979320B4E0DD89203A1F680C8084154D0439DB6C53EDAF6FCC0E8682EC99D345180120AEC810CBB0C2F1B6D1B660ACEAAD5996A5D184659B6A1F11456BA6A5E94D223959D8171C030499A9DB458702CB35CA7E7CD75D26FF5E94640AB8740ECE82559784BB6D5CB4D041D053629BD3F4178077F3F7E280296C46A3F0FBC37813A1AA221FBA2612F0CFE56450E9B1F2C2AE278EC7A7AAB66D61FA9749FE997EDC31131091620897014D33B2386B490CFD80656B7D2EB08C9DA9928798986996D60F74D766EB8988E2FF676E38C587E7A6651AA28BEB8BB56EBBD6E641E92309AEAA671A5F2EC72629442D2C3A4C2B8E4304DC71B342CD116527832078E6B53C1E0A72909615B408E17625F7259ACA98E46359448FC141F57B51A069B8A402AE3A87E10AE7E910F3916BAC6CE716C539E825A06626673DE7EBD899A3982FCC599791E7CA964C0D37BB076708C03DC7C022980974025C0EA9B72CC3D0A03E4626E030E9C857ECF6B3807AC9E8E0F72098C7E80DAA05BFF60394A8374096878F015597DD5B22E65646A7DDC87B5F6AE68594DF39B0BDB2675A32369AD81FD62033146B8DA6A801E918572CBC70DEBA9F70D088D69425733ACE0084E60E7FCB459A5B71F74F711184B1AEA240834D28D049474BB2E7ED1B17AA2B5EB7D274341456834320BE8FB245B1C2B84A096E7E40573FEB7C2997ED16C8C2C62409B8064398ED220FA82C59E53AD7E864C24473FCC7F017B897D5855F092A9428957467EFD93F67D3FA302C578328A9484CD0496CC83BEAC96504F9601DA2048D25BF43B5A69E46234A164D854B89DF1DEDC36F0304BA5FC035B27E782087C3EC0A81840A3EC042204C63F9698CC74A818428039B23664C409529C4EDD822DF77819805023795EE625D524F12824C1F1FE99546DF75107AFFF7D424C4C3FB3D0BDA2E9BC0D93603457FFE44FABEAB1E6B62223B201D42784731BEE11E0FF0BF29C930DAF913F974739800522E2B9C4094475A5F35AA92E2939E5719EB4EE19446ADC9ECC7EE6BAB5D264C9E74AB6DE856D541146048341EB51734A34E33EF8D929F645E23FD902CB5676DA9C84C9F46490710DC8CF2AA922252C3885CBD8D0CB1D176CAFEB46A625C56BE949F487C6E35E2CE481F024C88A0186FF33
37720160319161235 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F7037DD73 37720170719070720 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FA20B88F
37820160319230645 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F751E7BE3 37820170719080355 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FABF2F5B
37920160320013744 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F76DF3D47 37920170719081323 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FAD37237
38020160320040506 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F789CABBF 38020170719083433 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FB0C1BEB
38120160321132428 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F8FC5A85B 38120170719124018 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225378FDE8D93F
38220160321160901 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F91961EDF 38220170720083815 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253790C2785C7
38320160321181311 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F92F8EDBB 38320170720203303 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379147CF99B
38420160321224946 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9615911F 38420170721064950 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253791BAF7AFB
38520160321230806 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F963FE5D3 38520170721151849 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379217C124F
38620160322064427 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9B60592B 38620170721220636 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379260D3263
38720160322090339 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9CE9AD5B 38720170722033935 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537929DAE9CB
38820160322103202 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9DDFC97B 38820170722155118 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379320A3B27
38920160322120630 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9EE9F43F 38920170722181755 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537933A7A623
39020160322130823 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27F9F927B4B 39020170722212038 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379359D2C63
39120160322151455 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA0F6C9EB 39120170722230812 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537936C5DA37
39220160322151924 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA0FAAD73 39220170723005838 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537937F9469F
39320160323004347 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA73E643F 39320170723041453 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253793A1DBF1B
39420160323011842 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA794B363 39420170723051250 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253793AB9FC9B
39520160323041407 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA98073AF 39520170723112206 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253793EBF09F7
39620160323042341 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FA992813B 39620170723140224 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253794072005B
39720160324042502 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FB9535E6F 39720170723170945 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379427689A7
39820160324084810 2 6 100 8191 2 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FBC2024D3 39820170724050156 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253794A23E407
39920160324112528 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FBDCE47F7 39920170724065019 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253794B47E553
40020160324195325 2 6 100 8191 5 D8320CDE33443FD11E472910A82D580EF614A690CF5313E998A695702508351835AF6D1DF2FA7AF2F1B234CB85E4174D67D9A32B8CC58DAF6DCFD555275B1D038D5EAAC00E0396BFF8A3686F1BB5DADDEB3C5F12B02358C7A1249A01CB1AA2AB3FAC5FC95CB7D16A38DBCD11804212872394D9A2E2F2797A3062AC5AF0C0C57F5ABEF3608546608EC08F197CE2CCF0490875BE4BCF1BD35358AF5694217F2E3DE713800F3C4071622FDBAD20CAEBE2BA60C80DF012DA576EE24A753749C0BAD8707A2382B6E909FF0B8F4A304EEDB1BF04CA0747166981279FE69248AF0DD177702DA2DC709E301D7D6FE985A7D3F7A1678A9BEF306D6036F143806563C42ADFFD8D70595F0C60BA39F0D392CE7EF7CA57547DB2E35B0464FEC6F59F6095F93BD0A241589CAEE15E2226873D31876900E534999F1D2E23E7239FF679377580065A861D3E29FA7215979BDE039ED1FFED26CC2F5541C5CD907E81434EED0479D8737262CCB2807A70504088F23E72A3D949F37C2C8E957DC2FE64BB9CE028013270F42E022BA671F1670EBD20413453A3CF19F53A1A6BDE5D744E39BBF9377384AAF0FBAF475DD1067A2906244CB87F919159DDC71256A251F1BBA789B18D97602C9C1254A4443849C16E0CE2A7A0B6AA6F117788A92C1CB3F60E2C8E539840E3AF49B9248D3E1CAACB08B43146F07CC53D2573086ED062D108C9AC924F58265CCEF3731D39FE5D4F983EADD0E9F9D8B68D953AA9342B8604AFE7916E544D88870F2ED0AFC2CD0C47DD1E5F361004D97B5108D13CD127DEC8609FA2C65FF1714FD45F3B2B3809BAC06DFCA198B71B3929E2A7B62538E5B1B8B5024D8BB78438883911A6FCA870DB16F8F2DA46D9C611F785428A356B40C07B2B8A72E157E3497DE2982AAAE4D2D9F4368469A7AD4061AEE188DA4317D826721B9F9B1A361FECF0C725E0AB6F17C147D2C62A4D11989DB1503F85763FA3E4A49BAB6BDD05C95199158D421B115F40B124EE448803E07496DE7C2682D4AF433662978CFDCFAC88C9100C46CC16929A10E3082BCAD4444D59FE57717FB4BE8DE45F4D84716D204AC97CBA5A7824765636C571AD6780AAA7510E832EECC54D571A780F90BC6A1B54DE8CC83ECB797A9065CC9807CC99DD7638AFC500D05FD2EDEB795227CAA37EBBC04A37DF07762E0319F27B523282D11DEFD85A1DBA40C87EA1EA4D1B9B2A2FC34F9F5395AE51E3A994FE25C680022E5ABD19D11703C2CB6EEE1780F76FEA8601FAE9E27BC16F832BC16776609DC2B0E3D605E635258A95907A148D583B44E202BA4A48211DA3358B7B391B6F3AD0F84D9D7F97DFFA9D819C3D316A59173E8CA970240349A89E09F0A9B1A4B4C6FFCDD878A977BC9EB254318574C40C49D2DCE56FF803601E1752BE3824F94D0D66C1C5FDADCC9670BFC85C422811D27FC34000DF 40020170725032628 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA225379588A6BE3
40120160325054405 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD3C9827F7 40120170725142722 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253795F8CFE9B
40220160325073844 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD3DFD683B 40220170725192821 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537962B35BAB
40320160326035547 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD4D2BE973 40320170726032919 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537967BE1D7F
40420160326072058 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD4FA14E4B 40420170726062511 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA22537969930233
40520160326092507 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD511CC0FB 40520170726073958 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253796A4B8B7B
40620160326124028 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD537EA3E7 40620170726144150 2 6 100 8191 5 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253796EA9D3DF
40720160326204702 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD595EF333 40720170726150548 2 6 100 8191 2 D84B8E9B7259F34AA46062684AD05873FD407C5FA804FFBC429D0DED5B497259FFF7F3C26D7A4C21592FCD658B607A5BDE7C4EAA7F5A3B6B713EAEDD5D0D47029CF51556BAFBBC91819DDA500332F7CE6777565C34CE56ED26BFE90830291C460891DDFEBF4FFFE5F217602081211E73EEC97612AC2C9FE8988738F0DC0FD2241B3C54357109D82FAAB532DB9C18B53B543D43B533FD67E36547972674968EB83AEE7EFC9F2AAF2C610C452EEA89A4FF5089BA6922F35128A844F6350A70671DD53C205AC7A75A1659CD3E57D385AB0BD78AF14DC129B1172884F1FCF5D795B6031A2BEB2410948A422D21AD3A215C85720F5EE695E235E36832E0A559DACDBD2B7CA3A1317CA005A963B49E3337829C40974C70F47540D89AAE625A1FD110874DC13D6E7B5711021F0CFD94C46D87582EBFF78EB2412B6D91DC0250A0B805F5E3B096ACB247C2A247A39164337FB3CB818AD4A950E6347B801DA742E5B532F4FC48815AA62B894FDB23B6E4D448DB62713AA46CC33C7D83D60A44B2B70FE8D841A56A4150A01C82B19CB93AE0AAA65E765EFF95933AC55742E0240744158B9CEF9DA8E18C3736BC8894306BF86D9B927CD62252ABFD39A3B352168336404C6B5F0DB4AEE518069274266E0C424F45D487B500BC087F49B53B0FA822D306D8B272E66C035569FFF1A191D354728253419E5B49115B88EB94E8452A28A3D699E73709FFD95D30430D45B730AF36D90C4DF464241C059375E8215E02294DFEAF8169BF1B47F7EE6F6479CB772D552D604589CE0A80BF7C38AFB2D8111D02A11D02264E2D1634128E53835E5815A92C19027DD08493C23344883FA5F2802A67E586221E2E22DFB8C67D75903F7211D52D19DC92DAC9C2E55D5D23E4B316F4F36AE24526C0D7CB5D43A5FA64CD621E9BBEB44ADAC0FB50237872CF13E0008D4D8F3B53B7F97FF8FD71E7B6ECCE359F5FBF3F6128DFD062C1E1177C6DDB97CBB9ED8AF082BF55D2DDF76920020A8AFCA08235752DE7542237D273F0324767F297BD98F573642B54D55AAEDCD9A5DB65DDF24F1E52489E22A8CDB204653F03A45261E20C965772CC92D71AD8A9DCA1205CA72C3AE330CA9ABFC93BD4C0591279661736B131AE905D5EB899BED456FE76BE26C4700FDF3238999B250DEF64F155FED724D3E38BDCAAD31CAC112BF39F0BC0CD3A906BEA43676E126616B51546C9E282117163EA7B38F255797A803F663EA16485FE4A8C2510409D3B6EF809EAC2BF897277A17A9C6E58709B57591FDA62321CEC2F545FCDB0AEEAF33ED378707C81711E003F1E77EEEE292F61E37FDC2FC4F97CEA96E1A4FB8643A9F18C9D6780BC5B815E43AF81E3B1D47D68D5A559C194F35A143B9EAE147D975BEF88D55AF1408BC1705C02F112616D08BFE6A44C0EFAC373CBB557E4953C79ACAA2253796EE14A73
40820160327004038 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD5C324F5B
40920160327062851 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD606E1A47
41020160327081155 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD61A5005F
41120160327123555 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD64D2A70F
41220160327223323 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD6BD47A7B
41320160328011117 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD6DAD19BF
41420160328031621 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD6F1E5643
41520160328081352 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD7291B183
41620160328130100 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD75E7418B
41720160328200420 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD7AC63CBB
41820160328203420 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD7B12C7E3
41920160329051003 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD80FE5033
42020160329150013 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD87A1FCEB
42120160329205744 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD8BA2A65B
42220160330010039 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD8E545E13
42320160330064620 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD922B39AB
42420160330195544 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD9AE926F7
42520160330202118 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD9B2841A3
42620160331010824 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DD9E522A6F
42720160331155606 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDA80BFF2B
42820160401003202 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDADA756E7
42920160401083841 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDB2E0BFC7
43020160401133333 2 6 100 8191 5 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDB612067F
43120160401171656 2 6 100 8191 2 E8E5A3AF93DBD4FB99E4325B3B9308AE7731E7E27B532A2D0AF5306CB249EF6C63C7DFB66FC19B8E84A5672B378D77DD413933ACA7F62EABCD4012865D9336A47AD7E596B21EA5B6A2695C0F6C1C70D92CFF3CA18522B29993AA0A43A6849CEFFF53DF7E33C833B5B0037D8906528C80F98C2FC22F0C43B933795D153ECD05FC0D734F4EC61BBBD611F61CACA7CEC4FEF72A127074ACF73A11B1004A954C48D18E74B534E318069C5CE76C1D9BBB0326432B3C39F26058B6D6077B562CBE0DCA4E5B53F1CF9B80EB4F40DA6DAADF924DD2E7A689321F1558FFB55DA7B91009767791BDA252285D117D45A77FF044F467273CDEA8D4B5AC83DBF16DDB8F5FA4C1556129FFF4213D199DE4E0996BAA284FEC13A86A9F81E7FEAD84B4C59CC6DD641ADDE2E74DEAAD096E53F1F9509BF4A5405BAE67B7A1107E685D6CB934A422673ED632BD91BF84758C9B504DBFF7835E36B038C74400C983452CFEE72FACF76D3AE196BA44DF804657B92D6B646DA47910E53FAE8979C1DA9120C672CD4AAD18A7BDBA2AD397F7B0E01AA7AF4700F9A83EDBA90D25F74C1DCE0520BA9DE24636629D0140BB4BC6C2A703103E5A234BBB9154AEBA22D48F8EBC37368CCC68DC6BA310E2060EC37BCA2BF7DBD68F951BB23D7C018DB2CBC74752F5CED8ECA04EC743A8F4B503831DB09C387F6BD3A7DF1A25BCA452FFB852B134B67CCE4B0141E84B3D796BFDE7BFB2C34760C64200D40728560598B6FB965C0187495318A6EE97E6648F476939AE82F3D9D51761652672CFB3263385219E41D9A26ECFD975AB2005F67B9B6DB6D72ACE42C5079C2E11BEF3B2C0B334E9D4C2EFE518AD4BB8C0A9A995F99B4625D570E283D41EB4542BA37ADCEB772E45F77A72071874CBF8E9C2022DB9FAB62BB8BB11F72416193D10F4A493BDD9FB68A3BADF8130AE380D1987CD5ECCD6D9F5AD2F219D0076964D17F2232E5DAACB832D6E54A0CDAE72302C52604675053C5ED83680DB1D5A2FB9D4885B61E29465FDC016B9CE5DD93582A7221167E77C194C6E7A6D00E98A3E0FBE3987B1C5C1562AE878FC14AC7458003F949665D92F4F01B7A511C9C9126B79E32258AD5BFAB38B91B710AFDD222312DB543EA712C60CF8C8C0C9A7968A9AED867EA11E9718D25EF8A21F18A2F2B3FB28944F8E049705ADC399296AFBA30228CC7AF6D39F49689A16FF5FD64F09A2233970885EB76AEF2650D9A16CA594A3C67F0640095D10FB6E818BDC512F36446FB7277480BA1947D49A8AB5D78965DB16F2E50BFD09910DB0DD99654A32E07C86CF1601D618E7B9D2745C4CFC983E3D48FFE5A08AA471B29DD0E7BBE6DC1DE82FF8988E76835D0E03C177945886DC273C9C91B8B0950E7619490125AFC453772CB66D45D3CEBA3AFA919AE4AEF42D36AF7EDC4C5F030B5720C82FB229E9DDB86F198B
diff --git a/moduli.c b/moduli.c
index e983b07b7..233cba8e8 100644
--- a/moduli.c
+++ b/moduli.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: moduli.c,v 1.31 2016/09/12 01:22:38 deraadt Exp $ */ 1/* $OpenBSD: moduli.c,v 1.32 2017/12/08 03:45:52 deraadt 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>
@@ -412,8 +412,8 @@ gen_candidates(FILE *out, u_int32_t memory, u_int32_t power, BIGNUM *start)
412 412
413 time(&time_stop); 413 time(&time_stop);
414 414
415 logit("%.24s Sieved with %u small primes in %ld seconds", 415 logit("%.24s Sieved with %u small primes in %lld seconds",
416 ctime(&time_stop), largetries, (long) (time_stop - time_start)); 416 ctime(&time_stop), largetries, (long long)(time_stop - time_start));
417 417
418 for (j = r = 0; j < largebits; j++) { 418 for (j = r = 0; j < largebits; j++) {
419 if (BIT_TEST(LargeSieve, j)) 419 if (BIT_TEST(LargeSieve, j))
diff --git a/monitor.c b/monitor.c
index f517da482..c68e1b0d9 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor.c,v 1.174 2017/10/02 19:33:20 djm Exp $ */ 1/* $OpenBSD: monitor.c,v 1.180 2018/03/03 03:15:51 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>
@@ -116,6 +116,7 @@ extern u_char session_id[];
116extern Buffer auth_debug; 116extern Buffer auth_debug;
117extern int auth_debug_init; 117extern int auth_debug_init;
118extern Buffer loginmsg; 118extern Buffer loginmsg;
119extern struct sshauthopt *auth_opts; /* XXX move to permanent ssh->authctxt? */
119 120
120/* State exported from the child */ 121/* State exported from the child */
121static struct sshbuf *child_state; 122static struct sshbuf *child_state;
@@ -172,6 +173,7 @@ static Authctxt *authctxt;
172static u_char *key_blob = NULL; 173static u_char *key_blob = NULL;
173static u_int key_bloblen = 0; 174static u_int key_bloblen = 0;
174static int key_blobtype = MM_NOKEY; 175static int key_blobtype = MM_NOKEY;
176static struct sshauthopt *key_opts = NULL;
175static char *hostbased_cuser = NULL; 177static char *hostbased_cuser = NULL;
176static char *hostbased_chost = NULL; 178static char *hostbased_chost = NULL;
177static char *auth_method = "unknown"; 179static char *auth_method = "unknown";
@@ -252,7 +254,6 @@ struct mon_table mon_dispatch_postauth20[] = {
252struct mon_table *mon_dispatch; 254struct mon_table *mon_dispatch;
253 255
254/* Specifies if a certain message is allowed at the moment */ 256/* Specifies if a certain message is allowed at the moment */
255
256static void 257static void
257monitor_permit(struct mon_table *ent, enum monitor_reqtype type, int permit) 258monitor_permit(struct mon_table *ent, enum monitor_reqtype type, int permit)
258{ 259{
@@ -289,12 +290,15 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
289 290
290 debug3("preauth child monitor started"); 291 debug3("preauth child monitor started");
291 292
292 close(pmonitor->m_recvfd); 293 if (pmonitor->m_recvfd >= 0)
293 close(pmonitor->m_log_sendfd); 294 close(pmonitor->m_recvfd);
295 if (pmonitor->m_log_sendfd >= 0)
296 close(pmonitor->m_log_sendfd);
294 pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1; 297 pmonitor->m_log_sendfd = pmonitor->m_recvfd = -1;
295 298
296 authctxt = _authctxt; 299 authctxt = _authctxt;
297 memset(authctxt, 0, sizeof(*authctxt)); 300 memset(authctxt, 0, sizeof(*authctxt));
301 ssh->authctxt = authctxt;
298 302
299 authctxt->loginmsg = &loginmsg; 303 authctxt->loginmsg = &loginmsg;
300 304
@@ -329,7 +333,7 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
329 fatal("%s: unexpected authentication from %d", 333 fatal("%s: unexpected authentication from %d",
330 __func__, ent->type); 334 __func__, ent->type);
331 if (authctxt->pw->pw_uid == 0 && 335 if (authctxt->pw->pw_uid == 0 &&
332 !auth_root_allowed(auth_method)) 336 !auth_root_allowed(ssh, auth_method))
333 authenticated = 0; 337 authenticated = 0;
334#ifdef USE_PAM 338#ifdef USE_PAM
335 /* PAM needs to perform account checks after auth */ 339 /* PAM needs to perform account checks after auth */
@@ -363,6 +367,7 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
363 367
364 debug("%s: %s has been authenticated by privileged process", 368 debug("%s: %s has been authenticated by privileged process",
365 __func__, authctxt->user); 369 __func__, authctxt->user);
370 ssh->authctxt = NULL;
366 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user); 371 ssh_packet_set_log_preamble(ssh, "user %s", authctxt->user);
367 372
368 mm_get_keystate(pmonitor); 373 mm_get_keystate(pmonitor);
@@ -371,8 +376,10 @@ monitor_child_preauth(Authctxt *_authctxt, struct monitor *pmonitor)
371 while (pmonitor->m_log_recvfd != -1 && monitor_read_log(pmonitor) == 0) 376 while (pmonitor->m_log_recvfd != -1 && monitor_read_log(pmonitor) == 0)
372 ; 377 ;
373 378
374 close(pmonitor->m_sendfd); 379 if (pmonitor->m_recvfd >= 0)
375 close(pmonitor->m_log_recvfd); 380 close(pmonitor->m_recvfd);
381 if (pmonitor->m_log_sendfd >= 0)
382 close(pmonitor->m_log_sendfd);
376 pmonitor->m_sendfd = pmonitor->m_log_recvfd = -1; 383 pmonitor->m_sendfd = pmonitor->m_log_recvfd = -1;
377} 384}
378 385
@@ -409,7 +416,7 @@ monitor_child_postauth(struct monitor *pmonitor)
409 monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1); 416 monitor_permit(mon_dispatch, MONITOR_REQ_SIGN, 1);
410 monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1); 417 monitor_permit(mon_dispatch, MONITOR_REQ_TERM, 1);
411 418
412 if (!no_pty_flag) { 419 if (auth_opts->permit_pty_flag) {
413 monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1); 420 monitor_permit(mon_dispatch, MONITOR_REQ_PTY, 1);
414 monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1); 421 monitor_permit(mon_dispatch, MONITOR_REQ_PTYCLEANUP, 1);
415 } 422 }
@@ -554,9 +561,11 @@ monitor_reset_key_state(void)
554 free(key_blob); 561 free(key_blob);
555 free(hostbased_cuser); 562 free(hostbased_cuser);
556 free(hostbased_chost); 563 free(hostbased_chost);
564 sshauthopt_free(key_opts);
557 key_blob = NULL; 565 key_blob = NULL;
558 key_bloblen = 0; 566 key_bloblen = 0;
559 key_blobtype = MM_NOKEY; 567 key_blobtype = MM_NOKEY;
568 key_opts = NULL;
560 hostbased_cuser = NULL; 569 hostbased_cuser = NULL;
561 hostbased_chost = NULL; 570 hostbased_chost = NULL;
562} 571}
@@ -760,12 +769,10 @@ mm_answer_pwnamallow(int sock, Buffer *m)
760 for (i = 0; i < options.nx; i++) \ 769 for (i = 0; i < options.nx; i++) \
761 buffer_put_cstring(m, options.x[i]); \ 770 buffer_put_cstring(m, options.x[i]); \
762 } while (0) 771 } while (0)
763#define M_CP_STRARRAYOPT_ALLOC(x, nx) M_CP_STRARRAYOPT(x, nx)
764 /* See comment in servconf.h */ 772 /* See comment in servconf.h */
765 COPY_MATCH_STRING_OPTS(); 773 COPY_MATCH_STRING_OPTS();
766#undef M_CP_STROPT 774#undef M_CP_STROPT
767#undef M_CP_STRARRAYOPT 775#undef M_CP_STRARRAYOPT
768#undef M_CP_STRARRAYOPT_ALLOC
769 776
770 /* Create valid auth method lists */ 777 /* Create valid auth method lists */
771 if (auth2_setup_methods_lists(authctxt) != 0) { 778 if (auth2_setup_methods_lists(authctxt) != 0) {
@@ -826,6 +833,7 @@ mm_answer_authserv(int sock, Buffer *m)
826int 833int
827mm_answer_authpassword(int sock, Buffer *m) 834mm_answer_authpassword(int sock, Buffer *m)
828{ 835{
836 struct ssh *ssh = active_state; /* XXX */
829 static int call_count; 837 static int call_count;
830 char *passwd; 838 char *passwd;
831 int authenticated; 839 int authenticated;
@@ -836,7 +844,7 @@ mm_answer_authpassword(int sock, Buffer *m)
836 passwd = buffer_get_string(m, &plen); 844 passwd = buffer_get_string(m, &plen);
837 /* Only authenticate if the context is valid */ 845 /* Only authenticate if the context is valid */
838 authenticated = options.password_authentication && 846 authenticated = options.password_authentication &&
839 auth_password(authctxt, passwd); 847 auth_password(ssh, passwd);
840 explicit_bzero(passwd, strlen(passwd)); 848 explicit_bzero(passwd, strlen(passwd));
841 free(passwd); 849 free(passwd);
842 850
@@ -1127,15 +1135,16 @@ mm_answer_pam_free_ctx(int sock, Buffer *m)
1127int 1135int
1128mm_answer_keyallowed(int sock, Buffer *m) 1136mm_answer_keyallowed(int sock, Buffer *m)
1129{ 1137{
1138 struct ssh *ssh = active_state; /* XXX */
1130 struct sshkey *key; 1139 struct sshkey *key;
1131 char *cuser, *chost; 1140 char *cuser, *chost;
1132 u_char *blob; 1141 u_char *blob;
1133 u_int bloblen, pubkey_auth_attempt; 1142 u_int bloblen, pubkey_auth_attempt;
1134 enum mm_keytype type = 0; 1143 enum mm_keytype type = 0;
1135 int allowed = 0; 1144 int r, allowed = 0;
1145 struct sshauthopt *opts = NULL;
1136 1146
1137 debug3("%s entering", __func__); 1147 debug3("%s entering", __func__);
1138
1139 type = buffer_get_int(m); 1148 type = buffer_get_int(m);
1140 cuser = buffer_get_string(m, NULL); 1149 cuser = buffer_get_string(m, NULL);
1141 chost = buffer_get_string(m, NULL); 1150 chost = buffer_get_string(m, NULL);
@@ -1154,28 +1163,31 @@ mm_answer_keyallowed(int sock, Buffer *m)
1154 1163
1155 switch (type) { 1164 switch (type) {
1156 case MM_USERKEY: 1165 case MM_USERKEY:
1157 allowed = options.pubkey_authentication &&
1158 !auth2_key_already_used(authctxt, key) &&
1159 match_pattern_list(sshkey_ssh_name(key),
1160 options.pubkey_key_types, 0) == 1 &&
1161 user_key_allowed(authctxt->pw, key,
1162 pubkey_auth_attempt);
1163 auth_method = "publickey"; 1166 auth_method = "publickey";
1164 if (options.pubkey_authentication && 1167 if (!options.pubkey_authentication)
1165 (!pubkey_auth_attempt || allowed != 1)) 1168 break;
1166 auth_clear_options(); 1169 if (auth2_key_already_used(authctxt, key))
1170 break;
1171 if (match_pattern_list(sshkey_ssh_name(key),
1172 options.pubkey_key_types, 0) != 1)
1173 break;
1174 allowed = user_key_allowed(ssh, authctxt->pw, key,
1175 pubkey_auth_attempt, &opts);
1167 break; 1176 break;
1168 case MM_HOSTKEY: 1177 case MM_HOSTKEY:
1169 allowed = options.hostbased_authentication && 1178 auth_method = "hostbased";
1170 !auth2_key_already_used(authctxt, key) && 1179 if (!options.hostbased_authentication)
1171 match_pattern_list(sshkey_ssh_name(key), 1180 break;
1172 options.hostbased_key_types, 0) == 1 && 1181 if (auth2_key_already_used(authctxt, key))
1173 hostbased_key_allowed(authctxt->pw, 1182 break;
1183 if (match_pattern_list(sshkey_ssh_name(key),
1184 options.hostbased_key_types, 0) != 1)
1185 break;
1186 allowed = hostbased_key_allowed(authctxt->pw,
1174 cuser, chost, key); 1187 cuser, chost, key);
1175 auth2_record_info(authctxt, 1188 auth2_record_info(authctxt,
1176 "client user \"%.100s\", client host \"%.100s\"", 1189 "client user \"%.100s\", client host \"%.100s\"",
1177 cuser, chost); 1190 cuser, chost);
1178 auth_method = "hostbased";
1179 break; 1191 break;
1180 default: 1192 default:
1181 fatal("%s: unknown key type %d", __func__, type); 1193 fatal("%s: unknown key type %d", __func__, type);
@@ -1183,7 +1195,10 @@ mm_answer_keyallowed(int sock, Buffer *m)
1183 } 1195 }
1184 } 1196 }
1185 1197
1186 debug3("%s: key is %s", __func__, allowed ? "allowed" : "not allowed"); 1198 debug3("%s: %s authentication%s: %s key is %s", __func__,
1199 auth_method, pubkey_auth_attempt ? "" : " test",
1200 (key == NULL || !authctxt->valid) ? "invalid" : sshkey_type(key),
1201 allowed ? "allowed" : "not allowed");
1187 1202
1188 auth2_record_key(authctxt, 0, key); 1203 auth2_record_key(authctxt, 0, key);
1189 sshkey_free(key); 1204 sshkey_free(key);
@@ -1196,6 +1211,7 @@ mm_answer_keyallowed(int sock, Buffer *m)
1196 key_blob = blob; 1211 key_blob = blob;
1197 key_bloblen = bloblen; 1212 key_bloblen = bloblen;
1198 key_blobtype = type; 1213 key_blobtype = type;
1214 key_opts = opts;
1199 hostbased_cuser = cuser; 1215 hostbased_cuser = cuser;
1200 hostbased_chost = chost; 1216 hostbased_chost = chost;
1201 } else { 1217 } else {
@@ -1208,10 +1224,13 @@ mm_answer_keyallowed(int sock, Buffer *m)
1208 1224
1209 buffer_clear(m); 1225 buffer_clear(m);
1210 buffer_put_int(m, allowed); 1226 buffer_put_int(m, allowed);
1211 buffer_put_int(m, forced_command != NULL); 1227 if (opts != NULL && (r = sshauthopt_serialise(opts, m, 1)) != 0)
1212 1228 fatal("%s: sshauthopt_serialise: %s", __func__, ssh_err(r));
1213 mm_request_send(sock, MONITOR_ANS_KEYALLOWED, m); 1229 mm_request_send(sock, MONITOR_ANS_KEYALLOWED, m);
1214 1230
1231 if (!allowed)
1232 sshauthopt_free(opts);
1233
1215 return (0); 1234 return (0);
1216} 1235}
1217 1236
@@ -1257,18 +1276,13 @@ monitor_valid_userblob(u_char *data, u_int datalen)
1257 free(userstyle); 1276 free(userstyle);
1258 free(cp); 1277 free(cp);
1259 buffer_skip_string(&b); 1278 buffer_skip_string(&b);
1260 if (datafellows & SSH_BUG_PKAUTH) { 1279 cp = buffer_get_cstring(&b, NULL);
1261 if (!buffer_get_char(&b)) 1280 if (strcmp("publickey", cp) != 0)
1262 fail++; 1281 fail++;
1263 } else { 1282 free(cp);
1264 cp = buffer_get_cstring(&b, NULL); 1283 if (!buffer_get_char(&b))
1265 if (strcmp("publickey", cp) != 0) 1284 fail++;
1266 fail++; 1285 buffer_skip_string(&b);
1267 free(cp);
1268 if (!buffer_get_char(&b))
1269 fail++;
1270 buffer_skip_string(&b);
1271 }
1272 buffer_skip_string(&b); 1286 buffer_skip_string(&b);
1273 if (buffer_len(&b) != 0) 1287 if (buffer_len(&b) != 0)
1274 fail++; 1288 fail++;
@@ -1339,20 +1353,29 @@ monitor_valid_hostbasedblob(u_char *data, u_int datalen, char *cuser,
1339int 1353int
1340mm_answer_keyverify(int sock, struct sshbuf *m) 1354mm_answer_keyverify(int sock, struct sshbuf *m)
1341{ 1355{
1356 struct ssh *ssh = active_state; /* XXX */
1342 struct sshkey *key; 1357 struct sshkey *key;
1343 u_char *signature, *data, *blob; 1358 u_char *signature, *data, *blob;
1359 char *sigalg;
1344 size_t signaturelen, datalen, bloblen; 1360 size_t signaturelen, datalen, bloblen;
1345 int r, ret, valid_data = 0, encoded_ret; 1361 int r, ret, valid_data = 0, encoded_ret;
1346 1362
1347 if ((r = sshbuf_get_string(m, &blob, &bloblen)) != 0 || 1363 if ((r = sshbuf_get_string(m, &blob, &bloblen)) != 0 ||
1348 (r = sshbuf_get_string(m, &signature, &signaturelen)) != 0 || 1364 (r = sshbuf_get_string(m, &signature, &signaturelen)) != 0 ||
1349 (r = sshbuf_get_string(m, &data, &datalen)) != 0) 1365 (r = sshbuf_get_string(m, &data, &datalen)) != 0 ||
1366 (r = sshbuf_get_cstring(m, &sigalg, NULL)) != 0)
1350 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 1367 fatal("%s: buffer error: %s", __func__, ssh_err(r));
1351 1368
1352 if (hostbased_cuser == NULL || hostbased_chost == NULL || 1369 if (hostbased_cuser == NULL || hostbased_chost == NULL ||
1353 !monitor_allowed_key(blob, bloblen)) 1370 !monitor_allowed_key(blob, bloblen))
1354 fatal("%s: bad key, not previously allowed", __func__); 1371 fatal("%s: bad key, not previously allowed", __func__);
1355 1372
1373 /* Empty signature algorithm means NULL. */
1374 if (*sigalg == '\0') {
1375 free(sigalg);
1376 sigalg = NULL;
1377 }
1378
1356 /* XXX use sshkey_froms here; need to change key_blob, etc. */ 1379 /* XXX use sshkey_froms here; need to change key_blob, etc. */
1357 if ((r = sshkey_from_blob(blob, bloblen, &key)) != 0) 1380 if ((r = sshkey_from_blob(blob, bloblen, &key)) != 0)
1358 fatal("%s: bad public key blob: %s", __func__, ssh_err(r)); 1381 fatal("%s: bad public key blob: %s", __func__, ssh_err(r));
@@ -1375,7 +1398,7 @@ mm_answer_keyverify(int sock, struct sshbuf *m)
1375 fatal("%s: bad signature data blob", __func__); 1398 fatal("%s: bad signature data blob", __func__);
1376 1399
1377 ret = sshkey_verify(key, signature, signaturelen, data, datalen, 1400 ret = sshkey_verify(key, signature, signaturelen, data, datalen,
1378 active_state->compat); 1401 sigalg, active_state->compat);
1379 debug3("%s: %s %p signature %s", __func__, auth_method, key, 1402 debug3("%s: %s %p signature %s", __func__, auth_method, key,
1380 (ret == 0) ? "verified" : "unverified"); 1403 (ret == 0) ? "verified" : "unverified");
1381 auth2_record_key(authctxt, ret == 0, key); 1404 auth2_record_key(authctxt, ret == 0, key);
@@ -1383,7 +1406,10 @@ mm_answer_keyverify(int sock, struct sshbuf *m)
1383 free(blob); 1406 free(blob);
1384 free(signature); 1407 free(signature);
1385 free(data); 1408 free(data);
1409 free(sigalg);
1386 1410
1411 if (key_blobtype == MM_USERKEY)
1412 auth_activate_options(ssh, key_opts);
1387 monitor_reset_key_state(); 1413 monitor_reset_key_state();
1388 1414
1389 sshkey_free(key); 1415 sshkey_free(key);
diff --git a/monitor_wrap.c b/monitor_wrap.c
index 69212aaf3..9666bda4b 100644
--- a/monitor_wrap.c
+++ b/monitor_wrap.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.c,v 1.94 2017/10/02 19:33:20 djm Exp $ */ 1/* $OpenBSD: monitor_wrap.c,v 1.99 2018/03/03 03:15:51 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>
@@ -76,7 +76,6 @@
76#include "atomicio.h" 76#include "atomicio.h"
77#include "monitor_fdpass.h" 77#include "monitor_fdpass.h"
78#include "misc.h" 78#include "misc.h"
79#include "uuencode.h"
80 79
81#include "channels.h" 80#include "channels.h"
82#include "session.h" 81#include "session.h"
@@ -287,19 +286,15 @@ out:
287 newopts->x = buffer_get_string(&m, NULL); \ 286 newopts->x = buffer_get_string(&m, NULL); \
288 } while (0) 287 } while (0)
289#define M_CP_STRARRAYOPT(x, nx) do { \ 288#define M_CP_STRARRAYOPT(x, nx) do { \
290 for (i = 0; i < newopts->nx; i++) \
291 newopts->x[i] = buffer_get_string(&m, NULL); \
292 } while (0)
293#define M_CP_STRARRAYOPT_ALLOC(x, nx) do { \
294 newopts->x = newopts->nx == 0 ? \ 289 newopts->x = newopts->nx == 0 ? \
295 NULL : xcalloc(newopts->nx, sizeof(*newopts->x)); \ 290 NULL : xcalloc(newopts->nx, sizeof(*newopts->x)); \
296 M_CP_STRARRAYOPT(x, nx); \ 291 for (i = 0; i < newopts->nx; i++) \
292 newopts->x[i] = buffer_get_string(&m, NULL); \
297 } while (0) 293 } while (0)
298 /* See comment in servconf.h */ 294 /* See comment in servconf.h */
299 COPY_MATCH_STRING_OPTS(); 295 COPY_MATCH_STRING_OPTS();
300#undef M_CP_STROPT 296#undef M_CP_STROPT
301#undef M_CP_STRARRAYOPT 297#undef M_CP_STRARRAYOPT
302#undef M_CP_STRARRAYOPT_ALLOC
303 298
304 copy_set_server_options(&options, newopts, 1); 299 copy_set_server_options(&options, newopts, 1);
305 log_change_level(options.log_level); 300 log_change_level(options.log_level);
@@ -356,7 +351,7 @@ mm_inform_authserv(char *service, char *style)
356 351
357/* Do the password authentication */ 352/* Do the password authentication */
358int 353int
359mm_auth_password(Authctxt *authctxt, char *password) 354mm_auth_password(struct ssh *ssh, char *password)
360{ 355{
361 Buffer m; 356 Buffer m;
362 int authenticated = 0; 357 int authenticated = 0;
@@ -383,34 +378,38 @@ mm_auth_password(Authctxt *authctxt, char *password)
383} 378}
384 379
385int 380int
386mm_user_key_allowed(struct passwd *pw, struct sshkey *key, 381mm_user_key_allowed(struct ssh *ssh, struct passwd *pw, struct sshkey *key,
387 int pubkey_auth_attempt) 382 int pubkey_auth_attempt, struct sshauthopt **authoptp)
388{ 383{
389 return (mm_key_allowed(MM_USERKEY, NULL, NULL, key, 384 return (mm_key_allowed(MM_USERKEY, NULL, NULL, key,
390 pubkey_auth_attempt)); 385 pubkey_auth_attempt, authoptp));
391} 386}
392 387
393int 388int
394mm_hostbased_key_allowed(struct passwd *pw, const char *user, const char *host, 389mm_hostbased_key_allowed(struct passwd *pw, const char *user, const char *host,
395 struct sshkey *key) 390 struct sshkey *key)
396{ 391{
397 return (mm_key_allowed(MM_HOSTKEY, user, host, key, 0)); 392 return (mm_key_allowed(MM_HOSTKEY, user, host, key, 0, NULL));
398} 393}
399 394
400int 395int
401mm_key_allowed(enum mm_keytype type, const char *user, const char *host, 396mm_key_allowed(enum mm_keytype type, const char *user, const char *host,
402 struct sshkey *key, int pubkey_auth_attempt) 397 struct sshkey *key, int pubkey_auth_attempt, struct sshauthopt **authoptp)
403{ 398{
404 Buffer m; 399 Buffer m;
405 u_char *blob; 400 u_char *blob;
406 u_int len; 401 u_int len;
407 int allowed = 0, have_forced = 0; 402 int r, allowed = 0;
403 struct sshauthopt *opts = NULL;
408 404
409 debug3("%s entering", __func__); 405 debug3("%s entering", __func__);
410 406
407 if (authoptp != NULL)
408 *authoptp = NULL;
409
411 /* Convert the key to a blob and the pass it over */ 410 /* Convert the key to a blob and the pass it over */
412 if (!key_to_blob(key, &blob, &len)) 411 if (!key_to_blob(key, &blob, &len))
413 return (0); 412 return 0;
414 413
415 buffer_init(&m); 414 buffer_init(&m);
416 buffer_put_int(&m, type); 415 buffer_put_int(&m, type);
@@ -423,18 +422,24 @@ mm_key_allowed(enum mm_keytype type, const char *user, const char *host,
423 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYALLOWED, &m); 422 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYALLOWED, &m);
424 423
425 debug3("%s: waiting for MONITOR_ANS_KEYALLOWED", __func__); 424 debug3("%s: waiting for MONITOR_ANS_KEYALLOWED", __func__);
426 mm_request_receive_expect(pmonitor->m_recvfd, MONITOR_ANS_KEYALLOWED, &m); 425 mm_request_receive_expect(pmonitor->m_recvfd,
426 MONITOR_ANS_KEYALLOWED, &m);
427 427
428 allowed = buffer_get_int(&m); 428 allowed = buffer_get_int(&m);
429 429 if (allowed && type == MM_USERKEY) {
430 /* fake forced command */ 430 if ((r = sshauthopt_deserialise(&m, &opts)) != 0)
431 auth_clear_options(); 431 fatal("%s: sshauthopt_deserialise: %s",
432 have_forced = buffer_get_int(&m); 432 __func__, ssh_err(r));
433 forced_command = have_forced ? xstrdup("true") : NULL; 433 }
434
435 buffer_free(&m); 434 buffer_free(&m);
436 435
437 return (allowed); 436 if (authoptp != NULL) {
437 *authoptp = opts;
438 opts = NULL;
439 }
440 sshauthopt_free(opts);
441
442 return allowed;
438} 443}
439 444
440/* 445/*
@@ -445,7 +450,7 @@ mm_key_allowed(enum mm_keytype type, const char *user, const char *host,
445 450
446int 451int
447mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen, 452mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen,
448 const u_char *data, size_t datalen, u_int compat) 453 const u_char *data, size_t datalen, const char *sigalg, u_int compat)
449{ 454{
450 Buffer m; 455 Buffer m;
451 u_char *blob; 456 u_char *blob;
@@ -462,6 +467,7 @@ mm_sshkey_verify(const struct sshkey *key, const u_char *sig, size_t siglen,
462 buffer_put_string(&m, blob, len); 467 buffer_put_string(&m, blob, len);
463 buffer_put_string(&m, sig, siglen); 468 buffer_put_string(&m, sig, siglen);
464 buffer_put_string(&m, data, datalen); 469 buffer_put_string(&m, data, datalen);
470 buffer_put_cstring(&m, sigalg == NULL ? "" : sigalg);
465 free(blob); 471 free(blob);
466 472
467 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYVERIFY, &m); 473 mm_request_send(pmonitor->m_recvfd, MONITOR_REQ_KEYVERIFY, &m);
diff --git a/monitor_wrap.h b/monitor_wrap.h
index 9e032d204..762332704 100644
--- a/monitor_wrap.h
+++ b/monitor_wrap.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: monitor_wrap.h,v 1.35 2017/05/31 08:09:45 markus Exp $ */ 1/* $OpenBSD: monitor_wrap.h,v 1.37 2018/03/03 03:15:51 djm Exp $ */
2 2
3/* 3/*
4 * Copyright 2002 Niels Provos <provos@citi.umich.edu> 4 * Copyright 2002 Niels Provos <provos@citi.umich.edu>
@@ -35,6 +35,8 @@ enum mm_keytype { MM_NOKEY, MM_HOSTKEY, MM_USERKEY };
35 35
36struct monitor; 36struct monitor;
37struct Authctxt; 37struct Authctxt;
38struct sshkey;
39struct sshauthopt;
38 40
39void mm_log_handler(LogLevel, const char *, void *); 41void mm_log_handler(LogLevel, const char *, void *);
40int mm_is_monitor(void); 42int mm_is_monitor(void);
@@ -44,14 +46,15 @@ int mm_key_sign(struct sshkey *, u_char **, u_int *, const u_char *, u_int,
44void mm_inform_authserv(char *, char *); 46void mm_inform_authserv(char *, char *);
45struct passwd *mm_getpwnamallow(const char *); 47struct passwd *mm_getpwnamallow(const char *);
46char *mm_auth2_read_banner(void); 48char *mm_auth2_read_banner(void);
47int mm_auth_password(struct Authctxt *, char *); 49int mm_auth_password(struct ssh *, char *);
48int mm_key_allowed(enum mm_keytype, const char *, const char *, struct sshkey *, 50int mm_key_allowed(enum mm_keytype, const char *, const char *, struct sshkey *,
49 int); 51 int, struct sshauthopt **);
50int mm_user_key_allowed(struct passwd *, struct sshkey *, int); 52int mm_user_key_allowed(struct ssh *, struct passwd *, struct sshkey *, int,
53 struct sshauthopt **);
51int mm_hostbased_key_allowed(struct passwd *, const char *, 54int mm_hostbased_key_allowed(struct passwd *, const char *,
52 const char *, struct sshkey *); 55 const char *, struct sshkey *);
53int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t, 56int mm_sshkey_verify(const struct sshkey *, const u_char *, size_t,
54 const u_char *, size_t, u_int); 57 const u_char *, size_t, const char *, u_int);
55 58
56#ifdef GSSAPI 59#ifdef GSSAPI
57OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID); 60OM_uint32 mm_ssh_gssapi_server_ctx(Gssctxt **, gss_OID);
diff --git a/opacket.c b/opacket.c
index ad244b452..fca48e5f5 100644
--- a/opacket.c
+++ b/opacket.c
@@ -1,3 +1,4 @@
1/* $OpenBSD: opacket.c,v 1.7 2017/10/20 01:56:39 djm Exp $ */
1/* Written by Markus Friedl. Placed in the public domain. */ 2/* Written by Markus Friedl. Placed in the public domain. */
2 3
3#include "includes.h" 4#include "includes.h"
diff --git a/opacket.h b/opacket.h
index c49d0c04a..b2c2e7f6a 100644
--- a/opacket.h
+++ b/opacket.h
@@ -1,3 +1,4 @@
1/* $OpenBSD: opacket.h,v 1.12 2017/10/20 01:56:39 djm Exp $ */
1#ifndef _OPACKET_H 2#ifndef _OPACKET_H
2/* Written by Markus Friedl. Placed in the public domain. */ 3/* Written by Markus Friedl. Placed in the public domain. */
3 4
diff --git a/openbsd-compat/Makefile.in b/openbsd-compat/Makefile.in
index ac8ae4305..8e3b42991 100644
--- a/openbsd-compat/Makefile.in
+++ b/openbsd-compat/Makefile.in
@@ -1,5 +1,3 @@
1# $Id: Makefile.in,v 1.56 2014/09/30 23:43:08 djm Exp $
2
3sysconfdir=@sysconfdir@ 1sysconfdir=@sysconfdir@
4piddir=@piddir@ 2piddir=@piddir@
5srcdir=@srcdir@ 3srcdir=@srcdir@
@@ -16,11 +14,84 @@ RANLIB=@RANLIB@
16INSTALL=@INSTALL@ 14INSTALL=@INSTALL@
17LDFLAGS=-L. @LDFLAGS@ 15LDFLAGS=-L. @LDFLAGS@
18 16
19OPENBSD=base64.o basename.o bcrypt_pbkdf.o bindresvport.o blowfish.o daemon.o dirname.o fmt_scaled.o getcwd.o getgrouplist.o getopt_long.o getrrsetbyname.o glob.o inet_aton.o inet_ntoa.o inet_ntop.o mktemp.o pwcache.o readpassphrase.o reallocarray.o realpath.o recallocarray.o rresvport.o setenv.o setproctitle.o sha1.o sha2.o rmd160.o md5.o sigact.o strcasestr.o strlcat.o strlcpy.o strmode.o strnlen.o strptime.o strsep.o strtonum.o strtoll.o strtoul.o strtoull.o timingsafe_bcmp.o vis.o blowfish.o bcrypt_pbkdf.o explicit_bzero.o freezero.o 17OPENBSD=base64.o \
18 basename.o \
19 bcrypt_pbkdf.o \
20 bcrypt_pbkdf.o \
21 bindresvport.o \
22 blowfish.o \
23 daemon.o \
24 dirname.o \
25 explicit_bzero.o \
26 fmt_scaled.o \
27 freezero.o \
28 getcwd.o \
29 getgrouplist.o \
30 getopt_long.o \
31 getrrsetbyname.o \
32 glob.o \
33 inet_aton.o \
34 inet_ntoa.o \
35 inet_ntop.o \
36 md5.o \
37 mktemp.o \
38 pwcache.o \
39 readpassphrase.o \
40 reallocarray.o \
41 realpath.o \
42 recallocarray.o \
43 rmd160.o \
44 rresvport.o \
45 setenv.o \
46 setproctitle.o \
47 sha1.o \
48 sha2.o \
49 sigact.o \
50 strcasestr.o \
51 strlcat.o \
52 strlcpy.o \
53 strmode.o \
54 strndup.o \
55 strnlen.o \
56 strptime.o \
57 strsep.o \
58 strtoll.o \
59 strtonum.o \
60 strtoull.o \
61 strtoul.o \
62 timingsafe_bcmp.o \
63 vis.o
20 64
21COMPAT=arc4random.o bsd-asprintf.o bsd-closefrom.o bsd-cray.o bsd-cygwin_util.o bsd-getpeereid.o getrrsetbyname-ldns.o bsd-err.o bsd-getpagesize.o bsd-misc.o bsd-nextstep.o bsd-openpty.o bsd-poll.o bsd-malloc.o bsd-setres_id.o bsd-snprintf.o bsd-statvfs.o bsd-waitpid.o fake-rfc2553.o openssl-compat.o xcrypt.o kludge-fd_set.o 65COMPAT= arc4random.o \
66 bsd-asprintf.o \
67 bsd-closefrom.o \
68 bsd-cygwin_util.o \
69 bsd-err.o \
70 bsd-flock.o \
71 bsd-getpagesize.o \
72 bsd-getpeereid.o \
73 bsd-malloc.o \
74 bsd-misc.o \
75 bsd-nextstep.o \
76 bsd-openpty.o \
77 bsd-poll.o \
78 bsd-setres_id.o \
79 bsd-signal.o \
80 bsd-snprintf.o \
81 bsd-statvfs.o \
82 bsd-waitpid.o \
83 fake-rfc2553.o \
84 getrrsetbyname-ldns.o \
85 kludge-fd_set.o \
86 openssl-compat.o \
87 xcrypt.o
22 88
23PORTS=port-aix.o port-irix.o port-linux.o port-solaris.o port-tun.o port-uw.o 89PORTS= port-aix.o \
90 port-irix.o \
91 port-linux.o \
92 port-solaris.o \
93 port-net.o \
94 port-uw.o
24 95
25.c.o: 96.c.o:
26 $(CC) $(CFLAGS) $(CPPFLAGS) -c $< 97 $(CC) $(CFLAGS) $(CPPFLAGS) -c $<
diff --git a/openbsd-compat/bsd-cray.c b/openbsd-compat/bsd-cray.c
deleted file mode 100644
index c02e63261..000000000
--- a/openbsd-compat/bsd-cray.c
+++ /dev/null
@@ -1,816 +0,0 @@
1/*
2 *
3 * bsd-cray.c
4 *
5 * Copyright (c) 2002, Cray Inc. (Wendy Palm <wendyp@cray.com>)
6 * Significant portions provided by
7 * Wayne Schroeder, SDSC <schroeder@sdsc.edu>
8 * William Jones, UTexas <jones@tacc.utexas.edu>
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 *
30 * Created: Apr 22 16.34:00 2002 wp
31 *
32 * This file contains functions required for proper execution
33 * on UNICOS systems.
34 *
35 */
36#ifdef _UNICOS
37
38#include <udb.h>
39#include <tmpdir.h>
40#include <unistd.h>
41#include <sys/category.h>
42#include <utmp.h>
43#include <sys/jtab.h>
44#include <signal.h>
45#include <sys/priv.h>
46#include <sys/secparm.h>
47#include <sys/tfm.h>
48#include <sys/usrv.h>
49#include <sys/sysv.h>
50#include <sys/sectab.h>
51#include <sys/secstat.h>
52#include <sys/stat.h>
53#include <sys/session.h>
54#include <stdarg.h>
55#include <stdlib.h>
56#include <string.h>
57#include <unistd.h>
58#include <pwd.h>
59#include <fcntl.h>
60#include <errno.h>
61#include <ia.h>
62#include <urm.h>
63#include "ssh.h"
64
65#include "includes.h"
66#include "sys/types.h"
67
68#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
69# define _SS_MAXSIZE 128 /* Implementation specific max size */
70# define _SS_PADSIZE (_SS_MAXSIZE - sizeof (struct sockaddr))
71
72# define ss_family ss_sa.sa_family
73#endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
74
75#ifndef IN6_IS_ADDR_LOOPBACK
76# define IN6_IS_ADDR_LOOPBACK(a) \
77 (((u_int32_t *) (a))[0] == 0 && ((u_int32_t *) (a))[1] == 0 && \
78 ((u_int32_t *) (a))[2] == 0 && ((u_int32_t *) (a))[3] == htonl (1))
79#endif /* !IN6_IS_ADDR_LOOPBACK */
80
81#ifndef AF_INET6
82/* Define it to something that should never appear */
83#define AF_INET6 AF_MAX
84#endif
85
86#include "log.h"
87#include "servconf.h"
88#include "bsd-cray.h"
89
90#define MAXACID 80
91
92extern ServerOptions options;
93
94char cray_tmpdir[TPATHSIZ + 1]; /* job TMPDIR path */
95
96struct sysv sysv; /* system security structure */
97struct usrv usrv; /* user security structure */
98
99/*
100 * Functions.
101 */
102void cray_retain_utmp(struct utmp *, int);
103void cray_delete_tmpdir(char *, int, uid_t);
104void cray_init_job(struct passwd *);
105void cray_set_tmpdir(struct utmp *);
106void cray_login_failure(char *, int);
107int cray_setup(uid_t, char *, const char *);
108int cray_access_denied(char *);
109
110void
111cray_login_failure(char *username, int errcode)
112{
113 struct udb *ueptr; /* UDB pointer for username */
114 ia_failure_t fsent; /* ia_failure structure */
115 ia_failure_ret_t fret; /* ia_failure return stuff */
116 struct jtab jtab; /* job table structure */
117 int jid = 0; /* job id */
118
119 if ((jid = getjtab(&jtab)) < 0)
120 debug("cray_login_failure(): getjtab error");
121
122 getsysudb();
123 if ((ueptr = getudbnam(username)) == UDB_NULL)
124 debug("cray_login_failure(): getudbname() returned NULL");
125 endudb();
126
127 memset(&fsent, '\0', sizeof(fsent));
128 fsent.revision = 0;
129 fsent.uname = username;
130 fsent.host = (char *)get_canonical_hostname(options.use_dns);
131 fsent.ttyn = "sshd";
132 fsent.caller = IA_SSHD;
133 fsent.flags = IA_INTERACTIVE;
134 fsent.ueptr = ueptr;
135 fsent.jid = jid;
136 fsent.errcode = errcode;
137 fsent.pwdp = NULL;
138 fsent.exitcode = 0; /* dont exit in ia_failure() */
139
140 fret.revision = 0;
141 fret.normal = 0;
142
143 /*
144 * Call ia_failure because of an login failure.
145 */
146 ia_failure(&fsent, &fret);
147}
148
149/*
150 * Cray access denied
151 */
152int
153cray_access_denied(char *username)
154{
155 struct udb *ueptr; /* UDB pointer for username */
156 int errcode; /* IA errorcode */
157
158 errcode = 0;
159 getsysudb();
160 if ((ueptr = getudbnam(username)) == UDB_NULL)
161 debug("cray_login_failure(): getudbname() returned NULL");
162 endudb();
163
164 if (ueptr != NULL && ueptr->ue_disabled)
165 errcode = IA_DISABLED;
166 if (errcode)
167 cray_login_failure(username, errcode);
168
169 return (errcode);
170}
171
172/*
173 * record_failed_login: generic "login failed" interface function
174 */
175void
176record_failed_login(const char *user, const char *hostname, const char *ttyname)
177{
178 cray_login_failure((char *)user, IA_UDBERR);
179}
180
181int
182cray_setup (uid_t uid, char *username, const char *command)
183{
184 extern struct udb *getudb();
185 extern char *setlimits();
186
187 int err; /* error return */
188 time_t system_time; /* current system clock */
189 time_t expiration_time; /* password expiration time */
190 int maxattempts; /* maximum no. of failed login attempts */
191 int SecureSys; /* unicos security flag */
192 int minslevel = 0; /* system minimum security level */
193 int i, j;
194 int valid_acct = -1; /* flag for reading valid acct */
195 char acct_name[MAXACID] = { "" }; /* used to read acct name */
196 struct jtab jtab; /* Job table struct */
197 struct udb ue; /* udb entry for logging-in user */
198 struct udb *up; /* pointer to UDB entry */
199 struct secstat secinfo; /* file security attributes */
200 struct servprov init_info; /* used for sesscntl() call */
201 int jid; /* job ID */
202 int pid; /* process ID */
203 char *sr; /* status return from setlimits() */
204 char *ttyn = NULL; /* ttyname or command name*/
205 char hostname[MAXHOSTNAMELEN];
206 /* passwd stuff for ia_user */
207 passwd_t pwdacm, pwddialup, pwdudb, pwdwal, pwddce;
208 ia_user_ret_t uret; /* stuff returned from ia_user */
209 ia_user_t usent; /* ia_user main structure */
210 int ia_rcode; /* ia_user return code */
211 ia_failure_t fsent; /* ia_failure structure */
212 ia_failure_ret_t fret; /* ia_failure return stuff */
213 ia_success_t ssent; /* ia_success structure */
214 ia_success_ret_t sret; /* ia_success return stuff */
215 int ia_mlsrcode; /* ia_mlsuser return code */
216 int secstatrc; /* [f]secstat return code */
217
218 if (SecureSys = (int)sysconf(_SC_CRAY_SECURE_SYS)) {
219 getsysv(&sysv, sizeof(struct sysv));
220 minslevel = sysv.sy_minlvl;
221 if (getusrv(&usrv) < 0)
222 fatal("getusrv() failed, errno = %d", errno);
223 }
224 hostname[0] = '\0';
225 strlcpy(hostname,
226 (char *)get_canonical_hostname(options.use_dns),
227 MAXHOSTNAMELEN);
228 /*
229 * Fetch user's UDB entry.
230 */
231 getsysudb();
232 if ((up = getudbnam(username)) == UDB_NULL)
233 fatal("cannot fetch user's UDB entry");
234
235 /*
236 * Prevent any possible fudging so perform a data
237 * safety check and compare the supplied uid against
238 * the udb's uid.
239 */
240 if (up->ue_uid != uid)
241 fatal("IA uid missmatch");
242 endudb();
243
244 if ((jid = getjtab(&jtab)) < 0) {
245 debug("getjtab");
246 return(-1);
247 }
248 pid = getpid();
249 ttyn = ttyname(0);
250 if (SecureSys) {
251 if (ttyn != NULL)
252 secstatrc = secstat(ttyn, &secinfo);
253 else
254 secstatrc = fsecstat(1, &secinfo);
255
256 if (secstatrc == 0)
257 debug("[f]secstat() successful");
258 else
259 fatal("[f]secstat() error, rc = %d", secstatrc);
260 }
261 if ((ttyn == NULL) && ((char *)command != NULL))
262 ttyn = (char *)command;
263 /*
264 * Initialize all structures to call ia_user
265 */
266 usent.revision = 0;
267 usent.uname = username;
268 usent.host = hostname;
269 usent.ttyn = ttyn;
270 usent.caller = IA_SSHD;
271 usent.pswdlist = &pwdacm;
272 usent.ueptr = &ue;
273 usent.flags = IA_INTERACTIVE | IA_FFLAG;
274 pwdacm.atype = IA_SECURID;
275 pwdacm.pwdp = NULL;
276 pwdacm.next = &pwdudb;
277
278 pwdudb.atype = IA_UDB;
279 pwdudb.pwdp = NULL;
280 pwdudb.next = &pwddce;
281
282 pwddce.atype = IA_DCE;
283 pwddce.pwdp = NULL;
284 pwddce.next = &pwddialup;
285
286 pwddialup.atype = IA_DIALUP;
287 pwddialup.pwdp = NULL;
288 /* pwddialup.next = &pwdwal; */
289 pwddialup.next = NULL;
290
291 pwdwal.atype = IA_WAL;
292 pwdwal.pwdp = NULL;
293 pwdwal.next = NULL;
294
295 uret.revision = 0;
296 uret.pswd = NULL;
297 uret.normal = 0;
298
299 ia_rcode = ia_user(&usent, &uret);
300 switch (ia_rcode) {
301 /*
302 * These are acceptable return codes from ia_user()
303 */
304 case IA_UDBWEEK: /* Password Expires in 1 week */
305 expiration_time = ue.ue_pwage.time + ue.ue_pwage.maxage;
306 printf ("WARNING - your current password will expire %s\n",
307 ctime((const time_t *)&expiration_time));
308 break;
309 case IA_UDBEXPIRED:
310 if (ttyname(0) != NULL) {
311 /* Force a password change */
312 printf("Your password has expired; Choose a new one.\n");
313 execl("/bin/passwd", "passwd", username, 0);
314 exit(9);
315 }
316 break;
317 case IA_NORMAL: /* Normal Return Code */
318 break;
319 case IA_BACKDOOR:
320 /* XXX: can we memset it to zero here so save some of this */
321 strlcpy(ue.ue_name, "root", sizeof(ue.ue_name));
322 strlcpy(ue.ue_dir, "/", sizeof(ue.ue_dir));
323 strlcpy(ue.ue_shell, "/bin/sh", sizeof(ue.ue_shell));
324
325 ue.ue_passwd[0] = '\0';
326 ue.ue_age[0] = '\0';
327 ue.ue_comment[0] = '\0';
328 ue.ue_loghost[0] = '\0';
329 ue.ue_logline[0] = '\0';
330
331 ue.ue_uid = -1;
332 ue.ue_nice[UDBRC_INTER] = 0;
333
334 for (i = 0; i < MAXVIDS; i++)
335 ue.ue_gids[i] = 0;
336
337 ue.ue_logfails = 0;
338 ue.ue_minlvl = ue.ue_maxlvl = ue.ue_deflvl = minslevel;
339 ue.ue_defcomps = 0;
340 ue.ue_comparts = 0;
341 ue.ue_permits = 0;
342 ue.ue_trap = 0;
343 ue.ue_disabled = 0;
344 ue.ue_logtime = 0;
345 break;
346 case IA_CONSOLE: /* Superuser not from Console */
347 case IA_TRUSTED: /* Trusted user */
348 if (options.permit_root_login > PERMIT_NO)
349 break; /* Accept root login */
350 default:
351 /*
352 * These are failed return codes from ia_user()
353 */
354 switch (ia_rcode)
355 {
356 case IA_BADAUTH:
357 printf("Bad authorization, access denied.\n");
358 break;
359 case IA_DISABLED:
360 printf("Your login has been disabled. Contact the system ");
361 printf("administrator for assistance.\n");
362 break;
363 case IA_GETSYSV:
364 printf("getsysv() failed - errno = %d\n", errno);
365 break;
366 case IA_MAXLOGS:
367 printf("Maximum number of failed login attempts exceeded.\n");
368 printf("Access denied.\n");
369 break;
370 case IA_UDBPWDNULL:
371 if (SecureSys)
372 printf("NULL Password not allowed on MLS systems.\n");
373 break;
374 default:
375 break;
376 }
377
378 /*
379 * Authentication failed.
380 */
381 printf("sshd: Login incorrect, (0%o)\n",
382 ia_rcode-IA_ERRORCODE);
383
384 /*
385 * Initialize structure for ia_failure
386 * which will exit.
387 */
388 fsent.revision = 0;
389 fsent.uname = username;
390 fsent.host = hostname;
391 fsent.ttyn = ttyn;
392 fsent.caller = IA_SSHD;
393 fsent.flags = IA_INTERACTIVE;
394 fsent.ueptr = &ue;
395 fsent.jid = jid;
396 fsent.errcode = ia_rcode;
397 fsent.pwdp = uret.pswd;
398 fsent.exitcode = 1;
399
400 fret.revision = 0;
401 fret.normal = 0;
402
403 /*
404 * Call ia_failure because of an IA failure.
405 * There is no return because ia_failure exits.
406 */
407 ia_failure(&fsent, &fret);
408
409 exit(1);
410 }
411
412 ia_mlsrcode = IA_NORMAL;
413 if (SecureSys) {
414 debug("calling ia_mlsuser()");
415 ia_mlsrcode = ia_mlsuser(&ue, &secinfo, &usrv, NULL, 0);
416 }
417 if (ia_mlsrcode != IA_NORMAL) {
418 printf("sshd: Login incorrect, (0%o)\n",
419 ia_mlsrcode-IA_ERRORCODE);
420 /*
421 * Initialize structure for ia_failure
422 * which will exit.
423 */
424 fsent.revision = 0;
425 fsent.uname = username;
426 fsent.host = hostname;
427 fsent.ttyn = ttyn;
428 fsent.caller = IA_SSHD;
429 fsent.flags = IA_INTERACTIVE;
430 fsent.ueptr = &ue;
431 fsent.jid = jid;
432 fsent.errcode = ia_mlsrcode;
433 fsent.pwdp = uret.pswd;
434 fsent.exitcode = 1;
435 fret.revision = 0;
436 fret.normal = 0;
437
438 /*
439 * Call ia_failure because of an IA failure.
440 * There is no return because ia_failure exits.
441 */
442 ia_failure(&fsent,&fret);
443 exit(1);
444 }
445
446 /* Provide login status information */
447 if (options.print_lastlog && ue.ue_logtime != 0) {
448 printf("Last successful login was : %.*s ", 19,
449 (char *)ctime(&ue.ue_logtime));
450
451 if (*ue.ue_loghost != '\0') {
452 printf("from %.*s\n", sizeof(ue.ue_loghost),
453 ue.ue_loghost);
454 } else {
455 printf("on %.*s\n", sizeof(ue.ue_logline),
456 ue.ue_logline);
457 }
458
459 if (SecureSys && (ue.ue_logfails != 0)) {
460 printf(" followed by %d failed attempts\n",
461 ue.ue_logfails);
462 }
463 }
464
465 /*
466 * Call ia_success to process successful I/A.
467 */
468 ssent.revision = 0;
469 ssent.uname = username;
470 ssent.host = hostname;
471 ssent.ttyn = ttyn;
472 ssent.caller = IA_SSHD;
473 ssent.flags = IA_INTERACTIVE;
474 ssent.ueptr = &ue;
475 ssent.jid = jid;
476 ssent.errcode = ia_rcode;
477 ssent.us = NULL;
478 ssent.time = 1; /* Set ue_logtime */
479
480 sret.revision = 0;
481 sret.normal = 0;
482
483 ia_success(&ssent, &sret);
484
485 /*
486 * Query for account, iff > 1 valid acid & askacid permbit
487 */
488 if (((ue.ue_permbits & PERMBITS_ACCTID) ||
489 (ue.ue_acids[0] >= 0) && (ue.ue_acids[1] >= 0)) &&
490 ue.ue_permbits & PERMBITS_ASKACID) {
491 if (ttyname(0) != NULL) {
492 debug("cray_setup: ttyname true case, %.100s", ttyname);
493 while (valid_acct == -1) {
494 printf("Account (? for available accounts)"
495 " [%s]: ", acid2nam(ue.ue_acids[0]));
496 fgets(acct_name, MAXACID, stdin);
497 switch (acct_name[0]) {
498 case EOF:
499 exit(0);
500 break;
501 case '\0':
502 valid_acct = ue.ue_acids[0];
503 strlcpy(acct_name, acid2nam(valid_acct), MAXACID);
504 break;
505 case '?':
506 /* Print the list 3 wide */
507 for (i = 0, j = 0; i < MAXVIDS; i++) {
508 if (ue.ue_acids[i] == -1) {
509 printf("\n");
510 break;
511 }
512 if (++j == 4) {
513 j = 1;
514 printf("\n");
515 }
516 printf(" %s",
517 acid2nam(ue.ue_acids[i]));
518 }
519 if (ue.ue_permbits & PERMBITS_ACCTID) {
520 printf("\"acctid\" permbit also allows"
521 " you to select any valid "
522 "account name.\n");
523 }
524 printf("\n");
525 break;
526 default:
527 valid_acct = nam2acid(acct_name);
528 if (valid_acct == -1)
529 printf(
530 "Account id not found for"
531 " account name \"%s\"\n\n",
532 acct_name);
533 break;
534 }
535 /*
536 * If an account was given, search the user's
537 * acids array to verify they can use this account.
538 */
539 if ((valid_acct != -1) &&
540 !(ue.ue_permbits & PERMBITS_ACCTID)) {
541 for (i = 0; i < MAXVIDS; i++) {
542 if (ue.ue_acids[i] == -1)
543 break;
544 if (valid_acct == ue.ue_acids[i])
545 break;
546 }
547 if (i == MAXVIDS ||
548 ue.ue_acids[i] == -1) {
549 fprintf(stderr, "Cannot set"
550 " account name to "
551 "\"%s\", permission "
552 "denied\n\n", acct_name);
553 valid_acct = -1;
554 }
555 }
556 }
557 } else {
558 /*
559 * The client isn't connected to a terminal and can't
560 * respond to an acid prompt. Use default acid.
561 */
562 debug("cray_setup: ttyname false case, %.100s",
563 ttyname);
564 valid_acct = ue.ue_acids[0];
565 }
566 } else {
567 /*
568 * The user doesn't have the askacid permbit set or
569 * only has one valid account to use.
570 */
571 valid_acct = ue.ue_acids[0];
572 }
573 if (acctid(0, valid_acct) < 0) {
574 printf ("Bad account id: %d\n", valid_acct);
575 exit(1);
576 }
577
578 /*
579 * Now set shares, quotas, limits, including CPU time for the
580 * (interactive) job and process, and set up permissions
581 * (for chown etc), etc.
582 */
583 if (setshares(ue.ue_uid, valid_acct, printf, 0, 0)) {
584 printf("Unable to give %d shares to <%s>(%d/%d)\n",
585 ue.ue_shares, ue.ue_name, ue.ue_uid, valid_acct);
586 exit(1);
587 }
588
589 sr = setlimits(username, C_PROC, pid, UDBRC_INTER);
590 if (sr != NULL) {
591 debug("%.200s", sr);
592 exit(1);
593 }
594 sr = setlimits(username, C_JOB, jid, UDBRC_INTER);
595 if (sr != NULL) {
596 debug("%.200s", sr);
597 exit(1);
598 }
599 /*
600 * Place the service provider information into
601 * the session table (Unicos) or job table (Unicos/mk).
602 * There exist double defines for the job/session table in
603 * unicos/mk (jtab.h) so no need for a compile time switch.
604 */
605 memset(&init_info, '\0', sizeof(init_info));
606 init_info.s_sessinit.si_id = URM_SPT_LOGIN;
607 init_info.s_sessinit.si_pid = getpid();
608 init_info.s_sessinit.si_sid = jid;
609 sesscntl(0, S_SETSERVPO, (int)&init_info);
610
611 /*
612 * Set user and controlling tty security attributes.
613 */
614 if (SecureSys) {
615 if (setusrv(&usrv) == -1) {
616 debug("setusrv() failed, errno = %d",errno);
617 exit(1);
618 }
619 }
620
621 return (0);
622}
623
624/*
625 * The rc.* and /etc/sdaemon methods of starting a program on unicos/unicosmk
626 * can have pal privileges that sshd can inherit which
627 * could allow a user to su to root with out a password.
628 * This subroutine clears all privileges.
629 */
630void
631drop_cray_privs()
632{
633#if defined(_SC_CRAY_PRIV_SU)
634 priv_proc_t *privstate;
635 int result;
636 extern int priv_set_proc();
637 extern priv_proc_t *priv_init_proc();
638
639 /*
640 * If ether of theses two flags are not set
641 * then don't allow this version of ssh to run.
642 */
643 if (!sysconf(_SC_CRAY_PRIV_SU))
644 fatal("Not PRIV_SU system.");
645 if (!sysconf(_SC_CRAY_POSIX_PRIV))
646 fatal("Not POSIX_PRIV.");
647
648 debug("Setting MLS labels.");;
649
650 if (sysconf(_SC_CRAY_SECURE_MAC)) {
651 usrv.sv_minlvl = SYSLOW;
652 usrv.sv_actlvl = SYSHIGH;
653 usrv.sv_maxlvl = SYSHIGH;
654 } else {
655 usrv.sv_minlvl = sysv.sy_minlvl;
656 usrv.sv_actlvl = sysv.sy_minlvl;
657 usrv.sv_maxlvl = sysv.sy_maxlvl;
658 }
659 usrv.sv_actcmp = 0;
660 usrv.sv_valcmp = sysv.sy_valcmp;
661
662 usrv.sv_intcat = TFM_SYSTEM;
663 usrv.sv_valcat |= (TFM_SYSTEM | TFM_SYSFILE);
664
665 if (setusrv(&usrv) < 0) {
666 fatal("%s(%d): setusrv(): %s", __FILE__, __LINE__,
667 strerror(errno));
668 }
669
670 if ((privstate = priv_init_proc()) != NULL) {
671 result = priv_set_proc(privstate);
672 if (result != 0 ) {
673 fatal("%s(%d): priv_set_proc(): %s",
674 __FILE__, __LINE__, strerror(errno));
675 }
676 priv_free_proc(privstate);
677 }
678 debug ("Privileges should be cleared...");
679#else
680 /* XXX: do this differently */
681# error Cray systems must be run with _SC_CRAY_PRIV_SU on!
682#endif
683}
684
685
686/*
687 * Retain utmp/wtmp information - used by cray accounting.
688 */
689void
690cray_retain_utmp(struct utmp *ut, int pid)
691{
692 int fd;
693 struct utmp utmp;
694
695 if ((fd = open(UTMP_FILE, O_RDONLY)) != -1) {
696 /* XXX use atomicio */
697 while (read(fd, (char *)&utmp, sizeof(utmp)) == sizeof(utmp)) {
698 if (pid == utmp.ut_pid) {
699 ut->ut_jid = utmp.ut_jid;
700 strncpy(ut->ut_tpath, utmp.ut_tpath, sizeof(utmp.ut_tpath));
701 strncpy(ut->ut_host, utmp.ut_host, sizeof(utmp.ut_host));
702 strncpy(ut->ut_name, utmp.ut_name, sizeof(utmp.ut_name));
703 break;
704 }
705 }
706 close(fd);
707 } else
708 fatal("Unable to open utmp file");
709}
710
711/*
712 * tmpdir support.
713 */
714
715/*
716 * find and delete jobs tmpdir.
717 */
718void
719cray_delete_tmpdir(char *login, int jid, uid_t uid)
720{
721 static char jtmp[TPATHSIZ];
722 struct stat statbuf;
723 int child, c, wstat;
724
725 for (c = 'a'; c <= 'z'; c++) {
726 snprintf(jtmp, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c);
727 if (stat(jtmp, &statbuf) == 0 && statbuf.st_uid == uid)
728 break;
729 }
730
731 if (c > 'z')
732 return;
733
734 if ((child = fork()) == 0) {
735 execl(CLEANTMPCMD, CLEANTMPCMD, login, jtmp, (char *)NULL);
736 fatal("cray_delete_tmpdir: execl of CLEANTMPCMD failed");
737 }
738
739 while (waitpid(child, &wstat, 0) == -1 && errno == EINTR)
740 ;
741}
742
743/*
744 * Remove tmpdir on job termination.
745 */
746void
747cray_job_termination_handler(int sig)
748{
749 int jid;
750 char *login = NULL;
751 struct jtab jtab;
752
753 if ((jid = waitjob(&jtab)) == -1 ||
754 (login = uid2nam(jtab.j_uid)) == NULL)
755 return;
756
757 cray_delete_tmpdir(login, jid, jtab.j_uid);
758}
759
760/*
761 * Set job id and create tmpdir directory.
762 */
763void
764cray_init_job(struct passwd *pw)
765{
766 int jid;
767 int c;
768
769 jid = setjob(pw->pw_uid, WJSIGNAL);
770 if (jid < 0)
771 fatal("System call setjob failure");
772
773 for (c = 'a'; c <= 'z'; c++) {
774 snprintf(cray_tmpdir, TPATHSIZ, "%s/jtmp.%06d%c", JTMPDIR, jid, c);
775 if (mkdir(cray_tmpdir, JTMPMODE) != 0)
776 continue;
777 if (chown(cray_tmpdir, pw->pw_uid, pw->pw_gid) != 0) {
778 rmdir(cray_tmpdir);
779 continue;
780 }
781 break;
782 }
783
784 if (c > 'z')
785 cray_tmpdir[0] = '\0';
786}
787
788void
789cray_set_tmpdir(struct utmp *ut)
790{
791 int jid;
792 struct jtab jbuf;
793
794 if ((jid = getjtab(&jbuf)) < 0)
795 return;
796
797 /*
798 * Set jid and tmpdir in utmp record.
799 */
800 ut->ut_jid = jid;
801 strncpy(ut->ut_tpath, cray_tmpdir, TPATHSIZ);
802}
803#endif /* UNICOS */
804
805#ifdef _UNICOSMP
806#include <pwd.h>
807/*
808 * Set job id and create tmpdir directory.
809 */
810void
811cray_init_job(struct passwd *pw)
812{
813 initrm_silent(pw->pw_uid);
814 return;
815}
816#endif /* _UNICOSMP */
diff --git a/openbsd-compat/bsd-cray.h b/openbsd-compat/bsd-cray.h
deleted file mode 100644
index ca626a021..000000000
--- a/openbsd-compat/bsd-cray.h
+++ /dev/null
@@ -1,59 +0,0 @@
1/*
2 * Copyright (c) 2002, Cray Inc. (Wendy Palm <wendyp@cray.com>)
3 * Significant portions provided by
4 * Wayne Schroeder, SDSC <schroeder@sdsc.edu>
5 * William Jones, UTexas <jones@tacc.utexas.edu>
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 * Created: Apr 22 16.34:00 2002 wp
28 *
29 * This file contains functions required for proper execution
30 * on UNICOS systems.
31 *
32 */
33
34#ifndef _BSD_CRAY_H
35#define _BSD_CRAY_H
36
37#ifdef _UNICOS
38
39void cray_init_job(struct passwd *);
40void cray_job_termination_handler(int);
41void cray_login_failure(char *, int );
42int cray_access_denied(char *);
43extern char cray_tmpdir[];
44
45#define CUSTOM_FAILED_LOGIN 1
46
47#ifndef IA_SSHD
48# define IA_SSHD IA_LOGIN
49#endif
50#ifndef MAXHOSTNAMELEN
51# define MAXHOSTNAMELEN 64
52#endif
53#ifndef _CRAYT3E
54# define TIOCGPGRP (tIOC|20)
55#endif
56
57#endif /* UNICOS */
58
59#endif /* _BSD_CRAY_H */
diff --git a/openbsd-compat/bsd-flock.c b/openbsd-compat/bsd-flock.c
new file mode 100644
index 000000000..9b15d1eaf
--- /dev/null
+++ b/openbsd-compat/bsd-flock.c
@@ -0,0 +1,81 @@
1/* $NetBSD: flock.c,v 1.6 2008/04/28 20:24:12 martin Exp $ */
2
3/*-
4 * Copyright (c) 2001 The NetBSD Foundation, Inc.
5 * All rights reserved.
6 *
7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Todd Vierling.
9 *
10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 */
31
32/*
33 * Emulate flock() with fcntl(), where available.
34 * Otherwise, don't do locking; just pretend success.
35 */
36
37#include "includes.h"
38
39#ifndef HAVE_FLOCK
40#include <errno.h>
41#include <fcntl.h>
42
43int
44flock(int fd, int op)
45{
46 int rc = 0;
47
48#if defined(F_SETLK) && defined(F_SETLKW)
49 struct flock fl = {0};
50
51 switch (op & (LOCK_EX|LOCK_SH|LOCK_UN)) {
52 case LOCK_EX:
53 fl.l_type = F_WRLCK;
54 break;
55
56 case LOCK_SH:
57 fl.l_type = F_RDLCK;
58 break;
59
60 case LOCK_UN:
61 fl.l_type = F_UNLCK;
62 break;
63
64 default:
65 errno = EINVAL;
66 return -1;
67 }
68
69 fl.l_whence = SEEK_SET;
70 rc = fcntl(fd, op & LOCK_NB ? F_SETLK : F_SETLKW, &fl);
71
72 if (rc && (errno == EAGAIN))
73 errno = EWOULDBLOCK;
74#else
75 rc = -1;
76 errno = ENOSYS;
77#endif
78
79 return rc;
80}
81#endif
diff --git a/openbsd-compat/bsd-getpagesize.c b/openbsd-compat/bsd-getpagesize.c
index 9daddfbd3..416a8d4cb 100644
--- a/openbsd-compat/bsd-getpagesize.c
+++ b/openbsd-compat/bsd-getpagesize.c
@@ -1,5 +1,7 @@
1/* Placed in the public domain */ 1/* Placed in the public domain */
2 2
3#include "includes.h"
4
3#ifndef HAVE_GETPAGESIZE 5#ifndef HAVE_GETPAGESIZE
4 6
5#include <unistd.h> 7#include <unistd.h>
diff --git a/openbsd-compat/bsd-malloc.c b/openbsd-compat/bsd-malloc.c
index 6402ab588..482facdc9 100644
--- a/openbsd-compat/bsd-malloc.c
+++ b/openbsd-compat/bsd-malloc.c
@@ -50,6 +50,8 @@ rpl_realloc(void *ptr, size_t size)
50{ 50{
51 if (size == 0) 51 if (size == 0)
52 size = 1; 52 size = 1;
53 if (ptr == 0)
54 return malloc(size);
53 return realloc(ptr, size); 55 return realloc(ptr, size);
54} 56}
55#endif 57#endif
diff --git a/openbsd-compat/bsd-misc.c b/openbsd-compat/bsd-misc.c
index 29f6ad38c..3daf61071 100644
--- a/openbsd-compat/bsd-misc.c
+++ b/openbsd-compat/bsd-misc.c
@@ -104,16 +104,6 @@ const char *strerror(int e)
104} 104}
105#endif 105#endif
106 106
107#if !defined(HAVE_STRSIGNAL)
108char *strsignal(int sig)
109{
110 static char buf[16];
111
112 (void)snprintf(buf, sizeof(buf), "%d", sig);
113 return buf;
114}
115#endif
116
117#ifndef HAVE_UTIMES 107#ifndef HAVE_UTIMES
118int utimes(char *filename, struct timeval *tvp) 108int utimes(char *filename, struct timeval *tvp)
119{ 109{
@@ -221,33 +211,6 @@ tcsendbreak(int fd, int duration)
221} 211}
222#endif /* HAVE_TCSENDBREAK */ 212#endif /* HAVE_TCSENDBREAK */
223 213
224mysig_t
225mysignal(int sig, mysig_t act)
226{
227#ifdef HAVE_SIGACTION
228 struct sigaction sa, osa;
229
230 if (sigaction(sig, NULL, &osa) == -1)
231 return (mysig_t) -1;
232 if (osa.sa_handler != act) {
233 memset(&sa, 0, sizeof(sa));
234 sigemptyset(&sa.sa_mask);
235 sa.sa_flags = 0;
236#ifdef SA_INTERRUPT
237 if (sig == SIGALRM)
238 sa.sa_flags |= SA_INTERRUPT;
239#endif
240 sa.sa_handler = act;
241 if (sigaction(sig, &sa, NULL) == -1)
242 return (mysig_t) -1;
243 }
244 return (osa.sa_handler);
245#else
246 #undef signal
247 return (signal(sig, act));
248#endif
249}
250
251#ifndef HAVE_STRDUP 214#ifndef HAVE_STRDUP
252char * 215char *
253strdup(const char *str) 216strdup(const char *str)
@@ -275,7 +238,7 @@ isblank(int c)
275pid_t 238pid_t
276getpgid(pid_t pid) 239getpgid(pid_t pid)
277{ 240{
278#if defined(HAVE_GETPGRP) && !defined(GETPGRP_VOID) 241#if defined(HAVE_GETPGRP) && !defined(GETPGRP_VOID) && GETPGRP_VOID == 0
279 return getpgrp(pid); 242 return getpgrp(pid);
280#elif defined(HAVE_GETPGRP) 243#elif defined(HAVE_GETPGRP)
281 if (pid == 0) 244 if (pid == 0)
@@ -319,3 +282,45 @@ llabs(long long j)
319 return (j < 0 ? -j : j); 282 return (j < 0 ? -j : j);
320} 283}
321#endif 284#endif
285
286#ifndef HAVE_BZERO
287void
288bzero(void *b, size_t n)
289{
290 (void)memset(b, 0, n);
291}
292#endif
293
294#ifndef HAVE_RAISE
295int
296raise(int sig)
297{
298 kill(getpid(), sig);
299}
300#endif
301
302#ifndef HAVE_GETSID
303pid_t
304getsid(pid_t pid)
305{
306 errno = ENOSYS;
307 return -1;
308}
309#endif
310
311#ifdef FFLUSH_NULL_BUG
312#undef fflush
313int _ssh_compat_fflush(FILE *f)
314{
315 int r1, r2, r3;
316
317 if (f == NULL) {
318 r2 = fflush(stdout);
319 r3 = fflush(stderr);
320 if (r1 == -1 || r2 == -1 || r3 == -1)
321 return -1;
322 return 0;
323 }
324 return fflush(f);
325}
326#endif
diff --git a/openbsd-compat/bsd-misc.h b/openbsd-compat/bsd-misc.h
index 0b1a3504f..52ec52853 100644
--- a/openbsd-compat/bsd-misc.h
+++ b/openbsd-compat/bsd-misc.h
@@ -49,10 +49,6 @@ int setegid(uid_t);
49const char *strerror(int); 49const char *strerror(int);
50#endif 50#endif
51 51
52#if !defined(HAVE_STRSIGNAL)
53char *strsignal(int);
54#endif
55
56#if !defined(HAVE_SETLINEBUF) 52#if !defined(HAVE_SETLINEBUF)
57#define setlinebuf(a) (setvbuf((a), NULL, _IOLBF, 0)) 53#define setlinebuf(a) (setvbuf((a), NULL, _IOLBF, 0))
58#endif 54#endif
@@ -98,12 +94,6 @@ int tcsendbreak(int, int);
98int unsetenv(const char *); 94int unsetenv(const char *);
99#endif 95#endif
100 96
101/* wrapper for signal interface */
102typedef void (*mysig_t)(int);
103mysig_t mysignal(int sig, mysig_t act);
104
105#define signal(a,b) mysignal(a,b)
106
107#ifndef HAVE_ISBLANK 97#ifndef HAVE_ISBLANK
108int isblank(int); 98int isblank(int);
109#endif 99#endif
@@ -143,4 +133,28 @@ void warn(const char *, ...) __attribute__((format(printf, 1, 2)));
143long long llabs(long long); 133long long llabs(long long);
144#endif 134#endif
145 135
136#if defined(HAVE_DECL_BZERO) && HAVE_DECL_BZERO == 0
137void bzero(void *, size_t);
138#endif
139
140#ifndef HAVE_RAISE
141int raise(int);
142#endif
143
144#ifndef HAVE_GETSID
145pid_t getsid(pid_t);
146#endif
147
148#ifndef HAVE_FLOCK
149# define LOCK_SH 0x01
150# define LOCK_EX 0x02
151# define LOCK_NB 0x04
152# define LOCK_UN 0x08
153int flock(int, int);
154#endif
155
156#ifdef FFLUSH_NULL_BUG
157# define fflush(x) (_ssh_compat_fflush(x))
158#endif
159
146#endif /* _BSD_MISC_H */ 160#endif /* _BSD_MISC_H */
diff --git a/openbsd-compat/bsd-openpty.c b/openbsd-compat/bsd-openpty.c
index b28235860..e8ad542f8 100644
--- a/openbsd-compat/bsd-openpty.c
+++ b/openbsd-compat/bsd-openpty.c
@@ -147,31 +147,6 @@ openpty(int *amaster, int *aslave, char *name, struct termios *termp,
147 } 147 }
148 return (0); 148 return (0);
149 149
150#elif defined(_UNICOS)
151 char ptbuf[64], ttbuf[64];
152 int i;
153 int highpty;
154
155 highpty = 128;
156#ifdef _SC_CRAY_NPTY
157 if ((highpty = sysconf(_SC_CRAY_NPTY)) == -1)
158 highpty = 128;
159#endif /* _SC_CRAY_NPTY */
160
161 for (i = 0; i < highpty; i++) {
162 snprintf(ptbuf, sizeof(ptbuf), "/dev/pty/%03d", i);
163 snprintf(ttbuf, sizeof(ttbuf), "/dev/ttyp%03d", i);
164 if ((*amaster = open(ptbuf, O_RDWR|O_NOCTTY)) == -1)
165 continue;
166 /* Open the slave side. */
167 if ((*aslave = open(ttbuf, O_RDWR|O_NOCTTY)) == -1) {
168 close(*amaster);
169 return (-1);
170 }
171 return (0);
172 }
173 return (-1);
174
175#else 150#else
176 /* BSD-style pty code. */ 151 /* BSD-style pty code. */
177 char ptbuf[64], ttbuf[64]; 152 char ptbuf[64], ttbuf[64];
diff --git a/openbsd-compat/bsd-signal.c b/openbsd-compat/bsd-signal.c
new file mode 100644
index 000000000..979010e84
--- /dev/null
+++ b/openbsd-compat/bsd-signal.c
@@ -0,0 +1,62 @@
1/*
2 * Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org>
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 "includes.h"
18
19#include <signal.h>
20#include <string.h>
21#include <unistd.h>
22
23#include "openbsd-compat/bsd-signal.h"
24
25#undef signal
26
27mysig_t
28mysignal(int sig, mysig_t act)
29{
30#ifdef HAVE_SIGACTION
31 struct sigaction sa, osa;
32
33 if (sigaction(sig, NULL, &osa) == -1)
34 return (mysig_t) -1;
35 if (osa.sa_handler != act) {
36 memset(&sa, 0, sizeof(sa));
37 sigemptyset(&sa.sa_mask);
38 sa.sa_flags = 0;
39#ifdef SA_INTERRUPT
40 if (sig == SIGALRM)
41 sa.sa_flags |= SA_INTERRUPT;
42#endif
43 sa.sa_handler = act;
44 if (sigaction(sig, &sa, NULL) == -1)
45 return (mysig_t) -1;
46 }
47 return (osa.sa_handler);
48#else
49 return (signal(sig, act));
50#endif
51}
52
53#if !defined(HAVE_STRSIGNAL)
54char *strsignal(int sig)
55{
56 static char buf[16];
57
58 (void)snprintf(buf, sizeof(buf), "%d", sig);
59 return buf;
60}
61#endif
62
diff --git a/openbsd-compat/bsd-signal.h b/openbsd-compat/bsd-signal.h
new file mode 100644
index 000000000..4cb8cb7a0
--- /dev/null
+++ b/openbsd-compat/bsd-signal.h
@@ -0,0 +1,39 @@
1/*
2 * Copyright (c) 1999-2004 Damien Miller <djm@mindrot.org>
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#ifndef _BSD_SIGNAL_H
18#define _BSD_SIGNAL_H
19
20#include "includes.h"
21
22#ifndef _NSIG
23# ifdef NSIG
24# define _NSIG NSIG
25# else
26# define _NSIG 128
27# endif
28#endif
29
30/* wrapper for signal interface */
31typedef void (*mysig_t)(int);
32mysig_t mysignal(int sig, mysig_t act);
33#define signal(a,b) mysignal(a,b)
34
35#if !defined(HAVE_STRSIGNAL)
36char *strsignal(int);
37#endif
38
39#endif /* _BSD_SIGNAL_H */
diff --git a/openbsd-compat/bsd-statvfs.c b/openbsd-compat/bsd-statvfs.c
index 458dbe89c..e3bd87d98 100644
--- a/openbsd-compat/bsd-statvfs.c
+++ b/openbsd-compat/bsd-statvfs.c
@@ -25,6 +25,10 @@
25 25
26#include <errno.h> 26#include <errno.h>
27 27
28#ifndef MNAMELEN
29# define MNAMELEN 32
30#endif
31
28static void 32static void
29copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from) 33copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from)
30{ 34{
@@ -37,7 +41,11 @@ copy_statfs_to_statvfs(struct statvfs *to, struct statfs *from)
37 to->f_ffree = from->f_ffree; 41 to->f_ffree = from->f_ffree;
38 to->f_favail = from->f_ffree; /* no exact equivalent */ 42 to->f_favail = from->f_ffree; /* no exact equivalent */
39 to->f_fsid = 0; /* XXX fix me */ 43 to->f_fsid = 0; /* XXX fix me */
44#ifdef HAVE_STRUCT_STATFS_F_FLAGS
40 to->f_flag = from->f_flags; 45 to->f_flag = from->f_flags;
46#else
47 to->f_flag = 0;
48#endif
41 to->f_namemax = MNAMELEN; 49 to->f_namemax = MNAMELEN;
42} 50}
43 51
diff --git a/openbsd-compat/bsd-statvfs.h b/openbsd-compat/bsd-statvfs.h
index 815ec03b2..e2a4c15f7 100644
--- a/openbsd-compat/bsd-statvfs.h
+++ b/openbsd-compat/bsd-statvfs.h
@@ -26,6 +26,9 @@
26#ifdef HAVE_SYS_STATFS_H 26#ifdef HAVE_SYS_STATFS_H
27#include <sys/statfs.h> 27#include <sys/statfs.h>
28#endif 28#endif
29#ifdef HAVE_SYS_VFS_H
30#include <sys/vfs.h>
31#endif
29 32
30#ifndef HAVE_FSBLKCNT_T 33#ifndef HAVE_FSBLKCNT_T
31typedef unsigned long fsblkcnt_t; 34typedef unsigned long fsblkcnt_t;
diff --git a/openbsd-compat/freezero.c b/openbsd-compat/freezero.c
index 3af8f4a73..90b9d3813 100644
--- a/openbsd-compat/freezero.c
+++ b/openbsd-compat/freezero.c
@@ -16,11 +16,15 @@
16 16
17#include "includes.h" 17#include "includes.h"
18 18
19#include <string.h>
20
19#ifndef HAVE_FREEZERO 21#ifndef HAVE_FREEZERO
20 22
21void 23void
22freezero(void *ptr, size_t sz) 24freezero(void *ptr, size_t sz)
23{ 25{
26 if (ptr == NULL)
27 return;
24 explicit_bzero(ptr, sz); 28 explicit_bzero(ptr, sz);
25 free(ptr); 29 free(ptr);
26} 30}
diff --git a/openbsd-compat/openbsd-compat.h b/openbsd-compat/openbsd-compat.h
index cac799e84..b48fb9342 100644
--- a/openbsd-compat/openbsd-compat.h
+++ b/openbsd-compat/openbsd-compat.h
@@ -170,15 +170,24 @@ int BSDgetopt(int argc, char * const *argv, const char *opts);
170#include "openbsd-compat/getopt.h" 170#include "openbsd-compat/getopt.h"
171#endif 171#endif
172 172
173#if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0 173#if ((defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0) || \
174 (defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0))
174# include <sys/types.h> 175# include <sys/types.h>
175# include <sys/uio.h> 176# include <sys/uio.h>
177
178# if defined(HAVE_DECL_READV) && HAVE_DECL_READV == 0
179int readv(int, struct iovec *, int);
180# endif
181
182# if defined(HAVE_DECL_WRITEV) && HAVE_DECL_WRITEV == 0
176int writev(int, struct iovec *, int); 183int writev(int, struct iovec *, int);
184# endif
177#endif 185#endif
178 186
179/* Home grown routines */ 187/* Home grown routines */
180#include "bsd-misc.h" 188#include "bsd-misc.h"
181#include "bsd-setres_id.h" 189#include "bsd-setres_id.h"
190#include "bsd-signal.h"
182#include "bsd-statvfs.h" 191#include "bsd-statvfs.h"
183#include "bsd-waitpid.h" 192#include "bsd-waitpid.h"
184#include "bsd-poll.h" 193#include "bsd-poll.h"
@@ -315,14 +324,13 @@ char *shadow_pw(struct passwd *pw);
315#include "fake-rfc2553.h" 324#include "fake-rfc2553.h"
316 325
317/* Routines for a single OS platform */ 326/* Routines for a single OS platform */
318#include "bsd-cray.h"
319#include "bsd-cygwin_util.h" 327#include "bsd-cygwin_util.h"
320 328
321#include "port-aix.h" 329#include "port-aix.h"
322#include "port-irix.h" 330#include "port-irix.h"
323#include "port-linux.h" 331#include "port-linux.h"
324#include "port-solaris.h" 332#include "port-solaris.h"
325#include "port-tun.h" 333#include "port-net.h"
326#include "port-uw.h" 334#include "port-uw.h"
327 335
328/* _FORTIFY_SOURCE breaks FD_ISSET(n)/FD_SET(n) for n > FD_SETSIZE. Avoid. */ 336/* _FORTIFY_SOURCE breaks FD_ISSET(n)/FD_SET(n) for n > FD_SETSIZE. Avoid. */
diff --git a/openbsd-compat/port-aix.c b/openbsd-compat/port-aix.c
index c2970c4db..79c868966 100644
--- a/openbsd-compat/port-aix.c
+++ b/openbsd-compat/port-aix.c
@@ -32,6 +32,7 @@
32#include "hostfile.h" 32#include "hostfile.h"
33#include "auth.h" 33#include "auth.h"
34#include "ssh.h" 34#include "ssh.h"
35#include "ssh_api.h"
35#include "log.h" 36#include "log.h"
36 37
37#ifdef _AIX 38#ifdef _AIX
@@ -171,8 +172,9 @@ aix_valid_authentications(const char *user)
171 * returns 0. 172 * returns 0.
172 */ 173 */
173int 174int
174sys_auth_passwd(Authctxt *ctxt, const char *password) 175sys_auth_passwd(struct ssh *ssh, const char *password)
175{ 176{
177 Authctxt *ctxt = ssh->authctxt;
176 char *authmsg = NULL, *msg = NULL, *name = ctxt->pw->pw_name; 178 char *authmsg = NULL, *msg = NULL, *name = ctxt->pw->pw_name;
177 int authsuccess = 0, expired, reenter, result; 179 int authsuccess = 0, expired, reenter, result;
178 180
diff --git a/openbsd-compat/port-linux.c b/openbsd-compat/port-linux.c
index e4c5d1b7c..8c5325cc3 100644
--- a/openbsd-compat/port-linux.c
+++ b/openbsd-compat/port-linux.c
@@ -33,7 +33,6 @@
33 33
34#ifdef WITH_SELINUX 34#ifdef WITH_SELINUX
35#include <selinux/selinux.h> 35#include <selinux/selinux.h>
36#include <selinux/flask.h>
37#include <selinux/get_context_list.h> 36#include <selinux/get_context_list.h>
38 37
39#ifndef SSH_SELINUX_UNCONFINED_TYPE 38#ifndef SSH_SELINUX_UNCONFINED_TYPE
@@ -139,6 +138,7 @@ ssh_selinux_setup_pty(char *pwname, const char *tty)
139 security_context_t new_tty_ctx = NULL; 138 security_context_t new_tty_ctx = NULL;
140 security_context_t user_ctx = NULL; 139 security_context_t user_ctx = NULL;
141 security_context_t old_tty_ctx = NULL; 140 security_context_t old_tty_ctx = NULL;
141 security_class_t chrclass;
142 142
143 if (!ssh_selinux_enabled()) 143 if (!ssh_selinux_enabled())
144 return; 144 return;
@@ -153,9 +153,12 @@ ssh_selinux_setup_pty(char *pwname, const char *tty)
153 error("%s: getfilecon: %s", __func__, strerror(errno)); 153 error("%s: getfilecon: %s", __func__, strerror(errno));
154 goto out; 154 goto out;
155 } 155 }
156 156 if ((chrclass = string_to_security_class("chr_file")) == 0) {
157 error("%s: couldn't get security class for chr_file", __func__);
158 goto out;
159 }
157 if (security_compute_relabel(user_ctx, old_tty_ctx, 160 if (security_compute_relabel(user_ctx, old_tty_ctx,
158 SECCLASS_CHR_FILE, &new_tty_ctx) != 0) { 161 chrclass, &new_tty_ctx) != 0) {
159 error("%s: security_compute_relabel: %s", 162 error("%s: security_compute_relabel: %s",
160 __func__, strerror(errno)); 163 __func__, strerror(errno));
161 goto out; 164 goto out;
diff --git a/openbsd-compat/port-tun.c b/openbsd-compat/port-net.c
index 7579c6084..7050629c3 100644
--- a/openbsd-compat/port-tun.c
+++ b/openbsd-compat/port-net.c
@@ -37,6 +37,90 @@
37#include "ssherr.h" 37#include "ssherr.h"
38 38
39/* 39/*
40 * This file contains various portability code for network support,
41 * including tun/tap forwarding and routing domains.
42 */
43
44#if defined(SYS_RDOMAIN_LINUX) || defined(SSH_TUN_LINUX)
45#include <linux/if.h>
46#endif
47
48#if defined(SYS_RDOMAIN_LINUX)
49char *
50sys_get_rdomain(int fd)
51{
52 char dev[IFNAMSIZ + 1];
53 socklen_t len = sizeof(dev) - 1;
54
55 if (getsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, dev, &len) == -1) {
56 error("%s: cannot determine VRF for fd=%d : %s",
57 __func__, fd, strerror(errno));
58 return NULL;
59 }
60 dev[len] = '\0';
61 return strdup(dev);
62}
63
64int
65sys_set_rdomain(int fd, const char *name)
66{
67 if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
68 name, strlen(name)) == -1) {
69 error("%s: setsockopt(%d, SO_BINDTODEVICE, %s): %s",
70 __func__, fd, name, strerror(errno));
71 return -1;
72 }
73 return 0;
74}
75
76int
77sys_valid_rdomain(const char *name)
78{
79 int fd;
80
81 /*
82 * This is a pretty crappy way to test. It would be better to
83 * check whether "name" represents a VRF device, but apparently
84 * that requires an rtnetlink transaction.
85 */
86 if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
87 return 0;
88 if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
89 name, strlen(name)) == -1) {
90 close(fd);
91 return 0;
92 }
93 close(fd);
94 return 1;
95}
96#elif defined(SYS_RDOMAIN_XXX)
97/* XXX examples */
98char *
99sys_get_rdomain(int fd)
100{
101 return NULL;
102}
103
104int
105sys_set_rdomain(int fd, const char *name)
106{
107 return -1;
108}
109
110int
111valid_rdomain(const char *name)
112{
113 return 0;
114}
115
116void
117sys_set_process_rdomain(const char *name)
118{
119 fatal("%s: not supported", __func__);
120}
121#endif /* defined(SYS_RDOMAIN_XXX) */
122
123/*
40 * This is the portable version of the SSH tunnel forwarding, it 124 * This is the portable version of the SSH tunnel forwarding, it
41 * uses some preprocessor definitions for various platform-specific 125 * uses some preprocessor definitions for various platform-specific
42 * settings. 126 * settings.
@@ -52,16 +136,18 @@
52 */ 136 */
53 137
54#if defined(SSH_TUN_LINUX) 138#if defined(SSH_TUN_LINUX)
55#include <linux/if.h>
56#include <linux/if_tun.h> 139#include <linux/if_tun.h>
57 140
58int 141int
59sys_tun_open(int tun, int mode) 142sys_tun_open(int tun, int mode, char **ifname)
60{ 143{
61 struct ifreq ifr; 144 struct ifreq ifr;
62 int fd = -1; 145 int fd = -1;
63 const char *name = NULL; 146 const char *name = NULL;
64 147
148 if (ifname != NULL)
149 *ifname = NULL;
150
65 if ((fd = open("/dev/net/tun", O_RDWR)) == -1) { 151 if ((fd = open("/dev/net/tun", O_RDWR)) == -1) {
66 debug("%s: failed to open tunnel control interface: %s", 152 debug("%s: failed to open tunnel control interface: %s",
67 __func__, strerror(errno)); 153 __func__, strerror(errno));
@@ -99,6 +185,9 @@ sys_tun_open(int tun, int mode)
99 else 185 else
100 debug("%s: %s mode %d fd %d", __func__, ifr.ifr_name, mode, fd); 186 debug("%s: %s mode %d fd %d", __func__, ifr.ifr_name, mode, fd);
101 187
188 if (ifname != NULL && (*ifname = strdup(ifr.ifr_name)))
189 goto failed;
190
102 return (fd); 191 return (fd);
103 192
104 failed: 193 failed:
@@ -116,13 +205,16 @@ sys_tun_open(int tun, int mode)
116#endif 205#endif
117 206
118int 207int
119sys_tun_open(int tun, int mode) 208sys_tun_open(int tun, int mode, char **ifname)
120{ 209{
121 struct ifreq ifr; 210 struct ifreq ifr;
122 char name[100]; 211 char name[100];
123 int fd = -1, sock, flag; 212 int fd = -1, sock, flag;
124 const char *tunbase = "tun"; 213 const char *tunbase = "tun";
125 214
215 if (ifname != NULL)
216 *ifname = NULL;
217
126 if (mode == SSH_TUNMODE_ETHERNET) { 218 if (mode == SSH_TUNMODE_ETHERNET) {
127#ifdef SSH_TUN_NO_L2 219#ifdef SSH_TUN_NO_L2
128 debug("%s: no layer 2 tunnelling support", __func__); 220 debug("%s: no layer 2 tunnelling support", __func__);
@@ -180,6 +272,9 @@ sys_tun_open(int tun, int mode)
180 goto failed; 272 goto failed;
181 } 273 }
182 274
275 if (ifname != NULL && (*ifname = strdup(ifr.ifr_name)))
276 goto failed;
277
183 close(sock); 278 close(sock);
184 return (fd); 279 return (fd);
185 280
diff --git a/openbsd-compat/port-tun.h b/openbsd-compat/port-net.h
index 103514370..3a0d1104b 100644
--- a/openbsd-compat/port-tun.h
+++ b/openbsd-compat/port-net.h
@@ -22,7 +22,7 @@ struct ssh;
22 22
23#if defined(SSH_TUN_LINUX) || defined(SSH_TUN_FREEBSD) 23#if defined(SSH_TUN_LINUX) || defined(SSH_TUN_FREEBSD)
24# define CUSTOM_SYS_TUN_OPEN 24# define CUSTOM_SYS_TUN_OPEN
25int sys_tun_open(int, int); 25int sys_tun_open(int, int, char **);
26#endif 26#endif
27 27
28#if defined(SSH_TUN_COMPAT_AF) || defined(SSH_TUN_PREPEND_AF) 28#if defined(SSH_TUN_COMPAT_AF) || defined(SSH_TUN_PREPEND_AF)
@@ -31,4 +31,18 @@ int sys_tun_infilter(struct ssh *, struct Channel *, char *, int);
31u_char *sys_tun_outfilter(struct ssh *, struct Channel *, u_char **, size_t *); 31u_char *sys_tun_outfilter(struct ssh *, struct Channel *, u_char **, size_t *);
32#endif 32#endif
33 33
34#if defined(SYS_RDOMAIN_LINUX)
35# define HAVE_SYS_GET_RDOMAIN
36# define HAVE_SYS_SET_RDOMAIN
37# define HAVE_SYS_VALID_RDOMAIN
38char *sys_get_rdomain(int fd);
39int sys_set_rdomain(int fd, const char *name);
40int sys_valid_rdomain(const char *name);
41#endif
42
43#if defined(SYS_RDOMAIN_XXX)
44# define HAVE_SYS_SET_PROCESS_RDOMAIN
45void sys_set_process_rdomain(const char *name);
46#endif
47
34#endif 48#endif
diff --git a/openbsd-compat/port-uw.c b/openbsd-compat/port-uw.c
index db24dbb94..014cac264 100644
--- a/openbsd-compat/port-uw.c
+++ b/openbsd-compat/port-uw.c
@@ -47,12 +47,14 @@
47#include "hostfile.h" 47#include "hostfile.h"
48#include "auth.h" 48#include "auth.h"
49#include "ssh.h" 49#include "ssh.h"
50#include "ssh_api.h"
50 51
51int nischeck(char *); 52int nischeck(char *);
52 53
53int 54int
54sys_auth_passwd(Authctxt *authctxt, const char *password) 55sys_auth_passwd(struct ssh *ssh, const char *password)
55{ 56{
57 Authctxt *authctxt = ssh->authctxt;
56 struct passwd *pw = authctxt->pw; 58 struct passwd *pw = authctxt->pw;
57 char *salt; 59 char *salt;
58 int result; 60 int result;
diff --git a/openbsd-compat/readpassphrase.c b/openbsd-compat/readpassphrase.c
index 24aed6e46..ff8ff3dec 100644
--- a/openbsd-compat/readpassphrase.c
+++ b/openbsd-compat/readpassphrase.c
@@ -46,14 +46,6 @@
46# define _POSIX_VDISABLE VDISABLE 46# define _POSIX_VDISABLE VDISABLE
47#endif 47#endif
48 48
49#ifndef _NSIG
50# ifdef NSIG
51# define _NSIG NSIG
52# else
53# define _NSIG 128
54# endif
55#endif
56
57static volatile sig_atomic_t signo[_NSIG]; 49static volatile sig_atomic_t signo[_NSIG];
58 50
59static void handler(int); 51static void handler(int);
diff --git a/openbsd-compat/regress/Makefile.in b/openbsd-compat/regress/Makefile.in
index dabdb0912..529331be5 100644
--- a/openbsd-compat/regress/Makefile.in
+++ b/openbsd-compat/regress/Makefile.in
@@ -1,5 +1,3 @@
1# $Id: Makefile.in,v 1.5 2014/06/17 13:06:08 dtucker Exp $
2
3sysconfdir=@sysconfdir@ 1sysconfdir=@sysconfdir@
4piddir=@piddir@ 2piddir=@piddir@
5srcdir=@srcdir@ 3srcdir=@srcdir@
diff --git a/openbsd-compat/strndup.c b/openbsd-compat/strndup.c
new file mode 100644
index 000000000..ebb4eccfb
--- /dev/null
+++ b/openbsd-compat/strndup.c
@@ -0,0 +1,43 @@
1/* $OpenBSD: strndup.c,v 1.2 2015/08/31 02:53:57 guenther Exp $ */
2
3/*
4 * Copyright (c) 2010 Todd C. Miller <Todd.Miller@courtesan.com>
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18
19#include "config.h"
20#if !defined(HAVE_STRNDUP) || defined(BROKEN_STRNDUP)
21#include <sys/types.h>
22
23#include <stddef.h>
24#include <stdlib.h>
25#include <string.h>
26
27char *
28strndup(const char *str, size_t maxlen)
29{
30 char *copy;
31 size_t len;
32
33 len = strnlen(str, maxlen);
34 copy = malloc(len + 1);
35 if (copy != NULL) {
36 (void)memcpy(copy, str, len);
37 copy[len] = '\0';
38 }
39
40 return copy;
41}
42DEF_WEAK(strndup);
43#endif /* HAVE_STRNDUP */
diff --git a/openbsd-compat/strnlen.c b/openbsd-compat/strnlen.c
index 93d515595..8cc6b96b5 100644
--- a/openbsd-compat/strnlen.c
+++ b/openbsd-compat/strnlen.c
@@ -19,7 +19,7 @@
19/* OPENBSD ORIGINAL: lib/libc/string/strnlen.c */ 19/* OPENBSD ORIGINAL: lib/libc/string/strnlen.c */
20 20
21#include "config.h" 21#include "config.h"
22#ifndef HAVE_STRNLEN 22#if !defined(HAVE_STRNLEN) || defined(BROKEN_STRNLEN)
23#include <sys/types.h> 23#include <sys/types.h>
24 24
25#include <string.h> 25#include <string.h>
diff --git a/opensshd.init.in b/opensshd.init.in
index 3908566b7..99e5a51ab 100755
--- a/opensshd.init.in
+++ b/opensshd.init.in
@@ -17,7 +17,6 @@ PIDFILE=$piddir/sshd.pid
17PidFile=`grep "^PidFile" ${sysconfdir}/sshd_config | tr "=" " " | awk '{print $2}'` 17PidFile=`grep "^PidFile" ${sysconfdir}/sshd_config | tr "=" " " | awk '{print $2}'`
18[ X$PidFile = X ] || PIDFILE=$PidFile 18[ X$PidFile = X ] || PIDFILE=$PidFile
19SSH_KEYGEN=$prefix/bin/ssh-keygen 19SSH_KEYGEN=$prefix/bin/ssh-keygen
20HOST_KEY_RSA1=$sysconfdir/ssh_host_key
21HOST_KEY_DSA=$sysconfdir/ssh_host_dsa_key 20HOST_KEY_DSA=$sysconfdir/ssh_host_dsa_key
22HOST_KEY_RSA=$sysconfdir/ssh_host_rsa_key 21HOST_KEY_RSA=$sysconfdir/ssh_host_rsa_key
23@COMMENT_OUT_ECC@HOST_KEY_ECDSA=$sysconfdir/ssh_host_ecdsa_key 22@COMMENT_OUT_ECC@HOST_KEY_ECDSA=$sysconfdir/ssh_host_ecdsa_key
@@ -25,9 +24,6 @@ HOST_KEY_ED25519=$sysconfdir/ssh_host_ed25519_key
25 24
26 25
27checkkeys() { 26checkkeys() {
28@COMMENT_OUT_RSA1@ if [ ! -f $HOST_KEY_RSA1 ]; then
29@COMMENT_OUT_RSA1@ ${SSH_KEYGEN} -t rsa1 -f ${HOST_KEY_RSA1} -N ""
30@COMMENT_OUT_RSA1@ fi
31 if [ ! -f $HOST_KEY_DSA ]; then 27 if [ ! -f $HOST_KEY_DSA ]; then
32 ${SSH_KEYGEN} -t dsa -f ${HOST_KEY_DSA} -N "" 28 ${SSH_KEYGEN} -t dsa -f ${HOST_KEY_DSA} -N ""
33 fi 29 fi
diff --git a/packet.c b/packet.c
index f114ea52c..4bfb50726 100644
--- a/packet.c
+++ b/packet.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.c,v 1.264 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: packet.c,v 1.269 2017/12/18 23:13:42 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
@@ -557,6 +557,18 @@ ssh_local_port(struct ssh *ssh)
557 return ssh->local_port; 557 return ssh->local_port;
558} 558}
559 559
560/* Returns the routing domain of the input socket, or NULL if unavailable */
561const char *
562ssh_packet_rdomain_in(struct ssh *ssh)
563{
564 if (ssh->rdomain_in != NULL)
565 return ssh->rdomain_in;
566 if (!ssh_packet_connection_is_on_socket(ssh))
567 return NULL;
568 ssh->rdomain_in = get_rdomain(ssh->state->connection_in);
569 return ssh->rdomain_in;
570}
571
560/* Closes the connection and clears and frees internal data structures. */ 572/* Closes the connection and clears and frees internal data structures. */
561 573
562static void 574static void
@@ -1320,7 +1332,7 @@ ssh_packet_read_seqnr(struct ssh *ssh, u_char *typep, u_int32_t *seqnr_p)
1320 for (;;) { 1332 for (;;) {
1321 if (state->packet_timeout_ms != -1) { 1333 if (state->packet_timeout_ms != -1) {
1322 ms_to_timeval(&timeout, ms_remain); 1334 ms_to_timeval(&timeout, ms_remain);
1323 gettimeofday(&start, NULL); 1335 monotime_tv(&start);
1324 } 1336 }
1325 if ((r = select(state->connection_in + 1, setp, 1337 if ((r = select(state->connection_in + 1, setp,
1326 NULL, NULL, timeoutp)) >= 0) 1338 NULL, NULL, timeoutp)) >= 0)
@@ -1774,6 +1786,8 @@ ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...)
1774 vsnprintf(buf, sizeof(buf), fmt, args); 1786 vsnprintf(buf, sizeof(buf), fmt, args);
1775 va_end(args); 1787 va_end(args);
1776 1788
1789 debug3("sending debug message: %s", buf);
1790
1777 if ((r = sshpkt_start(ssh, SSH2_MSG_DEBUG)) != 0 || 1791 if ((r = sshpkt_start(ssh, SSH2_MSG_DEBUG)) != 0 ||
1778 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* always display */ 1792 (r = sshpkt_put_u8(ssh, 0)) != 0 || /* always display */
1779 (r = sshpkt_put_cstring(ssh, buf)) != 0 || 1793 (r = sshpkt_put_cstring(ssh, buf)) != 0 ||
@@ -1783,8 +1797,8 @@ ssh_packet_send_debug(struct ssh *ssh, const char *fmt,...)
1783 fatal("%s: %s", __func__, ssh_err(r)); 1797 fatal("%s: %s", __func__, ssh_err(r));
1784} 1798}
1785 1799
1786static void 1800void
1787fmt_connection_id(struct ssh *ssh, char *s, size_t l) 1801sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l)
1788{ 1802{
1789 snprintf(s, l, "%.200s%s%s port %d", 1803 snprintf(s, l, "%.200s%s%s port %d",
1790 ssh->log_preamble ? ssh->log_preamble : "", 1804 ssh->log_preamble ? ssh->log_preamble : "",
@@ -1800,7 +1814,7 @@ sshpkt_fatal(struct ssh *ssh, const char *tag, int r)
1800{ 1814{
1801 char remote_id[512]; 1815 char remote_id[512];
1802 1816
1803 fmt_connection_id(ssh, remote_id, sizeof(remote_id)); 1817 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1804 1818
1805 switch (r) { 1819 switch (r) {
1806 case SSH_ERR_CONN_CLOSED: 1820 case SSH_ERR_CONN_CLOSED:
@@ -1862,7 +1876,7 @@ ssh_packet_disconnect(struct ssh *ssh, const char *fmt,...)
1862 * Format the message. Note that the caller must make sure the 1876 * Format the message. Note that the caller must make sure the
1863 * message is of limited size. 1877 * message is of limited size.
1864 */ 1878 */
1865 fmt_connection_id(ssh, remote_id, sizeof(remote_id)); 1879 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
1866 va_start(args, fmt); 1880 va_start(args, fmt);
1867 vsnprintf(buf, sizeof(buf), fmt, args); 1881 vsnprintf(buf, sizeof(buf), fmt, args);
1868 va_end(args); 1882 va_end(args);
@@ -1945,7 +1959,7 @@ ssh_packet_write_wait(struct ssh *ssh)
1945 for (;;) { 1959 for (;;) {
1946 if (state->packet_timeout_ms != -1) { 1960 if (state->packet_timeout_ms != -1) {
1947 ms_to_timeval(&timeout, ms_remain); 1961 ms_to_timeval(&timeout, ms_remain);
1948 gettimeofday(&start, NULL); 1962 monotime_tv(&start);
1949 } 1963 }
1950 if ((ret = select(state->connection_out + 1, 1964 if ((ret = select(state->connection_out + 1,
1951 NULL, setp, NULL, timeoutp)) >= 0) 1965 NULL, setp, NULL, timeoutp)) >= 0)
@@ -2159,7 +2173,9 @@ kex_to_blob(struct sshbuf *m, struct kex *kex)
2159 if ((r = sshbuf_put_string(m, kex->session_id, 2173 if ((r = sshbuf_put_string(m, kex->session_id,
2160 kex->session_id_len)) != 0 || 2174 kex->session_id_len)) != 0 ||
2161 (r = sshbuf_put_u32(m, kex->we_need)) != 0 || 2175 (r = sshbuf_put_u32(m, kex->we_need)) != 0 ||
2176 (r = sshbuf_put_cstring(m, kex->hostkey_alg)) != 0 ||
2162 (r = sshbuf_put_u32(m, kex->hostkey_type)) != 0 || 2177 (r = sshbuf_put_u32(m, kex->hostkey_type)) != 0 ||
2178 (r = sshbuf_put_u32(m, kex->hostkey_nid)) != 0 ||
2163 (r = sshbuf_put_u32(m, kex->kex_type)) != 0 || 2179 (r = sshbuf_put_u32(m, kex->kex_type)) != 0 ||
2164 (r = sshbuf_put_stringb(m, kex->my)) != 0 || 2180 (r = sshbuf_put_stringb(m, kex->my)) != 0 ||
2165 (r = sshbuf_put_stringb(m, kex->peer)) != 0 || 2181 (r = sshbuf_put_stringb(m, kex->peer)) != 0 ||
@@ -2323,7 +2339,9 @@ kex_from_blob(struct sshbuf *m, struct kex **kexp)
2323 } 2339 }
2324 if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 || 2340 if ((r = sshbuf_get_string(m, &kex->session_id, &kex->session_id_len)) != 0 ||
2325 (r = sshbuf_get_u32(m, &kex->we_need)) != 0 || 2341 (r = sshbuf_get_u32(m, &kex->we_need)) != 0 ||
2342 (r = sshbuf_get_cstring(m, &kex->hostkey_alg, NULL)) != 0 ||
2326 (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_type)) != 0 || 2343 (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_type)) != 0 ||
2344 (r = sshbuf_get_u32(m, (u_int *)&kex->hostkey_nid)) != 0 ||
2327 (r = sshbuf_get_u32(m, &kex->kex_type)) != 0 || 2345 (r = sshbuf_get_u32(m, &kex->kex_type)) != 0 ||
2328 (r = sshbuf_get_stringb(m, kex->my)) != 0 || 2346 (r = sshbuf_get_stringb(m, kex->my)) != 0 ||
2329 (r = sshbuf_get_stringb(m, kex->peer)) != 0 || 2347 (r = sshbuf_get_stringb(m, kex->peer)) != 0 ||
diff --git a/packet.h b/packet.h
index 40837e9db..a2ece6786 100644
--- a/packet.h
+++ b/packet.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: packet.h,v 1.82 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: packet.h,v 1.84 2017/12/10 05:55:29 dtucker Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -61,6 +61,7 @@ struct ssh {
61 int remote_port; 61 int remote_port;
62 char *local_ipaddr; 62 char *local_ipaddr;
63 int local_port; 63 int local_port;
64 char *rdomain_in;
64 65
65 /* Optional preamble for log messages (e.g. username) */ 66 /* Optional preamble for log messages (e.g. username) */
66 char *log_preamble; 67 char *log_preamble;
@@ -162,6 +163,7 @@ const char *ssh_remote_ipaddr(struct ssh *);
162int ssh_remote_port(struct ssh *); 163int ssh_remote_port(struct ssh *);
163const char *ssh_local_ipaddr(struct ssh *); 164const char *ssh_local_ipaddr(struct ssh *);
164int ssh_local_port(struct ssh *); 165int ssh_local_port(struct ssh *);
166const char *ssh_packet_rdomain_in(struct ssh *);
165 167
166void ssh_packet_set_rekey_limits(struct ssh *, u_int64_t, u_int32_t); 168void ssh_packet_set_rekey_limits(struct ssh *, u_int64_t, u_int32_t);
167time_t ssh_packet_get_rekey_timeout(struct ssh *); 169time_t ssh_packet_get_rekey_timeout(struct ssh *);
@@ -200,6 +202,7 @@ int sshpkt_get_cstring(struct ssh *ssh, char **valp, size_t *lenp);
200int sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g); 202int sshpkt_get_ec(struct ssh *ssh, EC_POINT *v, const EC_GROUP *g);
201int sshpkt_get_bignum2(struct ssh *ssh, BIGNUM *v); 203int sshpkt_get_bignum2(struct ssh *ssh, BIGNUM *v);
202int sshpkt_get_end(struct ssh *ssh); 204int sshpkt_get_end(struct ssh *ssh);
205void sshpkt_fmt_connection_id(struct ssh *ssh, char *s, size_t l);
203const u_char *sshpkt_ptr(struct ssh *, size_t *lenp); 206const u_char *sshpkt_ptr(struct ssh *, size_t *lenp);
204 207
205/* OLD API */ 208/* OLD API */
diff --git a/pathnames.h b/pathnames.h
index 1c221b01b..cb44caa4d 100644
--- a/pathnames.h
+++ b/pathnames.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: pathnames.h,v 1.27 2017/05/05 10:42:49 naddy Exp $ */ 1/* $OpenBSD: pathnames.h,v 1.28 2018/02/23 15:58:37 markus Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -39,6 +39,7 @@
39#define _PATH_HOST_DSA_KEY_FILE SSHDIR "/ssh_host_dsa_key" 39#define _PATH_HOST_DSA_KEY_FILE SSHDIR "/ssh_host_dsa_key"
40#define _PATH_HOST_ECDSA_KEY_FILE SSHDIR "/ssh_host_ecdsa_key" 40#define _PATH_HOST_ECDSA_KEY_FILE SSHDIR "/ssh_host_ecdsa_key"
41#define _PATH_HOST_ED25519_KEY_FILE SSHDIR "/ssh_host_ed25519_key" 41#define _PATH_HOST_ED25519_KEY_FILE SSHDIR "/ssh_host_ed25519_key"
42#define _PATH_HOST_XMSS_KEY_FILE SSHDIR "/ssh_host_xmss_key"
42#define _PATH_HOST_RSA_KEY_FILE SSHDIR "/ssh_host_rsa_key" 43#define _PATH_HOST_RSA_KEY_FILE SSHDIR "/ssh_host_rsa_key"
43#define _PATH_DH_MODULI SSHDIR "/moduli" 44#define _PATH_DH_MODULI SSHDIR "/moduli"
44 45
@@ -75,6 +76,7 @@
75#define _PATH_SSH_CLIENT_ID_ECDSA _PATH_SSH_USER_DIR "/id_ecdsa" 76#define _PATH_SSH_CLIENT_ID_ECDSA _PATH_SSH_USER_DIR "/id_ecdsa"
76#define _PATH_SSH_CLIENT_ID_RSA _PATH_SSH_USER_DIR "/id_rsa" 77#define _PATH_SSH_CLIENT_ID_RSA _PATH_SSH_USER_DIR "/id_rsa"
77#define _PATH_SSH_CLIENT_ID_ED25519 _PATH_SSH_USER_DIR "/id_ed25519" 78#define _PATH_SSH_CLIENT_ID_ED25519 _PATH_SSH_USER_DIR "/id_ed25519"
79#define _PATH_SSH_CLIENT_ID_XMSS _PATH_SSH_USER_DIR "/id_xmss"
78 80
79/* 81/*
80 * Configuration file in user's home directory. This file need not be 82 * Configuration file in user's home directory. This file need not be
diff --git a/readconf.c b/readconf.c
index f63894f9c..88051db57 100644
--- a/readconf.c
+++ b/readconf.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.c,v 1.279 2017/09/21 19:16:53 markus Exp $ */ 1/* $OpenBSD: readconf.c,v 1.283 2018/02/23 15:58:37 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
@@ -156,7 +156,7 @@ typedef enum {
156 oPubkeyAuthentication, 156 oPubkeyAuthentication,
157 oKbdInteractiveAuthentication, oKbdInteractiveDevices, oHostKeyAlias, 157 oKbdInteractiveAuthentication, oKbdInteractiveDevices, oHostKeyAlias,
158 oDynamicForward, oPreferredAuthentications, oHostbasedAuthentication, 158 oDynamicForward, oPreferredAuthentications, oHostbasedAuthentication,
159 oHostKeyAlgorithms, oBindAddress, oPKCS11Provider, 159 oHostKeyAlgorithms, oBindAddress, oBindInterface, oPKCS11Provider,
160 oClearAllForwardings, oNoHostAuthenticationForLocalhost, 160 oClearAllForwardings, oNoHostAuthenticationForLocalhost,
161 oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout, 161 oEnableSSHKeysign, oRekeyLimit, oVerifyHostKeyDNS, oConnectTimeout,
162 oAddressFamily, oGssAuthentication, oGssDelegateCreds, 162 oAddressFamily, oGssAuthentication, oGssDelegateCreds,
@@ -266,6 +266,7 @@ static struct {
266 { "preferredauthentications", oPreferredAuthentications }, 266 { "preferredauthentications", oPreferredAuthentications },
267 { "hostkeyalgorithms", oHostKeyAlgorithms }, 267 { "hostkeyalgorithms", oHostKeyAlgorithms },
268 { "bindaddress", oBindAddress }, 268 { "bindaddress", oBindAddress },
269 { "bindinterface", oBindInterface },
269 { "clearallforwardings", oClearAllForwardings }, 270 { "clearallforwardings", oClearAllForwardings },
270 { "enablesshkeysign", oEnableSSHKeysign }, 271 { "enablesshkeysign", oEnableSSHKeysign },
271 { "verifyhostkeydns", oVerifyHostKeyDNS }, 272 { "verifyhostkeydns", oVerifyHostKeyDNS },
@@ -683,34 +684,6 @@ match_cfg_line(Options *options, char **condition, struct passwd *pw,
683 return result; 684 return result;
684} 685}
685 686
686/* Check and prepare a domain name: removes trailing '.' and lowercases */
687static void
688valid_domain(char *name, const char *filename, int linenum)
689{
690 size_t i, l = strlen(name);
691 u_char c, last = '\0';
692
693 if (l == 0)
694 fatal("%s line %d: empty hostname suffix", filename, linenum);
695 if (!isalpha((u_char)name[0]) && !isdigit((u_char)name[0]))
696 fatal("%s line %d: hostname suffix \"%.100s\" "
697 "starts with invalid character", filename, linenum, name);
698 for (i = 0; i < l; i++) {
699 c = tolower((u_char)name[i]);
700 name[i] = (char)c;
701 if (last == '.' && c == '.')
702 fatal("%s line %d: hostname suffix \"%.100s\" contains "
703 "consecutive separators", filename, linenum, name);
704 if (c != '.' && c != '-' && !isalnum(c) &&
705 c != '_') /* technically invalid, but common */
706 fatal("%s line %d: hostname suffix \"%.100s\" contains "
707 "invalid characters", filename, linenum, name);
708 last = c;
709 }
710 if (name[l - 1] == '.')
711 name[l - 1] = '\0';
712}
713
714/* 687/*
715 * Returns the number of the token pointed to by cp or oBadOption. 688 * Returns the number of the token pointed to by cp or oBadOption.
716 */ 689 */
@@ -845,6 +818,7 @@ process_config_line_depth(Options *options, struct passwd *pw, const char *host,
845 const struct multistate *multistate_ptr; 818 const struct multistate *multistate_ptr;
846 struct allowed_cname *cname; 819 struct allowed_cname *cname;
847 glob_t gl; 820 glob_t gl;
821 const char *errstr;
848 822
849 if (activep == NULL) { /* We are processing a command line directive */ 823 if (activep == NULL) { /* We are processing a command line directive */
850 cmdline = 1; 824 cmdline = 1;
@@ -1126,6 +1100,10 @@ parse_char_array:
1126 charptr = &options->bind_address; 1100 charptr = &options->bind_address;
1127 goto parse_string; 1101 goto parse_string;
1128 1102
1103 case oBindInterface:
1104 charptr = &options->bind_interface;
1105 goto parse_string;
1106
1129 case oPKCS11Provider: 1107 case oPKCS11Provider:
1130 charptr = &options->pkcs11_provider; 1108 charptr = &options->pkcs11_provider;
1131 goto parse_string; 1109 goto parse_string;
@@ -1159,15 +1137,9 @@ parse_command:
1159 intptr = &options->port; 1137 intptr = &options->port;
1160parse_int: 1138parse_int:
1161 arg = strdelim(&s); 1139 arg = strdelim(&s);
1162 if (!arg || *arg == '\0') 1140 if ((errstr = atoi_err(arg, &value)) != NULL)
1163 fatal("%.200s line %d: Missing argument.", filename, linenum); 1141 fatal("%s line %d: integer value %s.",
1164 if (arg[0] < '0' || arg[0] > '9') 1142 filename, linenum, errstr);
1165 fatal("%.200s line %d: Bad number.", filename, linenum);
1166
1167 /* Octal, decimal, or hex format? */
1168 value = strtol(arg, &endofnumber, 0);
1169 if (arg == endofnumber)
1170 fatal("%.200s line %d: Bad number.", filename, linenum);
1171 if (*activep && *intptr == -1) 1143 if (*activep && *intptr == -1)
1172 *intptr = value; 1144 *intptr = value;
1173 break; 1145 break;
@@ -1562,7 +1534,10 @@ parse_keytypes:
1562 case oCanonicalDomains: 1534 case oCanonicalDomains:
1563 value = options->num_canonical_domains != 0; 1535 value = options->num_canonical_domains != 0;
1564 while ((arg = strdelim(&s)) != NULL && *arg != '\0') { 1536 while ((arg = strdelim(&s)) != NULL && *arg != '\0') {
1565 valid_domain(arg, filename, linenum); 1537 if (!valid_domain(arg, 1, &errstr)) {
1538 fatal("%s line %d: %s", filename, linenum,
1539 errstr);
1540 }
1566 if (!*activep || value) 1541 if (!*activep || value)
1567 continue; 1542 continue;
1568 if (options->num_canonical_domains >= MAX_CANON_DOMAINS) 1543 if (options->num_canonical_domains >= MAX_CANON_DOMAINS)
@@ -1830,6 +1805,7 @@ initialize_options(Options * options)
1830 options->log_level = SYSLOG_LEVEL_NOT_SET; 1805 options->log_level = SYSLOG_LEVEL_NOT_SET;
1831 options->preferred_authentications = NULL; 1806 options->preferred_authentications = NULL;
1832 options->bind_address = NULL; 1807 options->bind_address = NULL;
1808 options->bind_interface = NULL;
1833 options->pkcs11_provider = NULL; 1809 options->pkcs11_provider = NULL;
1834 options->enable_ssh_keysign = - 1; 1810 options->enable_ssh_keysign = - 1;
1835 options->no_host_authentication_for_localhost = - 1; 1811 options->no_host_authentication_for_localhost = - 1;
@@ -1967,6 +1943,7 @@ fill_default_options(Options * options)
1967#endif 1943#endif
1968 add_identity_file(options, "~/", 1944 add_identity_file(options, "~/",
1969 _PATH_SSH_CLIENT_ID_ED25519, 0); 1945 _PATH_SSH_CLIENT_ID_ED25519, 0);
1946 add_identity_file(options, "~/", _PATH_SSH_CLIENT_ID_XMSS, 0);
1970 } 1947 }
1971 if (options->escape_char == -1) 1948 if (options->escape_char == -1)
1972 options->escape_char = '~'; 1949 options->escape_char = '~';
@@ -2294,11 +2271,13 @@ parse_jump(const char *s, Options *o, int active)
2294 2271
2295 if (first) { 2272 if (first) {
2296 /* First argument and configuration is active */ 2273 /* First argument and configuration is active */
2297 if (parse_user_host_port(cp, &user, &host, &port) != 0) 2274 if (parse_ssh_uri(cp, &user, &host, &port) == -1 ||
2275 parse_user_host_port(cp, &user, &host, &port) != 0)
2298 goto out; 2276 goto out;
2299 } else { 2277 } else {
2300 /* Subsequent argument or inactive configuration */ 2278 /* Subsequent argument or inactive configuration */
2301 if (parse_user_host_port(cp, NULL, NULL, NULL) != 0) 2279 if (parse_ssh_uri(cp, NULL, NULL, NULL) == -1 ||
2280 parse_user_host_port(cp, NULL, NULL, NULL) != 0)
2302 goto out; 2281 goto out;
2303 } 2282 }
2304 first = 0; /* only check syntax for subsequent hosts */ 2283 first = 0; /* only check syntax for subsequent hosts */
@@ -2323,6 +2302,18 @@ parse_jump(const char *s, Options *o, int active)
2323 return ret; 2302 return ret;
2324} 2303}
2325 2304
2305int
2306parse_ssh_uri(const char *uri, char **userp, char **hostp, int *portp)
2307{
2308 char *path;
2309 int r;
2310
2311 r = parse_uri("ssh", uri, userp, hostp, portp, &path);
2312 if (r == 0 && path != NULL)
2313 r = -1; /* path not allowed */
2314 return r;
2315}
2316
2326/* XXX the following is a near-vebatim copy from servconf.c; refactor */ 2317/* XXX the following is a near-vebatim copy from servconf.c; refactor */
2327static const char * 2318static const char *
2328fmt_multistate_int(int val, const struct multistate *m) 2319fmt_multistate_int(int val, const struct multistate *m)
@@ -2525,6 +2516,7 @@ dump_client_config(Options *o, const char *host)
2525 2516
2526 /* String options */ 2517 /* String options */
2527 dump_cfg_string(oBindAddress, o->bind_address); 2518 dump_cfg_string(oBindAddress, o->bind_address);
2519 dump_cfg_string(oBindInterface, o->bind_interface);
2528 dump_cfg_string(oCiphers, o->ciphers ? o->ciphers : KEX_CLIENT_ENCRYPT); 2520 dump_cfg_string(oCiphers, o->ciphers ? o->ciphers : KEX_CLIENT_ENCRYPT);
2529 dump_cfg_string(oControlPath, o->control_path); 2521 dump_cfg_string(oControlPath, o->control_path);
2530 dump_cfg_string(oHostKeyAlgorithms, o->hostkeyalgorithms); 2522 dump_cfg_string(oHostKeyAlgorithms, o->hostkeyalgorithms);
diff --git a/readconf.h b/readconf.h
index 22fe5c187..f4d9e2b26 100644
--- a/readconf.h
+++ b/readconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: readconf.h,v 1.123 2017/09/03 23:33:13 djm Exp $ */ 1/* $OpenBSD: readconf.h,v 1.125 2018/02/23 02:34:33 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -81,6 +81,7 @@ typedef struct {
81 char *user_hostfiles[SSH_MAX_HOSTS_FILES]; 81 char *user_hostfiles[SSH_MAX_HOSTS_FILES];
82 char *preferred_authentications; 82 char *preferred_authentications;
83 char *bind_address; /* local socket address for connection to sshd */ 83 char *bind_address; /* local socket address for connection to sshd */
84 char *bind_interface; /* local interface for bind address */
84 char *pkcs11_provider; /* PKCS#11 provider */ 85 char *pkcs11_provider; /* PKCS#11 provider */
85 int verify_host_key_dns; /* Verify host key using DNS */ 86 int verify_host_key_dns; /* Verify host key using DNS */
86 87
@@ -204,6 +205,7 @@ int read_config_file(const char *, struct passwd *, const char *,
204 const char *, Options *, int); 205 const char *, Options *, int);
205int parse_forward(struct Forward *, const char *, int, int); 206int parse_forward(struct Forward *, const char *, int, int);
206int parse_jump(const char *, Options *, int); 207int parse_jump(const char *, Options *, int);
208int parse_ssh_uri(const char *, char **, char **, int *);
207int default_ssh_port(void); 209int default_ssh_port(void);
208int option_clear_or_none(const char *); 210int option_clear_or_none(const char *);
209void dump_client_config(Options *o, const char *host); 211void dump_client_config(Options *o, const char *host);
diff --git a/regress/Makefile b/regress/Makefile
index 7d50f9cfa..d15898ad0 100644
--- a/regress/Makefile
+++ b/regress/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.95 2017/06/24 06:35:24 djm Exp $ 1# $OpenBSD: Makefile,v 1.96 2017/10/24 19:33:32 millert 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)
@@ -19,6 +19,7 @@ distclean: clean
19LTESTS= connect \ 19LTESTS= connect \
20 proxy-connect \ 20 proxy-connect \
21 connect-privsep \ 21 connect-privsep \
22 connect-uri \
22 proto-version \ 23 proto-version \
23 proto-mismatch \ 24 proto-mismatch \
24 exit-status \ 25 exit-status \
@@ -42,6 +43,7 @@ LTESTS= connect \
42 keygen-moduli \ 43 keygen-moduli \
43 key-options \ 44 key-options \
44 scp \ 45 scp \
46 scp-uri \
45 sftp \ 47 sftp \
46 sftp-chroot \ 48 sftp-chroot \
47 sftp-cmds \ 49 sftp-cmds \
@@ -49,6 +51,7 @@ LTESTS= connect \
49 sftp-batch \ 51 sftp-batch \
50 sftp-glob \ 52 sftp-glob \
51 sftp-perm \ 53 sftp-perm \
54 sftp-uri \
52 reconfigure \ 55 reconfigure \
53 dynamic-forward \ 56 dynamic-forward \
54 forwarding \ 57 forwarding \
diff --git a/regress/README.regress b/regress/README.regress
index 9b99bdacb..867855017 100644
--- a/regress/README.regress
+++ b/regress/README.regress
@@ -100,5 +100,3 @@ Known Issues.
100- Recent GNU coreutils deprecate "head -[n]": this will cause the yes-head 100- Recent GNU coreutils deprecate "head -[n]": this will cause the yes-head
101 test to fail. The old behaviour can be restored by setting (and 101 test to fail. The old behaviour can be restored by setting (and
102 exporting) _POSIX2_VERSION=199209 before running the tests. 102 exporting) _POSIX2_VERSION=199209 before running the tests.
103
104$Id: README.regress,v 1.12 2011/05/05 03:48:42 djm Exp $
diff --git a/regress/agent-getpeereid.sh b/regress/agent-getpeereid.sh
index 037a50914..769c29e8d 100644
--- a/regress/agent-getpeereid.sh
+++ b/regress/agent-getpeereid.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent-getpeereid.sh,v 1.9 2017/09/13 14:58:26 bluhm Exp $ 1# $OpenBSD: agent-getpeereid.sh,v 1.10 2018/02/09 03:40:22 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="disallow agent attach from other uid" 4tid="disallow agent attach from other uid"
@@ -18,6 +18,7 @@ case "x$SUDO" in
18 xdoas) ;; 18 xdoas) ;;
19 x) 19 x)
20 echo "need SUDO to switch to uid $UNPRIV" 20 echo "need SUDO to switch to uid $UNPRIV"
21 echo SKIPPED
21 exit 0 ;; 22 exit 0 ;;
22 *) 23 *)
23 echo "unsupported $SUDO - "doas" and "sudo" are allowed" 24 echo "unsupported $SUDO - "doas" and "sudo" are allowed"
diff --git a/regress/agent-ptrace.sh b/regress/agent-ptrace.sh
index bb676d631..2d795ee32 100644
--- a/regress/agent-ptrace.sh
+++ b/regress/agent-ptrace.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent-ptrace.sh,v 1.2 2014/02/27 21:21:25 djm Exp $ 1# $OpenBSD: agent-ptrace.sh,v 1.3 2015/09/11 04:55:01 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="disallow agent ptrace attach" 4tid="disallow agent ptrace attach"
diff --git a/regress/agent.sh b/regress/agent.sh
index 0baf0c74a..7111056c9 100644
--- a/regress/agent.sh
+++ b/regress/agent.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: agent.sh,v 1.12 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: agent.sh,v 1.13 2017/12/19 00:49:30 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="simple agent test" 4tid="simple agent test"
@@ -12,66 +12,106 @@ trace "start agent"
12eval `${SSHAGENT} -s` > /dev/null 12eval `${SSHAGENT} -s` > /dev/null
13r=$? 13r=$?
14if [ $r -ne 0 ]; then 14if [ $r -ne 0 ]; then
15 fail "could not start ssh-agent: exit code $r" 15 fatal "could not start ssh-agent: exit code $r"
16else 16fi
17 ${SSHADD} -l > /dev/null 2>&1 17
18 if [ $? -ne 1 ]; then 18${SSHADD} -l > /dev/null 2>&1
19 fail "ssh-add -l did not fail with exit code 1" 19if [ $? -ne 1 ]; then
20 fi 20 fail "ssh-add -l did not fail with exit code 1"
21 trace "overwrite authorized keys" 21fi
22 printf '' > $OBJ/authorized_keys_$USER 22
23 for t in ${SSH_KEYTYPES}; do 23rm -f $OBJ/user_ca_key $OBJ/user_ca_key.pub
24 # generate user key for agent 24${SSHKEYGEN} -q -N '' -t ed25519 -f $OBJ/user_ca_key \
25 rm -f $OBJ/$t-agent 25 || fatal "ssh-keygen failed"
26 ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t-agent ||\ 26
27 fail "ssh-keygen for $t-agent failed" 27trace "overwrite authorized keys"
28 # add to authorized keys 28printf '' > $OBJ/authorized_keys_$USER
29 cat $OBJ/$t-agent.pub >> $OBJ/authorized_keys_$USER 29
30 # add privat key to agent 30for t in ${SSH_KEYTYPES}; do
31 ${SSHADD} $OBJ/$t-agent > /dev/null 2>&1 31 # generate user key for agent
32 if [ $? -ne 0 ]; then 32 rm -f $OBJ/$t-agent $OBJ/$t-agent.pub*
33 fail "ssh-add did succeed exit code 0" 33 ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t-agent ||\
34 fi 34 fatal "ssh-keygen for $t-agent failed"
35 done 35 # Make a certificate for each too.
36 ${SSHADD} -l > /dev/null 2>&1 36 ${SSHKEYGEN} -qs $OBJ/user_ca_key -I "$t cert" \
37 r=$? 37 -n estragon $OBJ/$t-agent.pub || fatal "ca sign failed"
38 if [ $r -ne 0 ]; then 38
39 fail "ssh-add -l failed: exit code $r" 39 # add to authorized keys
40 fi 40 cat $OBJ/$t-agent.pub >> $OBJ/authorized_keys_$USER
41 # the same for full pubkey output 41 # add privat key to agent
42 ${SSHADD} -L > /dev/null 2>&1 42 ${SSHADD} $OBJ/$t-agent > /dev/null 2>&1
43 r=$? 43 if [ $? -ne 0 ]; then
44 if [ $r -ne 0 ]; then 44 fail "ssh-add did succeed exit code 0"
45 fail "ssh-add -L failed: exit code $r"
46 fi 45 fi
46 # Remove private key to ensure that we aren't accidentally using it.
47 rm -f $OBJ/$t-agent
48done
49
50# Remove explicit identity directives from ssh_proxy
51mv $OBJ/ssh_proxy $OBJ/ssh_proxy_bak
52grep -vi identityfile $OBJ/ssh_proxy_bak > $OBJ/ssh_proxy
53
54${SSHADD} -l > /dev/null 2>&1
55r=$?
56if [ $r -ne 0 ]; then
57 fail "ssh-add -l failed: exit code $r"
58fi
59# the same for full pubkey output
60${SSHADD} -L > /dev/null 2>&1
61r=$?
62if [ $r -ne 0 ]; then
63 fail "ssh-add -L failed: exit code $r"
64fi
47 65
48 trace "simple connect via agent" 66trace "simple connect via agent"
49 ${SSH} -F $OBJ/ssh_proxy somehost exit 52 67${SSH} -F $OBJ/ssh_proxy somehost exit 52
68r=$?
69if [ $r -ne 52 ]; then
70 fail "ssh connect with failed (exit code $r)"
71fi
72
73for t in ${SSH_KEYTYPES}; do
74 trace "connect via agent using $t key"
75 ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub -oIdentitiesOnly=yes \
76 somehost exit 52
50 r=$? 77 r=$?
51 if [ $r -ne 52 ]; then 78 if [ $r -ne 52 ]; then
52 fail "ssh connect with failed (exit code $r)" 79 fail "ssh connect with failed (exit code $r)"
53 fi 80 fi
81done
54 82
55 trace "agent forwarding" 83trace "agent forwarding"
56 ${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1 84${SSH} -A -F $OBJ/ssh_proxy somehost ${SSHADD} -l > /dev/null 2>&1
57 r=$? 85r=$?
58 if [ $r -ne 0 ]; then 86if [ $r -ne 0 ]; then
59 fail "ssh-add -l via agent fwd failed (exit code $r)" 87 fail "ssh-add -l via agent fwd failed (exit code $r)"
60 fi 88fi
61 ${SSH} -A -F $OBJ/ssh_proxy somehost \ 89${SSH} -A -F $OBJ/ssh_proxy somehost \
62 "${SSH} -F $OBJ/ssh_proxy somehost exit 52" 90 "${SSH} -F $OBJ/ssh_proxy somehost exit 52"
63 r=$? 91r=$?
64 if [ $r -ne 52 ]; then 92if [ $r -ne 52 ]; then
65 fail "agent fwd failed (exit code $r)" 93 fail "agent fwd failed (exit code $r)"
66 fi 94fi
67 95
68 trace "delete all agent keys" 96(printf 'cert-authority,principals="estragon" '; cat $OBJ/user_ca_key.pub) \
69 ${SSHADD} -D > /dev/null 2>&1 97 > $OBJ/authorized_keys_$USER
98for t in ${SSH_KEYTYPES}; do
99 trace "connect via agent using $t key"
100 ${SSH} -F $OBJ/ssh_proxy -i $OBJ/$t-agent.pub \
101 -oCertificateFile=$OBJ/$t-agent-cert.pub \
102 -oIdentitiesOnly=yes somehost exit 52
70 r=$? 103 r=$?
71 if [ $r -ne 0 ]; then 104 if [ $r -ne 52 ]; then
72 fail "ssh-add -D failed: exit code $r" 105 fail "ssh connect with failed (exit code $r)"
73 fi 106 fi
107done
74 108
75 trace "kill agent" 109trace "delete all agent keys"
76 ${SSHAGENT} -k > /dev/null 110${SSHADD} -D > /dev/null 2>&1
111r=$?
112if [ $r -ne 0 ]; then
113 fail "ssh-add -D failed: exit code $r"
77fi 114fi
115
116trace "kill agent"
117${SSHAGENT} -k > /dev/null
diff --git a/regress/allow-deny-users.sh b/regress/allow-deny-users.sh
index 86805e193..4165111e0 100644
--- a/regress/allow-deny-users.sh
+++ b/regress/allow-deny-users.sh
@@ -1,5 +1,6 @@
1# Public Domain 1# Public Domain
2# Zev Weiss, 2016 2# Zev Weiss, 2016
3# $OpenBSD: allow-deny-users.sh,v 1.4 2017/10/20 02:13:41 djm Exp $
3 4
4tid="AllowUsers/DenyUsers" 5tid="AllowUsers/DenyUsers"
5 6
diff --git a/regress/authinfo.sh b/regress/authinfo.sh
index e725296c9..3caf89478 100644
--- a/regress/authinfo.sh
+++ b/regress/authinfo.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: authinfo.sh,v 1.1 2017/06/24 06:35:24 djm Exp $ 1# $OpenBSD: authinfo.sh,v 1.2 2017/10/25 20:08:36 millert Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="authinfo" 4tid="authinfo"
@@ -6,7 +6,7 @@ tid="authinfo"
6# Ensure the environment variable doesn't leak when ExposeAuthInfo=no. 6# Ensure the environment variable doesn't leak when ExposeAuthInfo=no.
7verbose "ExposeAuthInfo=no" 7verbose "ExposeAuthInfo=no"
8env SSH_USER_AUTH=blah ${SSH} -F $OBJ/ssh_proxy x \ 8env SSH_USER_AUTH=blah ${SSH} -F $OBJ/ssh_proxy x \
9 'test -z "$SSH_USER_AUTH"' || fail "SSH_USER_AUTH present" 9 'env | grep SSH_USER_AUTH >/dev/null' && fail "SSH_USER_AUTH present"
10 10
11verbose "ExposeAuthInfo=yes" 11verbose "ExposeAuthInfo=yes"
12echo ExposeAuthInfo=yes >> $OBJ/sshd_proxy 12echo ExposeAuthInfo=yes >> $OBJ/sshd_proxy
diff --git a/regress/cert-userkey.sh b/regress/cert-userkey.sh
index 6a23fe300..30c2c156d 100644
--- a/regress/cert-userkey.sh
+++ b/regress/cert-userkey.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: cert-userkey.sh,v 1.18 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: cert-userkey.sh,v 1.19 2018/03/12 00:54:04 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="certified user keys" 4tid="certified user keys"
@@ -8,6 +8,7 @@ cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak
8cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak 8cp $OBJ/ssh_proxy $OBJ/ssh_proxy_bak
9 9
10PLAIN_TYPES=`$SSH -Q key-plain | sed 's/^ssh-dss/ssh-dsa/;s/^ssh-//'` 10PLAIN_TYPES=`$SSH -Q key-plain | sed 's/^ssh-dss/ssh-dsa/;s/^ssh-//'`
11EXTRA_TYPES=""
11 12
12if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then 13if echo "$PLAIN_TYPES" | grep '^rsa$' >/dev/null 2>&1 ; then
13 PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512" 14 PLAIN_TYPES="$PLAIN_TYPES rsa-sha2-256 rsa-sha2-512"
@@ -15,7 +16,7 @@ fi
15 16
16kname() { 17kname() {
17 case $ktype in 18 case $ktype in
18 rsa-sha2-*) ;; 19 rsa-sha2-*) n="$ktype" ;;
19 # subshell because some seds will add a newline 20 # subshell because some seds will add a newline
20 *) n=$(echo $1 | sed 's/^dsa/ssh-dss/;s/^rsa/ssh-rsa/;s/^ed/ssh-ed/') ;; 21 *) n=$(echo $1 | sed 's/^dsa/ssh-dss/;s/^rsa/ssh-rsa/;s/^ed/ssh-ed/') ;;
21 esac 22 esac
diff --git a/regress/cfgmatch.sh b/regress/cfgmatch.sh
index 2504d04f4..dd11e404d 100644
--- a/regress/cfgmatch.sh
+++ b/regress/cfgmatch.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: cfgmatch.sh,v 1.10 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: cfgmatch.sh,v 1.11 2017/10/04 18:50:23 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sshd_config match" 4tid="sshd_config match"
@@ -41,7 +41,7 @@ stop_client()
41cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak 41cp $OBJ/sshd_proxy $OBJ/sshd_proxy_bak
42echo "PermitOpen 127.0.0.1:1" >>$OBJ/sshd_config 42echo "PermitOpen 127.0.0.1:1" >>$OBJ/sshd_config
43echo "Match Address 127.0.0.1" >>$OBJ/sshd_config 43echo "Match Address 127.0.0.1" >>$OBJ/sshd_config
44echo "PermitOpen 127.0.0.1:$PORT" >>$OBJ/sshd_config 44echo "PermitOpen 127.0.0.1:2 127.0.0.1:3 127.0.0.1:$PORT" >>$OBJ/sshd_config
45 45
46grep -v AuthorizedKeysFile $OBJ/sshd_proxy_bak > $OBJ/sshd_proxy 46grep -v AuthorizedKeysFile $OBJ/sshd_proxy_bak > $OBJ/sshd_proxy
47echo "AuthorizedKeysFile /dev/null" >>$OBJ/sshd_proxy 47echo "AuthorizedKeysFile /dev/null" >>$OBJ/sshd_proxy
@@ -49,7 +49,7 @@ echo "PermitOpen 127.0.0.1:1" >>$OBJ/sshd_proxy
49echo "Match user $USER" >>$OBJ/sshd_proxy 49echo "Match user $USER" >>$OBJ/sshd_proxy
50echo "AuthorizedKeysFile /dev/null $OBJ/authorized_keys_%u" >>$OBJ/sshd_proxy 50echo "AuthorizedKeysFile /dev/null $OBJ/authorized_keys_%u" >>$OBJ/sshd_proxy
51echo "Match Address 127.0.0.1" >>$OBJ/sshd_proxy 51echo "Match Address 127.0.0.1" >>$OBJ/sshd_proxy
52echo "PermitOpen 127.0.0.1:$PORT" >>$OBJ/sshd_proxy 52echo "PermitOpen 127.0.0.1:2 127.0.0.1:3 127.0.0.1:$PORT" >>$OBJ/sshd_proxy
53 53
54start_sshd 54start_sshd
55 55
diff --git a/regress/connect-uri.sh b/regress/connect-uri.sh
new file mode 100644
index 000000000..f13f15e66
--- /dev/null
+++ b/regress/connect-uri.sh
@@ -0,0 +1,29 @@
1# $OpenBSD: connect-uri.sh,v 1.1 2017/10/24 19:33:32 millert Exp $
2# Placed in the Public Domain.
3
4tid="uri connect"
5
6# Remove Port and User from ssh_config, we want to rely on the URI
7cp $OBJ/ssh_config $OBJ/ssh_config.orig
8egrep -v '^ +(Port|User) +.*$' $OBJ/ssh_config.orig > $OBJ/ssh_config
9
10start_sshd
11
12verbose "$tid: no trailing slash"
13${SSH} -F $OBJ/ssh_config "ssh://${USER}@somehost:${PORT}" true
14if [ $? -ne 0 ]; then
15 fail "ssh connection failed"
16fi
17
18verbose "$tid: trailing slash"
19${SSH} -F $OBJ/ssh_config "ssh://${USER}@somehost:${PORT}/" true
20if [ $? -ne 0 ]; then
21 fail "ssh connection failed"
22fi
23
24verbose "$tid: with path name"
25${SSH} -F $OBJ/ssh_config "ssh://${USER}@somehost:${PORT}/${DATA}" true \
26 > /dev/null 2>&1
27if [ $? -eq 0 ]; then
28 fail "ssh connection succeeded, expected failure"
29fi
diff --git a/regress/forward-control.sh b/regress/forward-control.sh
index 2e9dbb53a..93d05cf63 100644
--- a/regress/forward-control.sh
+++ b/regress/forward-control.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: forward-control.sh,v 1.4 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: forward-control.sh,v 1.5 2018/03/02 02:51:55 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sshd control of local and remote forwarding" 4tid="sshd control of local and remote forwarding"
@@ -151,6 +151,33 @@ all_tests() {
151 > ${OBJ}/sshd_proxy 151 > ${OBJ}/sshd_proxy
152 check_lfwd $_permit_lfwd "$_prefix, permitopen" 152 check_lfwd $_permit_lfwd "$_prefix, permitopen"
153 check_rfwd $_permit_rfwd "$_prefix, permitopen" 153 check_rfwd $_permit_rfwd "$_prefix, permitopen"
154 # Check port-forwarding flags in authorized_keys.
155 # These two should refuse all.
156 sed "s/^/no-port-forwarding /" \
157 < ${OBJ}/authorized_keys_${USER}.bak \
158 > ${OBJ}/authorized_keys_${USER} || fatal "sed 3 fail"
159 ( cat ${OBJ}/sshd_proxy.bak ;
160 echo "AllowTcpForwarding $_tcpfwd" ) \
161 > ${OBJ}/sshd_proxy
162 check_lfwd N "$_prefix, no-port-forwarding"
163 check_rfwd N "$_prefix, no-port-forwarding"
164 sed "s/^/restrict /" \
165 < ${OBJ}/authorized_keys_${USER}.bak \
166 > ${OBJ}/authorized_keys_${USER} || fatal "sed 4 fail"
167 ( cat ${OBJ}/sshd_proxy.bak ;
168 echo "AllowTcpForwarding $_tcpfwd" ) \
169 > ${OBJ}/sshd_proxy
170 check_lfwd N "$_prefix, restrict"
171 check_rfwd N "$_prefix, restrict"
172 # This should pass the same cases as _nopermit*
173 sed "s/^/restrict,port-forwarding /" \
174 < ${OBJ}/authorized_keys_${USER}.bak \
175 > ${OBJ}/authorized_keys_${USER} || fatal "sed 5 fail"
176 ( cat ${OBJ}/sshd_proxy.bak ;
177 echo "AllowTcpForwarding $_tcpfwd" ) \
178 > ${OBJ}/sshd_proxy
179 check_lfwd $_plain_lfwd "$_prefix, restrict,port-forwarding"
180 check_rfwd $_plain_rfwd "$_prefix, restrict,port-forwarding"
154} 181}
155 182
156# no-permitopen mismatch-permitopen match-permitopen 183# no-permitopen mismatch-permitopen match-permitopen
diff --git a/regress/key-options.sh b/regress/key-options.sh
index 2adee6833..d680737c1 100644
--- a/regress/key-options.sh
+++ b/regress/key-options.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: key-options.sh,v 1.4 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: key-options.sh,v 1.8 2018/03/14 05:35:40 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="key options" 4tid="key options"
@@ -21,12 +21,46 @@ for c in 'command="echo bar"' 'no-pty,command="echo bar"'; do
21done 21done
22 22
23# Test no-pty 23# Test no-pty
24sed 's/.*/no-pty &/' $origkeys >$authkeys 24expect_pty_succeed() {
25verbose "key option proto no-pty" 25 which=$1
26r=`${SSH} -q -F $OBJ/ssh_proxy somehost tty` 26 opts=$2
27if [ -f "$r" ]; then 27 rm -f $OBJ/data
28 fail "key option failed no-pty (pty $r)" 28 sed "s/.*/$opts &/" $origkeys >$authkeys
29fi 29 verbose "key option pty $which"
30 ${SSH} -ttq -F $OBJ/ssh_proxy somehost "tty > $OBJ/data; exit 0"
31 if [ $? -ne 0 ] ; then
32 fail "key option failed $which"
33 else
34 r=`cat $OBJ/data`
35 case "$r" in
36 /dev/*) ;;
37 *) fail "key option failed $which (pty $r)" ;;
38 esac
39 fi
40}
41expect_pty_fail() {
42 which=$1
43 opts=$2
44 rm -f $OBJ/data
45 sed "s/.*/$opts &/" $origkeys >$authkeys
46 verbose "key option pty $which"
47 ${SSH} -ttq -F $OBJ/ssh_proxy somehost "tty > $OBJ/data; exit 0"
48 if [ $? -eq 0 ]; then
49 r=`cat $OBJ/data`
50 if [ -e "$r" ]; then
51 fail "key option failed $which (pty $r)"
52 fi
53 case "$r" in
54 /dev/*) fail "key option failed $which (pty $r)" ;;
55 *) ;;
56 esac
57 fi
58}
59# First ensure that we can allocate a pty by default.
60expect_pty_succeed "default" ""
61expect_pty_fail "no-pty" "no-pty"
62expect_pty_fail "restrict" "restrict"
63expect_pty_succeed "restrict,pty" "restrict,pty"
30 64
31# Test environment= 65# Test environment=
32echo 'PermitUserEnvironment yes' >> $OBJ/sshd_proxy 66echo 'PermitUserEnvironment yes' >> $OBJ/sshd_proxy
@@ -60,4 +94,22 @@ for f in 127.0.0.1 '127.0.0.0\/8'; do
60 fi 94 fi
61done 95done
62 96
63rm -f "$origkeys" 97check_valid_before() {
98 which=$1
99 opts=$2
100 expect=$3
101 sed "s/.*/$opts &/" $origkeys >$authkeys
102 verbose "key option expiry-time $which"
103 ${SSH} -q -F $OBJ/ssh_proxy somehost true
104 r=$?
105 case "$expect" in
106 fail) test $r -eq 0 && fail "key option succeeded $which" ;;
107 pass) test $r -ne 0 && fail "key option failed $which" ;;
108 *) fatal "unknown expectation $expect" ;;
109 esac
110}
111check_valid_before "default" "" "pass"
112check_valid_before "invalid" 'expiry-time="INVALID"' "fail"
113check_valid_before "expired" 'expiry-time="19990101"' "fail"
114check_valid_before "valid" 'expiry-time="20380101"' "pass"
115
diff --git a/regress/keys-command.sh b/regress/keys-command.sh
index 9c9ada7c7..4029e2c78 100644
--- a/regress/keys-command.sh
+++ b/regress/keys-command.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: keys-command.sh,v 1.3 2015/05/21 06:40:02 djm Exp $ 1# $OpenBSD: keys-command.sh,v 1.4 2016/09/26 21:34:38 bluhm 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"
diff --git a/regress/keytype.sh b/regress/keytype.sh
index 88b022de4..f78a2c171 100644
--- a/regress/keytype.sh
+++ b/regress/keytype.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: keytype.sh,v 1.5 2017/03/20 22:08:06 djm Exp $ 1# $OpenBSD: keytype.sh,v 1.7 2018/03/12 00:54:04 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="login with different key types" 4tid="login with different key types"
@@ -17,7 +17,7 @@ for i in `$SSH -Q key`; do
17 esac 17 esac
18done 18done
19 19
20for kt in $ktypes; do 20for kt in $ktypes; do
21 rm -f $OBJ/key.$kt 21 rm -f $OBJ/key.$kt
22 bits=`echo ${kt} | awk -F- '{print $2}'` 22 bits=`echo ${kt} | awk -F- '{print $2}'`
23 type=`echo ${kt} | awk -F- '{print $1}'` 23 type=`echo ${kt} | awk -F- '{print $1}'`
@@ -27,28 +27,28 @@ for kt in $ktypes; do
27done 27done
28 28
29tries="1 2 3" 29tries="1 2 3"
30for ut in $ktypes; do 30for ut in $ktypes; do
31 htypes=$ut 31 htypes=$ut
32 #htypes=$ktypes 32 #htypes=$ktypes
33 for ht in $htypes; do 33 for ht in $htypes; do
34 case $ht in 34 case $ht in
35 dsa-1024) t=ssh-dss;; 35 dsa-1024) t=ssh-dss;;
36 ecdsa-256) t=ecdsa-sha2-nistp256;; 36 ecdsa-256) t=ecdsa-sha2-nistp256;;
37 ecdsa-384) t=ecdsa-sha2-nistp384;; 37 ecdsa-384) t=ecdsa-sha2-nistp384;;
38 ecdsa-521) t=ecdsa-sha2-nistp521;; 38 ecdsa-521) t=ecdsa-sha2-nistp521;;
39 ed25519-512) t=ssh-ed25519;; 39 ed25519-512) t=ssh-ed25519;;
40 rsa-*) t=ssh-rsa;; 40 rsa-*) t=rsa-sha2-512,rsa-sha2-256,ssh-rsa;;
41 esac 41 esac
42 trace "ssh connect, userkey $ut, hostkey $ht" 42 trace "ssh connect, userkey $ut, hostkey $ht"
43 ( 43 (
44 grep -v HostKey $OBJ/sshd_proxy_bak 44 grep -v HostKey $OBJ/sshd_proxy_bak
45 echo HostKey $OBJ/key.$ht 45 echo HostKey $OBJ/key.$ht
46 echo PubkeyAcceptedKeyTypes $t 46 echo PubkeyAcceptedKeyTypes $t
47 echo HostKeyAlgorithms $t 47 echo HostKeyAlgorithms $t
48 ) > $OBJ/sshd_proxy 48 ) > $OBJ/sshd_proxy
49 ( 49 (
50 grep -v IdentityFile $OBJ/ssh_proxy_bak 50 grep -v IdentityFile $OBJ/ssh_proxy_bak
51 echo IdentityFile $OBJ/key.$ut 51 echo IdentityFile $OBJ/key.$ut
52 echo PubkeyAcceptedKeyTypes $t 52 echo PubkeyAcceptedKeyTypes $t
53 echo HostKeyAlgorithms $t 53 echo HostKeyAlgorithms $t
54 ) > $OBJ/ssh_proxy 54 ) > $OBJ/ssh_proxy
diff --git a/regress/limit-keytype.sh b/regress/limit-keytype.sh
index c0cf2fed6..04f11977e 100644
--- a/regress/limit-keytype.sh
+++ b/regress/limit-keytype.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: limit-keytype.sh,v 1.4 2015/10/29 08:05:17 djm Exp $ 1# $OpenBSD: limit-keytype.sh,v 1.5 2018/03/12 00:52:57 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="restrict pubkey type" 4tid="restrict pubkey type"
@@ -60,7 +60,8 @@ ${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed"
60 60
61# Allow plain Ed25519 and RSA. The certificate should fail. 61# Allow plain Ed25519 and RSA. The certificate should fail.
62verbose "allow rsa,ed25519" 62verbose "allow rsa,ed25519"
63prepare_config "PubkeyAcceptedKeyTypes ssh-rsa,ssh-ed25519" 63prepare_config \
64 "PubkeyAcceptedKeyTypes rsa-sha2-256,rsa-sha2-512,ssh-rsa,ssh-ed25519"
64${SSH} $certopts proxy true && fatal "cert succeeded" 65${SSH} $certopts proxy true && fatal "cert succeeded"
65${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed" 66${SSH} $opts -i $OBJ/user_key1 proxy true || fatal "key1 failed"
66${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed" 67${SSH} $opts -i $OBJ/user_key2 proxy true || fatal "key2 failed"
@@ -74,14 +75,14 @@ ${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded"
74 75
75# Allow all certs. Plain keys should fail. 76# Allow all certs. Plain keys should fail.
76verbose "allow cert only" 77verbose "allow cert only"
77prepare_config "PubkeyAcceptedKeyTypes ssh-*-cert-v01@openssh.com" 78prepare_config "PubkeyAcceptedKeyTypes *-cert-v01@openssh.com"
78${SSH} $certopts proxy true || fatal "cert failed" 79${SSH} $certopts proxy true || fatal "cert failed"
79${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded" 80${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded"
80${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded" 81${SSH} $opts -i $OBJ/user_key2 proxy true && fatal "key2 succeeded"
81 82
82# Allow RSA in main config, Ed25519 for non-existent user. 83# Allow RSA in main config, Ed25519 for non-existent user.
83verbose "match w/ no match" 84verbose "match w/ no match"
84prepare_config "PubkeyAcceptedKeyTypes ssh-rsa" \ 85prepare_config "PubkeyAcceptedKeyTypes rsa-sha2-256,rsa-sha2-512,ssh-rsa" \
85 "Match user x$USER" "PubkeyAcceptedKeyTypes +ssh-ed25519" 86 "Match user x$USER" "PubkeyAcceptedKeyTypes +ssh-ed25519"
86${SSH} $certopts proxy true && fatal "cert succeeded" 87${SSH} $certopts proxy true && fatal "cert succeeded"
87${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded" 88${SSH} $opts -i $OBJ/user_key1 proxy true && fatal "key1 succeeded"
diff --git a/regress/misc/fuzz-harness/sig_fuzz.cc b/regress/misc/fuzz-harness/sig_fuzz.cc
index 0e535b49a..dd1fda091 100644
--- a/regress/misc/fuzz-harness/sig_fuzz.cc
+++ b/regress/misc/fuzz-harness/sig_fuzz.cc
@@ -37,13 +37,13 @@ int LLVMFuzzerTestOneInput(const uint8_t* sig, size_t slen)
37 static const size_t dlen = strlen(data); 37 static const size_t dlen = strlen(data);
38 38
39#ifdef WITH_OPENSSL 39#ifdef WITH_OPENSSL
40 sshkey_verify(rsa, sig, slen, (const u_char *)data, dlen, 0); 40 sshkey_verify(rsa, sig, slen, (const u_char *)data, dlen, NULL, 0);
41 sshkey_verify(dsa, sig, slen, (const u_char *)data, dlen, 0); 41 sshkey_verify(dsa, sig, slen, (const u_char *)data, dlen, NULL, 0);
42 sshkey_verify(ecdsa256, sig, slen, (const u_char *)data, dlen, 0); 42 sshkey_verify(ecdsa256, sig, slen, (const u_char *)data, dlen, NULL, 0);
43 sshkey_verify(ecdsa384, sig, slen, (const u_char *)data, dlen, 0); 43 sshkey_verify(ecdsa384, sig, slen, (const u_char *)data, dlen, NULL, 0);
44 sshkey_verify(ecdsa521, sig, slen, (const u_char *)data, dlen, 0); 44 sshkey_verify(ecdsa521, sig, slen, (const u_char *)data, dlen, NULL, 0);
45#endif 45#endif
46 sshkey_verify(ed25519, sig, slen, (const u_char *)data, dlen, 0); 46 sshkey_verify(ed25519, sig, slen, (const u_char *)data, dlen, NULL, 0);
47 return 0; 47 return 0;
48} 48}
49 49
diff --git a/regress/misc/kexfuzz/Makefile b/regress/misc/kexfuzz/Makefile
index d0aca8dfe..a7bb6b70d 100644
--- a/regress/misc/kexfuzz/Makefile
+++ b/regress/misc/kexfuzz/Makefile
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile,v 1.2 2017/04/17 11:02:31 jsg Exp $ 1# $OpenBSD: Makefile,v 1.3 2017/12/21 05:46:35 djm Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.include <bsd.obj.mk> 4.include <bsd.obj.mk>
@@ -9,6 +9,25 @@ OPENSSL?= yes
9 9
10PROG= kexfuzz 10PROG= kexfuzz
11SRCS= kexfuzz.c 11SRCS= kexfuzz.c
12
13SSHREL=../../../../../usr.bin/ssh
14.PATH: ${.CURDIR}/${SSHREL}
15# From usr.bin/ssh
16SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
17SRCS+=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
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
21SRCS+=kex.c kexc25519.c kexc25519c.c kexc25519s.c kexdh.c kexdhc.c kexdhs.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
26SRCS+=smult_curve25519_ref.c
27
28SRCS+=digest-openssl.c
29#SRCS+=digest-libc.c
30
12NOMAN= 1 31NOMAN= 1
13 32
14.if (${OPENSSL:L} == "yes") 33.if (${OPENSSL:L} == "yes")
@@ -49,23 +68,14 @@ CDIAGFLAGS+= -Wswitch
49CDIAGFLAGS+= -Wtrigraphs 68CDIAGFLAGS+= -Wtrigraphs
50CDIAGFLAGS+= -Wuninitialized 69CDIAGFLAGS+= -Wuninitialized
51CDIAGFLAGS+= -Wunused 70CDIAGFLAGS+= -Wunused
71CDIAGFLAGS+= -Wno-unused-parameter
52.if ${COMPILER_VERSION:L} != "gcc3" 72.if ${COMPILER_VERSION:L} != "gcc3"
53CDIAGFLAGS+= -Wpointer-sign
54CDIAGFLAGS+= -Wold-style-definition 73CDIAGFLAGS+= -Wold-style-definition
55.endif 74.endif
56 75
57SSHREL=../../../../../usr.bin/ssh
58 76
59CFLAGS+=-I${.CURDIR}/${SSHREL} 77CFLAGS+=-I${.CURDIR}/${SSHREL}
60 78
61.if exists(${.CURDIR}/${SSHREL}/lib/${__objdir})
62LDADD+=-L${.CURDIR}/${SSHREL}/lib/${__objdir} -lssh
63DPADD+=${.CURDIR}/${SSHREL}/lib/${__objdir}/libssh.a
64.else
65LDADD+=-L${.CURDIR}/${SSHREL}/lib -lssh
66DPADD+=${.CURDIR}/${SSHREL}/lib/libssh.a
67.endif
68
69LDADD+= -lutil -lz 79LDADD+= -lutil -lz
70DPADD+= ${LIBUTIL} ${LIBZ} 80DPADD+= ${LIBUTIL} ${LIBZ}
71 81
diff --git a/regress/misc/kexfuzz/README b/regress/misc/kexfuzz/README
index abd7b50ee..504c26f3b 100644
--- a/regress/misc/kexfuzz/README
+++ b/regress/misc/kexfuzz/README
@@ -30,3 +30,5 @@ Limitations: kexfuzz can't change the ordering of packets at
30present. It is limited to replacing individual packets with 30present. It is limited to replacing individual packets with
31fuzzed variants with the same type. It really should allow 31fuzzed variants with the same type. It really should allow
32insertion, deletion on replacement of packets too. 32insertion, deletion on replacement of packets too.
33
34$OpenBSD: README,v 1.3 2017/10/20 02:13:41 djm Exp $
diff --git a/regress/modpipe.c b/regress/modpipe.c
index 5f4824b51..5f4824b51 100755..100644
--- a/regress/modpipe.c
+++ b/regress/modpipe.c
diff --git a/regress/netcat.c b/regress/netcat.c
index 98a08b1ec..56bd09de5 100644
--- a/regress/netcat.c
+++ b/regress/netcat.c
@@ -738,7 +738,12 @@ local_listen(char *host, char *port, struct addrinfo hints)
738#ifdef SO_REUSEPORT 738#ifdef SO_REUSEPORT
739 ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x)); 739 ret = setsockopt(s, SOL_SOCKET, SO_REUSEPORT, &x, sizeof(x));
740 if (ret == -1) 740 if (ret == -1)
741 err(1, "setsockopt"); 741 err(1, "setsockopt SO_REUSEPORT");
742#endif
743#ifdef SO_REUSEADDR
744 ret = setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &x, sizeof(x));
745 if (ret == -1)
746 err(1, "setsockopt SO_REUSEADDR");
742#endif 747#endif
743 set_common_sockopts(s); 748 set_common_sockopts(s);
744 749
diff --git a/regress/proxy-connect.sh b/regress/proxy-connect.sh
index f1b9d9f76..39bbd3c96 100644
--- a/regress/proxy-connect.sh
+++ b/regress/proxy-connect.sh
@@ -1,25 +1,19 @@
1# $OpenBSD: proxy-connect.sh,v 1.10 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: proxy-connect.sh,v 1.11 2017/09/26 22:39:25 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="proxy connect" 4tid="proxy connect"
5 5
6mv $OBJ/sshd_proxy $OBJ/sshd_proxy.orig 6for c in no yes; do
7 7 verbose "plain username comp=$c"
8for ps in no yes; do 8 opts="-oCompression=$c -F $OBJ/ssh_proxy"
9 cp $OBJ/sshd_proxy.orig $OBJ/sshd_proxy 9 SSH_CONNECTION=`${SSH} $opts 999.999.999.999 'echo $SSH_CONNECTION'`
10 echo "UsePrivilegeSeparation $ps" >> $OBJ/sshd_proxy 10 if [ $? -ne 0 ]; then
11 for c in no yes; do 11 fail "ssh proxyconnect comp=$c failed"
12 verbose "plain username privsep=$ps comp=$c" 12 fi
13 opts="-oCompression=$c -F $OBJ/ssh_proxy" 13 if [ "$SSH_CONNECTION" != "UNKNOWN 65535 UNKNOWN 65535" ]; then
14 SSH_CONNECTION=`${SSH} $opts 999.999.999.999 'echo $SSH_CONNECTION'` 14 fail "bad SSH_CONNECTION comp=$c: " \
15 if [ $? -ne 0 ]; then 15 "$SSH_CONNECTION"
16 fail "ssh proxyconnect privsep=$ps comp=$c failed" 16 fi
17 fi
18 if [ "$SSH_CONNECTION" != "UNKNOWN 65535 UNKNOWN 65535" ]; then
19 fail "bad SSH_CONNECTION privsep=$ps comp=$c: " \
20 "$SSH_CONNECTION"
21 fi
22 done
23done 17done
24 18
25verbose "username with style" 19verbose "username with style"
diff --git a/regress/putty-ciphers.sh b/regress/putty-ciphers.sh
index 419daabba..191a2bda8 100644
--- a/regress/putty-ciphers.sh
+++ b/regress/putty-ciphers.sh
@@ -15,7 +15,7 @@ for c in aes 3des aes128-ctr aes192-ctr aes256-ctr ; do
15 echo "Cipher=$c" >> ${OBJ}/.putty/sessions/cipher_$c 15 echo "Cipher=$c" >> ${OBJ}/.putty/sessions/cipher_$c
16 16
17 rm -f ${COPY} 17 rm -f ${COPY}
18 env HOME=$PWD ${PLINK} -load cipher_$c -batch -i putty.rsa2 \ 18 env HOME=$PWD ${PLINK} -load cipher_$c -batch -i ${OBJ}/putty.rsa2 \
19 cat ${DATA} > ${COPY} 19 cat ${DATA} > ${COPY}
20 if [ $? -ne 0 ]; then 20 if [ $? -ne 0 ]; then
21 fail "ssh cat $DATA failed" 21 fail "ssh cat $DATA failed"
diff --git a/regress/putty-kex.sh b/regress/putty-kex.sh
index 9d3c6a9f0..71c09701b 100644
--- a/regress/putty-kex.sh
+++ b/regress/putty-kex.sh
@@ -14,7 +14,7 @@ for k in dh-gex-sha1 dh-group1-sha1 dh-group14-sha1 ; do
14 ${OBJ}/.putty/sessions/kex_$k 14 ${OBJ}/.putty/sessions/kex_$k
15 echo "KEX=$k" >> ${OBJ}/.putty/sessions/kex_$k 15 echo "KEX=$k" >> ${OBJ}/.putty/sessions/kex_$k
16 16
17 env HOME=$PWD ${PLINK} -load kex_$k -batch -i putty.rsa2 true 17 env HOME=$PWD ${PLINK} -load kex_$k -batch -i ${OBJ}/putty.rsa2 true
18 if [ $? -ne 0 ]; then 18 if [ $? -ne 0 ]; then
19 fail "KEX $k failed" 19 fail "KEX $k failed"
20 fi 20 fi
diff --git a/regress/putty-transfer.sh b/regress/putty-transfer.sh
index 32c79f9ea..4928d4533 100644
--- a/regress/putty-transfer.sh
+++ b/regress/putty-transfer.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: putty-transfer.sh,v 1.5 2017/04/30 23:34:55 djm Exp $ 1# $OpenBSD: putty-transfer.sh,v 1.6 2018/02/23 03:03:00 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="putty transfer data" 4tid="putty transfer data"
@@ -15,7 +15,7 @@ for c in 0 1 ; do
15 ${OBJ}/.putty/sessions/compression_$c 15 ${OBJ}/.putty/sessions/compression_$c
16 echo "Compression=$c" >> ${OBJ}/.putty/sessions/kex_$k 16 echo "Compression=$c" >> ${OBJ}/.putty/sessions/kex_$k
17 env HOME=$PWD ${PLINK} -load compression_$c -batch \ 17 env HOME=$PWD ${PLINK} -load compression_$c -batch \
18 -i putty.rsa cat ${DATA} > ${COPY} 18 -i ${OBJ}/putty.rsa2 cat ${DATA} > ${COPY}
19 if [ $? -ne 0 ]; then 19 if [ $? -ne 0 ]; then
20 fail "ssh cat $DATA failed" 20 fail "ssh cat $DATA failed"
21 fi 21 fi
@@ -26,7 +26,7 @@ for c in 0 1 ; do
26 rm -f ${COPY} 26 rm -f ${COPY}
27 dd if=$DATA obs=${s} 2> /dev/null | \ 27 dd if=$DATA obs=${s} 2> /dev/null | \
28 env HOME=$PWD ${PLINK} -load compression_$c \ 28 env HOME=$PWD ${PLINK} -load compression_$c \
29 -batch -i putty.rsa \ 29 -batch -i ${OBJ}/putty.rsa2 \
30 "cat > ${COPY}" 30 "cat > ${COPY}"
31 if [ $? -ne 0 ]; then 31 if [ $? -ne 0 ]; then
32 fail "ssh cat $DATA failed" 32 fail "ssh cat $DATA failed"
diff --git a/regress/scp-uri.sh b/regress/scp-uri.sh
new file mode 100644
index 000000000..c03d8bbe0
--- /dev/null
+++ b/regress/scp-uri.sh
@@ -0,0 +1,70 @@
1# $OpenBSD: scp-uri.sh,v 1.2 2017/12/11 11:41:56 dtucker Exp $
2# Placed in the Public Domain.
3
4tid="scp-uri"
5
6#set -x
7
8COPY2=${OBJ}/copy2
9DIR=${COPY}.dd
10DIR2=${COPY}.dd2
11
12SRC=`dirname ${SCRIPT}`
13cp ${SRC}/scp-ssh-wrapper.sh ${OBJ}/scp-ssh-wrapper.scp
14chmod 755 ${OBJ}/scp-ssh-wrapper.scp
15scpopts="-q -S ${OBJ}/scp-ssh-wrapper.scp"
16export SCP # used in scp-ssh-wrapper.scp
17
18scpclean() {
19 rm -rf ${COPY} ${COPY2} ${DIR} ${DIR2}
20 mkdir ${DIR} ${DIR2}
21}
22
23# Remove Port and User from ssh_config, we want to rely on the URI
24cp $OBJ/ssh_config $OBJ/ssh_config.orig
25egrep -v '^ +(Port|User) +.*$' $OBJ/ssh_config.orig > $OBJ/ssh_config
26
27verbose "$tid: simple copy local file to remote file"
28scpclean
29$SCP $scpopts ${DATA} "scp://${USER}@somehost:${PORT}/${COPY}" || fail "copy failed"
30cmp ${DATA} ${COPY} || fail "corrupted copy"
31
32verbose "$tid: simple copy remote file to local file"
33scpclean
34$SCP $scpopts "scp://${USER}@somehost:${PORT}/${DATA}" ${COPY} || fail "copy failed"
35cmp ${DATA} ${COPY} || fail "corrupted copy"
36
37verbose "$tid: simple copy local file to remote dir"
38scpclean
39cp ${DATA} ${COPY}
40$SCP $scpopts ${COPY} "scp://${USER}@somehost:${PORT}/${DIR}" || fail "copy failed"
41cmp ${COPY} ${DIR}/copy || fail "corrupted copy"
42
43verbose "$tid: simple copy remote file to local dir"
44scpclean
45cp ${DATA} ${COPY}
46$SCP $scpopts "scp://${USER}@somehost:${PORT}/${COPY}" ${DIR} || fail "copy failed"
47cmp ${COPY} ${DIR}/copy || fail "corrupted copy"
48
49verbose "$tid: recursive local dir to remote dir"
50scpclean
51rm -rf ${DIR2}
52cp ${DATA} ${DIR}/copy
53$SCP $scpopts -r ${DIR} "scp://${USER}@somehost:${PORT}/${DIR2}" || fail "copy failed"
54for i in $(cd ${DIR} && echo *); do
55 cmp ${DIR}/$i ${DIR2}/$i || fail "corrupted copy"
56done
57
58verbose "$tid: recursive remote dir to local dir"
59scpclean
60rm -rf ${DIR2}
61cp ${DATA} ${DIR}/copy
62$SCP $scpopts -r "scp://${USER}@somehost:${PORT}/${DIR}" ${DIR2} || fail "copy failed"
63for i in $(cd ${DIR} && echo *); do
64 cmp ${DIR}/$i ${DIR2}/$i || fail "corrupted copy"
65done
66
67# TODO: scp -3
68
69scpclean
70rm -f ${OBJ}/scp-ssh-wrapper.exe
diff --git a/regress/sftp-chroot.sh b/regress/sftp-chroot.sh
index 4ea2fce85..ba5bd1efb 100644
--- a/regress/sftp-chroot.sh
+++ b/regress/sftp-chroot.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: sftp-chroot.sh,v 1.5 2016/09/26 21:34:38 bluhm Exp $ 1# $OpenBSD: sftp-chroot.sh,v 1.6 2018/02/09 03:42:57 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="sftp in chroot" 4tid="sftp in chroot"
@@ -8,8 +8,9 @@ FILENAME=testdata_${USER}
8PRIVDATA=${CHROOT}/${FILENAME} 8PRIVDATA=${CHROOT}/${FILENAME}
9 9
10if [ -z "$SUDO" -a ! -w /var/run ]; then 10if [ -z "$SUDO" -a ! -w /var/run ]; then
11 echo "skipped: need SUDO to create file in /var/run, test won't work without" 11 echo "need SUDO to create file in /var/run, test won't work without"
12 exit 0 12 echo SKIPPED
13 exit 0
13fi 14fi
14 15
15if ! $OBJ/check-perm -m chroot "$CHROOT" ; then 16if ! $OBJ/check-perm -m chroot "$CHROOT" ; then
diff --git a/regress/sftp-uri.sh b/regress/sftp-uri.sh
new file mode 100644
index 000000000..7be104dfb
--- /dev/null
+++ b/regress/sftp-uri.sh
@@ -0,0 +1,63 @@
1# $OpenBSD: sftp-uri.sh,v 1.1 2017/10/24 19:33:32 millert Exp $
2# Placed in the Public Domain.
3
4tid="sftp-uri"
5
6#set -x
7
8COPY2=${OBJ}/copy2
9DIR=${COPY}.dd
10DIR2=${COPY}.dd2
11SRC=`dirname ${SCRIPT}`
12
13sftpclean() {
14 rm -rf ${COPY} ${COPY2} ${DIR} ${DIR2}
15 mkdir ${DIR} ${DIR2}
16}
17
18start_sshd -oForceCommand="internal-sftp -d /"
19
20# Remove Port and User from ssh_config, we want to rely on the URI
21cp $OBJ/ssh_config $OBJ/ssh_config.orig
22egrep -v '^ +(Port|User) +.*$' $OBJ/ssh_config.orig > $OBJ/ssh_config
23
24verbose "$tid: non-interactive fetch to local file"
25sftpclean
26${SFTP} -q -S "$SSH" -F $OBJ/ssh_config "sftp://${USER}@somehost:${PORT}/${DATA}" ${COPY} || fail "copy failed"
27cmp ${DATA} ${COPY} || fail "corrupted copy"
28
29verbose "$tid: non-interactive fetch to local dir"
30sftpclean
31cp ${DATA} ${COPY}
32${SFTP} -q -S "$SSH" -F $OBJ/ssh_config "sftp://${USER}@somehost:${PORT}/${COPY}" ${DIR} || fail "copy failed"
33cmp ${COPY} ${DIR}/copy || fail "corrupted copy"
34
35verbose "$tid: put to remote directory (trailing slash)"
36sftpclean
37${SFTP} -q -S "$SSH" -F $OBJ/ssh_config -b - \
38 "sftp://${USER}@somehost:${PORT}/${DIR}/" > /dev/null 2>&1 << EOF
39 version
40 put ${DATA} copy
41EOF
42r=$?
43if [ $r -ne 0 ]; then
44 fail "sftp failed with $r"
45else
46 cmp ${DATA} ${DIR}/copy || fail "corrupted copy"
47fi
48
49verbose "$tid: put to remote directory (no slash)"
50sftpclean
51${SFTP} -q -S "$SSH" -F $OBJ/ssh_config -b - \
52 "sftp://${USER}@somehost:${PORT}/${DIR}" > /dev/null 2>&1 << EOF
53 version
54 put ${DATA} copy
55EOF
56r=$?
57if [ $r -ne 0 ]; then
58 fail "sftp failed with $r"
59else
60 cmp ${DATA} ${DIR}/copy || fail "corrupted copy"
61fi
62
63sftpclean
diff --git a/regress/sftp.sh b/regress/sftp.sh
index b8e9f7527..a5c88f584 100644
--- a/regress/sftp.sh
+++ b/regress/sftp.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: sftp.sh,v 1.5 2013/05/17 10:28:11 dtucker Exp $ 1# $OpenBSD: sftp.sh,v 1.6 2017/10/30 21:59:43 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="basic sftp put/get" 4tid="basic sftp put/get"
@@ -22,11 +22,11 @@ for B in ${BUFFERSIZE}; do
22 r=$? 22 r=$?
23 if [ $r -ne 0 ]; then 23 if [ $r -ne 0 ]; then
24 fail "sftp failed with $r" 24 fail "sftp failed with $r"
25 else 25 else
26 cmp $DATA ${COPY}.1 || fail "corrupted copy after get" 26 cmp $DATA ${COPY}.1 || fail "corrupted copy after get"
27 cmp $DATA ${COPY}.2 || fail "corrupted copy after put" 27 cmp $DATA ${COPY}.2 || fail "corrupted copy after put"
28 fi 28 fi
29 done 29 done
30done 30done
31rm -f ${COPY}.1 ${COPY}.2 31rm -f ${COPY}.1 ${COPY}.2
32rm -f $SFTPCMDFILE 32rm -f $SFTPCMDFILE
diff --git a/regress/sshd-log-wrapper.sh b/regress/sshd-log-wrapper.sh
index c00934c78..29dc44aa0 100644
--- a/regress/sshd-log-wrapper.sh
+++ b/regress/sshd-log-wrapper.sh
@@ -1,5 +1,5 @@
1#!/bin/sh 1#!/bin/sh
2# $OpenBSD: sshd-log-wrapper.sh,v 1.3 2013/04/07 02:16:03 dtucker Exp $ 2# $OpenBSD: sshd-log-wrapper.sh,v 1.4 2016/11/25 02:56:49 dtucker Exp $
3# Placed in the Public Domain. 3# Placed in the Public Domain.
4# 4#
5# simple wrapper for sshd proxy mode to catch stderr output 5# simple wrapper for sshd proxy mode to catch stderr output
diff --git a/regress/test-exec.sh b/regress/test-exec.sh
index 68f010b70..b6169f157 100644
--- a/regress/test-exec.sh
+++ b/regress/test-exec.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: test-exec.sh,v 1.61 2017/07/28 10:32:08 dtucker Exp $ 1# $OpenBSD: test-exec.sh,v 1.62 2018/03/16 09:06:31 dtucker Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4#SUDO=sudo 4#SUDO=sudo
@@ -503,6 +503,7 @@ if test "$REGRESS_INTEROP_PUTTY" = "yes" ; then
503 # Add a PuTTY key to authorized_keys 503 # Add a PuTTY key to authorized_keys
504 rm -f ${OBJ}/putty.rsa2 504 rm -f ${OBJ}/putty.rsa2
505 if ! puttygen -t rsa -o ${OBJ}/putty.rsa2 \ 505 if ! puttygen -t rsa -o ${OBJ}/putty.rsa2 \
506 --random-device=/dev/urandom \
506 --new-passphrase /dev/null < /dev/null > /dev/null; then 507 --new-passphrase /dev/null < /dev/null > /dev/null; then
507 echo "Your installed version of PuTTY is too old to support --new-passphrase; trying without (may require manual interaction) ..." >&2 508 echo "Your installed version of PuTTY is too old to support --new-passphrase; trying without (may require manual interaction) ..." >&2
508 puttygen -t rsa -o ${OBJ}/putty.rsa2 < /dev/null > /dev/null 509 puttygen -t rsa -o ${OBJ}/putty.rsa2 < /dev/null > /dev/null
@@ -526,6 +527,9 @@ if test "$REGRESS_INTEROP_PUTTY" = "yes" ; then
526 echo "ProxyTelnetCommand=sh ${SRC}/sshd-log-wrapper.sh ${TEST_SSHD_LOGFILE} ${SSHD} -i -f $OBJ/sshd_proxy" >> ${OBJ}/.putty/sessions/localhost_proxy 527 echo "ProxyTelnetCommand=sh ${SRC}/sshd-log-wrapper.sh ${TEST_SSHD_LOGFILE} ${SSHD} -i -f $OBJ/sshd_proxy" >> ${OBJ}/.putty/sessions/localhost_proxy
527 echo "ProxyLocalhost=1" >> ${OBJ}/.putty/sessions/localhost_proxy 528 echo "ProxyLocalhost=1" >> ${OBJ}/.putty/sessions/localhost_proxy
528 529
530 PUTTYDIR=${OBJ}/.putty
531 export PUTTYDIR
532
529 REGRESS_INTEROP_PUTTY=yes 533 REGRESS_INTEROP_PUTTY=yes
530fi 534fi
531 535
diff --git a/regress/unittests/Makefile b/regress/unittests/Makefile
index e975f6ca4..e464b085a 100644
--- a/regress/unittests/Makefile
+++ b/regress/unittests/Makefile
@@ -1,6 +1,7 @@
1# $OpenBSD: Makefile,v 1.9 2017/03/14 01:20:29 dtucker Exp $ 1# $OpenBSD: Makefile,v 1.10 2018/03/03 03:16:17 djm Exp $
2 2
3REGRESS_FAIL_EARLY?= yes 3REGRESS_FAIL_EARLY?= yes
4SUBDIR= test_helper sshbuf sshkey bitmap kex hostkeys utf8 match conversion 4SUBDIR= test_helper sshbuf sshkey bitmap kex hostkeys utf8 match conversion
5SUBDIR+=authopt
5 6
6.include <bsd.subdir.mk> 7.include <bsd.subdir.mk>
diff --git a/regress/unittests/Makefile.inc b/regress/unittests/Makefile.inc
index 36d1ff42c..b509f4452 100644
--- a/regress/unittests/Makefile.inc
+++ b/regress/unittests/Makefile.inc
@@ -1,4 +1,4 @@
1# $OpenBSD: Makefile.inc,v 1.11 2017/04/30 23:33:48 djm Exp $ 1# $OpenBSD: Makefile.inc,v 1.12 2017/12/21 00:41:22 djm Exp $
2 2
3.include <bsd.own.mk> 3.include <bsd.own.mk>
4.include <bsd.obj.mk> 4.include <bsd.obj.mk>
@@ -30,8 +30,8 @@ CDIAGFLAGS+= -Wswitch
30CDIAGFLAGS+= -Wtrigraphs 30CDIAGFLAGS+= -Wtrigraphs
31CDIAGFLAGS+= -Wuninitialized 31CDIAGFLAGS+= -Wuninitialized
32CDIAGFLAGS+= -Wunused 32CDIAGFLAGS+= -Wunused
33CDIAGFLAGS+= -Wno-unused-parameter
33.if ${COMPILER_VERSION:L} != "gcc3" 34.if ${COMPILER_VERSION:L} != "gcc3"
34CDIAGFLAGS+= -Wpointer-sign
35CDIAGFLAGS+= -Wold-style-definition 35CDIAGFLAGS+= -Wold-style-definition
36.endif 36.endif
37 37
@@ -47,17 +47,7 @@ LDADD+=-L${.CURDIR}/../test_helper -ltest_helper
47DPADD+=${.CURDIR}/../test_helper/libtest_helper.a 47DPADD+=${.CURDIR}/../test_helper/libtest_helper.a
48.endif 48.endif
49 49
50.if exists(${.CURDIR}/${SSHREL}/lib/${__objdir}) 50.PATH: ${.CURDIR}/${SSHREL}
51LDADD+=-L${.CURDIR}/${SSHREL}/lib/${__objdir} -lssh
52LIBSSH=${.CURDIR}/${SSHREL}/lib/${__objdir}/libssh.a
53.else
54LDADD+=-L${.CURDIR}/${SSHREL}/lib -lssh
55LIBSSH=${.CURDIR}/${SSHREL}/lib/libssh.a
56.endif
57DPADD+=${LIBSSH}
58${PROG}: ${LIBSSH}
59${LIBSSH}:
60 cd ${.CURDIR}/${SSHREL} && ${MAKE} lib
61 51
62LDADD+= -lcrypto 52LDADD+= -lcrypto
63DPADD+= ${LIBCRYPTO} 53DPADD+= ${LIBCRYPTO}
diff --git a/regress/unittests/authopt/testdata/all_permit.cert b/regress/unittests/authopt/testdata/all_permit.cert
new file mode 100644
index 000000000..38ac57318
--- /dev/null
+++ b/regress/unittests/authopt/testdata/all_permit.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIOv/h7mJS1WkRHukSvqPwKDiNVrcib/VqBLpbHW6xjWCAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQNe1XDN+J4Eb82TH5J5sYypcabocufjTFRfpU57K+csRP41Yo1FCSEWx95ilUuNvK9Iv3yFDOeVPzdqRqzWoHwE= user key
diff --git a/regress/unittests/authopt/testdata/bad_sourceaddr.cert b/regress/unittests/authopt/testdata/bad_sourceaddr.cert
new file mode 100644
index 000000000..9732745ac
--- /dev/null
+++ b/regress/unittests/authopt/testdata/bad_sourceaddr.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAILFEJyunlz9scYU3mwbOEJoSSkeO1z20uNBw13tEn+lJAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAHwAAAA5zb3VyY2UtYWRkcmVzcwAAAAkAAAAFeHh4eHgAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEA5xY/OEAJ3tgg8/KJqaBR5KMdYYRDiMJ6u4VKS9lQOV1HJQvDDvjj3F5k53BIqTJRVQx242YWs+B3C4db/uLgB user key
diff --git a/regress/unittests/authopt/testdata/force_command.cert b/regress/unittests/authopt/testdata/force_command.cert
new file mode 100644
index 000000000..f7af27e43
--- /dev/null
+++ b/regress/unittests/authopt/testdata/force_command.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJkpCeqaVl6qnp7qa90KehAmHFecx3HW8HZQ22KEqeKBAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAHAAAAA1mb3JjZS1jb21tYW5kAAAABwAAAANmb28AAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEAxbhjgbXvfEumRP1E7VH8nUfuJyVlDChhCxiPg9Nvb9PFK8cHdDUEybDCzKCsIDieRc3mtLTyEu7Kb52va/B4C user key
diff --git a/regress/unittests/authopt/testdata/host.cert b/regress/unittests/authopt/testdata/host.cert
new file mode 100644
index 000000000..6326d0453
--- /dev/null
+++ b/regress/unittests/authopt/testdata/host.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIFWMw3ftP29RSefnxQwdvK1KiE2G9Y7rPRrJ7ZsrDiOeAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAACAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAKTMqwPkaBg23RS7/aj347dc2kY4bWt/sHwzREYSrKRqZ5RNBnSvZOQ8m5euMCEuf92bZ8VJEdF653jRiW6VoBA== user key
diff --git a/regress/unittests/authopt/testdata/mktestdata.sh b/regress/unittests/authopt/testdata/mktestdata.sh
new file mode 100644
index 000000000..06a24e390
--- /dev/null
+++ b/regress/unittests/authopt/testdata/mktestdata.sh
@@ -0,0 +1,48 @@
1#/bin/sh
2
3set -xe
4
5rm -f ca_key ca_key.pub
6rm -f user_key user_key.pub
7rm -f *.cert
8
9ssh-keygen -q -f ca_key -t ed25519 -C CA -N ''
10ssh-keygen -q -f user_key -t ed25519 -C "user key" -N ''
11
12sign() {
13 output=$1
14 shift
15 set -xe
16 ssh-keygen -q -s ca_key -I user -n user \
17 -V 19990101:19991231 -z 1 "$@" user_key.pub
18 mv user_key-cert.pub "$output"
19}
20
21sign all_permit.cert -Opermit-agent-forwarding -Opermit-port-forwarding \
22 -Opermit-pty -Opermit-user-rc -Opermit-X11-forwarding
23sign no_permit.cert -Oclear
24
25sign no_agentfwd.cert -Ono-agent-forwarding
26sign no_portfwd.cert -Ono-port-forwarding
27sign no_pty.cert -Ono-pty
28sign no_user_rc.cert -Ono-user-rc
29sign no_x11fwd.cert -Ono-X11-forwarding
30
31sign only_agentfwd.cert -Oclear -Opermit-agent-forwarding
32sign only_portfwd.cert -Oclear -Opermit-port-forwarding
33sign only_pty.cert -Oclear -Opermit-pty
34sign only_user_rc.cert -Oclear -Opermit-user-rc
35sign only_x11fwd.cert -Oclear -Opermit-X11-forwarding
36
37sign force_command.cert -Oforce-command="foo"
38sign sourceaddr.cert -Osource-address="127.0.0.1/32,::1/128"
39
40# ssh-keygen won't permit generation of certs with invalid source-address
41# values, so we do it as a custom extension.
42sign bad_sourceaddr.cert -Ocritical:source-address=xxxxx
43
44sign unknown_critical.cert -Ocritical:blah=foo
45
46sign host.cert -h
47
48rm -f user_key ca_key user_key.pub ca_key.pub
diff --git a/regress/unittests/authopt/testdata/no_agentfwd.cert b/regress/unittests/authopt/testdata/no_agentfwd.cert
new file mode 100644
index 000000000..bfa5c2e65
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_agentfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIL2qEsLCVtKaBkbCrZicxbPUorcHHrQ8yw5h/26krTOlAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGMAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABZwZXJtaXQtcG9ydC1mb3J3YXJkaW5nAAAAAAAAAApwZXJtaXQtcHR5AAAAAAAAAA5wZXJtaXQtdXNlci1yYwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAdRhISpol01OwV30g39PM/JD1t35muskX4lyCcGpFQ08GQtBuHE/hABOp6apbGBJIC7CZYYF+uHkD7PfGU3NPAQ== user key
diff --git a/regress/unittests/authopt/testdata/no_permit.cert b/regress/unittests/authopt/testdata/no_permit.cert
new file mode 100644
index 000000000..351e138ae
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_permit.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIGVQtVgp9sD4sc8esIhVWbZaM8d0NxpX3UbEVzTHm9feAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAIKlI0TqqraKjYTjIuKhwoxAV/XnzWRJHq8lNs4aj5yDb84un2xXDF/0vXoLjPgVcLgEbksBKKn0i4whp+xn9Ag== user key
diff --git a/regress/unittests/authopt/testdata/no_portfwd.cert b/regress/unittests/authopt/testdata/no_portfwd.cert
new file mode 100644
index 000000000..9457dc34e
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_portfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIE6gC/QjjuzGWVDkr8ZyaHhja80V+lKLC/MvmEFa+CEBAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGQAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQEzpgckYlfc1BK1ir0reDSXo9OIDx4UoDMrNXrFO6I44NXoJJ4TlUUJH07WcKp/Xp5ESCdyVZtqwgHQxZr0+PwI= user key
diff --git a/regress/unittests/authopt/testdata/no_pty.cert b/regress/unittests/authopt/testdata/no_pty.cert
new file mode 100644
index 000000000..e8154ec7f
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_pty.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIFFjhISpSDR3blDejuCf2T9Fe4aHW53jG7KOH2PV/E7jAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAHAAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQF5c4BdxVYgqbMGAep414IGFK4deCFBCeNUTOLpKodrfb1M0gS4d2qoeMxZvMv5yMf/viKl/gallHzEmcrEcIQY= user key
diff --git a/regress/unittests/authopt/testdata/no_user_rc.cert b/regress/unittests/authopt/testdata/no_user_rc.cert
new file mode 100644
index 000000000..6676a0cbd
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_user_rc.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIFUM0VLATkYh05QeS5uuhB1X50NMom3jTWeQUmrPQ1FwAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGwAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAcmJ3c2FCKJL9BCLv1Ij+uN1N+NWZmMXYionsSkv42Go4pMZiH3g8UfTd+OKq9Q7GAcCzGXa///6Dr/wqFssoDA== user key
diff --git a/regress/unittests/authopt/testdata/no_x11fwd.cert b/regress/unittests/authopt/testdata/no_x11fwd.cert
new file mode 100644
index 000000000..0aff9e6cf
--- /dev/null
+++ b/regress/unittests/authopt/testdata/no_x11fwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIPRKPAP+b5S+4zihdgoJrYNcMovFBgKZaJupIhN1kUvkAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAGUAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAECMzj6VDfT+BJmIEo1qUKdr8VDLExF92K7KkbNxTH77n7uip7TL24HDfXjYBCvqxSSn9KAGBhnWsIC/GPx6A+cP user key
diff --git a/regress/unittests/authopt/testdata/only_agentfwd.cert b/regress/unittests/authopt/testdata/only_agentfwd.cert
new file mode 100644
index 000000000..3cf64b05c
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_agentfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIOvJ28yW5uvA7yxE3ySuyFvPjcRYKAr03CYr4okGTNIFAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAB8AAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQEG2uTgmOSk9dJ0s/Ol1EIERXFP9PF6AauF9t5jBMSthNyvSANSrC/1EIaf4TV5kMYfhZxJXoS0XHQjGndcq2AE= user key
diff --git a/regress/unittests/authopt/testdata/only_portfwd.cert b/regress/unittests/authopt/testdata/only_portfwd.cert
new file mode 100644
index 000000000..bb09c3a63
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_portfwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIGPoYoExiSyHMyDEvOFgoNZXk5z91u7xq/7357X23TotAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAB4AAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABAHN3YnwipcbDKVn+PObGSoaT9rwlau+yrPYZ50oetvCKng3RMjGaV+roqlv0vjjLcxE9J4Y0ti+9MXtQ0D7beBA== user key
diff --git a/regress/unittests/authopt/testdata/only_pty.cert b/regress/unittests/authopt/testdata/only_pty.cert
new file mode 100644
index 000000000..520c89f3b
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_pty.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAILvocWYto5Lg7P46YLbe7U4/b2h9Lr5rWqMZ4Cj4ra7RAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAABIAAAAKcGVybWl0LXB0eQAAAAAAAAAAAAAAMwAAAAtzc2gtZWQyNTUxOQAAACAoVYLMLNBOH1SSgemFuDBprzpDXop6ufRSOo6vtD4mTwAAAFMAAAALc3NoLWVkMjU1MTkAAABASv2xQvp+Y6E8dCf5pzg3MZaan5bl1ToYXNcmQ3ysGrk9Djkcu8m3TytDpF471KmUejxy/iF4xjs9CDpk7h+SBQ== user key
diff --git a/regress/unittests/authopt/testdata/only_user_rc.cert b/regress/unittests/authopt/testdata/only_user_rc.cert
new file mode 100644
index 000000000..fb49c35f3
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_user_rc.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJwsRZQ7kx4A8AQ0q/G/3i6sHM48kr4TxJtTcyy3lZAPAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAABYAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAADMAAAALc3NoLWVkMjU1MTkAAAAgKFWCzCzQTh9UkoHphbgwaa86Q16Kern0UjqOr7Q+Jk8AAABTAAAAC3NzaC1lZDI1NTE5AAAAQDhgEXsvoHr21XrxmiZq/sIjWeYapp11XvEVkkTBPVhBnPwtrrUeJbPmGs3gmJkQdv8BYajYpT7TXEX8GvEeLwU= user key
diff --git a/regress/unittests/authopt/testdata/only_x11fwd.cert b/regress/unittests/authopt/testdata/only_x11fwd.cert
new file mode 100644
index 000000000..6715585a0
--- /dev/null
+++ b/regress/unittests/authopt/testdata/only_x11fwd.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIDAhZFZBl3eu8Qa8I5BaHCz/mpH8xCjaPusBwo1eJ9OGAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAAAAAAB0AAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEDysfgbhniX/zdA8576rrDJpaO2D7QtQse2KWIM9XmREPkLKeP6FKiXKKFcPQiMyV28rptfvK8bBXAiOvITSUgL user key
diff --git a/regress/unittests/authopt/testdata/sourceaddr.cert b/regress/unittests/authopt/testdata/sourceaddr.cert
new file mode 100644
index 000000000..0fcf7b182
--- /dev/null
+++ b/regress/unittests/authopt/testdata/sourceaddr.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIJ54qqoPs87gtjN1aJoLUn7ZTYUtcaGxkzLyJvRkYG7nAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAALgAAAA5zb3VyY2UtYWRkcmVzcwAAABgAAAAUMTI3LjAuMC4xLzMyLDo6MS8xMjgAAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEAppSUKQ/a9tw/HgIazWceCO3d48GU7mkV4iQMpWWs2nB1dFryY1GDtZrBggAjMviwmBXyM3jIk5vxJDINZXGQJ user key
diff --git a/regress/unittests/authopt/testdata/unknown_critical.cert b/regress/unittests/authopt/testdata/unknown_critical.cert
new file mode 100644
index 000000000..216960ab3
--- /dev/null
+++ b/regress/unittests/authopt/testdata/unknown_critical.cert
@@ -0,0 +1 @@
ssh-ed25519-cert-v01@openssh.com AAAAIHNzaC1lZDI1NTE5LWNlcnQtdjAxQG9wZW5zc2guY29tAAAAIIjs/wRAB/p5QShSfqoU9cWnCLT3lSveUirk61A27KxVAAAAICeF4LbtRqwIRhewXifa5PKpbSU9P/K8CzeVYj8J/iBoAAAAAAAAAAEAAAABAAAABHVzZXIAAAAIAAAABHVzZXIAAAAANouDYAAAAAA4a2VgAAAAEwAAAARibGFoAAAABwAAAANmb28AAACCAAAAFXBlcm1pdC1YMTEtZm9yd2FyZGluZwAAAAAAAAAXcGVybWl0LWFnZW50LWZvcndhcmRpbmcAAAAAAAAAFnBlcm1pdC1wb3J0LWZvcndhcmRpbmcAAAAAAAAACnBlcm1pdC1wdHkAAAAAAAAADnBlcm1pdC11c2VyLXJjAAAAAAAAAAAAAAAzAAAAC3NzaC1lZDI1NTE5AAAAIChVgsws0E4fVJKB6YW4MGmvOkNeinq59FI6jq+0PiZPAAAAUwAAAAtzc2gtZWQyNTUxOQAAAEDix3FV7JIBuHNAwtZOVIqGBq8lqhnEwP51DqPA43qt+Tzynm56EWxuFzgGehBPF3L8gl+fVqxIJmiQ9iHB0LUD user key
diff --git a/regress/unittests/authopt/tests.c b/regress/unittests/authopt/tests.c
new file mode 100644
index 000000000..0e8aacb91
--- /dev/null
+++ b/regress/unittests/authopt/tests.c
@@ -0,0 +1,573 @@
1/* $OpenBSD: tests.c,v 1.1 2018/03/03 03:16:17 djm Exp $ */
2
3/*
4 * Regress test for keys options functions.
5 *
6 * Placed in the public domain
7 */
8
9#include <sys/types.h>
10#include <sys/param.h>
11#include <stdio.h>
12#include <stdint.h>
13#include <stdlib.h>
14#include <string.h>
15
16#include "test_helper.h"
17
18#include "sshkey.h"
19#include "authfile.h"
20#include "auth-options.h"
21#include "misc.h"
22#include "log.h"
23
24static struct sshkey *
25load_key(const char *name)
26{
27 struct sshkey *ret;
28 int r;
29
30 r = sshkey_load_public(test_data_file(name), &ret, NULL);
31 ASSERT_INT_EQ(r, 0);
32 ASSERT_PTR_NE(ret, NULL);
33 return ret;
34}
35
36static struct sshauthopt *
37default_authkey_opts(void)
38{
39 struct sshauthopt *ret = sshauthopt_new();
40
41 ASSERT_PTR_NE(ret, NULL);
42 ret->permit_port_forwarding_flag = 1;
43 ret->permit_agent_forwarding_flag = 1;
44 ret->permit_x11_forwarding_flag = 1;
45 ret->permit_pty_flag = 1;
46 ret->permit_user_rc = 1;
47 return ret;
48}
49
50static struct sshauthopt *
51default_authkey_restrict_opts(void)
52{
53 struct sshauthopt *ret = sshauthopt_new();
54
55 ASSERT_PTR_NE(ret, NULL);
56 ret->permit_port_forwarding_flag = 0;
57 ret->permit_agent_forwarding_flag = 0;
58 ret->permit_x11_forwarding_flag = 0;
59 ret->permit_pty_flag = 0;
60 ret->permit_user_rc = 0;
61 ret->restricted = 1;
62 return ret;
63}
64
65static char **
66commasplit(const char *s, size_t *np)
67{
68 char *ocp, *cp, *cp2, **ret = NULL;
69 size_t n;
70
71 ocp = cp = strdup(s);
72 ASSERT_PTR_NE(cp, NULL);
73 for (n = 0; (cp2 = strsep(&cp, ",")) != NULL;) {
74 ret = recallocarray(ret, n, n + 1, sizeof(*ret));
75 ASSERT_PTR_NE(ret, NULL);
76 cp2 = strdup(cp2);
77 ASSERT_PTR_NE(cp2, NULL);
78 ret[n++] = cp2;
79 }
80 free(ocp);
81 *np = n;
82 return ret;
83}
84
85static void
86compare_opts(const struct sshauthopt *opts,
87 const struct sshauthopt *expected)
88{
89 size_t i;
90
91 ASSERT_PTR_NE(opts, NULL);
92 ASSERT_PTR_NE(expected, NULL);
93 ASSERT_PTR_NE(expected, opts); /* bozo :) */
94
95#define FLAG_EQ(x) ASSERT_INT_EQ(opts->x, expected->x)
96 FLAG_EQ(permit_port_forwarding_flag);
97 FLAG_EQ(permit_agent_forwarding_flag);
98 FLAG_EQ(permit_x11_forwarding_flag);
99 FLAG_EQ(permit_pty_flag);
100 FLAG_EQ(permit_user_rc);
101 FLAG_EQ(restricted);
102 FLAG_EQ(cert_authority);
103#undef FLAG_EQ
104
105#define STR_EQ(x) \
106 do { \
107 if (expected->x == NULL) \
108 ASSERT_PTR_EQ(opts->x, expected->x); \
109 else \
110 ASSERT_STRING_EQ(opts->x, expected->x); \
111 } while (0)
112 STR_EQ(cert_principals);
113 STR_EQ(force_command);
114 STR_EQ(required_from_host_cert);
115 STR_EQ(required_from_host_keys);
116#undef STR_EQ
117
118#define ARRAY_EQ(nx, x) \
119 do { \
120 ASSERT_SIZE_T_EQ(opts->nx, expected->nx); \
121 if (expected->nx == 0) \
122 break; \
123 for (i = 0; i < expected->nx; i++) \
124 ASSERT_STRING_EQ(opts->x[i], expected->x[i]); \
125 } while (0)
126 ARRAY_EQ(nenv, env);
127 ARRAY_EQ(npermitopen, permitopen);
128#undef ARRAY_EQ
129}
130
131static void
132test_authkeys_parse(void)
133{
134 struct sshauthopt *opts, *expected;
135 const char *errstr;
136
137#define FAIL_TEST(label, keywords) \
138 do { \
139 TEST_START("sshauthopt_parse invalid " label); \
140 opts = sshauthopt_parse(keywords, &errstr); \
141 ASSERT_PTR_EQ(opts, NULL); \
142 ASSERT_PTR_NE(errstr, NULL); \
143 TEST_DONE(); \
144 } while (0)
145#define CHECK_SUCCESS_AND_CLEANUP() \
146 do { \
147 if (errstr != NULL) \
148 ASSERT_STRING_EQ(errstr, ""); \
149 compare_opts(opts, expected); \
150 sshauthopt_free(expected); \
151 sshauthopt_free(opts); \
152 } while (0)
153
154 /* Basic tests */
155 TEST_START("sshauthopt_parse empty");
156 expected = default_authkey_opts();
157 opts = sshauthopt_parse("", &errstr);
158 CHECK_SUCCESS_AND_CLEANUP();
159 TEST_DONE();
160
161 TEST_START("sshauthopt_parse trailing whitespace");
162 expected = default_authkey_opts();
163 opts = sshauthopt_parse(" ", &errstr);
164 CHECK_SUCCESS_AND_CLEANUP();
165 TEST_DONE();
166
167 TEST_START("sshauthopt_parse restrict");
168 expected = default_authkey_restrict_opts();
169 opts = sshauthopt_parse("restrict", &errstr);
170 CHECK_SUCCESS_AND_CLEANUP();
171 TEST_DONE();
172
173 /* Invalid syntax */
174 FAIL_TEST("trailing comma", "restrict,");
175 FAIL_TEST("bare comma", ",");
176 FAIL_TEST("unknown option", "BLAH");
177 FAIL_TEST("unknown option with trailing comma", "BLAH,");
178 FAIL_TEST("unknown option with trailing whitespace", "BLAH ");
179
180 /* force_tun_device */
181 TEST_START("sshauthopt_parse tunnel explicit");
182 expected = default_authkey_opts();
183 expected->force_tun_device = 1;
184 opts = sshauthopt_parse("tunnel=\"1\"", &errstr);
185 CHECK_SUCCESS_AND_CLEANUP();
186 TEST_DONE();
187
188 TEST_START("sshauthopt_parse tunnel any");
189 expected = default_authkey_opts();
190 expected->force_tun_device = SSH_TUNID_ANY;
191 opts = sshauthopt_parse("tunnel=\"any\"", &errstr);
192 CHECK_SUCCESS_AND_CLEANUP();
193 TEST_DONE();
194
195 FAIL_TEST("tunnel", "tunnel=\"blah\"");
196
197 /* Flag options */
198#define FLAG_TEST(keyword, var, val) \
199 do { \
200 TEST_START("sshauthopt_parse " keyword); \
201 expected = default_authkey_opts(); \
202 expected->var = val; \
203 opts = sshauthopt_parse(keyword, &errstr); \
204 CHECK_SUCCESS_AND_CLEANUP(); \
205 expected = default_authkey_restrict_opts(); \
206 expected->var = val; \
207 opts = sshauthopt_parse("restrict,"keyword, &errstr); \
208 CHECK_SUCCESS_AND_CLEANUP(); \
209 TEST_DONE(); \
210 } while (0)
211 /* Positive flags */
212 FLAG_TEST("cert-authority", cert_authority, 1);
213 FLAG_TEST("port-forwarding", permit_port_forwarding_flag, 1);
214 FLAG_TEST("agent-forwarding", permit_agent_forwarding_flag, 1);
215 FLAG_TEST("x11-forwarding", permit_x11_forwarding_flag, 1);
216 FLAG_TEST("pty", permit_pty_flag, 1);
217 FLAG_TEST("user-rc", permit_user_rc, 1);
218 /* Negative flags */
219 FLAG_TEST("no-port-forwarding", permit_port_forwarding_flag, 0);
220 FLAG_TEST("no-agent-forwarding", permit_agent_forwarding_flag, 0);
221 FLAG_TEST("no-x11-forwarding", permit_x11_forwarding_flag, 0);
222 FLAG_TEST("no-pty", permit_pty_flag, 0);
223 FLAG_TEST("no-user-rc", permit_user_rc, 0);
224#undef FLAG_TEST
225 FAIL_TEST("no-cert-authority", "no-cert-authority");
226
227 /* String options */
228#define STRING_TEST(keyword, var, val) \
229 do { \
230 TEST_START("sshauthopt_parse " keyword); \
231 expected = default_authkey_opts(); \
232 expected->var = strdup(val); \
233 ASSERT_PTR_NE(expected->var, NULL); \
234 opts = sshauthopt_parse(keyword "=" #val, &errstr); \
235 CHECK_SUCCESS_AND_CLEANUP(); \
236 expected = default_authkey_restrict_opts(); \
237 expected->var = strdup(val); \
238 ASSERT_PTR_NE(expected->var, NULL); \
239 opts = sshauthopt_parse( \
240 "restrict," keyword "=" #val ",restrict", &errstr); \
241 CHECK_SUCCESS_AND_CLEANUP(); \
242 TEST_DONE(); \
243 } while (0)
244 STRING_TEST("command", force_command, "/bin/true");
245 STRING_TEST("principals", cert_principals, "gregor,josef,K");
246 STRING_TEST("from", required_from_host_keys, "127.0.0.0/8");
247#undef STRING_TEST
248 FAIL_TEST("unquoted command", "command=oops");
249 FAIL_TEST("unquoted principals", "principals=estragon");
250 FAIL_TEST("unquoted from", "from=127.0.0.1");
251
252 /* String array option tests */
253#define ARRAY_TEST(label, keywords, var, nvar, val) \
254 do { \
255 TEST_START("sshauthopt_parse " label); \
256 expected = default_authkey_opts(); \
257 expected->var = commasplit(val, &expected->nvar); \
258 ASSERT_PTR_NE(expected->var, NULL); \
259 opts = sshauthopt_parse(keywords, &errstr); \
260 CHECK_SUCCESS_AND_CLEANUP(); \
261 expected = default_authkey_restrict_opts(); \
262 expected->var = commasplit(val, &expected->nvar); \
263 ASSERT_PTR_NE(expected->var, NULL); \
264 opts = sshauthopt_parse( \
265 "restrict," keywords ",restrict", &errstr); \
266 CHECK_SUCCESS_AND_CLEANUP(); \
267 TEST_DONE(); \
268 } while (0)
269 ARRAY_TEST("environment", "environment=\"foo=1\",environment=\"bar=2\"",
270 env, nenv, "foo=1,bar=2");
271 ARRAY_TEST("permitopen", "permitopen=\"foo:123\",permitopen=\"bar:*\"",
272 permitopen, npermitopen, "foo:123,bar:*");
273#undef ARRAY_TEST
274 FAIL_TEST("environment", "environment=\",=bah\"");
275 FAIL_TEST("permitopen port", "foo:bar");
276 FAIL_TEST("permitopen missing port", "foo:");
277 FAIL_TEST("permitopen missing port specification", "foo");
278 FAIL_TEST("permitopen invalid host", "[:");
279
280#undef CHECK_SUCCESS_AND_CLEANUP
281#undef FAIL_TEST
282}
283
284static void
285test_cert_parse(void)
286{
287 struct sshkey *cert;
288 struct sshauthopt *opts, *expected;
289
290#define CHECK_SUCCESS_AND_CLEANUP() \
291 do { \
292 compare_opts(opts, expected); \
293 sshauthopt_free(expected); \
294 sshauthopt_free(opts); \
295 sshkey_free(cert); \
296 } while (0)
297#define FLAG_TEST(keybase, var) \
298 do { \
299 TEST_START("sshauthopt_from_cert no_" keybase); \
300 cert = load_key("no_" keybase ".cert"); \
301 expected = default_authkey_opts(); \
302 expected->var = 0; \
303 opts = sshauthopt_from_cert(cert); \
304 CHECK_SUCCESS_AND_CLEANUP(); \
305 TEST_DONE(); \
306 TEST_START("sshauthopt_from_cert only_" keybase); \
307 cert = load_key("only_" keybase ".cert"); \
308 expected = sshauthopt_new(); \
309 ASSERT_PTR_NE(expected, NULL); \
310 expected->var = 1; \
311 opts = sshauthopt_from_cert(cert); \
312 CHECK_SUCCESS_AND_CLEANUP(); \
313 TEST_DONE(); \
314 } while (0)
315 FLAG_TEST("agentfwd", permit_agent_forwarding_flag);
316 FLAG_TEST("portfwd", permit_port_forwarding_flag);
317 FLAG_TEST("pty", permit_pty_flag);
318 FLAG_TEST("user_rc", permit_user_rc);
319 FLAG_TEST("x11fwd", permit_x11_forwarding_flag);
320#undef FLAG_TEST
321
322 TEST_START("sshauthopt_from_cert all permitted");
323 cert = load_key("all_permit.cert");
324 expected = default_authkey_opts();
325 opts = sshauthopt_from_cert(cert);
326 CHECK_SUCCESS_AND_CLEANUP();
327 TEST_DONE();
328
329 TEST_START("sshauthopt_from_cert nothing permitted");
330 cert = load_key("no_permit.cert");
331 expected = sshauthopt_new();
332 ASSERT_PTR_NE(expected, NULL);
333 opts = sshauthopt_from_cert(cert);
334 CHECK_SUCCESS_AND_CLEANUP();
335 TEST_DONE();
336
337 TEST_START("sshauthopt_from_cert force-command");
338 cert = load_key("force_command.cert");
339 expected = default_authkey_opts();
340 expected->force_command = strdup("foo");
341 ASSERT_PTR_NE(expected->force_command, NULL);
342 opts = sshauthopt_from_cert(cert);
343 CHECK_SUCCESS_AND_CLEANUP();
344 TEST_DONE();
345
346 TEST_START("sshauthopt_from_cert source-address");
347 cert = load_key("sourceaddr.cert");
348 expected = default_authkey_opts();
349 expected->required_from_host_cert = strdup("127.0.0.1/32,::1/128");
350 ASSERT_PTR_NE(expected->required_from_host_cert, NULL);
351 opts = sshauthopt_from_cert(cert);
352 CHECK_SUCCESS_AND_CLEANUP();
353 TEST_DONE();
354#undef CHECK_SUCCESS_AND_CLEANUP
355
356#define FAIL_TEST(keybase) \
357 do { \
358 TEST_START("sshauthopt_from_cert " keybase); \
359 cert = load_key(keybase ".cert"); \
360 opts = sshauthopt_from_cert(cert); \
361 ASSERT_PTR_EQ(opts, NULL); \
362 sshkey_free(cert); \
363 TEST_DONE(); \
364 } while (0)
365 FAIL_TEST("host");
366 FAIL_TEST("bad_sourceaddr");
367 FAIL_TEST("unknown_critical");
368#undef FAIL_TEST
369}
370
371static void
372test_merge(void)
373{
374 struct sshkey *cert;
375 struct sshauthopt *key_opts, *cert_opts, *merge_opts, *expected;
376 const char *errstr;
377
378 /*
379 * Prepare for a test by making some key and cert options and
380 * attempting to merge them.
381 */
382#define PREPARE(label, keyname, keywords) \
383 do { \
384 expected = NULL; \
385 TEST_START("sshauthopt_merge " label); \
386 cert = load_key(keyname ".cert"); \
387 cert_opts = sshauthopt_from_cert(cert); \
388 ASSERT_PTR_NE(cert_opts, NULL); \
389 key_opts = sshauthopt_parse(keywords, &errstr); \
390 if (errstr != NULL) \
391 ASSERT_STRING_EQ(errstr, ""); \
392 ASSERT_PTR_NE(key_opts, NULL); \
393 merge_opts = sshauthopt_merge(key_opts, \
394 cert_opts, &errstr); \
395 } while (0)
396
397 /* Cleanup stuff allocated by PREPARE() */
398#define CLEANUP() \
399 do { \
400 sshauthopt_free(expected); \
401 sshauthopt_free(merge_opts); \
402 sshauthopt_free(key_opts); \
403 sshauthopt_free(cert_opts); \
404 sshkey_free(cert); \
405 } while (0)
406
407 /* Check the results of PREPARE() against expectation; calls CLEANUP */
408#define CHECK_SUCCESS_AND_CLEANUP() \
409 do { \
410 if (errstr != NULL) \
411 ASSERT_STRING_EQ(errstr, ""); \
412 compare_opts(merge_opts, expected); \
413 CLEANUP(); \
414 } while (0)
415
416 /* Check a single case of merging of flag options */
417#define FLAG_CASE(keybase, label, keyname, keywords, mostly_off, var, val) \
418 do { \
419 PREPARE(keybase " " label, keyname, keywords); \
420 expected = mostly_off ? \
421 sshauthopt_new() : default_authkey_opts(); \
422 expected->var = val; \
423 ASSERT_PTR_NE(expected, NULL); \
424 CHECK_SUCCESS_AND_CLEANUP(); \
425 TEST_DONE(); \
426 } while (0)
427
428 /*
429 * Fairly exhaustive exercise of a flag option. Tests
430 * option both set and clear in certificate, set and clear in
431 * authorized_keys and set and cleared via restrict keyword.
432 */
433#define FLAG_TEST(keybase, keyword, var) \
434 do { \
435 FLAG_CASE(keybase, "keys:default,yes cert:default,no", \
436 "no_" keybase, keyword, 0, var, 0); \
437 FLAG_CASE(keybase,"keys:-*,yes cert:default,no", \
438 "no_" keybase, "restrict," keyword, 1, var, 0); \
439 FLAG_CASE(keybase, "keys:default,no cert:default,no", \
440 "no_" keybase, "no-" keyword, 0, var, 0); \
441 FLAG_CASE(keybase, "keys:-*,no cert:default,no", \
442 "no_" keybase, "restrict,no-" keyword, 1, var, 0); \
443 \
444 FLAG_CASE(keybase, "keys:default,yes cert:-*,yes", \
445 "only_" keybase, keyword, 1, var, 1); \
446 FLAG_CASE(keybase,"keys:-*,yes cert:-*,yes", \
447 "only_" keybase, "restrict," keyword, 1, var, 1); \
448 FLAG_CASE(keybase, "keys:default,no cert:-*,yes", \
449 "only_" keybase, "no-" keyword, 1, var, 0); \
450 FLAG_CASE(keybase, "keys:-*,no cert:-*,yes", \
451 "only_" keybase, "restrict,no-" keyword, 1, var, 0); \
452 \
453 FLAG_CASE(keybase, "keys:default,yes cert:-*", \
454 "no_permit", keyword, 1, var, 0); \
455 FLAG_CASE(keybase,"keys:-*,yes cert:-*", \
456 "no_permit", "restrict," keyword, 1, var, 0); \
457 FLAG_CASE(keybase, "keys:default,no cert:-*", \
458 "no_permit", "no-" keyword, 1, var, 0); \
459 FLAG_CASE(keybase, "keys:-*,no cert:-*", \
460 "no_permit", "restrict,no-" keyword, 1, var, 0); \
461 \
462 FLAG_CASE(keybase, "keys:default,yes cert:*", \
463 "all_permit", keyword, 0, var, 1); \
464 FLAG_CASE(keybase,"keys:-*,yes cert:*", \
465 "all_permit", "restrict," keyword, 1, var, 1); \
466 FLAG_CASE(keybase, "keys:default,no cert:*", \
467 "all_permit", "no-" keyword, 0, var, 0); \
468 FLAG_CASE(keybase, "keys:-*,no cert:*", \
469 "all_permit", "restrict,no-" keyword, 1, var, 0); \
470 \
471 } while (0)
472 FLAG_TEST("portfwd", "port-forwarding", permit_port_forwarding_flag);
473 FLAG_TEST("agentfwd", "agent-forwarding", permit_agent_forwarding_flag);
474 FLAG_TEST("pty", "pty", permit_pty_flag);
475 FLAG_TEST("user_rc", "user-rc", permit_user_rc);
476 FLAG_TEST("x11fwd", "x11-forwarding", permit_x11_forwarding_flag);
477#undef FLAG_TEST
478
479 PREPARE("source-address both", "sourceaddr", "from=\"127.0.0.1\"");
480 expected = default_authkey_opts();
481 expected->required_from_host_cert = strdup("127.0.0.1/32,::1/128");
482 ASSERT_PTR_NE(expected->required_from_host_cert, NULL);
483 expected->required_from_host_keys = strdup("127.0.0.1");
484 ASSERT_PTR_NE(expected->required_from_host_keys, NULL);
485 CHECK_SUCCESS_AND_CLEANUP();
486 TEST_DONE();
487
488 PREPARE("source-address none", "all_permit", "");
489 expected = default_authkey_opts();
490 CHECK_SUCCESS_AND_CLEANUP();
491 TEST_DONE();
492
493 PREPARE("source-address keys", "all_permit", "from=\"127.0.0.1\"");
494 expected = default_authkey_opts();
495 expected->required_from_host_keys = strdup("127.0.0.1");
496 ASSERT_PTR_NE(expected->required_from_host_keys, NULL);
497 CHECK_SUCCESS_AND_CLEANUP();
498 TEST_DONE();
499
500 PREPARE("source-address cert", "sourceaddr", "");
501 expected = default_authkey_opts();
502 expected->required_from_host_cert = strdup("127.0.0.1/32,::1/128");
503 ASSERT_PTR_NE(expected->required_from_host_cert, NULL);
504 CHECK_SUCCESS_AND_CLEANUP();
505 TEST_DONE();
506
507 PREPARE("force-command both", "force_command", "command=\"foo\"");
508 expected = default_authkey_opts();
509 expected->force_command = strdup("foo");
510 ASSERT_PTR_NE(expected->force_command, NULL);
511 CHECK_SUCCESS_AND_CLEANUP();
512 TEST_DONE();
513
514 PREPARE("force-command none", "all_permit", "");
515 expected = default_authkey_opts();
516 CHECK_SUCCESS_AND_CLEANUP();
517 TEST_DONE();
518
519 PREPARE("force-command keys", "all_permit", "command=\"bar\"");
520 expected = default_authkey_opts();
521 expected->force_command = strdup("bar");
522 ASSERT_PTR_NE(expected->force_command, NULL);
523 CHECK_SUCCESS_AND_CLEANUP();
524 TEST_DONE();
525
526 PREPARE("force-command cert", "force_command", "");
527 expected = default_authkey_opts();
528 expected->force_command = strdup("foo");
529 ASSERT_PTR_NE(expected->force_command, NULL);
530 CHECK_SUCCESS_AND_CLEANUP();
531 TEST_DONE();
532
533 PREPARE("force-command mismatch", "force_command", "command=\"bar\"");
534 ASSERT_PTR_EQ(merge_opts, NULL);
535 CLEANUP();
536 TEST_DONE();
537
538 PREPARE("tunnel", "all_permit", "tunnel=\"6\"");
539 expected = default_authkey_opts();
540 expected->force_tun_device = 6;
541 CHECK_SUCCESS_AND_CLEANUP();
542 TEST_DONE();
543
544 PREPARE("permitopen", "all_permit",
545 "permitopen=\"127.0.0.1:*\",permitopen=\"127.0.0.1:123\"");
546 expected = default_authkey_opts();
547 expected->permitopen = commasplit("127.0.0.1:*,127.0.0.1:123",
548 &expected->npermitopen);
549 CHECK_SUCCESS_AND_CLEANUP();
550 TEST_DONE();
551
552 PREPARE("environment", "all_permit",
553 "environment=\"foo=a\",environment=\"bar=b\"");
554 expected = default_authkey_opts();
555 expected->env = commasplit("foo=a,bar=b", &expected->nenv);
556 CHECK_SUCCESS_AND_CLEANUP();
557 TEST_DONE();
558}
559
560void
561tests(void)
562{
563 extern char *__progname;
564 LogLevel ll = test_is_verbose() ?
565 SYSLOG_LEVEL_DEBUG3 : SYSLOG_LEVEL_QUIET;
566
567 /* test_cert_parse() are a bit spammy to error() by default... */
568 log_init(__progname, ll, SYSLOG_FACILITY_USER, 1);
569
570 test_authkeys_parse();
571 test_cert_parse();
572 test_merge();
573}
diff --git a/regress/unittests/bitmap/Makefile b/regress/unittests/bitmap/Makefile
index bd21949f8..fe30acc77 100644
--- a/regress/unittests/bitmap/Makefile
+++ b/regress/unittests/bitmap/Makefile
@@ -1,7 +1,11 @@
1# $OpenBSD: Makefile,v 1.3 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.4 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_bitmap 3PROG=test_bitmap
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.sbin/ssh
7SRCS+=bitmap.c atomicio.c
8
5REGRESS_TARGETS=run-regress-${PROG} 9REGRESS_TARGETS=run-regress-${PROG}
6 10
7run-regress-${PROG}: ${PROG} 11run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/conversion/Makefile b/regress/unittests/conversion/Makefile
index cde97dc28..8b2a09cc3 100644
--- a/regress/unittests/conversion/Makefile
+++ b/regress/unittests/conversion/Makefile
@@ -1,7 +1,12 @@
1# $OpenBSD: Makefile,v 1.1 2017/03/14 01:20:29 dtucker Exp $ 1# $OpenBSD: Makefile,v 1.2 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_conversion 3PROG=test_conversion
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=atomicio.c misc.c xmalloc.c log.c uidswap.c cleanup.c fatal.c ssherr.c
9
5REGRESS_TARGETS=run-regress-${PROG} 10REGRESS_TARGETS=run-regress-${PROG}
6 11
7run-regress-${PROG}: ${PROG} 12run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/hostkeys/Makefile b/regress/unittests/hostkeys/Makefile
index ae3c342bd..336885122 100644
--- a/regress/unittests/hostkeys/Makefile
+++ b/regress/unittests/hostkeys/Makefile
@@ -1,7 +1,20 @@
1# $OpenBSD: Makefile,v 1.3 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.4 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_hostkeys 3PROG=test_hostkeys
4SRCS=tests.c test_iterate.c 4SRCS=tests.c test_iterate.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=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
10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
11SRCS+=addrmatch.c bitmap.c hostfile.c
12SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
13SRCS+=cipher-chachapoly.c chacha.c poly1305.c
14
15SRCS+=digest-openssl.c
16#SRCS+=digest-libc.c
17
5REGRESS_TARGETS=run-regress-${PROG} 18REGRESS_TARGETS=run-regress-${PROG}
6 19
7run-regress-${PROG}: ${PROG} 20run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/kex/Makefile b/regress/unittests/kex/Makefile
index 7ed312675..5c61307a3 100644
--- a/regress/unittests/kex/Makefile
+++ b/regress/unittests/kex/Makefile
@@ -1,7 +1,24 @@
1# $OpenBSD: Makefile,v 1.4 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_kex 3PROG=test_kex
4SRCS=tests.c test_kex.c 4SRCS=tests.c test_kex.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=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
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
12SRCS+=kex.c kexc25519.c kexc25519c.c kexc25519s.c kexdh.c kexdhc.c kexdhs.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
17SRCS+=smult_curve25519_ref.c
18
19SRCS+=digest-openssl.c
20#SRCS+=digest-libc.c
21
5REGRESS_TARGETS=run-regress-${PROG} 22REGRESS_TARGETS=run-regress-${PROG}
6 23
7run-regress-${PROG}: ${PROG} 24run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/match/Makefile b/regress/unittests/match/Makefile
index bd4aed844..87e75826a 100644
--- a/regress/unittests/match/Makefile
+++ b/regress/unittests/match/Makefile
@@ -1,7 +1,13 @@
1# $OpenBSD: Makefile,v 1.3 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.4 2017/12/21 03:01:49 djm Exp $
2 2
3PROG=test_match 3PROG=test_match
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=match.c misc.c log.c uidswap.c fatal.c ssherr.c addrmatch.c xmalloc.c
9SRCS+=cleanup.c atomicio.c
10
5REGRESS_TARGETS=run-regress-${PROG} 11REGRESS_TARGETS=run-regress-${PROG}
6 12
7run-regress-${PROG}: ${PROG} 13run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/sshbuf/Makefile b/regress/unittests/sshbuf/Makefile
index 69b27566b..81d4f27a6 100644
--- a/regress/unittests/sshbuf/Makefile
+++ b/regress/unittests/sshbuf/Makefile
@@ -1,4 +1,6 @@
1# $OpenBSD: Makefile,v 1.5 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.6 2017/12/21 00:41:22 djm Exp $
2
3.include <bsd.regress.mk>
2 4
3PROG=test_sshbuf 5PROG=test_sshbuf
4SRCS=tests.c 6SRCS=tests.c
@@ -10,5 +12,11 @@ SRCS+=test_sshbuf_fuzz.c
10SRCS+=test_sshbuf_getput_fuzz.c 12SRCS+=test_sshbuf_getput_fuzz.c
11SRCS+=test_sshbuf_fixed.c 13SRCS+=test_sshbuf_fixed.c
12 14
13.include <bsd.regress.mk> 15# From usr.bin/ssh
16SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
17SRCS+=atomicio.c
18
19run-regress-${PROG}: ${PROG}
20 env ${TEST_ENV} ./${PROG}
21
14 22
diff --git a/regress/unittests/sshkey/Makefile b/regress/unittests/sshkey/Makefile
index cfbfcf8f1..1c940bec6 100644
--- a/regress/unittests/sshkey/Makefile
+++ b/regress/unittests/sshkey/Makefile
@@ -1,7 +1,20 @@
1# $OpenBSD: Makefile,v 1.4 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 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
5
6# From usr.bin/ssh
7SRCS+=sshbuf-getput-basic.c sshbuf-getput-crypto.c sshbuf-misc.c sshbuf.c
8SRCS+=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
10SRCS+=ssherr.c uidswap.c cleanup.c xmalloc.c match.c krl.c fatal.c
11SRCS+=addrmatch.c bitmap.c
12SRCS+=ed25519.c hash.c ge25519.c fe25519.c sc25519.c verify.c
13SRCS+=cipher-chachapoly.c chacha.c poly1305.c
14
15SRCS+=digest-openssl.c
16#SRCS+=digest-libc.c
17
5REGRESS_TARGETS=run-regress-${PROG} 18REGRESS_TARGETS=run-regress-${PROG}
6 19
7run-regress-${PROG}: ${PROG} 20run-regress-${PROG}: ${PROG}
diff --git a/regress/unittests/sshkey/test_fuzz.c b/regress/unittests/sshkey/test_fuzz.c
index 6706045d5..d3b0c92b4 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.7 2017/04/30 23:33:48 djm Exp $ */ 1/* $OpenBSD: test_fuzz.c,v 1.8 2017/12/21 00:41:22 djm Exp $ */
2/* 2/*
3 * Fuzz tests for key parsing 3 * Fuzz tests for key parsing
4 * 4 *
@@ -83,7 +83,7 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
83 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* too slow FUZZ_2_BIT_FLIP | */ 83 fuzz = fuzz_begin(FUZZ_1_BIT_FLIP | /* too slow FUZZ_2_BIT_FLIP | */
84 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP | 84 FUZZ_1_BYTE_FLIP | FUZZ_2_BYTE_FLIP |
85 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, sig, l); 85 FUZZ_TRUNCATE_START | FUZZ_TRUNCATE_END, sig, l);
86 ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), 0), 0); 86 ASSERT_INT_EQ(sshkey_verify(k, sig, l, c, sizeof(c), NULL, 0), 0);
87 free(sig); 87 free(sig);
88 TEST_ONERROR(onerror, fuzz); 88 TEST_ONERROR(onerror, fuzz);
89 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) { 89 for(; !fuzz_done(fuzz); fuzz_next(fuzz)) {
@@ -91,7 +91,7 @@ sig_fuzz(struct sshkey *k, const char *sig_alg)
91 if (fuzz_matches_original(fuzz)) 91 if (fuzz_matches_original(fuzz))
92 continue; 92 continue;
93 ASSERT_INT_NE(sshkey_verify(k, fuzz_ptr(fuzz), fuzz_len(fuzz), 93 ASSERT_INT_NE(sshkey_verify(k, fuzz_ptr(fuzz), fuzz_len(fuzz),
94 c, sizeof(c), 0), 0); 94 c, sizeof(c), NULL, 0), 0);
95 } 95 }
96 fuzz_cleanup(fuzz); 96 fuzz_cleanup(fuzz);
97} 97}
diff --git a/regress/unittests/sshkey/test_sshkey.c b/regress/unittests/sshkey/test_sshkey.c
index 0a73322a3..1aa608f92 100644
--- a/regress/unittests/sshkey/test_sshkey.c
+++ b/regress/unittests/sshkey/test_sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: test_sshkey.c,v 1.12 2017/05/08 06:08:42 djm Exp $ */ 1/* $OpenBSD: test_sshkey.c,v 1.13 2017/12/21 00:41:22 djm Exp $ */
2/* 2/*
3 * Regress test for sshkey.h key management API 3 * Regress test for sshkey.h key management API
4 * 4 *
@@ -121,11 +121,11 @@ signature_test(struct sshkey *k, struct sshkey *bad, const char *sig_alg,
121 ASSERT_INT_EQ(sshkey_sign(k, &sig, &len, d, l, sig_alg, 0), 0); 121 ASSERT_INT_EQ(sshkey_sign(k, &sig, &len, d, l, sig_alg, 0), 0);
122 ASSERT_SIZE_T_GT(len, 8); 122 ASSERT_SIZE_T_GT(len, 8);
123 ASSERT_PTR_NE(sig, NULL); 123 ASSERT_PTR_NE(sig, NULL);
124 ASSERT_INT_EQ(sshkey_verify(k, sig, len, d, l, 0), 0); 124 ASSERT_INT_EQ(sshkey_verify(k, sig, len, d, l, NULL, 0), 0);
125 ASSERT_INT_NE(sshkey_verify(bad, sig, len, d, l, 0), 0); 125 ASSERT_INT_NE(sshkey_verify(bad, sig, len, d, l, NULL, 0), 0);
126 /* Fuzz test is more comprehensive, this is just a smoke test */ 126 /* Fuzz test is more comprehensive, this is just a smoke test */
127 sig[len - 5] ^= 0x10; 127 sig[len - 5] ^= 0x10;
128 ASSERT_INT_NE(sshkey_verify(k, sig, len, d, l, 0), 0); 128 ASSERT_INT_NE(sshkey_verify(k, sig, len, d, l, NULL, 0), 0);
129 free(sig); 129 free(sig);
130} 130}
131 131
diff --git a/regress/unittests/test_helper/test_helper.c b/regress/unittests/test_helper/test_helper.c
index f855137fb..866f3495d 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.7 2017/03/14 01:10:07 dtucker Exp $ */ 1/* $OpenBSD: test_helper.c,v 1.8 2018/02/08 08:46:20 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
4 * 4 *
@@ -166,6 +166,18 @@ main(int argc, char **argv)
166 return 0; 166 return 0;
167} 167}
168 168
169int
170test_is_verbose()
171{
172 return verbose_mode;
173}
174
175int
176test_is_quiet()
177{
178 return quiet_mode;
179}
180
169const char * 181const char *
170test_data_file(const char *name) 182test_data_file(const char *name)
171{ 183{
diff --git a/regress/unittests/test_helper/test_helper.h b/regress/unittests/test_helper/test_helper.h
index 615b7832b..6da0066e9 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.7 2017/03/14 01:10:07 dtucker Exp $ */ 1/* $OpenBSD: test_helper.h,v 1.8 2018/02/08 08:46:20 djm Exp $ */
2/* 2/*
3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org> 3 * Copyright (c) 2011 Damien Miller <djm@mindrot.org>
4 * 4 *
@@ -43,6 +43,8 @@ void test_start(const char *n);
43void test_info(char *s, size_t len); 43void test_info(char *s, size_t len);
44void set_onerror_func(test_onerror_func_t *f, void *ctx); 44void set_onerror_func(test_onerror_func_t *f, void *ctx);
45void test_done(void); 45void test_done(void);
46int test_is_verbose(void);
47int test_is_quiet(void);
46void test_subtest_info(const char *fmt, ...) 48void test_subtest_info(const char *fmt, ...)
47 __attribute__((format(printf, 1, 2))); 49 __attribute__((format(printf, 1, 2)));
48void ssl_err_check(const char *file, int line); 50void ssl_err_check(const char *file, int line);
diff --git a/regress/unittests/utf8/Makefile b/regress/unittests/utf8/Makefile
index a975264fc..f8eec0484 100644
--- a/regress/unittests/utf8/Makefile
+++ b/regress/unittests/utf8/Makefile
@@ -1,7 +1,11 @@
1# $OpenBSD: Makefile,v 1.4 2016/11/01 13:43:27 tb Exp $ 1# $OpenBSD: Makefile,v 1.5 2017/12/21 00:41:22 djm Exp $
2 2
3PROG=test_utf8 3PROG=test_utf8
4SRCS=tests.c 4SRCS=tests.c
5
6# From usr.bin/ssh
7SRCS+=utf8.c atomicio.c
8
5REGRESS_TARGETS=run-regress-${PROG} 9REGRESS_TARGETS=run-regress-${PROG}
6 10
7run-regress-${PROG}: ${PROG} 11run-regress-${PROG}: ${PROG}
diff --git a/regress/yes-head.sh b/regress/yes-head.sh
index fce2f6580..2759eb8ce 100644
--- a/regress/yes-head.sh
+++ b/regress/yes-head.sh
@@ -1,4 +1,4 @@
1# $OpenBSD: yes-head.sh,v 1.5 2015/03/03 22:35:19 markus Exp $ 1# $OpenBSD: yes-head.sh,v 1.6 2017/04/30 23:34:55 djm Exp $
2# Placed in the Public Domain. 2# Placed in the Public Domain.
3 3
4tid="yes pipe head" 4tid="yes pipe head"
diff --git a/scp.0 b/scp.0
index 0cb7726c7..0089ed80f 100644
--- a/scp.0
+++ b/scp.0
@@ -5,8 +5,7 @@ NAME
5 5
6SYNOPSIS 6SYNOPSIS
7 scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] 7 scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
8 [-l limit] [-o ssh_option] [-P port] [-S program] 8 [-l limit] [-o ssh_option] [-P port] [-S program] source ... target
9 [[user@]host1:]file1 ... [[user@]host2:]file2
10 9
11DESCRIPTION 10DESCRIPTION
12 scp copies files between hosts on a network. It uses ssh(1) for data 11 scp copies files between hosts on a network. It uses ssh(1) for data
@@ -14,11 +13,14 @@ DESCRIPTION
14 as ssh(1). scp will ask for passwords or passphrases if they are needed 13 as ssh(1). scp will ask for passwords or passphrases if they are needed
15 for authentication. 14 for authentication.
16 15
17 File names may contain a user and host specification to indicate that the 16 The source and target may be specified as a local pathname, a remote host
18 file is to be copied to/from that host. Local file names can be made 17 with optional path in the form [user@]host:[path], or a URI in the form
19 explicit using absolute or relative pathnames to avoid scp treating file 18 scp://[user@]host[:port][/path]. Local file names can be made explicit
20 names containing M-bM-^@M-^X:M-bM-^@M-^Y as host specifiers. Copies between two remote hosts 19 using absolute or relative pathnames to avoid scp treating file names
21 are also permitted. 20 containing M-bM-^@M-^X:M-bM-^@M-^Y as host specifiers.
21
22 When copying between two remote hosts, if the URI format is used, a port
23 may only be specified on the target if the -3 option is used.
22 24
23 The options are as follows: 25 The options are as follows:
24 26
@@ -63,6 +65,7 @@ DESCRIPTION
63 AddressFamily 65 AddressFamily
64 BatchMode 66 BatchMode
65 BindAddress 67 BindAddress
68 BindInterface
66 CanonicalDomains 69 CanonicalDomains
67 CanonicalizeFallbackLocal 70 CanonicalizeFallbackLocal
68 CanonicalizeHostname 71 CanonicalizeHostname
@@ -156,4 +159,4 @@ AUTHORS
156 Timo Rinne <tri@iki.fi> 159 Timo Rinne <tri@iki.fi>
157 Tatu Ylonen <ylo@cs.hut.fi> 160 Tatu Ylonen <ylo@cs.hut.fi>
158 161
159OpenBSD 6.2 May 3, 2017 OpenBSD 6.2 162OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/scp.1 b/scp.1
index 76ce33361..8d251e34a 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.74 2017/05/03 21:49:18 naddy Exp $ 11.\" $OpenBSD: scp.1,v 1.77 2018/02/23 07:38:09 jmc Exp $
12.\" 12.\"
13.Dd $Mdocdate: May 3 2017 $ 13.Dd $Mdocdate: February 23 2018 $
14.Dt SCP 1 14.Dt SCP 1
15.Os 15.Os
16.Sh NAME 16.Sh NAME
@@ -18,7 +18,6 @@
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.Bk -words
22.Op Fl 346BCpqrv 21.Op Fl 346BCpqrv
23.Op Fl c Ar cipher 22.Op Fl c Ar cipher
24.Op Fl F Ar ssh_config 23.Op Fl F Ar ssh_config
@@ -27,20 +26,7 @@
27.Op Fl o Ar ssh_option 26.Op Fl o Ar ssh_option
28.Op Fl P Ar port 27.Op Fl P Ar port
29.Op Fl S Ar program 28.Op Fl S Ar program
30.Sm off 29.Ar source ... target
31.Oo
32.Op Ar user No @
33.Ar host1 :
34.Oc Ar file1
35.Sm on
36.Ar ...
37.Sm off
38.Oo
39.Op Ar user No @
40.Ar host2 :
41.Oc Ar file2
42.Sm on
43.Ek
44.Sh DESCRIPTION 30.Sh DESCRIPTION
45.Nm 31.Nm
46copies files between hosts on a network. 32copies files between hosts on a network.
@@ -53,15 +39,33 @@ same security as
53will ask for passwords or passphrases if they are needed for 39will ask for passwords or passphrases if they are needed for
54authentication. 40authentication.
55.Pp 41.Pp
56File names may contain a user and host specification to indicate 42The
57that the file is to be copied to/from that host. 43.Ar source
44and
45.Ar target
46may be specified as a local pathname, a remote host with optional path
47in the form
48.Sm off
49.Oo user @ Oc host : Op path ,
50.Sm on
51or a URI in the form
52.Sm off
53.No scp:// Oo user @ Oc host Oo : port Oc Op / path .
54.Sm on
58Local file names can be made explicit using absolute or relative pathnames 55Local file names can be made explicit using absolute or relative pathnames
59to avoid 56to avoid
60.Nm 57.Nm
61treating file names containing 58treating file names containing
62.Sq :\& 59.Sq :\&
63as host specifiers. 60as host specifiers.
64Copies between two remote hosts are also permitted. 61.Pp
62When copying between two remote hosts, if the URI format is used, a
63.Ar port
64may only be specified on the
65.Ar target
66if the
67.Fl 3
68option is used.
65.Pp 69.Pp
66The options are as follows: 70The options are as follows:
67.Bl -tag -width Ds 71.Bl -tag -width Ds
@@ -120,6 +124,7 @@ For full details of the options listed below, and their possible values, see
120.It AddressFamily 124.It AddressFamily
121.It BatchMode 125.It BatchMode
122.It BindAddress 126.It BindAddress
127.It BindInterface
123.It CanonicalDomains 128.It CanonicalDomains
124.It CanonicalizeFallbackLocal 129.It CanonicalizeFallbackLocal
125.It CanonicalizeHostname 130.It CanonicalizeHostname
diff --git a/scp.c b/scp.c
index a533eb097..31e6709fb 100644
--- a/scp.c
+++ b/scp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: scp.c,v 1.192 2017/05/31 09:15:42 deraadt Exp $ */ 1/* $OpenBSD: scp.c,v 1.195 2018/02/10 06:15:12 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).
@@ -112,6 +112,7 @@
112#endif 112#endif
113 113
114#include "xmalloc.h" 114#include "xmalloc.h"
115#include "ssh.h"
115#include "atomicio.h" 116#include "atomicio.h"
116#include "pathnames.h" 117#include "pathnames.h"
117#include "log.h" 118#include "log.h"
@@ -123,8 +124,8 @@ extern char *__progname;
123 124
124#define COPY_BUFLEN 16384 125#define COPY_BUFLEN 16384
125 126
126int do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout); 127int do_cmd(char *host, char *remuser, int port, char *cmd, int *fdin, int *fdout);
127int do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout); 128int do_cmd2(char *host, char *remuser, int port, char *cmd, int fdin, int fdout);
128 129
129/* Struct for addargs */ 130/* Struct for addargs */
130arglist args; 131arglist args;
@@ -149,6 +150,9 @@ int showprogress = 1;
149 */ 150 */
150int throughlocal = 0; 151int throughlocal = 0;
151 152
153/* Non-standard port to use for the ssh connection or -1. */
154int sshport = -1;
155
152/* This is the program to execute for the secured connection. ("ssh" or -S) */ 156/* This is the program to execute for the secured connection. ("ssh" or -S) */
153char *ssh_program = _PATH_SSH_PROGRAM; 157char *ssh_program = _PATH_SSH_PROGRAM;
154 158
@@ -231,7 +235,7 @@ do_local_cmd(arglist *a)
231 */ 235 */
232 236
233int 237int
234do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout) 238do_cmd(char *host, char *remuser, int port, char *cmd, int *fdin, int *fdout)
235{ 239{
236 int pin[2], pout[2], reserved[2]; 240 int pin[2], pout[2], reserved[2];
237 241
@@ -241,6 +245,9 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
241 ssh_program, host, 245 ssh_program, host,
242 remuser ? remuser : "(unspecified)", cmd); 246 remuser ? remuser : "(unspecified)", cmd);
243 247
248 if (port == -1)
249 port = sshport;
250
244 /* 251 /*
245 * Reserve two descriptors so that the real pipes won't get 252 * Reserve two descriptors so that the real pipes won't get
246 * descriptors 0 and 1 because that will screw up dup2 below. 253 * descriptors 0 and 1 because that will screw up dup2 below.
@@ -274,6 +281,10 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
274 close(pout[1]); 281 close(pout[1]);
275 282
276 replacearg(&args, 0, "%s", ssh_program); 283 replacearg(&args, 0, "%s", ssh_program);
284 if (port != -1) {
285 addargs(&args, "-p");
286 addargs(&args, "%d", port);
287 }
277 if (remuser != NULL) { 288 if (remuser != NULL) {
278 addargs(&args, "-l"); 289 addargs(&args, "-l");
279 addargs(&args, "%s", remuser); 290 addargs(&args, "%s", remuser);
@@ -305,7 +316,7 @@ do_cmd(char *host, char *remuser, char *cmd, int *fdin, int *fdout)
305 * This way the input and output of two commands can be connected. 316 * This way the input and output of two commands can be connected.
306 */ 317 */
307int 318int
308do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout) 319do_cmd2(char *host, char *remuser, int port, char *cmd, int fdin, int fdout)
309{ 320{
310 pid_t pid; 321 pid_t pid;
311 int status; 322 int status;
@@ -316,6 +327,9 @@ do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout)
316 ssh_program, host, 327 ssh_program, host,
317 remuser ? remuser : "(unspecified)", cmd); 328 remuser ? remuser : "(unspecified)", cmd);
318 329
330 if (port == -1)
331 port = sshport;
332
319 /* Fork a child to execute the command on the remote host using ssh. */ 333 /* Fork a child to execute the command on the remote host using ssh. */
320 pid = fork(); 334 pid = fork();
321 if (pid == 0) { 335 if (pid == 0) {
@@ -323,6 +337,10 @@ do_cmd2(char *host, char *remuser, char *cmd, int fdin, int fdout)
323 dup2(fdout, 1); 337 dup2(fdout, 1);
324 338
325 replacearg(&args, 0, "%s", ssh_program); 339 replacearg(&args, 0, "%s", ssh_program);
340 if (port != -1) {
341 addargs(&args, "-p");
342 addargs(&args, "%d", port);
343 }
326 if (remuser != NULL) { 344 if (remuser != NULL) {
327 addargs(&args, "-l"); 345 addargs(&args, "-l");
328 addargs(&args, "%s", remuser); 346 addargs(&args, "%s", remuser);
@@ -367,14 +385,14 @@ void rsource(char *, struct stat *);
367void sink(int, char *[]); 385void sink(int, char *[]);
368void source(int, char *[]); 386void source(int, char *[]);
369void tolocal(int, char *[]); 387void tolocal(int, char *[]);
370void toremote(char *, int, char *[]); 388void toremote(int, char *[]);
371void usage(void); 389void usage(void);
372 390
373int 391int
374main(int argc, char **argv) 392main(int argc, char **argv)
375{ 393{
376 int ch, fflag, tflag, status, n; 394 int ch, fflag, tflag, status, n;
377 char *targ, **newargv; 395 char **newargv;
378 const char *errstr; 396 const char *errstr;
379 extern char *optarg; 397 extern char *optarg;
380 extern int optind; 398 extern int optind;
@@ -400,6 +418,8 @@ main(int argc, char **argv)
400 addargs(&args, "-oForwardAgent=no"); 418 addargs(&args, "-oForwardAgent=no");
401 addargs(&args, "-oPermitLocalCommand=no"); 419 addargs(&args, "-oPermitLocalCommand=no");
402 addargs(&args, "-oClearAllForwardings=yes"); 420 addargs(&args, "-oClearAllForwardings=yes");
421 addargs(&args, "-oRemoteCommand=none");
422 addargs(&args, "-oRequestTTY=no");
403 423
404 fflag = tflag = 0; 424 fflag = tflag = 0;
405 while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -1) 425 while ((ch = getopt(argc, argv, "dfl:prtvBCc:i:P:q12346S:o:F:")) != -1)
@@ -430,10 +450,9 @@ main(int argc, char **argv)
430 addargs(&args, "%s", optarg); 450 addargs(&args, "%s", optarg);
431 break; 451 break;
432 case 'P': 452 case 'P':
433 addargs(&remote_remote_args, "-p"); 453 sshport = a2port(optarg);
434 addargs(&remote_remote_args, "%s", optarg); 454 if (sshport <= 0)
435 addargs(&args, "-p"); 455 fatal("bad port \"%s\"\n", optarg);
436 addargs(&args, "%s", optarg);
437 break; 456 break;
438 case 'B': 457 case 'B':
439 addargs(&remote_remote_args, "-oBatchmode=yes"); 458 addargs(&remote_remote_args, "-oBatchmode=yes");
@@ -533,8 +552,8 @@ main(int argc, char **argv)
533 552
534 (void) signal(SIGPIPE, lostconn); 553 (void) signal(SIGPIPE, lostconn);
535 554
536 if ((targ = colon(argv[argc - 1]))) /* Dest is remote host. */ 555 if (colon(argv[argc - 1])) /* Dest is remote host. */
537 toremote(targ, argc, argv); 556 toremote(argc, argv);
538 else { 557 else {
539 if (targetshouldbedirectory) 558 if (targetshouldbedirectory)
540 verifydir(argv[argc - 1]); 559 verifydir(argv[argc - 1]);
@@ -589,72 +608,90 @@ do_times(int fd, int verb, const struct stat *sb)
589 return (response()); 608 return (response());
590} 609}
591 610
611static int
612parse_scp_uri(const char *uri, char **userp, char **hostp, int *portp,
613 char **pathp)
614{
615 int r;
616
617 r = parse_uri("scp", uri, userp, hostp, portp, pathp);
618 if (r == 0 && *pathp == NULL)
619 *pathp = xstrdup(".");
620 return r;
621}
622
592void 623void
593toremote(char *targ, int argc, char **argv) 624toremote(int argc, char **argv)
594{ 625{
595 char *bp, *host, *src, *suser, *thost, *tuser, *arg; 626 char *suser = NULL, *host = NULL, *src = NULL;
627 char *bp, *tuser, *thost, *targ;
628 int sport = -1, tport = -1;
596 arglist alist; 629 arglist alist;
597 int i; 630 int i, r;
598 u_int j; 631 u_int j;
599 632
600 memset(&alist, '\0', sizeof(alist)); 633 memset(&alist, '\0', sizeof(alist));
601 alist.list = NULL; 634 alist.list = NULL;
602 635
603 *targ++ = 0; 636 /* Parse target */
604 if (*targ == 0) 637 r = parse_scp_uri(argv[argc - 1], &tuser, &thost, &tport, &targ);
605 targ = "."; 638 if (r == -1) {
606 639 fmprintf(stderr, "%s: invalid uri\n", argv[argc - 1]);
607 arg = xstrdup(argv[argc - 1]); 640 ++errs;
608 if ((thost = strrchr(arg, '@'))) { 641 goto out;
609 /* user@host */ 642 }
610 *thost++ = 0; 643 if (r != 0) {
611 tuser = arg; 644 if (parse_user_host_path(argv[argc - 1], &tuser, &thost,
612 if (*tuser == '\0') 645 &targ) == -1) {
613 tuser = NULL; 646 fmprintf(stderr, "%s: invalid target\n", argv[argc - 1]);
614 } else { 647 ++errs;
615 thost = arg; 648 goto out;
616 tuser = NULL; 649 }
617 } 650 }
618
619 if (tuser != NULL && !okname(tuser)) { 651 if (tuser != NULL && !okname(tuser)) {
620 free(arg); 652 ++errs;
621 return; 653 goto out;
622 } 654 }
623 655
656 /* Parse source files */
624 for (i = 0; i < argc - 1; i++) { 657 for (i = 0; i < argc - 1; i++) {
625 src = colon(argv[i]); 658 free(suser);
626 if (src && throughlocal) { /* extended remote to remote */ 659 free(host);
627 *src++ = 0; 660 free(src);
628 if (*src == 0) 661 r = parse_scp_uri(argv[i], &suser, &host, &sport, &src);
629 src = "."; 662 if (r == -1) {
630 host = strrchr(argv[i], '@'); 663 fmprintf(stderr, "%s: invalid uri\n", argv[i]);
631 if (host) { 664 ++errs;
632 *host++ = 0; 665 continue;
633 host = cleanhostname(host); 666 }
634 suser = argv[i]; 667 if (r != 0) {
635 if (*suser == '\0') 668 parse_user_host_path(argv[i], &suser, &host, &src);
636 suser = pwd->pw_name; 669 }
637 else if (!okname(suser)) 670 if (suser != NULL && !okname(suser)) {
638 continue; 671 ++errs;
639 } else { 672 continue;
640 host = cleanhostname(argv[i]); 673 }
641 suser = NULL; 674 if (host && throughlocal) { /* extended remote to remote */
642 }
643 xasprintf(&bp, "%s -f %s%s", cmd, 675 xasprintf(&bp, "%s -f %s%s", cmd,
644 *src == '-' ? "-- " : "", src); 676 *src == '-' ? "-- " : "", src);
645 if (do_cmd(host, suser, bp, &remin, &remout) < 0) 677 if (do_cmd(host, suser, sport, bp, &remin, &remout) < 0)
646 exit(1); 678 exit(1);
647 free(bp); 679 free(bp);
648 host = cleanhostname(thost);
649 xasprintf(&bp, "%s -t %s%s", cmd, 680 xasprintf(&bp, "%s -t %s%s", cmd,
650 *targ == '-' ? "-- " : "", targ); 681 *targ == '-' ? "-- " : "", targ);
651 if (do_cmd2(host, tuser, bp, remin, remout) < 0) 682 if (do_cmd2(thost, tuser, tport, bp, remin, remout) < 0)
652 exit(1); 683 exit(1);
653 free(bp); 684 free(bp);
654 (void) close(remin); 685 (void) close(remin);
655 (void) close(remout); 686 (void) close(remout);
656 remin = remout = -1; 687 remin = remout = -1;
657 } else if (src) { /* standard remote to remote */ 688 } else if (host) { /* standard remote to remote */
689 if (tport != -1 && tport != SSH_DEFAULT_PORT) {
690 /* This would require the remote support URIs */
691 fatal("target port not supported with two "
692 "remote hosts without the -3 option");
693 }
694
658 freeargs(&alist); 695 freeargs(&alist);
659 addargs(&alist, "%s", ssh_program); 696 addargs(&alist, "%s", ssh_program);
660 addargs(&alist, "-x"); 697 addargs(&alist, "-x");
@@ -664,23 +701,14 @@ toremote(char *targ, int argc, char **argv)
664 addargs(&alist, "%s", 701 addargs(&alist, "%s",
665 remote_remote_args.list[j]); 702 remote_remote_args.list[j]);
666 } 703 }
667 *src++ = 0; 704
668 if (*src == 0) 705 if (sport != -1) {
669 src = "."; 706 addargs(&alist, "-p");
670 host = strrchr(argv[i], '@'); 707 addargs(&alist, "%d", sport);
671 708 }
672 if (host) { 709 if (suser) {
673 *host++ = 0;
674 host = cleanhostname(host);
675 suser = argv[i];
676 if (*suser == '\0')
677 suser = pwd->pw_name;
678 else if (!okname(suser))
679 continue;
680 addargs(&alist, "-l"); 710 addargs(&alist, "-l");
681 addargs(&alist, "%s", suser); 711 addargs(&alist, "%s", suser);
682 } else {
683 host = cleanhostname(argv[i]);
684 } 712 }
685 addargs(&alist, "--"); 713 addargs(&alist, "--");
686 addargs(&alist, "%s", host); 714 addargs(&alist, "%s", host);
@@ -695,8 +723,7 @@ toremote(char *targ, int argc, char **argv)
695 if (remin == -1) { 723 if (remin == -1) {
696 xasprintf(&bp, "%s -t %s%s", cmd, 724 xasprintf(&bp, "%s -t %s%s", cmd,
697 *targ == '-' ? "-- " : "", targ); 725 *targ == '-' ? "-- " : "", targ);
698 host = cleanhostname(thost); 726 if (do_cmd(thost, tuser, tport, bp, &remin,
699 if (do_cmd(host, tuser, bp, &remin,
700 &remout) < 0) 727 &remout) < 0)
701 exit(1); 728 exit(1);
702 if (response() < 0) 729 if (response() < 0)
@@ -706,21 +733,42 @@ toremote(char *targ, int argc, char **argv)
706 source(1, argv + i); 733 source(1, argv + i);
707 } 734 }
708 } 735 }
709 free(arg); 736out:
737 free(tuser);
738 free(thost);
739 free(targ);
740 free(suser);
741 free(host);
742 free(src);
710} 743}
711 744
712void 745void
713tolocal(int argc, char **argv) 746tolocal(int argc, char **argv)
714{ 747{
715 char *bp, *host, *src, *suser; 748 char *bp, *host = NULL, *src = NULL, *suser = NULL;
716 arglist alist; 749 arglist alist;
717 int i; 750 int i, r, sport = -1;
718 751
719 memset(&alist, '\0', sizeof(alist)); 752 memset(&alist, '\0', sizeof(alist));
720 alist.list = NULL; 753 alist.list = NULL;
721 754
722 for (i = 0; i < argc - 1; i++) { 755 for (i = 0; i < argc - 1; i++) {
723 if (!(src = colon(argv[i]))) { /* Local to local. */ 756 free(suser);
757 free(host);
758 free(src);
759 r = parse_scp_uri(argv[i], &suser, &host, &sport, &src);
760 if (r == -1) {
761 fmprintf(stderr, "%s: invalid uri\n", argv[i]);
762 ++errs;
763 continue;
764 }
765 if (r != 0)
766 parse_user_host_path(argv[i], &suser, &host, &src);
767 if (suser != NULL && !okname(suser)) {
768 ++errs;
769 continue;
770 }
771 if (!host) { /* Local to local. */
724 freeargs(&alist); 772 freeargs(&alist);
725 addargs(&alist, "%s", _PATH_CP); 773 addargs(&alist, "%s", _PATH_CP);
726 if (iamrecursive) 774 if (iamrecursive)
@@ -734,22 +782,10 @@ tolocal(int argc, char **argv)
734 ++errs; 782 ++errs;
735 continue; 783 continue;
736 } 784 }
737 *src++ = 0; 785 /* Remote to local. */
738 if (*src == 0)
739 src = ".";
740 if ((host = strrchr(argv[i], '@')) == NULL) {
741 host = argv[i];
742 suser = NULL;
743 } else {
744 *host++ = 0;
745 suser = argv[i];
746 if (*suser == '\0')
747 suser = pwd->pw_name;
748 }
749 host = cleanhostname(host);
750 xasprintf(&bp, "%s -f %s%s", 786 xasprintf(&bp, "%s -f %s%s",
751 cmd, *src == '-' ? "-- " : "", src); 787 cmd, *src == '-' ? "-- " : "", src);
752 if (do_cmd(host, suser, bp, &remin, &remout) < 0) { 788 if (do_cmd(host, suser, sport, bp, &remin, &remout) < 0) {
753 free(bp); 789 free(bp);
754 ++errs; 790 ++errs;
755 continue; 791 continue;
@@ -759,6 +795,9 @@ tolocal(int argc, char **argv)
759 (void) close(remin); 795 (void) close(remin);
760 remin = remout = -1; 796 remin = remout = -1;
761 } 797 }
798 free(suser);
799 free(host);
800 free(src);
762} 801}
763 802
764void 803void
@@ -1275,8 +1314,7 @@ usage(void)
1275{ 1314{
1276 (void) fprintf(stderr, 1315 (void) fprintf(stderr,
1277 "usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n" 1316 "usage: scp [-346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]\n"
1278 " [-l limit] [-o ssh_option] [-P port] [-S program]\n" 1317 " [-l limit] [-o ssh_option] [-P port] [-S program] source ... target\n");
1279 " [[user@]host1:]file1 ... [[user@]host2:]file2\n");
1280 exit(1); 1318 exit(1);
1281} 1319}
1282 1320
diff --git a/servconf.c b/servconf.c
index 2c321a4ad..0f0d09068 100644
--- a/servconf.c
+++ b/servconf.c
@@ -1,5 +1,5 @@
1 1
2/* $OpenBSD: servconf.c,v 1.312 2017/10/02 19:33:20 djm Exp $ */ 2/* $OpenBSD: servconf.c,v 1.326 2018/03/01 20:32:16 markus 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
@@ -15,10 +15,16 @@
15 15
16#include <sys/types.h> 16#include <sys/types.h>
17#include <sys/socket.h> 17#include <sys/socket.h>
18#ifdef HAVE_SYS_SYSCTL_H
19#include <sys/sysctl.h>
20#endif
18 21
19#include <netinet/in.h> 22#include <netinet/in.h>
20#include <netinet/in_systm.h> 23#include <netinet/in_systm.h>
21#include <netinet/ip.h> 24#include <netinet/ip.h>
25#ifdef HAVE_NET_ROUTE_H
26#include <net/route.h>
27#endif
22 28
23#include <ctype.h> 29#include <ctype.h>
24#include <netdb.h> 30#include <netdb.h>
@@ -58,8 +64,10 @@
58#include "myproposal.h" 64#include "myproposal.h"
59#include "digest.h" 65#include "digest.h"
60 66
61static void add_listen_addr(ServerOptions *, char *, int); 67static void add_listen_addr(ServerOptions *, const char *,
62static void add_one_listen_addr(ServerOptions *, char *, int); 68 const char *, int);
69static void add_one_listen_addr(ServerOptions *, const char *,
70 const char *, int);
63 71
64/* Use of privilege separation or not */ 72/* Use of privilege separation or not */
65extern int use_privsep; 73extern int use_privsep;
@@ -81,7 +89,9 @@ initialize_server_options(ServerOptions *options)
81 options->queued_listen_addrs = NULL; 89 options->queued_listen_addrs = NULL;
82 options->num_queued_listens = 0; 90 options->num_queued_listens = 0;
83 options->listen_addrs = NULL; 91 options->listen_addrs = NULL;
92 options->num_listen_addrs = 0;
84 options->address_family = -1; 93 options->address_family = -1;
94 options->routing_domain = NULL;
85 options->num_host_key_files = 0; 95 options->num_host_key_files = 0;
86 options->num_host_cert_files = 0; 96 options->num_host_cert_files = 0;
87 options->host_key_agent = NULL; 97 options->host_key_agent = NULL;
@@ -188,10 +198,45 @@ assemble_algorithms(ServerOptions *o)
188 fatal("kex_assemble_names failed"); 198 fatal("kex_assemble_names failed");
189} 199}
190 200
201static void
202array_append(const char *file, const int line, const char *directive,
203 char ***array, u_int *lp, const char *s)
204{
205
206 if (*lp >= INT_MAX)
207 fatal("%s line %d: Too many %s entries", file, line, directive);
208
209 *array = xrecallocarray(*array, *lp, *lp + 1, sizeof(**array));
210 (*array)[*lp] = xstrdup(s);
211 (*lp)++;
212}
213
214void
215servconf_add_hostkey(const char *file, const int line,
216 ServerOptions *options, const char *path)
217{
218 char *apath = derelativise_path(path);
219
220 array_append(file, line, "HostKey",
221 &options->host_key_files, &options->num_host_key_files, apath);
222 free(apath);
223}
224
225void
226servconf_add_hostcert(const char *file, const int line,
227 ServerOptions *options, const char *path)
228{
229 char *apath = derelativise_path(path);
230
231 array_append(file, line, "HostCertificate",
232 &options->host_cert_files, &options->num_host_cert_files, apath);
233 free(apath);
234}
235
191void 236void
192fill_default_server_options(ServerOptions *options) 237fill_default_server_options(ServerOptions *options)
193{ 238{
194 int i; 239 u_int i;
195 240
196 /* Portable-specific options */ 241 /* Portable-specific options */
197 if (options->use_pam == -1) 242 if (options->use_pam == -1)
@@ -200,16 +245,18 @@ fill_default_server_options(ServerOptions *options)
200 /* Standard Options */ 245 /* Standard Options */
201 if (options->num_host_key_files == 0) { 246 if (options->num_host_key_files == 0) {
202 /* fill default hostkeys for protocols */ 247 /* fill default hostkeys for protocols */
203 options->host_key_files[options->num_host_key_files++] = 248 servconf_add_hostkey("[default]", 0, options,
204 _PATH_HOST_RSA_KEY_FILE; 249 _PATH_HOST_RSA_KEY_FILE);
205 options->host_key_files[options->num_host_key_files++] =
206 _PATH_HOST_DSA_KEY_FILE;
207#ifdef OPENSSL_HAS_ECC 250#ifdef OPENSSL_HAS_ECC
208 options->host_key_files[options->num_host_key_files++] = 251 servconf_add_hostkey("[default]", 0, options,
209 _PATH_HOST_ECDSA_KEY_FILE; 252 _PATH_HOST_ECDSA_KEY_FILE);
210#endif 253#endif
211 options->host_key_files[options->num_host_key_files++] = 254 servconf_add_hostkey("[default]", 0, options,
212 _PATH_HOST_ED25519_KEY_FILE; 255 _PATH_HOST_ED25519_KEY_FILE);
256#ifdef WITH_XMSS
257 servconf_add_hostkey("[default]", 0, options,
258 _PATH_HOST_XMSS_KEY_FILE);
259#endif /* WITH_XMSS */
213 } 260 }
214 /* No certificates by default */ 261 /* No certificates by default */
215 if (options->num_ports == 0) 262 if (options->num_ports == 0)
@@ -217,7 +264,7 @@ fill_default_server_options(ServerOptions *options)
217 if (options->address_family == -1) 264 if (options->address_family == -1)
218 options->address_family = AF_UNSPEC; 265 options->address_family = AF_UNSPEC;
219 if (options->listen_addrs == NULL) 266 if (options->listen_addrs == NULL)
220 add_listen_addr(options, NULL, 0); 267 add_listen_addr(options, NULL, NULL, 0);
221 if (options->pid_file == NULL) 268 if (options->pid_file == NULL)
222 options->pid_file = xstrdup(_PATH_SSH_DAEMON_PID_FILE); 269 options->pid_file = xstrdup(_PATH_SSH_DAEMON_PID_FILE);
223 if (options->login_grace_time == -1) 270 if (options->login_grace_time == -1)
@@ -313,10 +360,14 @@ fill_default_server_options(ServerOptions *options)
313 if (options->client_alive_count_max == -1) 360 if (options->client_alive_count_max == -1)
314 options->client_alive_count_max = 3; 361 options->client_alive_count_max = 3;
315 if (options->num_authkeys_files == 0) { 362 if (options->num_authkeys_files == 0) {
316 options->authorized_keys_files[options->num_authkeys_files++] = 363 array_append("[default]", 0, "AuthorizedKeysFiles",
317 xstrdup(_PATH_SSH_USER_PERMITTED_KEYS); 364 &options->authorized_keys_files,
318 options->authorized_keys_files[options->num_authkeys_files++] = 365 &options->num_authkeys_files,
319 xstrdup(_PATH_SSH_USER_PERMITTED_KEYS2); 366 _PATH_SSH_USER_PERMITTED_KEYS);
367 array_append("[default]", 0, "AuthorizedKeysFiles",
368 &options->authorized_keys_files,
369 &options->num_authkeys_files,
370 _PATH_SSH_USER_PERMITTED_KEYS2);
320 } 371 }
321 if (options->permit_tun == -1) 372 if (options->permit_tun == -1)
322 options->permit_tun = SSH_TUNMODE_NO; 373 options->permit_tun = SSH_TUNMODE_NO;
@@ -358,6 +409,7 @@ fill_default_server_options(ServerOptions *options)
358 CLEAR_ON_NONE(options->authorized_principals_file); 409 CLEAR_ON_NONE(options->authorized_principals_file);
359 CLEAR_ON_NONE(options->adm_forced_command); 410 CLEAR_ON_NONE(options->adm_forced_command);
360 CLEAR_ON_NONE(options->chroot_directory); 411 CLEAR_ON_NONE(options->chroot_directory);
412 CLEAR_ON_NONE(options->routing_domain);
361 for (i = 0; i < options->num_host_key_files; i++) 413 for (i = 0; i < options->num_host_key_files; i++)
362 CLEAR_ON_NONE(options->host_key_files[i]); 414 CLEAR_ON_NONE(options->host_key_files[i]);
363 for (i = 0; i < options->num_host_cert_files; i++) 415 for (i = 0; i < options->num_host_cert_files; i++)
@@ -393,8 +445,7 @@ typedef enum {
393 sPermitRootLogin, sLogFacility, sLogLevel, 445 sPermitRootLogin, sLogFacility, sLogLevel,
394 sRhostsRSAAuthentication, sRSAAuthentication, 446 sRhostsRSAAuthentication, sRSAAuthentication,
395 sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup, 447 sKerberosAuthentication, sKerberosOrLocalPasswd, sKerberosTicketCleanup,
396 sKerberosGetAFSToken, 448 sKerberosGetAFSToken, sChallengeResponseAuthentication,
397 sKerberosTgtPassing, sChallengeResponseAuthentication,
398 sPasswordAuthentication, sKbdInteractiveAuthentication, 449 sPasswordAuthentication, sKbdInteractiveAuthentication,
399 sListenAddress, sAddressFamily, 450 sListenAddress, sAddressFamily,
400 sPrintMotd, sPrintLastLog, sIgnoreRhosts, 451 sPrintMotd, sPrintLastLog, sIgnoreRhosts,
@@ -421,7 +472,7 @@ typedef enum {
421 sAuthenticationMethods, sHostKeyAgent, sPermitUserRC, 472 sAuthenticationMethods, sHostKeyAgent, sPermitUserRC,
422 sStreamLocalBindMask, sStreamLocalBindUnlink, 473 sStreamLocalBindMask, sStreamLocalBindUnlink,
423 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding, 474 sAllowStreamLocalForwarding, sFingerprintHash, sDisableForwarding,
424 sExposeAuthInfo, 475 sExposeAuthInfo, sRDomain,
425 sDeprecated, sIgnore, sUnsupported 476 sDeprecated, sIgnore, sUnsupported
426} ServerOpCodes; 477} ServerOpCodes;
427 478
@@ -566,6 +617,7 @@ static struct {
566 { "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL }, 617 { "fingerprinthash", sFingerprintHash, SSHCFG_GLOBAL },
567 { "disableforwarding", sDisableForwarding, SSHCFG_ALL }, 618 { "disableforwarding", sDisableForwarding, SSHCFG_ALL },
568 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL }, 619 { "exposeauthinfo", sExposeAuthInfo, SSHCFG_ALL },
620 { "rdomain", sRDomain, SSHCFG_ALL },
569 { NULL, sBadOption, 0 } 621 { NULL, sBadOption, 0 }
570}; 622};
571 623
@@ -619,23 +671,51 @@ derelativise_path(const char *path)
619} 671}
620 672
621static void 673static void
622add_listen_addr(ServerOptions *options, char *addr, int port) 674add_listen_addr(ServerOptions *options, const char *addr,
675 const char *rdomain, int port)
623{ 676{
624 u_int i; 677 u_int i;
625 678
626 if (port == 0) 679 if (port > 0)
627 for (i = 0; i < options->num_ports; i++) 680 add_one_listen_addr(options, addr, rdomain, port);
628 add_one_listen_addr(options, addr, options->ports[i]); 681 else {
629 else 682 for (i = 0; i < options->num_ports; i++) {
630 add_one_listen_addr(options, addr, port); 683 add_one_listen_addr(options, addr, rdomain,
684 options->ports[i]);
685 }
686 }
631} 687}
632 688
633static void 689static void
634add_one_listen_addr(ServerOptions *options, char *addr, int port) 690add_one_listen_addr(ServerOptions *options, const char *addr,
691 const char *rdomain, int port)
635{ 692{
636 struct addrinfo hints, *ai, *aitop; 693 struct addrinfo hints, *ai, *aitop;
637 char strport[NI_MAXSERV]; 694 char strport[NI_MAXSERV];
638 int gaierr; 695 int gaierr;
696 u_int i;
697
698 /* Find listen_addrs entry for this rdomain */
699 for (i = 0; i < options->num_listen_addrs; i++) {
700 if (rdomain == NULL && options->listen_addrs[i].rdomain == NULL)
701 break;
702 if (rdomain == NULL || options->listen_addrs[i].rdomain == NULL)
703 continue;
704 if (strcmp(rdomain, options->listen_addrs[i].rdomain) == 0)
705 break;
706 }
707 if (i >= options->num_listen_addrs) {
708 /* No entry for this rdomain; allocate one */
709 if (i >= INT_MAX)
710 fatal("%s: too many listen addresses", __func__);
711 options->listen_addrs = xrecallocarray(options->listen_addrs,
712 options->num_listen_addrs, options->num_listen_addrs + 1,
713 sizeof(*options->listen_addrs));
714 i = options->num_listen_addrs++;
715 if (rdomain != NULL)
716 options->listen_addrs[i].rdomain = xstrdup(rdomain);
717 }
718 /* options->listen_addrs[i] points to the addresses for this rdomain */
639 719
640 memset(&hints, 0, sizeof(hints)); 720 memset(&hints, 0, sizeof(hints));
641 hints.ai_family = options->address_family; 721 hints.ai_family = options->address_family;
@@ -648,8 +728,44 @@ add_one_listen_addr(ServerOptions *options, char *addr, int port)
648 ssh_gai_strerror(gaierr)); 728 ssh_gai_strerror(gaierr));
649 for (ai = aitop; ai->ai_next; ai = ai->ai_next) 729 for (ai = aitop; ai->ai_next; ai = ai->ai_next)
650 ; 730 ;
651 ai->ai_next = options->listen_addrs; 731 ai->ai_next = options->listen_addrs[i].addrs;
652 options->listen_addrs = aitop; 732 options->listen_addrs[i].addrs = aitop;
733}
734
735/* Returns nonzero if the routing domain name is valid */
736static int
737valid_rdomain(const char *name)
738{
739#if defined(HAVE_SYS_VALID_RDOMAIN)
740 return sys_valid_rdomain(name);
741#elif defined(__OpenBSD__)
742 const char *errstr;
743 long long num;
744 struct rt_tableinfo info;
745 int mib[6];
746 size_t miblen = sizeof(mib);
747
748 if (name == NULL)
749 return 1;
750
751 num = strtonum(name, 0, 255, &errstr);
752 if (errstr != NULL)
753 return 0;
754
755 /* Check whether the table actually exists */
756 memset(mib, 0, sizeof(mib));
757 mib[0] = CTL_NET;
758 mib[1] = PF_ROUTE;
759 mib[4] = NET_RT_TABLE;
760 mib[5] = (int)num;
761 if (sysctl(mib, 6, &info, &miblen, NULL, 0) == -1)
762 return 0;
763
764 return 1;
765#else /* defined(__OpenBSD__) */
766 error("Routing domains are not supported on this platform");
767 return 0;
768#endif
653} 769}
654 770
655/* 771/*
@@ -657,18 +773,19 @@ add_one_listen_addr(ServerOptions *options, char *addr, int port)
657 * and AddressFamily options. 773 * and AddressFamily options.
658 */ 774 */
659static void 775static void
660queue_listen_addr(ServerOptions *options, char *addr, int port) 776queue_listen_addr(ServerOptions *options, const char *addr,
777 const char *rdomain, int port)
661{ 778{
662 options->queued_listen_addrs = xreallocarray( 779 struct queued_listenaddr *qla;
663 options->queued_listen_addrs, options->num_queued_listens + 1, 780
664 sizeof(addr)); 781 options->queued_listen_addrs = xrecallocarray(
665 options->queued_listen_ports = xreallocarray( 782 options->queued_listen_addrs,
666 options->queued_listen_ports, options->num_queued_listens + 1, 783 options->num_queued_listens, options->num_queued_listens + 1,
667 sizeof(port)); 784 sizeof(*options->queued_listen_addrs));
668 options->queued_listen_addrs[options->num_queued_listens] = 785 qla = &options->queued_listen_addrs[options->num_queued_listens++];
669 xstrdup(addr); 786 qla->addr = xstrdup(addr);
670 options->queued_listen_ports[options->num_queued_listens] = port; 787 qla->port = port;
671 options->num_queued_listens++; 788 qla->rdomain = rdomain == NULL ? NULL : xstrdup(rdomain);
672} 789}
673 790
674/* 791/*
@@ -678,6 +795,7 @@ static void
678process_queued_listen_addrs(ServerOptions *options) 795process_queued_listen_addrs(ServerOptions *options)
679{ 796{
680 u_int i; 797 u_int i;
798 struct queued_listenaddr *qla;
681 799
682 if (options->num_ports == 0) 800 if (options->num_ports == 0)
683 options->ports[options->num_ports++] = SSH_DEFAULT_PORT; 801 options->ports[options->num_ports++] = SSH_DEFAULT_PORT;
@@ -685,15 +803,13 @@ process_queued_listen_addrs(ServerOptions *options)
685 options->address_family = AF_UNSPEC; 803 options->address_family = AF_UNSPEC;
686 804
687 for (i = 0; i < options->num_queued_listens; i++) { 805 for (i = 0; i < options->num_queued_listens; i++) {
688 add_listen_addr(options, options->queued_listen_addrs[i], 806 qla = &options->queued_listen_addrs[i];
689 options->queued_listen_ports[i]); 807 add_listen_addr(options, qla->addr, qla->rdomain, qla->port);
690 free(options->queued_listen_addrs[i]); 808 free(qla->addr);
691 options->queued_listen_addrs[i] = NULL; 809 free(qla->rdomain);
692 } 810 }
693 free(options->queued_listen_addrs); 811 free(options->queued_listen_addrs);
694 options->queued_listen_addrs = NULL; 812 options->queued_listen_addrs = NULL;
695 free(options->queued_listen_ports);
696 options->queued_listen_ports = NULL;
697 options->num_queued_listens = 0; 813 options->num_queued_listens = 0;
698} 814}
699 815
@@ -747,6 +863,7 @@ get_connection_info(int populate, int use_dns)
747 ci.address = ssh_remote_ipaddr(ssh); 863 ci.address = ssh_remote_ipaddr(ssh);
748 ci.laddress = ssh_local_ipaddr(ssh); 864 ci.laddress = ssh_local_ipaddr(ssh);
749 ci.lport = ssh_local_port(ssh); 865 ci.lport = ssh_local_port(ssh);
866 ci.rdomain = ssh_packet_rdomain_in(ssh);
750 return &ci; 867 return &ci;
751} 868}
752 869
@@ -811,6 +928,13 @@ out:
811 return result; 928 return result;
812} 929}
813 930
931static void
932match_test_missing_fatal(const char *criteria, const char *attrib)
933{
934 fatal("'Match %s' in configuration but '%s' not in connection "
935 "test specification.", criteria, attrib);
936}
937
814/* 938/*
815 * All of the attributes on a single Match line are ANDed together, so we need 939 * All of the attributes on a single Match line are ANDed together, so we need
816 * to check every attribute and set the result to zero if any attribute does 940 * to check every attribute and set the result to zero if any attribute does
@@ -848,20 +972,24 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
848 return -1; 972 return -1;
849 } 973 }
850 if (strcasecmp(attrib, "user") == 0) { 974 if (strcasecmp(attrib, "user") == 0) {
851 if (ci == NULL || ci->user == NULL) { 975 if (ci == NULL) {
852 result = 0; 976 result = 0;
853 continue; 977 continue;
854 } 978 }
979 if (ci->user == NULL)
980 match_test_missing_fatal("User", "user");
855 if (match_pattern_list(ci->user, arg, 0) != 1) 981 if (match_pattern_list(ci->user, arg, 0) != 1)
856 result = 0; 982 result = 0;
857 else 983 else
858 debug("user %.100s matched 'User %.100s' at " 984 debug("user %.100s matched 'User %.100s' at "
859 "line %d", ci->user, arg, line); 985 "line %d", ci->user, arg, line);
860 } else if (strcasecmp(attrib, "group") == 0) { 986 } else if (strcasecmp(attrib, "group") == 0) {
861 if (ci == NULL || ci->user == NULL) { 987 if (ci == NULL) {
862 result = 0; 988 result = 0;
863 continue; 989 continue;
864 } 990 }
991 if (ci->user == NULL)
992 match_test_missing_fatal("Group", "user");
865 switch (match_cfg_line_group(arg, line, ci->user)) { 993 switch (match_cfg_line_group(arg, line, ci->user)) {
866 case -1: 994 case -1:
867 return -1; 995 return -1;
@@ -869,20 +997,24 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
869 result = 0; 997 result = 0;
870 } 998 }
871 } else if (strcasecmp(attrib, "host") == 0) { 999 } else if (strcasecmp(attrib, "host") == 0) {
872 if (ci == NULL || ci->host == NULL) { 1000 if (ci == NULL) {
873 result = 0; 1001 result = 0;
874 continue; 1002 continue;
875 } 1003 }
1004 if (ci->host == NULL)
1005 match_test_missing_fatal("Host", "host");
876 if (match_hostname(ci->host, arg) != 1) 1006 if (match_hostname(ci->host, arg) != 1)
877 result = 0; 1007 result = 0;
878 else 1008 else
879 debug("connection from %.100s matched 'Host " 1009 debug("connection from %.100s matched 'Host "
880 "%.100s' at line %d", ci->host, arg, line); 1010 "%.100s' at line %d", ci->host, arg, line);
881 } else if (strcasecmp(attrib, "address") == 0) { 1011 } else if (strcasecmp(attrib, "address") == 0) {
882 if (ci == NULL || ci->address == NULL) { 1012 if (ci == NULL) {
883 result = 0; 1013 result = 0;
884 continue; 1014 continue;
885 } 1015 }
1016 if (ci->address == NULL)
1017 match_test_missing_fatal("Address", "addr");
886 switch (addr_match_list(ci->address, arg)) { 1018 switch (addr_match_list(ci->address, arg)) {
887 case 1: 1019 case 1:
888 debug("connection from %.100s matched 'Address " 1020 debug("connection from %.100s matched 'Address "
@@ -896,10 +1028,13 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
896 return -1; 1028 return -1;
897 } 1029 }
898 } else if (strcasecmp(attrib, "localaddress") == 0){ 1030 } else if (strcasecmp(attrib, "localaddress") == 0){
899 if (ci == NULL || ci->laddress == NULL) { 1031 if (ci == NULL) {
900 result = 0; 1032 result = 0;
901 continue; 1033 continue;
902 } 1034 }
1035 if (ci->laddress == NULL)
1036 match_test_missing_fatal("LocalAddress",
1037 "laddr");
903 switch (addr_match_list(ci->laddress, arg)) { 1038 switch (addr_match_list(ci->laddress, arg)) {
904 case 1: 1039 case 1:
905 debug("connection from %.100s matched " 1040 debug("connection from %.100s matched "
@@ -919,10 +1054,12 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
919 arg); 1054 arg);
920 return -1; 1055 return -1;
921 } 1056 }
922 if (ci == NULL || ci->lport == 0) { 1057 if (ci == NULL) {
923 result = 0; 1058 result = 0;
924 continue; 1059 continue;
925 } 1060 }
1061 if (ci->lport == 0)
1062 match_test_missing_fatal("LocalPort", "lport");
926 /* TODO support port lists */ 1063 /* TODO support port lists */
927 if (port == ci->lport) 1064 if (port == ci->lport)
928 debug("connection from %.100s matched " 1065 debug("connection from %.100s matched "
@@ -930,6 +1067,16 @@ match_cfg_line(char **condition, int line, struct connection_info *ci)
930 ci->laddress, port, line); 1067 ci->laddress, port, line);
931 else 1068 else
932 result = 0; 1069 result = 0;
1070 } else if (strcasecmp(attrib, "rdomain") == 0) {
1071 if (ci == NULL || ci->rdomain == NULL) {
1072 result = 0;
1073 continue;
1074 }
1075 if (match_pattern_list(ci->rdomain, arg, 0) != 1)
1076 result = 0;
1077 else
1078 debug("user %.100s matched 'RDomain %.100s' at "
1079 "line %d", ci->rdomain, arg, line);
933 } else { 1080 } else {
934 error("Unsupported Match attribute %s", attrib); 1081 error("Unsupported Match attribute %s", attrib);
935 return -1; 1082 return -1;
@@ -952,6 +1099,11 @@ struct multistate {
952 char *key; 1099 char *key;
953 int value; 1100 int value;
954}; 1101};
1102static const struct multistate multistate_flag[] = {
1103 { "yes", 1 },
1104 { "no", 0 },
1105 { NULL, -1 }
1106};
955static const struct multistate multistate_addressfamily[] = { 1107static const struct multistate multistate_addressfamily[] = {
956 { "inet", AF_INET }, 1108 { "inet", AF_INET },
957 { "inet6", AF_INET6 }, 1109 { "inet6", AF_INET6 },
@@ -1001,6 +1153,7 @@ process_server_config_line(ServerOptions *options, char *line,
1001 size_t len; 1153 size_t len;
1002 long long val64; 1154 long long val64;
1003 const struct multistate *multistate_ptr; 1155 const struct multistate *multistate_ptr;
1156 const char *errstr;
1004 1157
1005 /* Strip trailing whitespace. Allow \f (form feed) at EOL only */ 1158 /* Strip trailing whitespace. Allow \f (form feed) at EOL only */
1006 if ((len = strlen(line)) == 0) 1159 if ((len = strlen(line)) == 0)
@@ -1088,20 +1241,33 @@ process_server_config_line(ServerOptions *options, char *line,
1088 /* check for bare IPv6 address: no "[]" and 2 or more ":" */ 1241 /* check for bare IPv6 address: no "[]" and 2 or more ":" */
1089 if (strchr(arg, '[') == NULL && (p = strchr(arg, ':')) != NULL 1242 if (strchr(arg, '[') == NULL && (p = strchr(arg, ':')) != NULL
1090 && strchr(p+1, ':') != NULL) { 1243 && strchr(p+1, ':') != NULL) {
1091 queue_listen_addr(options, arg, 0);
1092 break;
1093 }
1094 p = hpdelim(&arg);
1095 if (p == NULL)
1096 fatal("%s line %d: bad address:port usage",
1097 filename, linenum);
1098 p = cleanhostname(p);
1099 if (arg == NULL)
1100 port = 0; 1244 port = 0;
1101 else if ((port = a2port(arg)) <= 0) 1245 p = arg;
1102 fatal("%s line %d: bad port number", filename, linenum); 1246 } else {
1247 p = hpdelim(&arg);
1248 if (p == NULL)
1249 fatal("%s line %d: bad address:port usage",
1250 filename, linenum);
1251 p = cleanhostname(p);
1252 if (arg == NULL)
1253 port = 0;
1254 else if ((port = a2port(arg)) <= 0)
1255 fatal("%s line %d: bad port number",
1256 filename, linenum);
1257 }
1258 /* Optional routing table */
1259 arg2 = NULL;
1260 if ((arg = strdelim(&cp)) != NULL) {
1261 if (strcmp(arg, "rdomain") != 0 ||
1262 (arg2 = strdelim(&cp)) == NULL)
1263 fatal("%s line %d: bad ListenAddress syntax",
1264 filename, linenum);
1265 if (!valid_rdomain(arg2))
1266 fatal("%s line %d: bad routing domain",
1267 filename, linenum);
1268 }
1103 1269
1104 queue_listen_addr(options, p, port); 1270 queue_listen_addr(options, p, arg2, port);
1105 1271
1106 break; 1272 break;
1107 1273
@@ -1128,22 +1294,12 @@ process_server_config_line(ServerOptions *options, char *line,
1128 break; 1294 break;
1129 1295
1130 case sHostKeyFile: 1296 case sHostKeyFile:
1131 intptr = &options->num_host_key_files;
1132 if (*intptr >= MAX_HOSTKEYS)
1133 fatal("%s line %d: too many host keys specified (max %d).",
1134 filename, linenum, MAX_HOSTKEYS);
1135 charptr = &options->host_key_files[*intptr];
1136 parse_filename:
1137 arg = strdelim(&cp); 1297 arg = strdelim(&cp);
1138 if (!arg || *arg == '\0') 1298 if (!arg || *arg == '\0')
1139 fatal("%s line %d: missing file name.", 1299 fatal("%s line %d: missing file name.",
1140 filename, linenum); 1300 filename, linenum);
1141 if (*activep && *charptr == NULL) { 1301 if (*activep)
1142 *charptr = derelativise_path(arg); 1302 servconf_add_hostkey(filename, linenum, options, arg);
1143 /* increase optional counter */
1144 if (intptr != NULL)
1145 *intptr = *intptr + 1;
1146 }
1147 break; 1303 break;
1148 1304
1149 case sHostKeyAgent: 1305 case sHostKeyAgent:
@@ -1158,17 +1314,28 @@ process_server_config_line(ServerOptions *options, char *line,
1158 break; 1314 break;
1159 1315
1160 case sHostCertificate: 1316 case sHostCertificate:
1161 intptr = &options->num_host_cert_files; 1317 arg = strdelim(&cp);
1162 if (*intptr >= MAX_HOSTKEYS) 1318 if (!arg || *arg == '\0')
1163 fatal("%s line %d: too many host certificates " 1319 fatal("%s line %d: missing file name.",
1164 "specified (max %d).", filename, linenum, 1320 filename, linenum);
1165 MAX_HOSTCERTS); 1321 if (*activep)
1166 charptr = &options->host_cert_files[*intptr]; 1322 servconf_add_hostcert(filename, linenum, options, arg);
1167 goto parse_filename; 1323 break;
1168 1324
1169 case sPidFile: 1325 case sPidFile:
1170 charptr = &options->pid_file; 1326 charptr = &options->pid_file;
1171 goto parse_filename; 1327 parse_filename:
1328 arg = strdelim(&cp);
1329 if (!arg || *arg == '\0')
1330 fatal("%s line %d: missing file name.",
1331 filename, linenum);
1332 if (*activep && *charptr == NULL) {
1333 *charptr = derelativise_path(arg);
1334 /* increase optional counter */
1335 if (intptr != NULL)
1336 *intptr = *intptr + 1;
1337 }
1338 break;
1172 1339
1173 case sPermitRootLogin: 1340 case sPermitRootLogin:
1174 intptr = &options->permit_root_login; 1341 intptr = &options->permit_root_login;
@@ -1178,21 +1345,8 @@ process_server_config_line(ServerOptions *options, char *line,
1178 case sIgnoreRhosts: 1345 case sIgnoreRhosts:
1179 intptr = &options->ignore_rhosts; 1346 intptr = &options->ignore_rhosts;
1180 parse_flag: 1347 parse_flag:
1181 arg = strdelim(&cp); 1348 multistate_ptr = multistate_flag;
1182 if (!arg || *arg == '\0') 1349 goto parse_multistate;
1183 fatal("%s line %d: missing yes/no argument.",
1184 filename, linenum);
1185 value = 0; /* silence compiler */
1186 if (strcmp(arg, "yes") == 0)
1187 value = 1;
1188 else if (strcmp(arg, "no") == 0)
1189 value = 0;
1190 else
1191 fatal("%s line %d: Bad yes/no argument: %s",
1192 filename, linenum, arg);
1193 if (*activep && *intptr == -1)
1194 *intptr = value;
1195 break;
1196 1350
1197 case sIgnoreUserKnownHosts: 1351 case sIgnoreUserKnownHosts:
1198 intptr = &options->ignore_user_known_hosts; 1352 intptr = &options->ignore_user_known_hosts;
@@ -1289,10 +1443,9 @@ process_server_config_line(ServerOptions *options, char *line,
1289 intptr = &options->x11_display_offset; 1443 intptr = &options->x11_display_offset;
1290 parse_int: 1444 parse_int:
1291 arg = strdelim(&cp); 1445 arg = strdelim(&cp);
1292 if (!arg || *arg == '\0') 1446 if ((errstr = atoi_err(arg, &value)) != NULL)
1293 fatal("%s line %d: missing integer value.", 1447 fatal("%s line %d: integer value %s.",
1294 filename, linenum); 1448 filename, linenum, errstr);
1295 value = atoi(arg);
1296 if (*activep && *intptr == -1) 1449 if (*activep && *intptr == -1)
1297 *intptr = value; 1450 *intptr = value;
1298 break; 1451 break;
@@ -1412,55 +1565,47 @@ process_server_config_line(ServerOptions *options, char *line,
1412 1565
1413 case sAllowUsers: 1566 case sAllowUsers:
1414 while ((arg = strdelim(&cp)) && *arg != '\0') { 1567 while ((arg = strdelim(&cp)) && *arg != '\0') {
1415 if (options->num_allow_users >= MAX_ALLOW_USERS)
1416 fatal("%s line %d: too many allow users.",
1417 filename, linenum);
1418 if (match_user(NULL, NULL, NULL, arg) == -1) 1568 if (match_user(NULL, NULL, NULL, arg) == -1)
1419 fatal("%s line %d: invalid AllowUsers pattern: " 1569 fatal("%s line %d: invalid AllowUsers pattern: "
1420 "\"%.100s\"", filename, linenum, arg); 1570 "\"%.100s\"", filename, linenum, arg);
1421 if (!*activep) 1571 if (!*activep)
1422 continue; 1572 continue;
1423 options->allow_users[options->num_allow_users++] = 1573 array_append(filename, linenum, "AllowUsers",
1424 xstrdup(arg); 1574 &options->allow_users, &options->num_allow_users,
1575 arg);
1425 } 1576 }
1426 break; 1577 break;
1427 1578
1428 case sDenyUsers: 1579 case sDenyUsers:
1429 while ((arg = strdelim(&cp)) && *arg != '\0') { 1580 while ((arg = strdelim(&cp)) && *arg != '\0') {
1430 if (options->num_deny_users >= MAX_DENY_USERS)
1431 fatal("%s line %d: too many deny users.",
1432 filename, linenum);
1433 if (match_user(NULL, NULL, NULL, arg) == -1) 1581 if (match_user(NULL, NULL, NULL, arg) == -1)
1434 fatal("%s line %d: invalid DenyUsers pattern: " 1582 fatal("%s line %d: invalid DenyUsers pattern: "
1435 "\"%.100s\"", filename, linenum, arg); 1583 "\"%.100s\"", filename, linenum, arg);
1436 if (!*activep) 1584 if (!*activep)
1437 continue; 1585 continue;
1438 options->deny_users[options->num_deny_users++] = 1586 array_append(filename, linenum, "DenyUsers",
1439 xstrdup(arg); 1587 &options->deny_users, &options->num_deny_users,
1588 arg);
1440 } 1589 }
1441 break; 1590 break;
1442 1591
1443 case sAllowGroups: 1592 case sAllowGroups:
1444 while ((arg = strdelim(&cp)) && *arg != '\0') { 1593 while ((arg = strdelim(&cp)) && *arg != '\0') {
1445 if (options->num_allow_groups >= MAX_ALLOW_GROUPS)
1446 fatal("%s line %d: too many allow groups.",
1447 filename, linenum);
1448 if (!*activep) 1594 if (!*activep)
1449 continue; 1595 continue;
1450 options->allow_groups[options->num_allow_groups++] = 1596 array_append(filename, linenum, "AllowGroups",
1451 xstrdup(arg); 1597 &options->allow_groups, &options->num_allow_groups,
1598 arg);
1452 } 1599 }
1453 break; 1600 break;
1454 1601
1455 case sDenyGroups: 1602 case sDenyGroups:
1456 while ((arg = strdelim(&cp)) && *arg != '\0') { 1603 while ((arg = strdelim(&cp)) && *arg != '\0') {
1457 if (options->num_deny_groups >= MAX_DENY_GROUPS)
1458 fatal("%s line %d: too many deny groups.",
1459 filename, linenum);
1460 if (!*activep) 1604 if (!*activep)
1461 continue; 1605 continue;
1462 options->deny_groups[options->num_deny_groups++] = 1606 array_append(filename, linenum, "DenyGroups",
1463 xstrdup(arg); 1607 &options->deny_groups, &options->num_deny_groups,
1608 arg);
1464 } 1609 }
1465 break; 1610 break;
1466 1611
@@ -1579,14 +1724,12 @@ process_server_config_line(ServerOptions *options, char *line,
1579 case sAuthorizedKeysFile: 1724 case sAuthorizedKeysFile:
1580 if (*activep && options->num_authkeys_files == 0) { 1725 if (*activep && options->num_authkeys_files == 0) {
1581 while ((arg = strdelim(&cp)) && *arg != '\0') { 1726 while ((arg = strdelim(&cp)) && *arg != '\0') {
1582 if (options->num_authkeys_files >= 1727 arg = tilde_expand_filename(arg, getuid());
1583 MAX_AUTHKEYS_FILES) 1728 array_append(filename, linenum,
1584 fatal("%s line %d: " 1729 "AuthorizedKeysFile",
1585 "too many authorized keys files.", 1730 &options->authorized_keys_files,
1586 filename, linenum); 1731 &options->num_authkeys_files, arg);
1587 options->authorized_keys_files[ 1732 free(arg);
1588 options->num_authkeys_files++] =
1589 tilde_expand_filename(arg, getuid());
1590 } 1733 }
1591 } 1734 }
1592 return 0; 1735 return 0;
@@ -1618,13 +1761,11 @@ process_server_config_line(ServerOptions *options, char *line,
1618 if (strchr(arg, '=') != NULL) 1761 if (strchr(arg, '=') != NULL)
1619 fatal("%s line %d: Invalid environment name.", 1762 fatal("%s line %d: Invalid environment name.",
1620 filename, linenum); 1763 filename, linenum);
1621 if (options->num_accept_env >= MAX_ACCEPT_ENV)
1622 fatal("%s line %d: too many allow env.",
1623 filename, linenum);
1624 if (!*activep) 1764 if (!*activep)
1625 continue; 1765 continue;
1626 options->accept_env[options->num_accept_env++] = 1766 array_append(filename, linenum, "AcceptEnv",
1627 xstrdup(arg); 1767 &options->accept_env, &options->num_accept_env,
1768 arg);
1628 } 1769 }
1629 break; 1770 break;
1630 1771
@@ -1663,9 +1804,9 @@ process_server_config_line(ServerOptions *options, char *line,
1663 if (!arg || *arg == '\0') 1804 if (!arg || *arg == '\0')
1664 fatal("%s line %d: missing PermitOpen specification", 1805 fatal("%s line %d: missing PermitOpen specification",
1665 filename, linenum); 1806 filename, linenum);
1666 i = options->num_permitted_opens; /* modified later */ 1807 value = options->num_permitted_opens; /* modified later */
1667 if (strcmp(arg, "any") == 0 || strcmp(arg, "none") == 0) { 1808 if (strcmp(arg, "any") == 0 || strcmp(arg, "none") == 0) {
1668 if (*activep && i == 0) { 1809 if (*activep && value == 0) {
1669 options->num_permitted_opens = 1; 1810 options->num_permitted_opens = 1;
1670 options->permitted_opens = xcalloc(1, 1811 options->permitted_opens = xcalloc(1,
1671 sizeof(*options->permitted_opens)); 1812 sizeof(*options->permitted_opens));
@@ -1683,16 +1824,13 @@ process_server_config_line(ServerOptions *options, char *line,
1683 if (arg == NULL || ((port = permitopen_port(arg)) < 0)) 1824 if (arg == NULL || ((port = permitopen_port(arg)) < 0))
1684 fatal("%s line %d: bad port number in " 1825 fatal("%s line %d: bad port number in "
1685 "PermitOpen", filename, linenum); 1826 "PermitOpen", filename, linenum);
1686 if (*activep && i == 0) { 1827 if (*activep && value == 0) {
1687 options->permitted_opens = xrecallocarray( 1828 array_append(filename, linenum,
1688 options->permitted_opens, 1829 "PermitOpen",
1689 options->num_permitted_opens, 1830 &options->permitted_opens,
1690 options->num_permitted_opens + 1, 1831 &options->num_permitted_opens, arg2);
1691 sizeof(*options->permitted_opens)); 1832 }
1692 i = options->num_permitted_opens++; 1833 free(arg2);
1693 options->permitted_opens[i] = arg2;
1694 } else
1695 free(arg2);
1696 } 1834 }
1697 break; 1835 break;
1698 1836
@@ -1815,11 +1953,6 @@ process_server_config_line(ServerOptions *options, char *line,
1815 value = 0; /* seen "any" pseudo-method */ 1953 value = 0; /* seen "any" pseudo-method */
1816 value2 = 0; /* sucessfully parsed any method */ 1954 value2 = 0; /* sucessfully parsed any method */
1817 while ((arg = strdelim(&cp)) && *arg != '\0') { 1955 while ((arg = strdelim(&cp)) && *arg != '\0') {
1818 if (options->num_auth_methods >=
1819 MAX_AUTH_METHODS)
1820 fatal("%s line %d: "
1821 "too many authentication methods.",
1822 filename, linenum);
1823 if (strcmp(arg, "any") == 0) { 1956 if (strcmp(arg, "any") == 0) {
1824 if (options->num_auth_methods > 0) { 1957 if (options->num_auth_methods > 0) {
1825 fatal("%s line %d: \"any\" " 1958 fatal("%s line %d: \"any\" "
@@ -1840,8 +1973,10 @@ process_server_config_line(ServerOptions *options, char *line,
1840 value2 = 1; 1973 value2 = 1;
1841 if (!*activep) 1974 if (!*activep)
1842 continue; 1975 continue;
1843 options->auth_methods[ 1976 array_append(filename, linenum,
1844 options->num_auth_methods++] = xstrdup(arg); 1977 "AuthenticationMethods",
1978 &options->auth_methods,
1979 &options->num_auth_methods, arg);
1845 } 1980 }
1846 if (value2 == 0) { 1981 if (value2 == 0) {
1847 fatal("%s line %d: no AuthenticationMethods " 1982 fatal("%s line %d: no AuthenticationMethods "
@@ -1883,6 +2018,20 @@ process_server_config_line(ServerOptions *options, char *line,
1883 intptr = &options->expose_userauth_info; 2018 intptr = &options->expose_userauth_info;
1884 goto parse_flag; 2019 goto parse_flag;
1885 2020
2021 case sRDomain:
2022 charptr = &options->routing_domain;
2023 arg = strdelim(&cp);
2024 if (!arg || *arg == '\0')
2025 fatal("%.200s line %d: Missing argument.",
2026 filename, linenum);
2027 if (strcasecmp(arg, "none") != 0 && strcmp(arg, "%D") != 0 &&
2028 !valid_rdomain(arg))
2029 fatal("%s line %d: bad routing domain",
2030 filename, linenum);
2031 if (*activep && *charptr == NULL)
2032 *charptr = xstrdup(arg);
2033 break;
2034
1886 case sDeprecated: 2035 case sDeprecated:
1887 case sIgnore: 2036 case sIgnore:
1888 case sUnsupported: 2037 case sUnsupported:
@@ -1963,6 +2112,8 @@ int parse_server_match_testspec(struct connection_info *ci, char *spec)
1963 ci->user = xstrdup(p + 5); 2112 ci->user = xstrdup(p + 5);
1964 } else if (strncmp(p, "laddr=", 6) == 0) { 2113 } else if (strncmp(p, "laddr=", 6) == 0) {
1965 ci->laddress = xstrdup(p + 6); 2114 ci->laddress = xstrdup(p + 6);
2115 } else if (strncmp(p, "rdomain=", 8) == 0) {
2116 ci->rdomain = xstrdup(p + 8);
1966 } else if (strncmp(p, "lport=", 6) == 0) { 2117 } else if (strncmp(p, "lport=", 6) == 0) {
1967 ci->lport = a2port(p + 6); 2118 ci->lport = a2port(p + 6);
1968 if (ci->lport == -1) { 2119 if (ci->lport == -1) {
@@ -1980,19 +2131,6 @@ int parse_server_match_testspec(struct connection_info *ci, char *spec)
1980} 2131}
1981 2132
1982/* 2133/*
1983 * returns 1 for a complete spec, 0 for partial spec and -1 for an
1984 * empty spec.
1985 */
1986int server_match_spec_complete(struct connection_info *ci)
1987{
1988 if (ci->user && ci->host && ci->address)
1989 return 1; /* complete */
1990 if (!ci->user && !ci->host && !ci->address)
1991 return -1; /* empty */
1992 return 0; /* partial */
1993}
1994
1995/*
1996 * Copy any supported values that are set. 2134 * Copy any supported values that are set.
1997 * 2135 *
1998 * If the preauth flag is set, we do not bother copying the string or 2136 * If the preauth flag is set, we do not bother copying the string or
@@ -2057,17 +2195,16 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
2057 dst->n = src->n; \ 2195 dst->n = src->n; \
2058 } \ 2196 } \
2059} while(0) 2197} while(0)
2060#define M_CP_STRARRAYOPT(n, num_n) do {\ 2198#define M_CP_STRARRAYOPT(s, num_s) do {\
2061 if (src->num_n != 0) { \ 2199 u_int i; \
2062 for (dst->num_n = 0; dst->num_n < src->num_n; dst->num_n++) \ 2200 if (src->num_s != 0) { \
2063 dst->n[dst->num_n] = xstrdup(src->n[dst->num_n]); \ 2201 for (i = 0; i < dst->num_s; i++) \
2064 } \ 2202 free(dst->s[i]); \
2065} while(0) 2203 free(dst->s); \
2066#define M_CP_STRARRAYOPT_ALLOC(n, num_n) do { \ 2204 dst->s = xcalloc(src->num_s, sizeof(*dst->s)); \
2067 if (src->num_n != 0) { \ 2205 for (i = 0; i < src->num_s; i++) \
2068 dst->n = xcalloc(src->num_n, sizeof(*dst->n)); \ 2206 dst->s[i] = xstrdup(src->s[i]); \
2069 M_CP_STRARRAYOPT(n, num_n); \ 2207 dst->num_s = src->num_s; \
2070 dst->num_n = src->num_n; \
2071 } \ 2208 } \
2072} while(0) 2209} while(0)
2073 2210
@@ -2100,7 +2237,6 @@ copy_set_server_options(ServerOptions *dst, ServerOptions *src, int preauth)
2100#undef M_CP_INTOPT 2237#undef M_CP_INTOPT
2101#undef M_CP_STROPT 2238#undef M_CP_STROPT
2102#undef M_CP_STRARRAYOPT 2239#undef M_CP_STRARRAYOPT
2103#undef M_CP_STRARRAYOPT_ALLOC
2104 2240
2105void 2241void
2106parse_server_config(ServerOptions *options, const char *filename, Buffer *conf, 2242parse_server_config(ServerOptions *options, const char *filename, Buffer *conf,
@@ -2231,45 +2367,61 @@ dump_cfg_strarray_oneline(ServerOpCodes code, u_int count, char **vals)
2231 printf("\n"); 2367 printf("\n");
2232} 2368}
2233 2369
2234void 2370static char *
2235dump_config(ServerOptions *o) 2371format_listen_addrs(struct listenaddr *la)
2236{ 2372{
2237 u_int i; 2373 int r;
2238 int ret;
2239 struct addrinfo *ai; 2374 struct addrinfo *ai;
2240 char addr[NI_MAXHOST], port[NI_MAXSERV], *s = NULL; 2375 char addr[NI_MAXHOST], port[NI_MAXSERV];
2241 char *laddr1 = xstrdup(""), *laddr2 = NULL; 2376 char *laddr1 = xstrdup(""), *laddr2 = NULL;
2242 2377
2243 /* these are usually at the top of the config */
2244 for (i = 0; i < o->num_ports; i++)
2245 printf("port %d\n", o->ports[i]);
2246 dump_cfg_fmtint(sAddressFamily, o->address_family);
2247
2248 /* 2378 /*
2249 * ListenAddress must be after Port. add_one_listen_addr pushes 2379 * ListenAddress must be after Port. add_one_listen_addr pushes
2250 * addresses onto a stack, so to maintain ordering we need to 2380 * addresses onto a stack, so to maintain ordering we need to
2251 * print these in reverse order. 2381 * print these in reverse order.
2252 */ 2382 */
2253 for (ai = o->listen_addrs; ai; ai = ai->ai_next) { 2383 for (ai = la->addrs; ai; ai = ai->ai_next) {
2254 if ((ret = getnameinfo(ai->ai_addr, ai->ai_addrlen, addr, 2384 if ((r = getnameinfo(ai->ai_addr, ai->ai_addrlen, addr,
2255 sizeof(addr), port, sizeof(port), 2385 sizeof(addr), port, sizeof(port),
2256 NI_NUMERICHOST|NI_NUMERICSERV)) != 0) { 2386 NI_NUMERICHOST|NI_NUMERICSERV)) != 0) {
2257 error("getnameinfo failed: %.100s", 2387 error("getnameinfo: %.100s", ssh_gai_strerror(r));
2258 (ret != EAI_SYSTEM) ? gai_strerror(ret) : 2388 continue;
2259 strerror(errno)); 2389 }
2390 laddr2 = laddr1;
2391 if (ai->ai_family == AF_INET6) {
2392 xasprintf(&laddr1, "listenaddress [%s]:%s%s%s\n%s",
2393 addr, port,
2394 la->rdomain == NULL ? "" : " rdomain ",
2395 la->rdomain == NULL ? "" : la->rdomain,
2396 laddr2);
2260 } else { 2397 } else {
2261 laddr2 = laddr1; 2398 xasprintf(&laddr1, "listenaddress %s:%s%s%s\n%s",
2262 if (ai->ai_family == AF_INET6) 2399 addr, port,
2263 xasprintf(&laddr1, "listenaddress [%s]:%s\n%s", 2400 la->rdomain == NULL ? "" : " rdomain ",
2264 addr, port, laddr2); 2401 la->rdomain == NULL ? "" : la->rdomain,
2265 else 2402 laddr2);
2266 xasprintf(&laddr1, "listenaddress %s:%s\n%s",
2267 addr, port, laddr2);
2268 free(laddr2);
2269 } 2403 }
2404 free(laddr2);
2405 }
2406 return laddr1;
2407}
2408
2409void
2410dump_config(ServerOptions *o)
2411{
2412 char *s;
2413 u_int i;
2414
2415 /* these are usually at the top of the config */
2416 for (i = 0; i < o->num_ports; i++)
2417 printf("port %d\n", o->ports[i]);
2418 dump_cfg_fmtint(sAddressFamily, o->address_family);
2419
2420 for (i = 0; i < o->num_listen_addrs; i++) {
2421 s = format_listen_addrs(&o->listen_addrs[i]);
2422 printf("%s", s);
2423 free(s);
2270 } 2424 }
2271 printf("%s", laddr1);
2272 free(laddr1);
2273 2425
2274 /* integer arguments */ 2426 /* integer arguments */
2275#ifdef USE_PAM 2427#ifdef USE_PAM
@@ -2358,6 +2510,7 @@ dump_config(ServerOptions *o)
2358 o->hostkeyalgorithms : KEX_DEFAULT_PK_ALG); 2510 o->hostkeyalgorithms : KEX_DEFAULT_PK_ALG);
2359 dump_cfg_string(sPubkeyAcceptedKeyTypes, o->pubkey_key_types ? 2511 dump_cfg_string(sPubkeyAcceptedKeyTypes, o->pubkey_key_types ?
2360 o->pubkey_key_types : KEX_DEFAULT_PK_ALG); 2512 o->pubkey_key_types : KEX_DEFAULT_PK_ALG);
2513 dump_cfg_string(sRDomain, o->routing_domain);
2361 2514
2362 /* string arguments requiring a lookup */ 2515 /* string arguments requiring a lookup */
2363 dump_cfg_string(sLogLevel, log_level_name(o->log_level)); 2516 dump_cfg_string(sLogLevel, log_level_name(o->log_level));
@@ -2386,11 +2539,13 @@ dump_config(ServerOptions *o)
2386 printf("maxstartups %d:%d:%d\n", o->max_startups_begin, 2539 printf("maxstartups %d:%d:%d\n", o->max_startups_begin,
2387 o->max_startups_rate, o->max_startups); 2540 o->max_startups_rate, o->max_startups);
2388 2541
2389 for (i = 0; tunmode_desc[i].val != -1; i++) 2542 s = NULL;
2543 for (i = 0; tunmode_desc[i].val != -1; i++) {
2390 if (tunmode_desc[i].val == o->permit_tun) { 2544 if (tunmode_desc[i].val == o->permit_tun) {
2391 s = tunmode_desc[i].text; 2545 s = tunmode_desc[i].text;
2392 break; 2546 break;
2393 } 2547 }
2548 }
2394 dump_cfg_string(sPermitTunnel, s); 2549 dump_cfg_string(sPermitTunnel, s);
2395 2550
2396 printf("ipqos %s ", iptos2str(o->ip_qos_interactive)); 2551 printf("ipqos %s ", iptos2str(o->ip_qos_interactive));
diff --git a/servconf.h b/servconf.h
index 1dca702e6..37a0fb1a3 100644
--- a/servconf.h
+++ b/servconf.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: servconf.h,v 1.126 2017/10/02 19:33:20 djm Exp $ */ 1/* $OpenBSD: servconf.h,v 1.130 2017/10/25 00:19:47 djm Exp $ */
2 2
3/* 3/*
4 * Author: Tatu Ylonen <ylo@cs.hut.fi> 4 * Author: Tatu Ylonen <ylo@cs.hut.fi>
@@ -18,17 +18,7 @@
18 18
19#define MAX_PORTS 256 /* Max # ports. */ 19#define MAX_PORTS 256 /* Max # ports. */
20 20
21#define MAX_ALLOW_USERS 256 /* Max # users on allow list. */
22#define MAX_DENY_USERS 256 /* Max # users on deny list. */
23#define MAX_ALLOW_GROUPS 256 /* Max # groups on allow list. */
24#define MAX_DENY_GROUPS 256 /* Max # groups on deny list. */
25#define MAX_SUBSYSTEMS 256 /* Max # subsystems. */ 21#define MAX_SUBSYSTEMS 256 /* Max # subsystems. */
26#define MAX_HOSTKEYS 256 /* Max # hostkeys. */
27#define MAX_HOSTCERTS 256 /* Max # host certificates. */
28#define MAX_ACCEPT_ENV 256 /* Max # of env vars. */
29#define MAX_MATCH_GROUPS 256 /* Max # of groups for Match. */
30#define MAX_AUTHKEYS_FILES 256 /* Max # of authorized_keys files. */
31#define MAX_AUTH_METHODS 256 /* Max # of AuthenticationMethods. */
32 22
33/* permit_root_login */ 23/* permit_root_login */
34#define PERMIT_NOT_SET -1 24#define PERMIT_NOT_SET -1
@@ -61,21 +51,42 @@
61struct ssh; 51struct ssh;
62struct fwd_perm_list; 52struct fwd_perm_list;
63 53
54/*
55 * Used to store addresses from ListenAddr directives. These may be
56 * incomplete, as they may specify addresses that need to be merged
57 * with any ports requested by ListenPort.
58 */
59struct queued_listenaddr {
60 char *addr;
61 int port; /* <=0 if unspecified */
62 char *rdomain;
63};
64
65/* Resolved listen addresses, grouped by optional routing domain */
66struct listenaddr {
67 char *rdomain;
68 struct addrinfo *addrs;
69};
70
64typedef struct { 71typedef struct {
65 u_int num_ports; 72 u_int num_ports;
66 u_int ports_from_cmdline; 73 u_int ports_from_cmdline;
67 int ports[MAX_PORTS]; /* Port number to listen on. */ 74 int ports[MAX_PORTS]; /* Port number to listen on. */
75 struct queued_listenaddr *queued_listen_addrs;
68 u_int num_queued_listens; 76 u_int num_queued_listens;
69 char **queued_listen_addrs; 77 struct listenaddr *listen_addrs;
70 int *queued_listen_ports; 78 u_int num_listen_addrs;
71 struct addrinfo *listen_addrs; /* Addresses on which the server listens. */ 79 int address_family; /* Address family used by the server. */
72 int address_family; /* Address family used by the server. */ 80
73 char *host_key_files[MAX_HOSTKEYS]; /* Files containing host keys. */ 81 char *routing_domain; /* Bind session to routing domain */
74 int num_host_key_files; /* Number of files for host keys. */ 82
75 char *host_cert_files[MAX_HOSTCERTS]; /* Files containing host certs. */ 83 char **host_key_files; /* Files containing host keys. */
76 int num_host_cert_files; /* Number of files for host certs. */ 84 u_int num_host_key_files; /* Number of files for host keys. */
77 char *host_key_agent; /* ssh-agent socket for host keys. */ 85 char **host_cert_files; /* Files containing host certs. */
78 char *pid_file; /* Where to put our pid */ 86 u_int num_host_cert_files; /* Number of files for host certs. */
87
88 char *host_key_agent; /* ssh-agent socket for host keys. */
89 char *pid_file; /* Where to put our pid */
79 int login_grace_time; /* Disconnect if no auth in this time 90 int login_grace_time; /* Disconnect if no auth in this time
80 * (sec). */ 91 * (sec). */
81 int permit_root_login; /* PERMIT_*, see above */ 92 int permit_root_login; /* PERMIT_*, see above */
@@ -134,13 +145,13 @@ typedef struct {
134 int allow_agent_forwarding; 145 int allow_agent_forwarding;
135 int disable_forwarding; 146 int disable_forwarding;
136 u_int num_allow_users; 147 u_int num_allow_users;
137 char *allow_users[MAX_ALLOW_USERS]; 148 char **allow_users;
138 u_int num_deny_users; 149 u_int num_deny_users;
139 char *deny_users[MAX_DENY_USERS]; 150 char **deny_users;
140 u_int num_allow_groups; 151 u_int num_allow_groups;
141 char *allow_groups[MAX_ALLOW_GROUPS]; 152 char **allow_groups;
142 u_int num_deny_groups; 153 u_int num_deny_groups;
143 char *deny_groups[MAX_DENY_GROUPS]; 154 char **deny_groups;
144 155
145 u_int num_subsystems; 156 u_int num_subsystems;
146 char *subsystem_name[MAX_SUBSYSTEMS]; 157 char *subsystem_name[MAX_SUBSYSTEMS];
@@ -148,7 +159,7 @@ typedef struct {
148 char *subsystem_args[MAX_SUBSYSTEMS]; 159 char *subsystem_args[MAX_SUBSYSTEMS];
149 160
150 u_int num_accept_env; 161 u_int num_accept_env;
151 char *accept_env[MAX_ACCEPT_ENV]; 162 char **accept_env;
152 163
153 int max_startups_begin; 164 int max_startups_begin;
154 int max_startups_rate; 165 int max_startups_rate;
@@ -167,8 +178,8 @@ typedef struct {
167 * disconnect the session 178 * disconnect the session
168 */ 179 */
169 180
170 u_int num_authkeys_files; /* Files containing public keys */ 181 u_int num_authkeys_files; /* Files containing public keys */
171 char *authorized_keys_files[MAX_AUTHKEYS_FILES]; 182 char **authorized_keys_files;
172 183
173 char *adm_forced_command; 184 char *adm_forced_command;
174 185
@@ -194,7 +205,7 @@ typedef struct {
194 char *version_addendum; /* Appended to SSH banner */ 205 char *version_addendum; /* Appended to SSH banner */
195 206
196 u_int num_auth_methods; 207 u_int num_auth_methods;
197 char *auth_methods[MAX_AUTH_METHODS]; 208 char **auth_methods;
198 209
199 int fingerprint_hash; 210 int fingerprint_hash;
200 int expose_userauth_info; 211 int expose_userauth_info;
@@ -207,6 +218,7 @@ struct connection_info {
207 const char *address; /* remote address */ 218 const char *address; /* remote address */
208 const char *laddress; /* local address */ 219 const char *laddress; /* local address */
209 int lport; /* local port */ 220 int lport; /* local port */
221 const char *rdomain; /* routing domain if available */
210}; 222};
211 223
212 224
@@ -230,6 +242,7 @@ struct connection_info {
230 M_CP_STROPT(authorized_principals_command_user); \ 242 M_CP_STROPT(authorized_principals_command_user); \
231 M_CP_STROPT(hostbased_key_types); \ 243 M_CP_STROPT(hostbased_key_types); \
232 M_CP_STROPT(pubkey_key_types); \ 244 M_CP_STROPT(pubkey_key_types); \
245 M_CP_STROPT(routing_domain); \
233 M_CP_STRARRAYOPT(authorized_keys_files, num_authkeys_files); \ 246 M_CP_STRARRAYOPT(authorized_keys_files, num_authkeys_files); \
234 M_CP_STRARRAYOPT(allow_users, num_allow_users); \ 247 M_CP_STRARRAYOPT(allow_users, num_allow_users); \
235 M_CP_STRARRAYOPT(deny_users, num_deny_users); \ 248 M_CP_STRARRAYOPT(deny_users, num_deny_users); \
@@ -237,7 +250,7 @@ struct connection_info {
237 M_CP_STRARRAYOPT(deny_groups, num_deny_groups); \ 250 M_CP_STRARRAYOPT(deny_groups, num_deny_groups); \
238 M_CP_STRARRAYOPT(accept_env, num_accept_env); \ 251 M_CP_STRARRAYOPT(accept_env, num_accept_env); \
239 M_CP_STRARRAYOPT(auth_methods, num_auth_methods); \ 252 M_CP_STRARRAYOPT(auth_methods, num_auth_methods); \
240 M_CP_STRARRAYOPT_ALLOC(permitted_opens, num_permitted_opens); \ 253 M_CP_STRARRAYOPT(permitted_opens, num_permitted_opens); \
241 } while (0) 254 } while (0)
242 255
243struct connection_info *get_connection_info(int, int); 256struct connection_info *get_connection_info(int, int);
@@ -255,5 +268,9 @@ int server_match_spec_complete(struct connection_info *);
255void copy_set_server_options(ServerOptions *, ServerOptions *, int); 268void copy_set_server_options(ServerOptions *, ServerOptions *, int);
256void dump_config(ServerOptions *); 269void dump_config(ServerOptions *);
257char *derelativise_path(const char *); 270char *derelativise_path(const char *);
271void servconf_add_hostkey(const char *, const int,
272 ServerOptions *, const char *path);
273void servconf_add_hostcert(const char *, const int,
274 ServerOptions *, const char *path);
258 275
259#endif /* SERVCONF_H */ 276#endif /* SERVCONF_H */
diff --git a/serverloop.c b/serverloop.c
index 24bbae322..d6fe24cc1 100644
--- a/serverloop.c
+++ b/serverloop.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: serverloop.c,v 1.198 2017/09/12 06:35:32 djm Exp $ */ 1/* $OpenBSD: serverloop.c,v 1.205 2018/03/03 03:15:51 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
@@ -82,6 +82,7 @@ extern ServerOptions options;
82 82
83/* XXX */ 83/* XXX */
84extern Authctxt *the_authctxt; 84extern Authctxt *the_authctxt;
85extern struct sshauthopt *auth_opts;
85extern int use_privsep; 86extern int use_privsep;
86 87
87static int no_more_sessions = 0; /* Disallow further sessions. */ 88static int no_more_sessions = 0; /* Disallow further sessions. */
@@ -99,6 +100,9 @@ static volatile sig_atomic_t received_sigterm = 0;
99/* prototypes */ 100/* prototypes */
100static void server_init_dispatch(void); 101static void server_init_dispatch(void);
101 102
103/* requested tunnel forwarding interface(s), shared with session.c */
104char *tun_fwd_ifnames = NULL;
105
102/* 106/*
103 * we write to this pipe if a SIGCHLD is caught in order to avoid 107 * we write to this pipe if a SIGCHLD is caught in order to avoid
104 * the race between select() and child_terminated 108 * the race between select() and child_terminated
@@ -150,9 +154,6 @@ sigchld_handler(int sig)
150{ 154{
151 int save_errno = errno; 155 int save_errno = errno;
152 child_terminated = 1; 156 child_terminated = 1;
153#ifndef _UNICOS
154 mysignal(SIGCHLD, sigchld_handler);
155#endif
156 notify_parent(); 157 notify_parent();
157 errno = save_errno; 158 errno = save_errno;
158} 159}
@@ -168,10 +169,12 @@ static void
168client_alive_check(struct ssh *ssh) 169client_alive_check(struct ssh *ssh)
169{ 170{
170 int channel_id; 171 int channel_id;
172 char remote_id[512];
171 173
172 /* timeout, check to see how many we have had */ 174 /* timeout, check to see how many we have had */
173 if (packet_inc_alive_timeouts() > options.client_alive_count_max) { 175 if (packet_inc_alive_timeouts() > options.client_alive_count_max) {
174 logit("Timeout, client not responding."); 176 sshpkt_fmt_connection_id(ssh, remote_id, sizeof(remote_id));
177 logit("Timeout, client not responding from %s", remote_id);
175 cleanup_exit(255); 178 cleanup_exit(255);
176 } 179 }
177 180
@@ -371,7 +374,7 @@ server_loop2(struct ssh *ssh, Authctxt *authctxt)
371 374
372 debug("Entering interactive session for SSH2."); 375 debug("Entering interactive session for SSH2.");
373 376
374 mysignal(SIGCHLD, sigchld_handler); 377 signal(SIGCHLD, sigchld_handler);
375 child_terminated = 0; 378 child_terminated = 0;
376 connection_in = packet_get_connection_in(); 379 connection_in = packet_get_connection_in();
377 connection_out = packet_get_connection_out(); 380 connection_out = packet_get_connection_out();
@@ -454,12 +457,13 @@ server_request_direct_tcpip(struct ssh *ssh, int *reason, const char **errmsg)
454 originator_port = packet_get_int(); 457 originator_port = packet_get_int();
455 packet_check_eom(); 458 packet_check_eom();
456 459
457 debug("server_request_direct_tcpip: originator %s port %d, target %s " 460 debug("%s: originator %s port %d, target %s port %d", __func__,
458 "port %d", originator, originator_port, target, target_port); 461 originator, originator_port, target, target_port);
459 462
460 /* XXX fine grained permissions */ 463 /* XXX fine grained permissions */
461 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0 && 464 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) != 0 &&
462 !no_port_forwarding_flag && !options.disable_forwarding) { 465 auth_opts->permit_port_forwarding_flag &&
466 !options.disable_forwarding) {
463 c = channel_connect_to_port(ssh, target, target_port, 467 c = channel_connect_to_port(ssh, target, target_port,
464 "direct-tcpip", "direct-tcpip", reason, errmsg); 468 "direct-tcpip", "direct-tcpip", reason, errmsg);
465 } else { 469 } else {
@@ -485,20 +489,20 @@ server_request_direct_streamlocal(struct ssh *ssh)
485 struct passwd *pw = the_authctxt->pw; 489 struct passwd *pw = the_authctxt->pw;
486 490
487 if (pw == NULL || !the_authctxt->valid) 491 if (pw == NULL || !the_authctxt->valid)
488 fatal("server_input_global_request: no/invalid user"); 492 fatal("%s: no/invalid user", __func__);
489 493
490 target = packet_get_string(NULL); 494 target = packet_get_string(NULL);
491 originator = packet_get_string(NULL); 495 originator = packet_get_string(NULL);
492 originator_port = packet_get_int(); 496 originator_port = packet_get_int();
493 packet_check_eom(); 497 packet_check_eom();
494 498
495 debug("server_request_direct_streamlocal: originator %s port %d, target %s", 499 debug("%s: originator %s port %d, target %s", __func__,
496 originator, originator_port, target); 500 originator, originator_port, target);
497 501
498 /* XXX fine grained permissions */ 502 /* XXX fine grained permissions */
499 if ((options.allow_streamlocal_forwarding & FORWARD_LOCAL) != 0 && 503 if ((options.allow_streamlocal_forwarding & FORWARD_LOCAL) != 0 &&
500 !no_port_forwarding_flag && !options.disable_forwarding && 504 auth_opts->permit_port_forwarding_flag &&
501 (pw->pw_uid == 0 || use_privsep)) { 505 !options.disable_forwarding && (pw->pw_uid == 0 || use_privsep)) {
502 c = channel_connect_to_path(ssh, target, 506 c = channel_connect_to_path(ssh, target,
503 "direct-streamlocal@openssh.com", "direct-streamlocal"); 507 "direct-streamlocal@openssh.com", "direct-streamlocal");
504 } else { 508 } else {
@@ -517,8 +521,8 @@ static Channel *
517server_request_tun(struct ssh *ssh) 521server_request_tun(struct ssh *ssh)
518{ 522{
519 Channel *c = NULL; 523 Channel *c = NULL;
520 int mode, tun; 524 int mode, tun, sock;
521 int sock; 525 char *tmp, *ifname = NULL;
522 526
523 mode = packet_get_int(); 527 mode = packet_get_int();
524 switch (mode) { 528 switch (mode) {
@@ -536,14 +540,16 @@ server_request_tun(struct ssh *ssh)
536 } 540 }
537 541
538 tun = packet_get_int(); 542 tun = packet_get_int();
539 if (forced_tun_device != -1) { 543 if (auth_opts->force_tun_device != -1) {
540 if (tun != SSH_TUNID_ANY && forced_tun_device != tun) 544 if (tun != SSH_TUNID_ANY && auth_opts->force_tun_device != tun)
541 goto done; 545 goto done;
542 tun = forced_tun_device; 546 tun = auth_opts->force_tun_device;
543 } 547 }
544 sock = tun_open(tun, mode); 548 sock = tun_open(tun, mode, &ifname);
545 if (sock < 0) 549 if (sock < 0)
546 goto done; 550 goto done;
551 debug("Tunnel forwarding using interface %s", ifname);
552
547 c = channel_new(ssh, "tun", SSH_CHANNEL_OPEN, sock, sock, -1, 553 c = channel_new(ssh, "tun", SSH_CHANNEL_OPEN, sock, sock, -1,
548 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1); 554 CHAN_TCP_WINDOW_DEFAULT, CHAN_TCP_PACKET_DEFAULT, 0, "tun", 1);
549 c->datagram = 1; 555 c->datagram = 1;
@@ -553,6 +559,19 @@ server_request_tun(struct ssh *ssh)
553 sys_tun_outfilter, NULL, NULL); 559 sys_tun_outfilter, NULL, NULL);
554#endif 560#endif
555 561
562 /*
563 * Update the list of names exposed to the session
564 * XXX remove these if the tunnels are closed (won't matter
565 * much if they are already in the environment though)
566 */
567 tmp = tun_fwd_ifnames;
568 xasprintf(&tun_fwd_ifnames, "%s%s%s",
569 tun_fwd_ifnames == NULL ? "" : tun_fwd_ifnames,
570 tun_fwd_ifnames == NULL ? "" : ",",
571 ifname);
572 free(tmp);
573 free(ifname);
574
556 done: 575 done:
557 if (c == NULL) 576 if (c == NULL)
558 packet_send_debug("Failed to open the tunnel device."); 577 packet_send_debug("Failed to open the tunnel device.");
@@ -635,10 +654,8 @@ server_input_channel_open(int type, u_int32_t seq, struct ssh *ssh)
635 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE); 654 packet_start(SSH2_MSG_CHANNEL_OPEN_FAILURE);
636 packet_put_int(rchan); 655 packet_put_int(rchan);
637 packet_put_int(reason); 656 packet_put_int(reason);
638 if (!(datafellows & SSH_BUG_OPENFAILURE)) { 657 packet_put_cstring(errmsg ? errmsg : "open failed");
639 packet_put_cstring(errmsg ? errmsg : "open failed"); 658 packet_put_cstring("");
640 packet_put_cstring("");
641 }
642 packet_send(); 659 packet_send();
643 } 660 }
644 free(ctype); 661 free(ctype);
@@ -651,7 +668,7 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
651 struct sshbuf *resp = NULL; 668 struct sshbuf *resp = NULL;
652 struct sshbuf *sigbuf = NULL; 669 struct sshbuf *sigbuf = NULL;
653 struct sshkey *key = NULL, *key_pub = NULL, *key_prv = NULL; 670 struct sshkey *key = NULL, *key_pub = NULL, *key_prv = NULL;
654 int r, ndx, success = 0; 671 int r, ndx, kexsigtype, use_kexsigtype, success = 0;
655 const u_char *blob; 672 const u_char *blob;
656 u_char *sig = 0; 673 u_char *sig = 0;
657 size_t blen, slen; 674 size_t blen, slen;
@@ -659,6 +676,8 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
659 if ((resp = sshbuf_new()) == NULL || (sigbuf = sshbuf_new()) == NULL) 676 if ((resp = sshbuf_new()) == NULL || (sigbuf = sshbuf_new()) == NULL)
660 fatal("%s: sshbuf_new", __func__); 677 fatal("%s: sshbuf_new", __func__);
661 678
679 kexsigtype = sshkey_type_plain(
680 sshkey_type_from_name(ssh->kex->hostkey_alg));
662 while (ssh_packet_remaining(ssh) > 0) { 681 while (ssh_packet_remaining(ssh) > 0) {
663 sshkey_free(key); 682 sshkey_free(key);
664 key = NULL; 683 key = NULL;
@@ -689,13 +708,20 @@ server_input_hostkeys_prove(struct ssh *ssh, struct sshbuf **respp)
689 sshbuf_reset(sigbuf); 708 sshbuf_reset(sigbuf);
690 free(sig); 709 free(sig);
691 sig = NULL; 710 sig = NULL;
711 /*
712 * For RSA keys, prefer to use the signature type negotiated
713 * during KEX to the default (SHA1).
714 */
715 use_kexsigtype = kexsigtype == KEY_RSA &&
716 sshkey_type_plain(key->type) == KEY_RSA;
692 if ((r = sshbuf_put_cstring(sigbuf, 717 if ((r = sshbuf_put_cstring(sigbuf,
693 "hostkeys-prove-00@openssh.com")) != 0 || 718 "hostkeys-prove-00@openssh.com")) != 0 ||
694 (r = sshbuf_put_string(sigbuf, 719 (r = sshbuf_put_string(sigbuf,
695 ssh->kex->session_id, ssh->kex->session_id_len)) != 0 || 720 ssh->kex->session_id, ssh->kex->session_id_len)) != 0 ||
696 (r = sshkey_puts(key, sigbuf)) != 0 || 721 (r = sshkey_puts(key, sigbuf)) != 0 ||
697 (r = ssh->kex->sign(key_prv, key_pub, &sig, &slen, 722 (r = ssh->kex->sign(key_prv, key_pub, &sig, &slen,
698 sshbuf_ptr(sigbuf), sshbuf_len(sigbuf), NULL, 0)) != 0 || 723 sshbuf_ptr(sigbuf), sshbuf_len(sigbuf),
724 use_kexsigtype ? ssh->kex->hostkey_alg : NULL, 0)) != 0 ||
699 (r = sshbuf_put_string(resp, sig, slen)) != 0) { 725 (r = sshbuf_put_string(resp, sig, slen)) != 0) {
700 error("%s: couldn't prepare signature: %s", 726 error("%s: couldn't prepare signature: %s",
701 __func__, ssh_err(r)); 727 __func__, ssh_err(r));
@@ -742,7 +768,8 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
742 768
743 /* check permissions */ 769 /* check permissions */
744 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 || 770 if ((options.allow_tcp_forwarding & FORWARD_REMOTE) == 0 ||
745 no_port_forwarding_flag || options.disable_forwarding || 771 !auth_opts->permit_port_forwarding_flag ||
772 options.disable_forwarding ||
746 (!want_reply && fwd.listen_port == 0) || 773 (!want_reply && fwd.listen_port == 0) ||
747 (fwd.listen_port != 0 && 774 (fwd.listen_port != 0 &&
748 !bind_permitted(fwd.listen_port, pw->pw_uid))) { 775 !bind_permitted(fwd.listen_port, pw->pw_uid))) {
@@ -780,7 +807,8 @@ server_input_global_request(int type, u_int32_t seq, struct ssh *ssh)
780 807
781 /* check permissions */ 808 /* check permissions */
782 if ((options.allow_streamlocal_forwarding & FORWARD_REMOTE) == 0 809 if ((options.allow_streamlocal_forwarding & FORWARD_REMOTE) == 0
783 || no_port_forwarding_flag || options.disable_forwarding || 810 || !auth_opts->permit_port_forwarding_flag ||
811 options.disable_forwarding ||
784 (pw->pw_uid != 0 && !use_privsep)) { 812 (pw->pw_uid != 0 && !use_privsep)) {
785 success = 0; 813 success = 0;
786 packet_send_debug("Server has disabled " 814 packet_send_debug("Server has disabled "
diff --git a/session.c b/session.c
index 4bccb62d1..58826db16 100644
--- a/session.c
+++ b/session.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: session.c,v 1.292 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: session.c,v 1.294 2018/03/03 03:15:51 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
@@ -140,6 +140,8 @@ extern u_int utmp_len;
140extern int startup_pipe; 140extern int startup_pipe;
141extern void destroy_sensitive_data(void); 141extern void destroy_sensitive_data(void);
142extern Buffer loginmsg; 142extern Buffer loginmsg;
143extern struct sshauthopt *auth_opts;
144char *tun_fwd_ifnames; /* serverloop.c */
143 145
144/* original command from peer. */ 146/* original command from peer. */
145const char *original_command = NULL; 147const char *original_command = NULL;
@@ -287,14 +289,42 @@ prepare_auth_info_file(struct passwd *pw, struct sshbuf *info)
287 restore_uid(); 289 restore_uid();
288} 290}
289 291
292static void
293set_permitopen_from_authopts(struct ssh *ssh, const struct sshauthopt *opts)
294{
295 char *tmp, *cp, *host;
296 int port;
297 size_t i;
298
299 if ((options.allow_tcp_forwarding & FORWARD_LOCAL) == 0)
300 return;
301 channel_clear_permitted_opens(ssh);
302 for (i = 0; i < auth_opts->npermitopen; i++) {
303 tmp = cp = xstrdup(auth_opts->permitopen[i]);
304 /* This shouldn't fail as it has already been checked */
305 if ((host = hpdelim(&cp)) == NULL)
306 fatal("%s: internal error: hpdelim", __func__);
307 host = cleanhostname(host);
308 if (cp == NULL || (port = permitopen_port(cp)) < 0)
309 fatal("%s: internal error: permitopen port",
310 __func__);
311 channel_add_permitted_opens(ssh, host, port);
312 free(tmp);
313 }
314}
315
290void 316void
291do_authenticated(struct ssh *ssh, Authctxt *authctxt) 317do_authenticated(struct ssh *ssh, Authctxt *authctxt)
292{ 318{
293 setproctitle("%s", authctxt->pw->pw_name); 319 setproctitle("%s", authctxt->pw->pw_name);
294 320
321 auth_log_authopts("active", auth_opts, 0);
322
295 /* setup the channel layer */ 323 /* setup the channel layer */
296 /* XXX - streamlocal? */ 324 /* XXX - streamlocal? */
297 if (no_port_forwarding_flag || options.disable_forwarding || 325 set_permitopen_from_authopts(ssh, auth_opts);
326 if (!auth_opts->permit_port_forwarding_flag ||
327 options.disable_forwarding ||
298 (options.allow_tcp_forwarding & FORWARD_LOCAL) == 0) 328 (options.allow_tcp_forwarding & FORWARD_LOCAL) == 0)
299 channel_disable_adm_local_opens(ssh); 329 channel_disable_adm_local_opens(ssh);
300 else 330 else
@@ -334,7 +364,6 @@ int
334do_exec_no_pty(struct ssh *ssh, Session *s, const char *command) 364do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
335{ 365{
336 pid_t pid; 366 pid_t pid;
337
338#ifdef USE_PIPES 367#ifdef USE_PIPES
339 int pin[2], pout[2], perr[2]; 368 int pin[2], pout[2], perr[2];
340 369
@@ -450,11 +479,6 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
450 close(err[0]); 479 close(err[0]);
451#endif 480#endif
452 481
453
454#ifdef _UNICOS
455 cray_init_job(s->pw); /* set up cray jid and tmpdir */
456#endif
457
458 /* Do processing for the child (exec command etc). */ 482 /* Do processing for the child (exec command etc). */
459 do_child(ssh, s, command); 483 do_child(ssh, s, command);
460 /* NOTREACHED */ 484 /* NOTREACHED */
@@ -462,9 +486,6 @@ do_exec_no_pty(struct ssh *ssh, Session *s, const char *command)
462 break; 486 break;
463 } 487 }
464 488
465#ifdef _UNICOS
466 signal(WJSIGNAL, cray_job_termination_handler);
467#endif /* _UNICOS */
468#ifdef HAVE_CYGWIN 489#ifdef HAVE_CYGWIN
469 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE); 490 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE);
470#endif 491#endif
@@ -576,9 +597,6 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command)
576 close(ttyfd); 597 close(ttyfd);
577 598
578 /* record login, etc. similar to login(1) */ 599 /* record login, etc. similar to login(1) */
579#ifdef _UNICOS
580 cray_init_job(s->pw); /* set up cray jid and tmpdir */
581#endif /* _UNICOS */
582#ifndef HAVE_OSF_SIA 600#ifndef HAVE_OSF_SIA
583 do_login(ssh, s, command); 601 do_login(ssh, s, command);
584#endif 602#endif
@@ -592,9 +610,6 @@ do_exec_pty(struct ssh *ssh, Session *s, const char *command)
592 break; 610 break;
593 } 611 }
594 612
595#ifdef _UNICOS
596 signal(WJSIGNAL, cray_job_termination_handler);
597#endif /* _UNICOS */
598#ifdef HAVE_CYGWIN 613#ifdef HAVE_CYGWIN
599 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE); 614 cygwin_set_impersonation_token(INVALID_HANDLE_VALUE);
600#endif 615#endif
@@ -656,9 +671,9 @@ do_exec(struct ssh *ssh, Session *s, const char *command)
656 original_command = command; 671 original_command = command;
657 command = options.adm_forced_command; 672 command = options.adm_forced_command;
658 forced = "(config)"; 673 forced = "(config)";
659 } else if (forced_command) { 674 } else if (auth_opts->force_command != NULL) {
660 original_command = command; 675 original_command = command;
661 command = forced_command; 676 command = auth_opts->force_command;
662 forced = "(key-option)"; 677 forced = "(key-option)";
663 } 678 }
664 if (forced != NULL) { 679 if (forced != NULL) {
@@ -961,8 +976,9 @@ static char **
961do_setup_env(struct ssh *ssh, Session *s, const char *shell) 976do_setup_env(struct ssh *ssh, Session *s, const char *shell)
962{ 977{
963 char buf[256]; 978 char buf[256];
979 size_t n;
964 u_int i, envsize; 980 u_int i, envsize;
965 char **env, *laddr; 981 char *ocp, *cp, **env, *laddr;
966 struct passwd *pw = s->pw; 982 struct passwd *pw = s->pw;
967#if !defined (HAVE_LOGIN_CAP) && !defined (HAVE_CYGWIN) 983#if !defined (HAVE_LOGIN_CAP) && !defined (HAVE_CYGWIN)
968 char *path = NULL; 984 char *path = NULL;
@@ -1037,20 +1053,17 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1037 if (getenv("TZ")) 1053 if (getenv("TZ"))
1038 child_set_env(&env, &envsize, "TZ", getenv("TZ")); 1054 child_set_env(&env, &envsize, "TZ", getenv("TZ"));
1039 1055
1040 /* Set custom environment options from RSA authentication. */ 1056 /* Set custom environment options from pubkey authentication. */
1041 while (custom_environment) { 1057 if (options.permit_user_env) {
1042 struct envstring *ce = custom_environment; 1058 for (n = 0 ; n < auth_opts->nenv; n++) {
1043 char *str = ce->s; 1059 ocp = xstrdup(auth_opts->env[n]);
1044 1060 cp = strchr(ocp, '=');
1045 for (i = 0; str[i] != '=' && str[i]; i++) 1061 if (*cp == '=') {
1046 ; 1062 *cp = '\0';
1047 if (str[i] == '=') { 1063 child_set_env(&env, &envsize, ocp, cp + 1);
1048 str[i] = 0; 1064 }
1049 child_set_env(&env, &envsize, str, str + i + 1); 1065 free(ocp);
1050 } 1066 }
1051 custom_environment = ce->next;
1052 free(ce->s);
1053 free(ce);
1054 } 1067 }
1055 1068
1056 /* SSH_CLIENT deprecated */ 1069 /* SSH_CLIENT deprecated */
@@ -1066,6 +1079,8 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1066 free(laddr); 1079 free(laddr);
1067 child_set_env(&env, &envsize, "SSH_CONNECTION", buf); 1080 child_set_env(&env, &envsize, "SSH_CONNECTION", buf);
1068 1081
1082 if (tun_fwd_ifnames != NULL)
1083 child_set_env(&env, &envsize, "SSH_TUNNEL", tun_fwd_ifnames);
1069 if (auth_info_file != NULL) 1084 if (auth_info_file != NULL)
1070 child_set_env(&env, &envsize, "SSH_USER_AUTH", auth_info_file); 1085 child_set_env(&env, &envsize, "SSH_USER_AUTH", auth_info_file);
1071 if (s->ttyfd != -1) 1086 if (s->ttyfd != -1)
@@ -1078,11 +1093,6 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1078 child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND", 1093 child_set_env(&env, &envsize, "SSH_ORIGINAL_COMMAND",
1079 original_command); 1094 original_command);
1080 1095
1081#ifdef _UNICOS
1082 if (cray_tmpdir[0] != '\0')
1083 child_set_env(&env, &envsize, "TMPDIR", cray_tmpdir);
1084#endif /* _UNICOS */
1085
1086 /* 1096 /*
1087 * Since we clear KRB5CCNAME at startup, if it's set now then it 1097 * Since we clear KRB5CCNAME at startup, if it's set now then it
1088 * must have been set by a native authentication method (eg AIX or 1098 * must have been set by a native authentication method (eg AIX or
@@ -1155,7 +1165,7 @@ do_setup_env(struct ssh *ssh, Session *s, const char *shell)
1155 * first in this order). 1165 * first in this order).
1156 */ 1166 */
1157static void 1167static void
1158do_rc_files(Session *s, const char *shell) 1168do_rc_files(struct ssh *ssh, Session *s, const char *shell)
1159{ 1169{
1160 FILE *f = NULL; 1170 FILE *f = NULL;
1161 char cmd[1024]; 1171 char cmd[1024];
@@ -1167,7 +1177,7 @@ do_rc_files(Session *s, const char *shell)
1167 1177
1168 /* ignore _PATH_SSH_USER_RC for subsystems and admin forced commands */ 1178 /* ignore _PATH_SSH_USER_RC for subsystems and admin forced commands */
1169 if (!s->is_subsystem && options.adm_forced_command == NULL && 1179 if (!s->is_subsystem && options.adm_forced_command == NULL &&
1170 !no_user_rc && options.permit_user_rc && 1180 auth_opts->permit_user_rc && options.permit_user_rc &&
1171 stat(_PATH_SSH_USER_RC, &st) >= 0) { 1181 stat(_PATH_SSH_USER_RC, &st) >= 0) {
1172 snprintf(cmd, sizeof cmd, "%s -c '%s %s'", 1182 snprintf(cmd, sizeof cmd, "%s -c '%s %s'",
1173 shell, _PATH_BSHELL, _PATH_SSH_USER_RC); 1183 shell, _PATH_BSHELL, _PATH_SSH_USER_RC);
@@ -1248,10 +1258,10 @@ do_nologin(struct passwd *pw)
1248 /* /etc/nologin exists. Print its contents if we can and exit. */ 1258 /* /etc/nologin exists. Print its contents if we can and exit. */
1249 logit("User %.100s not allowed because %s exists", pw->pw_name, nl); 1259 logit("User %.100s not allowed because %s exists", pw->pw_name, nl);
1250 if ((f = fopen(nl, "r")) != NULL) { 1260 if ((f = fopen(nl, "r")) != NULL) {
1251 while (fgets(buf, sizeof(buf), f)) 1261 while (fgets(buf, sizeof(buf), f))
1252 fputs(buf, stderr); 1262 fputs(buf, stderr);
1253 fclose(f); 1263 fclose(f);
1254 } 1264 }
1255 exit(254); 1265 exit(254);
1256} 1266}
1257 1267
@@ -1483,10 +1493,6 @@ do_child(struct ssh *ssh, Session *s, const char *command)
1483 exit(1); 1493 exit(1);
1484 } 1494 }
1485 1495
1486#ifdef _UNICOS
1487 cray_setup(pw->pw_uid, pw->pw_name, command);
1488#endif /* _UNICOS */
1489
1490 /* 1496 /*
1491 * Login(1) does this as well, and it needs uid 0 for the "-h" 1497 * Login(1) does this as well, and it needs uid 0 for the "-h"
1492 * switch, so we let login(1) to this for us. 1498 * switch, so we let login(1) to this for us.
@@ -1591,7 +1597,7 @@ do_child(struct ssh *ssh, Session *s, const char *command)
1591 1597
1592 closefrom(STDERR_FILENO + 1); 1598 closefrom(STDERR_FILENO + 1);
1593 1599
1594 do_rc_files(s, shell); 1600 do_rc_files(ssh, s, shell);
1595 1601
1596 /* restore SIGPIPE for child */ 1602 /* restore SIGPIPE for child */
1597 signal(SIGPIPE, SIG_DFL); 1603 signal(SIGPIPE, SIG_DFL);
@@ -1854,8 +1860,8 @@ session_pty_req(struct ssh *ssh, Session *s)
1854 u_int len; 1860 u_int len;
1855 int n_bytes; 1861 int n_bytes;
1856 1862
1857 if (no_pty_flag || !options.permit_tty) { 1863 if (!auth_opts->permit_pty_flag || !options.permit_tty) {
1858 debug("Allocating a pty not permitted for this authentication."); 1864 debug("Allocating a pty not permitted for this connection.");
1859 return 0; 1865 return 0;
1860 } 1866 }
1861 if (s->ttyfd != -1) { 1867 if (s->ttyfd != -1) {
@@ -2043,9 +2049,11 @@ static int
2043session_auth_agent_req(struct ssh *ssh, Session *s) 2049session_auth_agent_req(struct ssh *ssh, Session *s)
2044{ 2050{
2045 static int called = 0; 2051 static int called = 0;
2052
2046 packet_check_eom(); 2053 packet_check_eom();
2047 if (no_agent_forwarding_flag || !options.allow_agent_forwarding) { 2054 if (!auth_opts->permit_agent_forwarding_flag ||
2048 debug("session_auth_agent_req: no_agent_forwarding_flag"); 2055 !options.allow_agent_forwarding) {
2056 debug("%s: agent forwarding disabled", __func__);
2049 return 0; 2057 return 0;
2050 } 2058 }
2051 if (called) { 2059 if (called) {
@@ -2423,8 +2431,8 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2423 char hostname[NI_MAXHOST]; 2431 char hostname[NI_MAXHOST];
2424 u_int i; 2432 u_int i;
2425 2433
2426 if (no_x11_forwarding_flag) { 2434 if (!auth_opts->permit_x11_forwarding_flag) {
2427 packet_send_debug("X11 forwarding disabled in user configuration file."); 2435 packet_send_debug("X11 forwarding disabled by key options.");
2428 return 0; 2436 return 0;
2429 } 2437 }
2430 if (!options.x11_forwarding) { 2438 if (!options.x11_forwarding) {
@@ -2433,7 +2441,7 @@ session_setup_x11fwd(struct ssh *ssh, Session *s)
2433 } 2441 }
2434 if (options.xauth_location == NULL || 2442 if (options.xauth_location == NULL ||
2435 (stat(options.xauth_location, &st) == -1)) { 2443 (stat(options.xauth_location, &st) == -1)) {
2436 packet_send_debug("No xauth program; cannot forward with spoofing."); 2444 packet_send_debug("No xauth program; cannot forward X11.");
2437 return 0; 2445 return 0;
2438 } 2446 }
2439 if (s->display != NULL) { 2447 if (s->display != NULL) {
diff --git a/sftp-client.c b/sftp-client.c
index 626330262..0b53a2e68 100644
--- a/sftp-client.c
+++ b/sftp-client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp-client.c,v 1.127 2017/08/11 04:41:08 djm Exp $ */ 1/* $OpenBSD: sftp-client.c,v 1.128 2017/11/28 21:10:22 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 *
@@ -130,7 +130,7 @@ send_msg(struct sftp_conn *conn, struct sshbuf *m)
130} 130}
131 131
132static void 132static void
133get_msg(struct sftp_conn *conn, struct sshbuf *m) 133get_msg_extended(struct sftp_conn *conn, struct sshbuf *m, int initial)
134{ 134{
135 u_int msg_len; 135 u_int msg_len;
136 u_char *p; 136 u_char *p;
@@ -148,8 +148,12 @@ get_msg(struct sftp_conn *conn, struct sshbuf *m)
148 148
149 if ((r = sshbuf_get_u32(m, &msg_len)) != 0) 149 if ((r = sshbuf_get_u32(m, &msg_len)) != 0)
150 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 150 fatal("%s: buffer error: %s", __func__, ssh_err(r));
151 if (msg_len > SFTP_MAX_MSG_LENGTH) 151 if (msg_len > SFTP_MAX_MSG_LENGTH) {
152 fatal("Received message too long %u", msg_len); 152 do_log2(initial ? SYSLOG_LEVEL_ERROR : SYSLOG_LEVEL_FATAL,
153 "Received message too long %u", msg_len);
154 fatal("Ensure the remote shell produces no output "
155 "for non-interactive sessions.");
156 }
153 157
154 if ((r = sshbuf_reserve(m, msg_len, &p)) != 0) 158 if ((r = sshbuf_reserve(m, msg_len, &p)) != 0)
155 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 159 fatal("%s: buffer error: %s", __func__, ssh_err(r));
@@ -164,6 +168,12 @@ get_msg(struct sftp_conn *conn, struct sshbuf *m)
164} 168}
165 169
166static void 170static void
171get_msg(struct sftp_conn *conn, struct sshbuf *m)
172{
173 get_msg_extended(conn, m, 0);
174}
175
176static void
167send_string_request(struct sftp_conn *conn, u_int id, u_int code, const char *s, 177send_string_request(struct sftp_conn *conn, u_int id, u_int code, const char *s,
168 u_int len) 178 u_int len)
169{ 179{
@@ -406,7 +416,7 @@ do_init(int fd_in, int fd_out, u_int transfer_buflen, u_int num_requests,
406 416
407 sshbuf_reset(msg); 417 sshbuf_reset(msg);
408 418
409 get_msg(ret, msg); 419 get_msg_extended(ret, msg, 1);
410 420
411 /* Expecting a VERSION reply */ 421 /* Expecting a VERSION reply */
412 if ((r = sshbuf_get_u8(msg, &type)) != 0) 422 if ((r = sshbuf_get_u8(msg, &type)) != 0)
diff --git a/sftp.0 b/sftp.0
index 45b8faf55..7ad3e8d3f 100644
--- a/sftp.0
+++ b/sftp.0
@@ -7,32 +7,29 @@ SYNOPSIS
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] [-l limit]
9 [-o ssh_option] [-P port] [-R num_requests] [-S program] 9 [-o ssh_option] [-P port] [-R num_requests] [-S program]
10 [-s subsystem | sftp_server] host 10 [-s subsystem | sftp_server] destination
11 sftp [user@]host[:file ...]
12 sftp [user@]host[:dir[/]]
13 sftp -b batchfile [user@]host
14 11
15DESCRIPTION 12DESCRIPTION
16 sftp is an interactive file transfer program, similar to ftp(1), which 13 sftp is a file transfer program, similar to ftp(1), which performs all
17 performs all operations over an encrypted ssh(1) transport. It may also 14 operations over an encrypted ssh(1) transport. It may also use many
18 use many features of ssh, such as public key authentication and 15 features of ssh, such as public key authentication and compression.
19 compression. sftp connects and logs into the specified host, then enters
20 an interactive command mode.
21 16
22 The second usage format will retrieve files automatically if a non- 17 The destination may be specified either as [user@]host[:path] or as a URI
23 interactive authentication method is used; otherwise it will do so after 18 in the form sftp://[user@]host[:port][/path].
24 successful interactive authentication.
25 19
26 The third usage format allows sftp to start in a remote directory. 20 If the destination includes a path and it is not a directory, sftp will
21 retrieve files automatically if a non-interactive authentication method
22 is used; otherwise it will do so after successful interactive
23 authentication.
27 24
28 The final usage format allows for automated sessions using the -b option. 25 If no path is specified, or if the path is a directory, sftp will log in
29 In such cases, it is necessary to configure non-interactive 26 to the specified host and enter interactive command mode, changing to the
30 authentication to obviate the need to enter a password at connection time 27 remote directory if one was specified. An optional trailing slash can be
31 (see sshd(8) and ssh-keygen(1) for details). 28 used to force the path to be interpreted as a directory.
32 29
33 Since some usage formats use colon characters to delimit host names from 30 Since the destination formats use colon characters to delimit host names
34 path names, IPv6 addresses must be enclosed in square brackets to avoid 31 from path names or port numbers, IPv6 addresses must be enclosed in
35 ambiguity. 32 square brackets to avoid ambiguity.
36 33
37 The options are as follows: 34 The options are as follows:
38 35
@@ -53,14 +50,15 @@ DESCRIPTION
53 -b batchfile 50 -b batchfile
54 Batch mode reads a series of commands from an input batchfile 51 Batch mode reads a series of commands from an input batchfile
55 instead of stdin. Since it lacks user interaction it should be 52 instead of stdin. Since it lacks user interaction it should be
56 used in conjunction with non-interactive authentication. A 53 used in conjunction with non-interactive authentication to
57 batchfile of M-bM-^@M-^X-M-bM-^@M-^Y may be used to indicate standard input. sftp 54 obviate the need to enter a password at connection time (see
58 will abort if any of the following commands fail: get, put, 55 sshd(8) and ssh-keygen(1) for details). A batchfile of M-bM-^@M-^X-M-bM-^@M-^Y may
59 reget, reput, rename, ln, rm, mkdir, chdir, ls, lchdir, chmod, 56 be used to indicate standard input. sftp will abort if any of
60 chown, chgrp, lpwd, df, symlink, and lmkdir. Termination on 57 the following commands fail: get, put, reget, reput, rename, ln,
61 error can be suppressed on a command by command basis by 58 rm, mkdir, chdir, ls, lchdir, chmod, chown, chgrp, lpwd, df,
62 prefixing the command with a M-bM-^@M-^X-M-bM-^@M-^Y character (for example, -rm 59 symlink, and lmkdir. Termination on error can be suppressed on a
63 /tmp/blah*). 60 command by command basis by prefixing the command with a M-bM-^@M-^X-M-bM-^@M-^Y
61 character (for example, -rm /tmp/blah*).
64 62
65 -C Enables compression (via ssh's -C flag). 63 -C Enables compression (via ssh's -C flag).
66 64
@@ -99,6 +97,7 @@ DESCRIPTION
99 AddressFamily 97 AddressFamily
100 BatchMode 98 BatchMode
101 BindAddress 99 BindAddress
100 BindInterface
102 CanonicalDomains 101 CanonicalDomains
103 CanonicalizeFallbackLocal 102 CanonicalizeFallbackLocal
104 CanonicalizeHostname 103 CanonicalizeHostname
@@ -193,8 +192,9 @@ INTERACTIVE COMMANDS
193 192
194 bye Quit sftp. 193 bye Quit sftp.
195 194
196 cd path 195 cd [path]
197 Change remote directory to path. 196 Change remote directory to path. If path is not specified, then
197 change directory to the one the session started in.
198 198
199 chgrp grp path 199 chgrp grp path
200 Change group of file path to grp. path may contain glob(3) 200 Change group of file path to grp. path may contain glob(3)
@@ -246,8 +246,9 @@ INTERACTIVE COMMANDS
246 246
247 help Display help text. 247 help Display help text.
248 248
249 lcd path 249 lcd [path]
250 Change local directory to path. 250 Change local directory to path. If path is not specified, then
251 change directory to the local user's home directory.
251 252
252 lls [ls-options [path]] 253 lls [ls-options [path]]
253 Display local directory listing of either path or current 254 Display local directory listing of either path or current
@@ -374,4 +375,4 @@ SEE ALSO
374 T. Ylonen and S. Lehtinen, SSH File Transfer Protocol, draft-ietf-secsh- 375 T. Ylonen and S. Lehtinen, SSH File Transfer Protocol, draft-ietf-secsh-
375 filexfer-00.txt, January 2001, work in progress material. 376 filexfer-00.txt, January 2001, work in progress material.
376 377
377OpenBSD 6.2 May 3, 2017 OpenBSD 6.2 378OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/sftp.1 b/sftp.1
index c218376fb..43e0442f7 100644
--- a/sftp.1
+++ b/sftp.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: sftp.1,v 1.110 2017/05/03 21:49:18 naddy Exp $ 1.\" $OpenBSD: sftp.1,v 1.114 2018/02/23 07:38:09 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: May 3 2017 $ 25.Dd $Mdocdate: February 23 2018 $
26.Dt SFTP 1 26.Dt SFTP 1
27.Os 27.Os
28.Sh NAME 28.Sh NAME
@@ -30,7 +30,6 @@
30.Nd secure file transfer program 30.Nd secure file transfer program
31.Sh SYNOPSIS 31.Sh SYNOPSIS
32.Nm sftp 32.Nm sftp
33.Bk -words
34.Op Fl 46aCfpqrv 33.Op Fl 46aCfpqrv
35.Op Fl B Ar buffer_size 34.Op Fl B Ar buffer_size
36.Op Fl b Ar batchfile 35.Op Fl b Ar batchfile
@@ -44,54 +43,55 @@
44.Op Fl R Ar num_requests 43.Op Fl R Ar num_requests
45.Op Fl S Ar program 44.Op Fl S Ar program
46.Op Fl s Ar subsystem | sftp_server 45.Op Fl s Ar subsystem | sftp_server
47.Ar host 46.Ar destination
48.Ek
49.Nm sftp
50.Oo Ar user Ns @ Oc Ns
51.Ar host Ns Op : Ns Ar
52.Nm sftp
53.Oo
54.Ar user Ns @ Oc Ns
55.Ar host Ns Oo : Ns Ar dir Ns
56.Op Ar /
57.Oc
58.Nm sftp
59.Fl b Ar batchfile
60.Oo Ar user Ns @ Oc Ns Ar host
61.Sh DESCRIPTION 47.Sh DESCRIPTION
62.Nm 48.Nm
63is an interactive file transfer program, similar to 49is a file transfer program, similar to
64.Xr ftp 1 , 50.Xr ftp 1 ,
65which performs all operations over an encrypted 51which performs all operations over an encrypted
66.Xr ssh 1 52.Xr ssh 1
67transport. 53transport.
68It may also use many features of ssh, such as public key authentication and 54It may also use many features of ssh, such as public key authentication and
69compression. 55compression.
70.Nm
71connects and logs into the specified
72.Ar host ,
73then enters an interactive command mode.
74.Pp 56.Pp
75The second usage format will retrieve files automatically if a non-interactive 57The
58.Ar destination
59may be specified either as
60.Sm off
61.Oo user @ Oc host Op : path
62.Sm on
63or as a URI in the form
64.Sm off
65.No sftp:// Oo user @ Oc host Oo : port Oc Op / path .
66.Sm on
67.Pp
68If the
69.Ar destination
70includes a
71.Ar path
72and it is not a directory,
73.Nm
74will retrieve files automatically if a non-interactive
76authentication method is used; otherwise it will do so after 75authentication method is used; otherwise it will do so after
77successful interactive authentication. 76successful interactive authentication.
78.Pp 77.Pp
79The third usage format allows 78If no
79.Ar path
80is specified, or if the
81.Ar path
82is a directory,
80.Nm 83.Nm
81to start in a remote directory. 84will log in to the specified
82.Pp 85.Ar host
83The final usage format allows for automated sessions using the 86and enter interactive command mode, changing to the remote directory
84.Fl b 87if one was specified.
85option. 88An optional trailing slash can be used to force the
86In such cases, it is necessary to configure non-interactive authentication 89.Ar path
87to obviate the need to enter a password at connection time (see 90to be interpreted as a directory.
88.Xr sshd 8
89and
90.Xr ssh-keygen 1
91for details).
92.Pp 91.Pp
93Since some usage formats use colon characters to delimit host names from path 92Since the destination formats use colon characters to delimit host
94names, IPv6 addresses must be enclosed in square brackets to avoid ambiguity. 93names from path names or port numbers, IPv6 addresses must be
94enclosed in square brackets to avoid ambiguity.
95.Pp 95.Pp
96The options are as follows: 96The options are as follows:
97.Bl -tag -width Ds 97.Bl -tag -width Ds
@@ -121,7 +121,12 @@ Batch mode reads a series of commands from an input
121instead of 121instead of
122.Em stdin . 122.Em stdin .
123Since it lacks user interaction it should be used in conjunction with 123Since it lacks user interaction it should be used in conjunction with
124non-interactive authentication. 124non-interactive authentication to obviate the need to enter a password
125at connection time (see
126.Xr sshd 8
127and
128.Xr ssh-keygen 1
129for details).
125A 130A
126.Ar batchfile 131.Ar batchfile
127of 132of
@@ -189,6 +194,7 @@ For full details of the options listed below, and their possible values, see
189.It AddressFamily 194.It AddressFamily
190.It BatchMode 195.It BatchMode
191.It BindAddress 196.It BindAddress
197.It BindInterface
192.It CanonicalDomains 198.It CanonicalDomains
193.It CanonicalizeFallbackLocal 199.It CanonicalizeFallbackLocal
194.It CanonicalizeHostname 200.It CanonicalizeHostname
@@ -296,9 +302,12 @@ must be escaped with backslashes
296.It Ic bye 302.It Ic bye
297Quit 303Quit
298.Nm sftp . 304.Nm sftp .
299.It Ic cd Ar path 305.It Ic cd Op Ar path
300Change remote directory to 306Change remote directory to
301.Ar path . 307.Ar path .
308If
309.Ar path
310is not specified, then change directory to the one the session started in.
302.It Ic chgrp Ar grp Ar path 311.It Ic chgrp Ar grp Ar path
303Change group of file 312Change group of file
304.Ar path 313.Ar path
@@ -402,9 +411,12 @@ Note that
402does not follow symbolic links when performing recursive transfers. 411does not follow symbolic links when performing recursive transfers.
403.It Ic help 412.It Ic help
404Display help text. 413Display help text.
405.It Ic lcd Ar path 414.It Ic lcd Op Ar path
406Change local directory to 415Change local directory to
407.Ar path . 416.Ar path .
417If
418.Ar path
419is not specified, then change directory to the local user's home directory.
408.It Ic lls Op Ar ls-options Op Ar path 420.It Ic lls Op Ar ls-options Op Ar path
409Display local directory listing of either 421Display local directory listing of either
410.Ar path 422.Ar path
diff --git a/sftp.c b/sftp.c
index 67110f738..5ce864eeb 100644
--- a/sftp.c
+++ b/sftp.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sftp.c,v 1.180 2017/06/10 06:33:34 djm Exp $ */ 1/* $OpenBSD: sftp.c,v 1.182 2017/11/03 03:46:52 djm 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 *
@@ -217,8 +217,6 @@ static const struct CMD cmds[] = {
217 { NULL, -1, -1 } 217 { NULL, -1, -1 }
218}; 218};
219 219
220int interactive_loop(struct sftp_conn *, char *file1, char *file2);
221
222/* ARGSUSED */ 220/* ARGSUSED */
223static void 221static void
224killchild(int signo) 222killchild(int signo)
@@ -1288,7 +1286,7 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1288 char *cp2, **argv; 1286 char *cp2, **argv;
1289 int base = 0; 1287 int base = 0;
1290 long l; 1288 long l;
1291 int i, cmdnum, optidx, argc; 1289 int path1_mandatory = 0, i, cmdnum, optidx, argc;
1292 1290
1293 /* Skip leading whitespace */ 1291 /* Skip leading whitespace */
1294 cp = cp + strspn(cp, WHITESPACE); 1292 cp = cp + strspn(cp, WHITESPACE);
@@ -1378,13 +1376,17 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1378 case I_RM: 1376 case I_RM:
1379 case I_MKDIR: 1377 case I_MKDIR:
1380 case I_RMDIR: 1378 case I_RMDIR:
1379 case I_LMKDIR:
1380 path1_mandatory = 1;
1381 /* FALLTHROUGH */
1381 case I_CHDIR: 1382 case I_CHDIR:
1382 case I_LCHDIR: 1383 case I_LCHDIR:
1383 case I_LMKDIR:
1384 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1) 1384 if ((optidx = parse_no_flags(cmd, argv, argc)) == -1)
1385 return -1; 1385 return -1;
1386 /* Get pathname (mandatory) */ 1386 /* Get pathname (mandatory) */
1387 if (argc - optidx < 1) { 1387 if (argc - optidx < 1) {
1388 if (!path1_mandatory)
1389 break; /* return a NULL path1 */
1388 error("You must specify a path after a %s command.", 1390 error("You must specify a path after a %s command.",
1389 cmd); 1391 cmd);
1390 return -1; 1392 return -1;
@@ -1469,7 +1471,7 @@ parse_args(const char **cpp, int *ignore_errors, int *aflag,
1469 1471
1470static int 1472static int
1471parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd, 1473parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1472 int err_abort) 1474 const char *startdir, int err_abort)
1473{ 1475{
1474 char *path1, *path2, *tmp; 1476 char *path1, *path2, *tmp;
1475 int ignore_errors = 0, aflag = 0, fflag = 0, hflag = 0, 1477 int ignore_errors = 0, aflag = 0, fflag = 0, hflag = 0,
@@ -1549,6 +1551,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1549 err = do_rmdir(conn, path1); 1551 err = do_rmdir(conn, path1);
1550 break; 1552 break;
1551 case I_CHDIR: 1553 case I_CHDIR:
1554 if (path1 == NULL || *path1 == '\0')
1555 path1 = xstrdup(startdir);
1552 path1 = make_absolute(path1, *pwd); 1556 path1 = make_absolute(path1, *pwd);
1553 if ((tmp = do_realpath(conn, path1)) == NULL) { 1557 if ((tmp = do_realpath(conn, path1)) == NULL) {
1554 err = 1; 1558 err = 1;
@@ -1597,6 +1601,8 @@ parse_dispatch_command(struct sftp_conn *conn, const char *cmd, char **pwd,
1597 err = do_df(conn, path1, hflag, iflag); 1601 err = do_df(conn, path1, hflag, iflag);
1598 break; 1602 break;
1599 case I_LCHDIR: 1603 case I_LCHDIR:
1604 if (path1 == NULL || *path1 == '\0')
1605 path1 = xstrdup("~");
1600 tmp = tilde_expand_filename(path1, getuid()); 1606 tmp = tilde_expand_filename(path1, getuid());
1601 free(path1); 1607 free(path1);
1602 path1 = tmp; 1608 path1 = tmp;
@@ -2083,11 +2089,11 @@ complete(EditLine *el, int ch)
2083} 2089}
2084#endif /* USE_LIBEDIT */ 2090#endif /* USE_LIBEDIT */
2085 2091
2086int 2092static int
2087interactive_loop(struct sftp_conn *conn, char *file1, char *file2) 2093interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2088{ 2094{
2089 char *remote_path; 2095 char *remote_path;
2090 char *dir = NULL; 2096 char *dir = NULL, *startdir = NULL;
2091 char cmd[2048]; 2097 char cmd[2048];
2092 int err, interactive; 2098 int err, interactive;
2093 EditLine *el = NULL; 2099 EditLine *el = NULL;
@@ -2131,6 +2137,7 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2131 remote_path = do_realpath(conn, "."); 2137 remote_path = do_realpath(conn, ".");
2132 if (remote_path == NULL) 2138 if (remote_path == NULL)
2133 fatal("Need cwd"); 2139 fatal("Need cwd");
2140 startdir = xstrdup(remote_path);
2134 2141
2135 if (file1 != NULL) { 2142 if (file1 != NULL) {
2136 dir = xstrdup(file1); 2143 dir = xstrdup(file1);
@@ -2141,8 +2148,9 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2141 mprintf("Changing to: %s\n", dir); 2148 mprintf("Changing to: %s\n", dir);
2142 snprintf(cmd, sizeof cmd, "cd \"%s\"", dir); 2149 snprintf(cmd, sizeof cmd, "cd \"%s\"", dir);
2143 if (parse_dispatch_command(conn, cmd, 2150 if (parse_dispatch_command(conn, cmd,
2144 &remote_path, 1) != 0) { 2151 &remote_path, startdir, 1) != 0) {
2145 free(dir); 2152 free(dir);
2153 free(startdir);
2146 free(remote_path); 2154 free(remote_path);
2147 free(conn); 2155 free(conn);
2148 return (-1); 2156 return (-1);
@@ -2154,8 +2162,9 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2154 file2 == NULL ? "" : " ", 2162 file2 == NULL ? "" : " ",
2155 file2 == NULL ? "" : file2); 2163 file2 == NULL ? "" : file2);
2156 err = parse_dispatch_command(conn, cmd, 2164 err = parse_dispatch_command(conn, cmd,
2157 &remote_path, 1); 2165 &remote_path, startdir, 1);
2158 free(dir); 2166 free(dir);
2167 free(startdir);
2159 free(remote_path); 2168 free(remote_path);
2160 free(conn); 2169 free(conn);
2161 return (err); 2170 return (err);
@@ -2214,11 +2223,12 @@ interactive_loop(struct sftp_conn *conn, char *file1, char *file2)
2214 signal(SIGINT, cmd_interrupt); 2223 signal(SIGINT, cmd_interrupt);
2215 2224
2216 err = parse_dispatch_command(conn, cmd, &remote_path, 2225 err = parse_dispatch_command(conn, cmd, &remote_path,
2217 batchmode); 2226 startdir, batchmode);
2218 if (err != 0) 2227 if (err != 0)
2219 break; 2228 break;
2220 } 2229 }
2221 free(remote_path); 2230 free(remote_path);
2231 free(startdir);
2222 free(conn); 2232 free(conn);
2223 2233
2224#ifdef USE_LIBEDIT 2234#ifdef USE_LIBEDIT
@@ -2301,19 +2311,16 @@ usage(void)
2301 "[-i identity_file] [-l limit]\n" 2311 "[-i identity_file] [-l limit]\n"
2302 " [-o ssh_option] [-P port] [-R num_requests] " 2312 " [-o ssh_option] [-P port] [-R num_requests] "
2303 "[-S program]\n" 2313 "[-S program]\n"
2304 " [-s subsystem | sftp_server] host\n" 2314 " [-s subsystem | sftp_server] destination\n",
2305 " %s [user@]host[:file ...]\n" 2315 __progname);
2306 " %s [user@]host[:dir[/]]\n"
2307 " %s -b batchfile [user@]host\n",
2308 __progname, __progname, __progname, __progname);
2309 exit(1); 2316 exit(1);
2310} 2317}
2311 2318
2312int 2319int
2313main(int argc, char **argv) 2320main(int argc, char **argv)
2314{ 2321{
2315 int in, out, ch, err; 2322 int in, out, ch, err, tmp, port = -1;
2316 char *host = NULL, *userhost, *cp, *file2 = NULL; 2323 char *host = NULL, *user, *cp, *file2 = NULL;
2317 int debug_level = 0, sshver = 2; 2324 int debug_level = 0, sshver = 2;
2318 char *file1 = NULL, *sftp_server = NULL; 2325 char *file1 = NULL, *sftp_server = NULL;
2319 char *ssh_program = _PATH_SSH_PROGRAM, *sftp_direct = NULL; 2326 char *ssh_program = _PATH_SSH_PROGRAM, *sftp_direct = NULL;
@@ -2368,7 +2375,9 @@ main(int argc, char **argv)
2368 addargs(&args, "-%c", ch); 2375 addargs(&args, "-%c", ch);
2369 break; 2376 break;
2370 case 'P': 2377 case 'P':
2371 addargs(&args, "-oPort %s", optarg); 2378 port = a2port(optarg);
2379 if (port <= 0)
2380 fatal("Bad port \"%s\"\n", optarg);
2372 break; 2381 break;
2373 case 'v': 2382 case 'v':
2374 if (debug_level < 3) { 2383 if (debug_level < 3) {
@@ -2451,33 +2460,38 @@ main(int argc, char **argv)
2451 if (sftp_direct == NULL) { 2460 if (sftp_direct == NULL) {
2452 if (optind == argc || argc > (optind + 2)) 2461 if (optind == argc || argc > (optind + 2))
2453 usage(); 2462 usage();
2463 argv += optind;
2454 2464
2455 userhost = xstrdup(argv[optind]); 2465 switch (parse_uri("sftp", *argv, &user, &host, &tmp, &file1)) {
2456 file2 = argv[optind+1]; 2466 case -1:
2457 2467 usage();
2458 if ((host = strrchr(userhost, '@')) == NULL) 2468 break;
2459 host = userhost; 2469 case 0:
2460 else { 2470 if (tmp != -1)
2461 *host++ = '\0'; 2471 port = tmp;
2462 if (!userhost[0]) { 2472 break;
2463 fprintf(stderr, "Missing username\n"); 2473 default:
2464 usage(); 2474 if (parse_user_host_path(*argv, &user, &host,
2475 &file1) == -1) {
2476 /* Treat as a plain hostname. */
2477 host = xstrdup(*argv);
2478 host = cleanhostname(host);
2465 } 2479 }
2466 addargs(&args, "-l"); 2480 break;
2467 addargs(&args, "%s", userhost);
2468 }
2469
2470 if ((cp = colon(host)) != NULL) {
2471 *cp++ = '\0';
2472 file1 = cp;
2473 } 2481 }
2482 file2 = *(argv + 1);
2474 2483
2475 host = cleanhostname(host);
2476 if (!*host) { 2484 if (!*host) {
2477 fprintf(stderr, "Missing hostname\n"); 2485 fprintf(stderr, "Missing hostname\n");
2478 usage(); 2486 usage();
2479 } 2487 }
2480 2488
2489 if (port != -1)
2490 addargs(&args, "-oPort %d", port);
2491 if (user != NULL) {
2492 addargs(&args, "-l");
2493 addargs(&args, "%s", user);
2494 }
2481 addargs(&args, "-oProtocol %d", sshver); 2495 addargs(&args, "-oProtocol %d", sshver);
2482 2496
2483 /* no subsystem if the server-spec contains a '/' */ 2497 /* no subsystem if the server-spec contains a '/' */
diff --git a/ssh-add.c b/ssh-add.c
index 2afd48330..adcc45998 100644
--- a/ssh-add.c
+++ b/ssh-add.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-add.c,v 1.134 2017/08/29 09:42:29 dlg Exp $ */ 1/* $OpenBSD: ssh-add.c,v 1.135 2018/02/23 15:58:37 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
@@ -78,6 +78,7 @@ static char *default_files[] = {
78#endif 78#endif
79#endif /* WITH_OPENSSL */ 79#endif /* WITH_OPENSSL */
80 _PATH_SSH_CLIENT_ID_ED25519, 80 _PATH_SSH_CLIENT_ID_ED25519,
81 _PATH_SSH_CLIENT_ID_XMSS,
81 NULL 82 NULL
82}; 83};
83 84
@@ -89,6 +90,10 @@ static int lifetime = 0;
89/* User has to confirm key use */ 90/* User has to confirm key use */
90static int confirm = 0; 91static int confirm = 0;
91 92
93/* Maximum number of signatures (XMSS) */
94static u_int maxsign = 0;
95static u_int minleft = 0;
96
92/* we keep a cache of one passphrase */ 97/* we keep a cache of one passphrase */
93static char *pass = NULL; 98static char *pass = NULL;
94static void 99static void
@@ -190,7 +195,10 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag)
190 char *comment = NULL; 195 char *comment = NULL;
191 char msg[1024], *certpath = NULL; 196 char msg[1024], *certpath = NULL;
192 int r, fd, ret = -1; 197 int r, fd, ret = -1;
198 size_t i;
199 u_int32_t left;
193 struct sshbuf *keyblob; 200 struct sshbuf *keyblob;
201 struct ssh_identitylist *idlist;
194 202
195 if (strcmp(filename, "-") == 0) { 203 if (strcmp(filename, "-") == 0) {
196 fd = STDIN_FILENO; 204 fd = STDIN_FILENO;
@@ -268,8 +276,40 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag)
268 comment = xstrdup(filename); 276 comment = xstrdup(filename);
269 sshbuf_free(keyblob); 277 sshbuf_free(keyblob);
270 278
279 /* For XMSS */
280 if ((r = sshkey_set_filename(private, filename)) != 0) {
281 fprintf(stderr, "Could not add filename to private key: %s (%s)\n",
282 filename, comment);
283 goto out;
284 }
285 if (maxsign && minleft &&
286 (r = ssh_fetch_identitylist(agent_fd, &idlist)) == 0) {
287 for (i = 0; i < idlist->nkeys; i++) {
288 if (!sshkey_equal_public(idlist->keys[i], private))
289 continue;
290 left = sshkey_signatures_left(idlist->keys[i]);
291 if (left < minleft) {
292 fprintf(stderr,
293 "Only %d signatures left.\n", left);
294 break;
295 }
296 fprintf(stderr, "Skipping update: ");
297 if (left == minleft) {
298 fprintf(stderr,
299 "required signatures left (%d).\n", left);
300 } else {
301 fprintf(stderr,
302 "more signatures left (%d) than"
303 " required (%d).\n", left, minleft);
304 }
305 ssh_free_identitylist(idlist);
306 goto out;
307 }
308 ssh_free_identitylist(idlist);
309 }
310
271 if ((r = ssh_add_identity_constrained(agent_fd, private, comment, 311 if ((r = ssh_add_identity_constrained(agent_fd, private, comment,
272 lifetime, confirm)) == 0) { 312 lifetime, confirm, maxsign)) == 0) {
273 fprintf(stderr, "Identity added: %s (%s)\n", filename, comment); 313 fprintf(stderr, "Identity added: %s (%s)\n", filename, comment);
274 ret = 0; 314 ret = 0;
275 if (lifetime != 0) 315 if (lifetime != 0)
@@ -317,7 +357,7 @@ add_file(int agent_fd, const char *filename, int key_only, int qflag)
317 sshkey_free(cert); 357 sshkey_free(cert);
318 358
319 if ((r = ssh_add_identity_constrained(agent_fd, private, comment, 359 if ((r = ssh_add_identity_constrained(agent_fd, private, comment,
320 lifetime, confirm)) != 0) { 360 lifetime, confirm, maxsign)) != 0) {
321 error("Certificate %s (%s) add failed: %s", certpath, 361 error("Certificate %s (%s) add failed: %s", certpath,
322 private->cert->key_id, ssh_err(r)); 362 private->cert->key_id, ssh_err(r));
323 goto out; 363 goto out;
@@ -368,6 +408,7 @@ list_identities(int agent_fd, int do_fp)
368 char *fp; 408 char *fp;
369 int r; 409 int r;
370 struct ssh_identitylist *idlist; 410 struct ssh_identitylist *idlist;
411 u_int32_t left;
371 size_t i; 412 size_t i;
372 413
373 if ((r = ssh_fetch_identitylist(agent_fd, &idlist)) != 0) { 414 if ((r = ssh_fetch_identitylist(agent_fd, &idlist)) != 0) {
@@ -392,7 +433,12 @@ list_identities(int agent_fd, int do_fp)
392 ssh_err(r)); 433 ssh_err(r));
393 continue; 434 continue;
394 } 435 }
395 fprintf(stdout, " %s\n", idlist->comments[i]); 436 fprintf(stdout, " %s", idlist->comments[i]);
437 left = sshkey_signatures_left(idlist->keys[i]);
438 if (left > 0)
439 fprintf(stdout,
440 " [signatures left %d]", left);
441 fprintf(stdout, "\n");
396 } 442 }
397 } 443 }
398 ssh_free_identitylist(idlist); 444 ssh_free_identitylist(idlist);
@@ -454,6 +500,8 @@ usage(void)
454 fprintf(stderr, " -L List public key parameters of all identities.\n"); 500 fprintf(stderr, " -L List public key parameters of all identities.\n");
455 fprintf(stderr, " -k Load only keys and not certificates.\n"); 501 fprintf(stderr, " -k Load only keys and not certificates.\n");
456 fprintf(stderr, " -c Require confirmation to sign using identities\n"); 502 fprintf(stderr, " -c Require confirmation to sign using identities\n");
503 fprintf(stderr, " -m minleft Maxsign is only changed if less than minleft are left (for XMSS)\n");
504 fprintf(stderr, " -M maxsign Maximum number of signatures allowed (for XMSS)\n");
457 fprintf(stderr, " -t life Set lifetime (in seconds) when adding identities.\n"); 505 fprintf(stderr, " -t life Set lifetime (in seconds) when adding identities.\n");
458 fprintf(stderr, " -d Delete identity.\n"); 506 fprintf(stderr, " -d Delete identity.\n");
459 fprintf(stderr, " -D Delete all identities.\n"); 507 fprintf(stderr, " -D Delete all identities.\n");
@@ -500,7 +548,7 @@ main(int argc, char **argv)
500 exit(2); 548 exit(2);
501 } 549 }
502 550
503 while ((ch = getopt(argc, argv, "klLcdDxXE:e:qs:t:")) != -1) { 551 while ((ch = getopt(argc, argv, "klLcdDxXE:e:M:m:qs:t:")) != -1) {
504 switch (ch) { 552 switch (ch) {
505 case 'E': 553 case 'E':
506 fingerprint_hash = ssh_digest_alg_by_name(optarg); 554 fingerprint_hash = ssh_digest_alg_by_name(optarg);
@@ -525,6 +573,22 @@ main(int argc, char **argv)
525 case 'c': 573 case 'c':
526 confirm = 1; 574 confirm = 1;
527 break; 575 break;
576 case 'm':
577 minleft = (int)strtonum(optarg, 1, UINT_MAX, NULL);
578 if (minleft == 0) {
579 usage();
580 ret = 1;
581 goto done;
582 }
583 break;
584 case 'M':
585 maxsign = (int)strtonum(optarg, 1, UINT_MAX, NULL);
586 if (maxsign == 0) {
587 usage();
588 ret = 1;
589 goto done;
590 }
591 break;
528 case 'd': 592 case 'd':
529 deleting = 1; 593 deleting = 1;
530 break; 594 break;
diff --git a/ssh-agent.c b/ssh-agent.c
index 0c6c36592..2a4578b03 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-agent.c,v 1.224 2017/07/24 04:34:28 djm Exp $ */ 1/* $OpenBSD: ssh-agent.c,v 1.228 2018/02/23 15:58:37 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
@@ -245,7 +245,8 @@ process_request_identities(SocketEntry *e)
245 (r = sshbuf_put_u32(msg, idtab->nentries)) != 0) 245 (r = sshbuf_put_u32(msg, idtab->nentries)) != 0)
246 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 246 fatal("%s: buffer error: %s", __func__, ssh_err(r));
247 TAILQ_FOREACH(id, &idtab->idlist, next) { 247 TAILQ_FOREACH(id, &idtab->idlist, next) {
248 if ((r = sshkey_puts(id->key, msg)) != 0 || 248 if ((r = sshkey_puts_opts(id->key, msg, SSHKEY_SERIALIZE_INFO))
249 != 0 ||
249 (r = sshbuf_put_cstring(msg, id->comment)) != 0) { 250 (r = sshbuf_put_cstring(msg, id->comment)) != 0) {
250 error("%s: put key/comment: %s", __func__, 251 error("%s: put key/comment: %s", __func__,
251 ssh_err(r)); 252 ssh_err(r));
@@ -287,10 +288,11 @@ process_sign_request2(SocketEntry *e)
287 fatal("%s: sshbuf_new failed", __func__); 288 fatal("%s: sshbuf_new failed", __func__);
288 if ((r = sshkey_froms(e->request, &key)) != 0 || 289 if ((r = sshkey_froms(e->request, &key)) != 0 ||
289 (r = sshbuf_get_string_direct(e->request, &data, &dlen)) != 0 || 290 (r = sshbuf_get_string_direct(e->request, &data, &dlen)) != 0 ||
290 (r = sshbuf_get_u32(e->request, &flags)) != 0) 291 (r = sshbuf_get_u32(e->request, &flags)) != 0) {
291 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 292 error("%s: couldn't parse request: %s", __func__, ssh_err(r));
292 if (flags & SSH_AGENT_OLD_SIGNATURE) 293 goto send;
293 compat = SSH_BUG_SIGBLOB; 294 }
295
294 if ((id = lookup_identity(key)) == NULL) { 296 if ((id = lookup_identity(key)) == NULL) {
295 verbose("%s: %s key not found", __func__, sshkey_type(key)); 297 verbose("%s: %s key not found", __func__, sshkey_type(key));
296 goto send; 298 goto send;
@@ -401,7 +403,7 @@ process_add_identity(SocketEntry *e)
401{ 403{
402 Identity *id; 404 Identity *id;
403 int success = 0, confirm = 0; 405 int success = 0, confirm = 0;
404 u_int seconds; 406 u_int seconds, maxsign;
405 char *comment = NULL; 407 char *comment = NULL;
406 time_t death = 0; 408 time_t death = 0;
407 struct sshkey *k = NULL; 409 struct sshkey *k = NULL;
@@ -432,6 +434,18 @@ process_add_identity(SocketEntry *e)
432 case SSH_AGENT_CONSTRAIN_CONFIRM: 434 case SSH_AGENT_CONSTRAIN_CONFIRM:
433 confirm = 1; 435 confirm = 1;
434 break; 436 break;
437 case SSH_AGENT_CONSTRAIN_MAXSIGN:
438 if ((r = sshbuf_get_u32(e->request, &maxsign)) != 0) {
439 error("%s: bad maxsign constraint: %s",
440 __func__, ssh_err(r));
441 goto err;
442 }
443 if ((r = sshkey_enable_maxsign(k, maxsign)) != 0) {
444 error("%s: cannot enable maxsign: %s",
445 __func__, ssh_err(r));
446 goto err;
447 }
448 break;
435 default: 449 default:
436 error("%s: Unknown constraint %d", __func__, ctype); 450 error("%s: Unknown constraint %d", __func__, ctype);
437 err: 451 err:
@@ -447,14 +461,15 @@ process_add_identity(SocketEntry *e)
447 death = monotime() + lifetime; 461 death = monotime() + lifetime;
448 if ((id = lookup_identity(k)) == NULL) { 462 if ((id = lookup_identity(k)) == NULL) {
449 id = xcalloc(1, sizeof(Identity)); 463 id = xcalloc(1, sizeof(Identity));
450 id->key = k;
451 TAILQ_INSERT_TAIL(&idtab->idlist, id, next); 464 TAILQ_INSERT_TAIL(&idtab->idlist, id, next);
452 /* Increment the number of identities. */ 465 /* Increment the number of identities. */
453 idtab->nentries++; 466 idtab->nentries++;
454 } else { 467 } else {
455 sshkey_free(k); 468 /* key state might have been updated */
469 sshkey_free(id->key);
456 free(id->comment); 470 free(id->comment);
457 } 471 }
472 id->key = k;
458 id->comment = comment; 473 id->comment = comment;
459 id->death = death; 474 id->death = death;
460 id->confirm = confirm; 475 id->confirm = confirm;
@@ -472,6 +487,11 @@ process_lock_agent(SocketEntry *e, int lock)
472 static u_int fail_count = 0; 487 static u_int fail_count = 0;
473 size_t pwlen; 488 size_t pwlen;
474 489
490 /*
491 * This is deliberately fatal: the user has requested that we lock,
492 * but we can't parse their request properly. The only safe thing to
493 * do is abort.
494 */
475 if ((r = sshbuf_get_cstring(e->request, &passwd, &pwlen)) != 0) 495 if ((r = sshbuf_get_cstring(e->request, &passwd, &pwlen)) != 0)
476 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 496 fatal("%s: buffer error: %s", __func__, ssh_err(r));
477 if (pwlen == 0) { 497 if (pwlen == 0) {
@@ -529,7 +549,7 @@ no_identities(SocketEntry *e)
529static void 549static void
530process_add_smartcard_key(SocketEntry *e) 550process_add_smartcard_key(SocketEntry *e)
531{ 551{
532 char *provider = NULL, *pin, canonical_provider[PATH_MAX]; 552 char *provider = NULL, *pin = NULL, canonical_provider[PATH_MAX];
533 int r, i, count = 0, success = 0, confirm = 0; 553 int r, i, count = 0, success = 0, confirm = 0;
534 u_int seconds; 554 u_int seconds;
535 time_t death = 0; 555 time_t death = 0;
@@ -538,17 +558,23 @@ process_add_smartcard_key(SocketEntry *e)
538 Identity *id; 558 Identity *id;
539 559
540 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || 560 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 ||
541 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) 561 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) {
542 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 562 error("%s: buffer error: %s", __func__, ssh_err(r));
563 goto send;
564 }
543 565
544 while (sshbuf_len(e->request)) { 566 while (sshbuf_len(e->request)) {
545 if ((r = sshbuf_get_u8(e->request, &type)) != 0) 567 if ((r = sshbuf_get_u8(e->request, &type)) != 0) {
546 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 568 error("%s: buffer error: %s", __func__, ssh_err(r));
569 goto send;
570 }
547 switch (type) { 571 switch (type) {
548 case SSH_AGENT_CONSTRAIN_LIFETIME: 572 case SSH_AGENT_CONSTRAIN_LIFETIME:
549 if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) 573 if ((r = sshbuf_get_u32(e->request, &seconds)) != 0) {
550 fatal("%s: buffer error: %s", 574 error("%s: buffer error: %s",
551 __func__, ssh_err(r)); 575 __func__, ssh_err(r));
576 goto send;
577 }
552 death = monotime() + seconds; 578 death = monotime() + seconds;
553 break; 579 break;
554 case SSH_AGENT_CONSTRAIN_CONFIRM: 580 case SSH_AGENT_CONSTRAIN_CONFIRM:
@@ -606,8 +632,10 @@ process_remove_smartcard_key(SocketEntry *e)
606 Identity *id, *nxt; 632 Identity *id, *nxt;
607 633
608 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 || 634 if ((r = sshbuf_get_cstring(e->request, &provider, NULL)) != 0 ||
609 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) 635 (r = sshbuf_get_cstring(e->request, &pin, NULL)) != 0) {
610 fatal("%s: buffer error: %s", __func__, ssh_err(r)); 636 error("%s: buffer error: %s", __func__, ssh_err(r));
637 goto send;
638 }
611 free(pin); 639 free(pin);
612 640
613 if (realpath(provider, canonical_provider) == NULL) { 641 if (realpath(provider, canonical_provider) == NULL) {
diff --git a/ssh-dss.c b/ssh-dss.c
index 7af59fa6e..9f832ee2b 100644
--- a/ssh-dss.c
+++ b/ssh-dss.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-dss.c,v 1.35 2016/04/21 06:08:02 djm Exp $ */ 1/* $OpenBSD: ssh-dss.c,v 1.37 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000 Markus Friedl. All rights reserved. 3 * Copyright (c) 2000 Markus Friedl. All rights reserved.
4 * 4 *
@@ -86,42 +86,28 @@ ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
86 BN_bn2bin(sig->r, sigblob + SIGBLOB_LEN - INTBLOB_LEN - rlen); 86 BN_bn2bin(sig->r, sigblob + SIGBLOB_LEN - INTBLOB_LEN - rlen);
87 BN_bn2bin(sig->s, sigblob + SIGBLOB_LEN - slen); 87 BN_bn2bin(sig->s, sigblob + SIGBLOB_LEN - slen);
88 88
89 if (compat & SSH_BUG_SIGBLOB) { 89 if ((b = sshbuf_new()) == NULL) {
90 if (sigp != NULL) { 90 ret = SSH_ERR_ALLOC_FAIL;
91 if ((*sigp = malloc(SIGBLOB_LEN)) == NULL) { 91 goto out;
92 ret = SSH_ERR_ALLOC_FAIL; 92 }
93 goto out; 93 if ((ret = sshbuf_put_cstring(b, "ssh-dss")) != 0 ||
94 } 94 (ret = sshbuf_put_string(b, sigblob, SIGBLOB_LEN)) != 0)
95 memcpy(*sigp, sigblob, SIGBLOB_LEN); 95 goto out;
96 } 96
97 if (lenp != NULL) 97 len = sshbuf_len(b);
98 *lenp = SIGBLOB_LEN; 98 if (sigp != NULL) {
99 ret = 0; 99 if ((*sigp = malloc(len)) == NULL) {
100 } else {
101 /* ietf-drafts */
102 if ((b = sshbuf_new()) == NULL) {
103 ret = SSH_ERR_ALLOC_FAIL; 100 ret = SSH_ERR_ALLOC_FAIL;
104 goto out; 101 goto out;
105 } 102 }
106 if ((ret = sshbuf_put_cstring(b, "ssh-dss")) != 0 || 103 memcpy(*sigp, sshbuf_ptr(b), len);
107 (ret = sshbuf_put_string(b, sigblob, SIGBLOB_LEN)) != 0)
108 goto out;
109 len = sshbuf_len(b);
110 if (sigp != NULL) {
111 if ((*sigp = malloc(len)) == NULL) {
112 ret = SSH_ERR_ALLOC_FAIL;
113 goto out;
114 }
115 memcpy(*sigp, sshbuf_ptr(b), len);
116 }
117 if (lenp != NULL)
118 *lenp = len;
119 ret = 0;
120 } 104 }
105 if (lenp != NULL)
106 *lenp = len;
107 ret = 0;
121 out: 108 out:
122 explicit_bzero(digest, sizeof(digest)); 109 explicit_bzero(digest, sizeof(digest));
123 if (sig != NULL) 110 DSA_SIG_free(sig);
124 DSA_SIG_free(sig);
125 sshbuf_free(b); 111 sshbuf_free(b);
126 return ret; 112 return ret;
127} 113}
@@ -146,28 +132,20 @@ ssh_dss_verify(const struct sshkey *key,
146 return SSH_ERR_INTERNAL_ERROR; 132 return SSH_ERR_INTERNAL_ERROR;
147 133
148 /* fetch signature */ 134 /* fetch signature */
149 if (compat & SSH_BUG_SIGBLOB) { 135 if ((b = sshbuf_from(signature, signaturelen)) == NULL)
150 if ((sigblob = malloc(signaturelen)) == NULL) 136 return SSH_ERR_ALLOC_FAIL;
151 return SSH_ERR_ALLOC_FAIL; 137 if (sshbuf_get_cstring(b, &ktype, NULL) != 0 ||
152 memcpy(sigblob, signature, signaturelen); 138 sshbuf_get_string(b, &sigblob, &len) != 0) {
153 len = signaturelen; 139 ret = SSH_ERR_INVALID_FORMAT;
154 } else { 140 goto out;
155 /* ietf-drafts */ 141 }
156 if ((b = sshbuf_from(signature, signaturelen)) == NULL) 142 if (strcmp("ssh-dss", ktype) != 0) {
157 return SSH_ERR_ALLOC_FAIL; 143 ret = SSH_ERR_KEY_TYPE_MISMATCH;
158 if (sshbuf_get_cstring(b, &ktype, NULL) != 0 || 144 goto out;
159 sshbuf_get_string(b, &sigblob, &len) != 0) { 145 }
160 ret = SSH_ERR_INVALID_FORMAT; 146 if (sshbuf_len(b) != 0) {
161 goto out; 147 ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
162 } 148 goto out;
163 if (strcmp("ssh-dss", ktype) != 0) {
164 ret = SSH_ERR_KEY_TYPE_MISMATCH;
165 goto out;
166 }
167 if (sshbuf_len(b) != 0) {
168 ret = SSH_ERR_UNEXPECTED_TRAILING_DATA;
169 goto out;
170 }
171 } 149 }
172 150
173 if (len != SIGBLOB_LEN) { 151 if (len != SIGBLOB_LEN) {
@@ -207,8 +185,7 @@ ssh_dss_verify(const struct sshkey *key,
207 185
208 out: 186 out:
209 explicit_bzero(digest, sizeof(digest)); 187 explicit_bzero(digest, sizeof(digest));
210 if (sig != NULL) 188 DSA_SIG_free(sig);
211 DSA_SIG_free(sig);
212 sshbuf_free(b); 189 sshbuf_free(b);
213 free(ktype); 190 free(ktype);
214 if (sigblob != NULL) { 191 if (sigblob != NULL) {
diff --git a/ssh-ecdsa.c b/ssh-ecdsa.c
index d7bf3c69b..3d3b78d7b 100644
--- a/ssh-ecdsa.c
+++ b/ssh-ecdsa.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-ecdsa.c,v 1.13 2016/04/21 06:08:02 djm Exp $ */ 1/* $OpenBSD: ssh-ecdsa.c,v 1.14 2018/02/07 02:06:51 jsing 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.
@@ -101,8 +101,7 @@ ssh_ecdsa_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
101 explicit_bzero(digest, sizeof(digest)); 101 explicit_bzero(digest, sizeof(digest));
102 sshbuf_free(b); 102 sshbuf_free(b);
103 sshbuf_free(bb); 103 sshbuf_free(bb);
104 if (sig != NULL) 104 ECDSA_SIG_free(sig);
105 ECDSA_SIG_free(sig);
106 return ret; 105 return ret;
107} 106}
108 107
@@ -180,8 +179,7 @@ ssh_ecdsa_verify(const struct sshkey *key,
180 explicit_bzero(digest, sizeof(digest)); 179 explicit_bzero(digest, sizeof(digest));
181 sshbuf_free(sigbuf); 180 sshbuf_free(sigbuf);
182 sshbuf_free(b); 181 sshbuf_free(b);
183 if (sig != NULL) 182 ECDSA_SIG_free(sig);
184 ECDSA_SIG_free(sig);
185 free(ktype); 183 free(ktype);
186 return ret; 184 return ret;
187} 185}
diff --git a/ssh-keygen.0 b/ssh-keygen.0
index fb2c02fe7..417e8382b 100644
--- a/ssh-keygen.0
+++ b/ssh-keygen.0
@@ -226,8 +226,10 @@ DESCRIPTION
226 -O option 226 -O option
227 Specify a certificate option when signing a key. This option may 227 Specify a certificate option when signing a key. This option may
228 be specified multiple times. See also the CERTIFICATES section 228 be specified multiple times. See also the CERTIFICATES section
229 for further details. The options that are valid for user 229 for further details.
230 certificates are: 230
231 At present, no standard options are valid for host keys. The
232 options that are valid for user certificates are:
231 233
232 clear Clear all enabled permissions. This is useful for 234 clear Clear all enabled permissions. This is useful for
233 clearing the default set of permissions so permissions 235 clearing the default set of permissions so permissions
@@ -246,8 +248,6 @@ DESCRIPTION
246 unknown critical options will cause the certificate to be 248 unknown critical options will cause the certificate to be
247 refused. 249 refused.
248 250
249 At present, no standard options are valid for host keys.
250
251 force-command=command 251 force-command=command
252 Forces the execution of command instead of any shell or 252 Forces the execution of command instead of any shell or
253 command specified by the user when the certificate is 253 command specified by the user when the certificate is
@@ -280,7 +280,7 @@ DESCRIPTION
280 permit-user-rc 280 permit-user-rc
281 Allows execution of ~/.ssh/rc by sshd(8). 281 Allows execution of ~/.ssh/rc by sshd(8).
282 282
283 permit-x11-forwarding 283 permit-X11-forwarding
284 Allows X11 forwarding. 284 Allows X11 forwarding.
285 285
286 source-address=address_list 286 source-address=address_list
@@ -349,19 +349,26 @@ DESCRIPTION
349 validity interval may consist of a single time, indicating that 349 validity interval may consist of a single time, indicating that
350 the certificate is valid beginning now and expiring at that time, 350 the certificate is valid beginning now and expiring at that time,
351 or may consist of two times separated by a colon to indicate an 351 or may consist of two times separated by a colon to indicate an
352 explicit time interval. The start time may be specified as a 352 explicit time interval.
353 date in YYYYMMDD format, a time in YYYYMMDDHHMMSS format or a 353
354 relative time (to the current time) consisting of a minus sign 354 The start time may be specified as the string M-bM-^@M-^\alwaysM-bM-^@M-^] to
355 followed by a relative time in the format described in the TIME 355 indicate the certificate has no specified start time, a date in
356 FORMATS section of sshd_config(5). The end time may be specified 356 YYYYMMDD format, a time in YYYYMMDDHHMM[SS] format, a relative
357 as a YYYYMMDD date, a YYYYMMDDHHMMSS time or a relative time 357 time (to the current time) consisting of a minus sign followed by
358 starting with a plus character. 358 an interval in the format described in the TIME FORMATS section
359 of sshd_config(5).
360
361 The end time may be specified as a YYYYMMDD date, a
362 YYYYMMDDHHMM[SS] time, a relative time starting with a plus
363 character or the string M-bM-^@M-^\foreverM-bM-^@M-^] to indicate that the
364 certificate has no expirty date.
359 365
360 For example: M-bM-^@M-^\+52w1dM-bM-^@M-^] (valid from now to 52 weeks and one day 366 For example: M-bM-^@M-^\+52w1dM-bM-^@M-^] (valid from now to 52 weeks and one day
361 from now), M-bM-^@M-^\-4w:+4wM-bM-^@M-^] (valid from four weeks ago to four weeks 367 from now), M-bM-^@M-^\-4w:+4wM-bM-^@M-^] (valid from four weeks ago to four weeks
362 from now), M-bM-^@M-^\20100101123000:20110101123000M-bM-^@M-^] (valid from 12:30 PM, 368 from now), M-bM-^@M-^\20100101123000:20110101123000M-bM-^@M-^] (valid from 12:30 PM,
363 January 1st, 2010 to 12:30 PM, January 1st, 2011), M-bM-^@M-^\-1d:20110101M-bM-^@M-^] 369 January 1st, 2010 to 12:30 PM, January 1st, 2011), M-bM-^@M-^\-1d:20110101M-bM-^@M-^]
364 (valid from yesterday to midnight, January 1st, 2011). 370 (valid from yesterday to midnight, January 1st, 2011).
371 M-bM-^@M-^\-1m:foreverM-bM-^@M-^] (valid from one minute ago and never expiring).
365 372
366 -v Verbose mode. Causes ssh-keygen to print debugging messages 373 -v Verbose mode. Causes ssh-keygen to print debugging messages
367 about its progress. This is helpful for debugging moduli 374 about its progress. This is helpful for debugging moduli
@@ -570,4 +577,4 @@ AUTHORS
570 created OpenSSH. Markus Friedl contributed the support for SSH protocol 577 created OpenSSH. Markus Friedl contributed the support for SSH protocol
571 versions 1.5 and 2.0. 578 versions 1.5 and 2.0.
572 579
573OpenBSD 6.2 July 8, 2017 OpenBSD 6.2 580OpenBSD 6.2 March 12, 2018 OpenBSD 6.2
diff --git a/ssh-keygen.1 b/ssh-keygen.1
index 5f1ec09b0..3525d7d17 100644
--- a/ssh-keygen.1
+++ b/ssh-keygen.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-keygen.1,v 1.144 2017/07/08 18:32:54 jmc Exp $ 1.\" $OpenBSD: ssh-keygen.1,v 1.147 2018/03/12 00:52:01 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: July 8 2017 $ 38.Dd $Mdocdate: March 12 2018 $
39.Dt SSH-KEYGEN 1 39.Dt SSH-KEYGEN 1
40.Os 40.Os
41.Sh NAME 41.Sh NAME
@@ -425,6 +425,8 @@ This option may be specified multiple times.
425See also the 425See also the
426.Sx CERTIFICATES 426.Sx CERTIFICATES
427section for further details. 427section for further details.
428.Pp
429At present, no standard options are valid for host keys.
428The options that are valid for user certificates are: 430The options that are valid for user certificates are:
429.Pp 431.Pp
430.Bl -tag -width Ds -compact 432.Bl -tag -width Ds -compact
@@ -448,8 +450,6 @@ contents (usually indicating a flag).
448Extensions may be ignored by a client or server that does not recognise them, 450Extensions may be ignored by a client or server that does not recognise them,
449whereas unknown critical options will cause the certificate to be refused. 451whereas unknown critical options will cause the certificate to be refused.
450.Pp 452.Pp
451At present, no standard options are valid for host keys.
452.Pp
453.It Ic force-command Ns = Ns Ar command 453.It Ic force-command Ns = Ns Ar command
454Forces the execution of 454Forces the execution of
455.Ar command 455.Ar command
@@ -494,7 +494,7 @@ Allows execution of
494by 494by
495.Xr sshd 8 . 495.Xr sshd 8 .
496.Pp 496.Pp
497.It Ic permit-x11-forwarding 497.It Ic permit-X11-forwarding
498Allows X11 forwarding. 498Allows X11 forwarding.
499.Pp 499.Pp
500.It Ic source-address Ns = Ns Ar address_list 500.It Ic source-address Ns = Ns Ar address_list
@@ -584,13 +584,20 @@ Specify a validity interval when signing a certificate.
584A validity interval may consist of a single time, indicating that the 584A validity interval may consist of a single time, indicating that the
585certificate is valid beginning now and expiring at that time, or may consist 585certificate is valid beginning now and expiring at that time, or may consist
586of two times separated by a colon to indicate an explicit time interval. 586of two times separated by a colon to indicate an explicit time interval.
587The start time may be specified as a date in YYYYMMDD format, a time 587.Pp
588in YYYYMMDDHHMMSS format or a relative time (to the current time) consisting 588The start time may be specified as the string
589of a minus sign followed by a relative time in the format described in the 589.Dq always
590to indicate the certificate has no specified start time,
591a date in YYYYMMDD format, a time in YYYYMMDDHHMM[SS] format,
592a relative time (to the current time) consisting of a minus sign followed by
593an interval in the format described in the
590TIME FORMATS section of 594TIME FORMATS section of
591.Xr sshd_config 5 . 595.Xr sshd_config 5 .
592The end time may be specified as a YYYYMMDD date, a YYYYMMDDHHMMSS time or 596.Pp
593a relative time starting with a plus character. 597The end time may be specified as a YYYYMMDD date, a YYYYMMDDHHMM[SS] time,
598a relative time starting with a plus character or the string
599.Dq forever
600to indicate that the certificate has no expirty date.
594.Pp 601.Pp
595For example: 602For example:
596.Dq +52w1d 603.Dq +52w1d
@@ -601,6 +608,8 @@ For example:
601(valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011), 608(valid from 12:30 PM, January 1st, 2010 to 12:30 PM, January 1st, 2011),
602.Dq -1d:20110101 609.Dq -1d:20110101
603(valid from yesterday to midnight, January 1st, 2011). 610(valid from yesterday to midnight, January 1st, 2011).
611.Dq -1m:forever
612(valid from one minute ago and never expiring).
604.It Fl v 613.It Fl v
605Verbose mode. 614Verbose mode.
606Causes 615Causes
diff --git a/ssh-keygen.c b/ssh-keygen.c
index 835f7d016..9aac64fc3 100644
--- a/ssh-keygen.c
+++ b/ssh-keygen.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keygen.c,v 1.307 2017/07/07 03:53:12 djm Exp $ */ 1/* $OpenBSD: ssh-keygen.c,v 1.314 2018/03/12 00:52:01 djm 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
@@ -275,6 +275,10 @@ ask_filename(struct passwd *pw, const char *prompt)
275 case KEY_ED25519_CERT: 275 case KEY_ED25519_CERT:
276 name = _PATH_SSH_CLIENT_ID_ED25519; 276 name = _PATH_SSH_CLIENT_ID_ED25519;
277 break; 277 break;
278 case KEY_XMSS:
279 case KEY_XMSS_CERT:
280 name = _PATH_SSH_CLIENT_ID_XMSS;
281 break;
278 default: 282 default:
279 fatal("bad key type"); 283 fatal("bad key type");
280 } 284 }
@@ -377,13 +381,6 @@ do_convert_to_pem(struct sshkey *k)
377 if (!PEM_write_RSAPublicKey(stdout, k->rsa)) 381 if (!PEM_write_RSAPublicKey(stdout, k->rsa))
378 fatal("PEM_write_RSAPublicKey failed"); 382 fatal("PEM_write_RSAPublicKey failed");
379 break; 383 break;
380#if notyet /* OpenSSH 0.9.8 lacks this function */
381 case KEY_DSA:
382 if (!PEM_write_DSAPublicKey(stdout, k->dsa))
383 fatal("PEM_write_DSAPublicKey failed");
384 break;
385#endif
386 /* XXX ECDSA? */
387 default: 384 default:
388 fatal("%s: unsupported key type %s", __func__, sshkey_type(k)); 385 fatal("%s: unsupported key type %s", __func__, sshkey_type(k));
389 } 386 }
@@ -539,7 +536,7 @@ do_convert_private_ssh2_from_blob(u_char *blob, u_int blen)
539 536
540 /* try the key */ 537 /* try the key */
541 if (sshkey_sign(key, &sig, &slen, data, sizeof(data), NULL, 0) != 0 || 538 if (sshkey_sign(key, &sig, &slen, data, sizeof(data), NULL, 0) != 0 ||
542 sshkey_verify(key, sig, slen, data, sizeof(data), 0) != 0) { 539 sshkey_verify(key, sig, slen, data, sizeof(data), NULL, 0) != 0) {
543 sshkey_free(key); 540 sshkey_free(key);
544 free(sig); 541 free(sig);
545 return NULL; 542 return NULL;
@@ -671,9 +668,6 @@ do_convert_from_pem(struct sshkey **k, int *private)
671{ 668{
672 FILE *fp; 669 FILE *fp;
673 RSA *rsa; 670 RSA *rsa;
674#ifdef notyet
675 DSA *dsa;
676#endif
677 671
678 if ((fp = fopen(identity_file, "r")) == NULL) 672 if ((fp = fopen(identity_file, "r")) == NULL)
679 fatal("%s: %s: %s", __progname, identity_file, strerror(errno)); 673 fatal("%s: %s: %s", __progname, identity_file, strerror(errno));
@@ -685,18 +679,6 @@ do_convert_from_pem(struct sshkey **k, int *private)
685 fclose(fp); 679 fclose(fp);
686 return; 680 return;
687 } 681 }
688#if notyet /* OpenSSH 0.9.8 lacks this function */
689 rewind(fp);
690 if ((dsa = PEM_read_DSAPublicKey(fp, NULL, NULL, NULL)) != NULL) {
691 if ((*k = sshkey_new(KEY_UNSPEC)) == NULL)
692 fatal("sshkey_new failed");
693 (*k)->type = KEY_DSA;
694 (*k)->dsa = dsa;
695 fclose(fp);
696 return;
697 }
698 /* XXX ECDSA */
699#endif
700 fatal("%s: unrecognised raw private key format", __func__); 682 fatal("%s: unrecognised raw private key format", __func__);
701} 683}
702 684
@@ -991,6 +973,9 @@ do_gen_all_hostkeys(struct passwd *pw)
991#endif /* OPENSSL_HAS_ECC */ 973#endif /* OPENSSL_HAS_ECC */
992#endif /* WITH_OPENSSL */ 974#endif /* WITH_OPENSSL */
993 { "ed25519", "ED25519",_PATH_HOST_ED25519_KEY_FILE }, 975 { "ed25519", "ED25519",_PATH_HOST_ED25519_KEY_FILE },
976#ifdef WITH_XMSS
977 { "xmss", "XMSS",_PATH_HOST_XMSS_KEY_FILE },
978#endif /* WITH_XMSS */
994 { NULL, NULL, NULL } 979 { NULL, NULL, NULL }
995 }; 980 };
996 981
@@ -1477,7 +1462,8 @@ do_change_comment(struct passwd *pw)
1477 } 1462 }
1478 } 1463 }
1479 1464
1480 if (private->type != KEY_ED25519 && !use_new_format) { 1465 if (private->type != KEY_ED25519 && private->type != KEY_XMSS &&
1466 !use_new_format) {
1481 error("Comments are only supported for keys stored in " 1467 error("Comments are only supported for keys stored in "
1482 "the new format (-o)."); 1468 "the new format (-o).");
1483 explicit_bzero(passphrase, strlen(passphrase)); 1469 explicit_bzero(passphrase, strlen(passphrase));
@@ -1719,13 +1705,16 @@ do_ca_sign(struct passwd *pw, int argc, char **argv)
1719 } 1705 }
1720 free(otmp); 1706 free(otmp);
1721 } 1707 }
1708 if (n > SSHKEY_CERT_MAX_PRINCIPALS)
1709 fatal("Too many certificate principals specified");
1722 1710
1723 tmp = tilde_expand_filename(argv[i], pw->pw_uid); 1711 tmp = tilde_expand_filename(argv[i], pw->pw_uid);
1724 if ((r = sshkey_load_public(tmp, &public, &comment)) != 0) 1712 if ((r = sshkey_load_public(tmp, &public, &comment)) != 0)
1725 fatal("%s: unable to open \"%s\": %s", 1713 fatal("%s: unable to open \"%s\": %s",
1726 __func__, tmp, ssh_err(r)); 1714 __func__, tmp, ssh_err(r));
1727 if (public->type != KEY_RSA && public->type != KEY_DSA && 1715 if (public->type != KEY_RSA && public->type != KEY_DSA &&
1728 public->type != KEY_ECDSA && public->type != KEY_ED25519) 1716 public->type != KEY_ECDSA && public->type != KEY_ED25519 &&
1717 public->type != KEY_XMSS)
1729 fatal("%s: key \"%s\" type %s cannot be certified", 1718 fatal("%s: key \"%s\" type %s cannot be certified",
1730 __func__, tmp, sshkey_type(public)); 1719 __func__, tmp, sshkey_type(public));
1731 1720
@@ -1809,40 +1798,6 @@ parse_relative_time(const char *s, time_t now)
1809 return now + (u_int64_t)(secs * mul); 1798 return now + (u_int64_t)(secs * mul);
1810} 1799}
1811 1800
1812static u_int64_t
1813parse_absolute_time(const char *s)
1814{
1815 struct tm tm;
1816 time_t tt;
1817 char buf[32], *fmt;
1818
1819 /*
1820 * POSIX strptime says "The application shall ensure that there
1821 * is white-space or other non-alphanumeric characters between
1822 * any two conversion specifications" so arrange things this way.
1823 */
1824 switch (strlen(s)) {
1825 case 8:
1826 fmt = "%Y-%m-%d";
1827 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2s", s, s + 4, s + 6);
1828 break;
1829 case 14:
1830 fmt = "%Y-%m-%dT%H:%M:%S";
1831 snprintf(buf, sizeof(buf), "%.4s-%.2s-%.2sT%.2s:%.2s:%.2s",
1832 s, s + 4, s + 6, s + 8, s + 10, s + 12);
1833 break;
1834 default:
1835 fatal("Invalid certificate time format %s", s);
1836 }
1837
1838 memset(&tm, 0, sizeof(tm));
1839 if (strptime(buf, fmt, &tm) == NULL)
1840 fatal("Invalid certificate time %s", s);
1841 if ((tt = mktime(&tm)) < 0)
1842 fatal("Certificate time %s cannot be represented", s);
1843 return (u_int64_t)tt;
1844}
1845
1846static void 1801static void
1847parse_cert_times(char *timespec) 1802parse_cert_times(char *timespec)
1848{ 1803{
@@ -1865,8 +1820,8 @@ parse_cert_times(char *timespec)
1865 1820
1866 /* 1821 /*
1867 * from:to, where 1822 * from:to, where
1868 * from := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS 1823 * from := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS | "always"
1869 * to := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS 1824 * to := [+-]timespec | YYYYMMDD | YYYYMMDDHHMMSS | "forever"
1870 */ 1825 */
1871 from = xstrdup(timespec); 1826 from = xstrdup(timespec);
1872 to = strchr(from, ':'); 1827 to = strchr(from, ':');
@@ -1876,13 +1831,17 @@ parse_cert_times(char *timespec)
1876 1831
1877 if (*from == '-' || *from == '+') 1832 if (*from == '-' || *from == '+')
1878 cert_valid_from = parse_relative_time(from, now); 1833 cert_valid_from = parse_relative_time(from, now);
1879 else 1834 else if (strcmp(from, "always") == 0)
1880 cert_valid_from = parse_absolute_time(from); 1835 cert_valid_from = 0;
1836 else if (parse_absolute_time(from, &cert_valid_from) != 0)
1837 fatal("Invalid from time \"%s\"", from);
1881 1838
1882 if (*to == '-' || *to == '+') 1839 if (*to == '-' || *to == '+')
1883 cert_valid_to = parse_relative_time(to, now); 1840 cert_valid_to = parse_relative_time(to, now);
1884 else 1841 else if (strcmp(to, "forever") == 0)
1885 cert_valid_to = parse_absolute_time(to); 1842 cert_valid_to = ~(u_int64_t)0;
1843 else if (parse_absolute_time(to, &cert_valid_to) != 0)
1844 fatal("Invalid to time \"%s\"", to);
1886 1845
1887 if (cert_valid_to <= cert_valid_from) 1846 if (cert_valid_to <= cert_valid_from)
1888 fatal("Empty certificate validity interval"); 1847 fatal("Empty certificate validity interval");
@@ -2421,7 +2380,7 @@ main(int argc, char **argv)
2421 gen_all_hostkeys = 1; 2380 gen_all_hostkeys = 1;
2422 break; 2381 break;
2423 case 'b': 2382 case 'b':
2424 bits = (u_int32_t)strtonum(optarg, 256, 32768, &errstr); 2383 bits = (u_int32_t)strtonum(optarg, 10, 32768, &errstr);
2425 if (errstr) 2384 if (errstr)
2426 fatal("Bits has bad value %s (%s)", 2385 fatal("Bits has bad value %s (%s)",
2427 optarg, errstr); 2386 optarg, errstr);
@@ -2699,6 +2658,8 @@ main(int argc, char **argv)
2699 _PATH_HOST_ECDSA_KEY_FILE, rr_hostname); 2658 _PATH_HOST_ECDSA_KEY_FILE, rr_hostname);
2700 n += do_print_resource_record(pw, 2659 n += do_print_resource_record(pw,
2701 _PATH_HOST_ED25519_KEY_FILE, rr_hostname); 2660 _PATH_HOST_ED25519_KEY_FILE, rr_hostname);
2661 n += do_print_resource_record(pw,
2662 _PATH_HOST_XMSS_KEY_FILE, rr_hostname);
2702 if (n == 0) 2663 if (n == 0)
2703 fatal("no keys found."); 2664 fatal("no keys found.");
2704 exit(0); 2665 exit(0);
@@ -2859,7 +2820,8 @@ passphrase_again:
2859 if ((r = sshkey_write(public, f)) != 0) 2820 if ((r = sshkey_write(public, f)) != 0)
2860 error("write key failed: %s", ssh_err(r)); 2821 error("write key failed: %s", ssh_err(r));
2861 fprintf(f, " %s\n", comment); 2822 fprintf(f, " %s\n", comment);
2862 fclose(f); 2823 if (ferror(f) || fclose(f) != 0)
2824 fatal("write public failed: %s", strerror(errno));
2863 2825
2864 if (!quiet) { 2826 if (!quiet) {
2865 fp = sshkey_fingerprint(public, fingerprint_hash, 2827 fp = sshkey_fingerprint(public, fingerprint_hash,
diff --git a/ssh-keyscan.0 b/ssh-keyscan.0
index 1a9751ef1..c0278ee0a 100644
--- a/ssh-keyscan.0
+++ b/ssh-keyscan.0
@@ -1,62 +1,66 @@
1SSH-KEYSCAN(1) General Commands Manual SSH-KEYSCAN(1) 1SSH-KEYSCAN(1) General Commands Manual SSH-KEYSCAN(1)
2 2
3NAME 3NAME
4 ssh-keyscan M-bM-^@M-^S gather ssh public keys 4 ssh-keyscan M-bM-^@M-^S gather SSH public keys
5 5
6SYNOPSIS 6SYNOPSIS
7 ssh-keyscan [-46cHv] [-f file] [-p port] [-T timeout] [-t type] 7 ssh-keyscan [-46cDHv] [-f file] [-p port] [-T timeout] [-t type]
8 [host | addrlist namelist] ... 8 [host | addrlist namelist]
9 9
10DESCRIPTION 10DESCRIPTION
11 ssh-keyscan is a utility for gathering the public ssh host keys of a 11 ssh-keyscan is a utility for gathering the public SSH host keys of a
12 number of hosts. It was designed to aid in building and verifying 12 number of hosts. It was designed to aid in building and verifying
13 ssh_known_hosts files. ssh-keyscan provides a minimal interface suitable 13 ssh_known_hosts files, the format of which is documented in sshd(8).
14 for use by shell and perl scripts. 14 ssh-keyscan provides a minimal interface suitable for use by shell and
15 perl scripts.
15 16
16 ssh-keyscan uses non-blocking socket I/O to contact as many hosts as 17 ssh-keyscan uses non-blocking socket I/O to contact as many hosts as
17 possible in parallel, so it is very efficient. The keys from a domain of 18 possible in parallel, so it is very efficient. The keys from a domain of
18 1,000 hosts can be collected in tens of seconds, even when some of those 19 1,000 hosts can be collected in tens of seconds, even when some of those
19 hosts are down or do not run ssh. For scanning, one does not need login 20 hosts are down or do not run sshd(8). For scanning, one does not need
20 access to the machines that are being scanned, nor does the scanning 21 login access to the machines that are being scanned, nor does the
21 process involve any encryption. 22 scanning process involve any encryption.
22 23
23 The options are as follows: 24 The options are as follows:
24 25
25 -4 Forces ssh-keyscan to use IPv4 addresses only. 26 -4 Force ssh-keyscan to use IPv4 addresses only.
26 27
27 -6 Forces ssh-keyscan to use IPv6 addresses only. 28 -6 Force ssh-keyscan to use IPv6 addresses only.
28 29
29 -c Request certificates from target hosts instead of plain keys. 30 -c Request certificates from target hosts instead of plain keys.
30 31
32 -D Print keys found as SSHFP DNS records. The default is to print
33 keys in a format usable as a ssh(1) known_hosts file.
34
31 -f file 35 -f file
32 Read hosts or M-bM-^@M-^\addrlist namelistM-bM-^@M-^] pairs from file, one per line. 36 Read hosts or M-bM-^@M-^\addrlist namelistM-bM-^@M-^] pairs from file, one per line.
33 If - is supplied instead of a filename, ssh-keyscan will read 37 If M-bM-^@M-^X-M-bM-^@M-^Y is supplied instead of a filename, ssh-keyscan will read
34 hosts or M-bM-^@M-^\addrlist namelistM-bM-^@M-^] pairs from the standard input. 38 from the standard input. Input is expected in the format:
39
40 1.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
35 41
36 -H Hash all hostnames and addresses in the output. Hashed names may 42 -H Hash all hostnames and addresses in the output. Hashed names may
37 be used normally by ssh and sshd, but they do not reveal 43 be used normally by ssh(1) and sshd(8), but they do not reveal
38 identifying information should the file's contents be disclosed. 44 identifying information should the file's contents be disclosed.
39 45
40 -p port 46 -p port
41 Port to connect to on the remote host. 47 Connect to port on the remote host.
42 48
43 -T timeout 49 -T timeout
44 Set the timeout for connection attempts. If timeout seconds have 50 Set the timeout for connection attempts. If timeout seconds have
45 elapsed since a connection was initiated to a host or since the 51 elapsed since a connection was initiated to a host or since the
46 last time anything was read from that host, then the connection 52 last time anything was read from that host, the connection is
47 is closed and the host in question considered unavailable. 53 closed and the host in question considered unavailable. The
48 Default is 5 seconds. 54 default is 5 seconds.
49 55
50 -t type 56 -t type
51 Specifies the type of the key to fetch from the scanned hosts. 57 Specify the type of the key to fetch from the scanned hosts. The
52 The possible values are M-bM-^@M-^\dsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ed25519M-bM-^@M-^], or M-bM-^@M-^\rsaM-bM-^@M-^]. 58 possible values are M-bM-^@M-^\dsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], M-bM-^@M-^\ed25519M-bM-^@M-^], or M-bM-^@M-^\rsaM-bM-^@M-^].
53 Multiple values may be specified by separating them with commas. 59 Multiple values may be specified by separating them with commas.
54 The default is to fetch M-bM-^@M-^\rsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], and M-bM-^@M-^\ed25519M-bM-^@M-^] keys. 60 The default is to fetch M-bM-^@M-^\rsaM-bM-^@M-^], M-bM-^@M-^\ecdsaM-bM-^@M-^], and M-bM-^@M-^\ed25519M-bM-^@M-^] keys.
55 61
56 -v Verbose mode. Causes ssh-keyscan to print debugging messages 62 -v Verbose mode: print debugging messages about progress.
57 about its progress.
58 63
59SECURITY
60 If an ssh_known_hosts file is constructed using ssh-keyscan without 64 If an ssh_known_hosts file is constructed using ssh-keyscan without
61 verifying the keys, users will be vulnerable to man in the middle 65 verifying the keys, users will be vulnerable to man in the middle
62 attacks. On the other hand, if the security model allows such a risk, 66 attacks. On the other hand, if the security model allows such a risk,
@@ -65,42 +69,28 @@ SECURITY
65 created. 69 created.
66 70
67FILES 71FILES
68 Input format:
69
70 1.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
71
72 Output format for RSA, DSA, ECDSA, and Ed25519 keys:
73
74 host-or-namelist keytype base64-encoded-key
75
76 Where keytype is either M-bM-^@M-^\ecdsa-sha2-nistp256M-bM-^@M-^], M-bM-^@M-^\ecdsa-sha2-nistp384M-bM-^@M-^],
77 M-bM-^@M-^\ecdsa-sha2-nistp521M-bM-^@M-^], M-bM-^@M-^\ssh-ed25519M-bM-^@M-^], M-bM-^@M-^\ssh-dssM-bM-^@M-^] or M-bM-^@M-^\ssh-rsaM-bM-^@M-^].
78
79 /etc/ssh/ssh_known_hosts 72 /etc/ssh/ssh_known_hosts
80 73
81EXAMPLES 74EXAMPLES
82 Print the rsa host key for machine hostname: 75 Print the RSA host key for machine hostname:
83 76
84 $ ssh-keyscan hostname 77 $ ssh-keyscan -t rsa hostname
85 78
86 Find all hosts from the file ssh_hosts which have new or different keys 79 Find all hosts from the file ssh_hosts which have new or different keys
87 from those in the sorted file ssh_known_hosts: 80 from those in the sorted file ssh_known_hosts:
88 81
89 $ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \ 82 $ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \
90 sort -u - ssh_known_hosts | diff ssh_known_hosts - 83 sort -u - ssh_known_hosts | diff ssh_known_hosts -
91 84
92SEE ALSO 85SEE ALSO
93 ssh(1), sshd(8) 86 ssh(1), sshd(8)
94 87
88 Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints, RFC
89 4255, 2006.
90
95AUTHORS 91AUTHORS
96 David Mazieres <dm@lcs.mit.edu> wrote the initial version, and Wayne 92 David Mazieres <dm@lcs.mit.edu> wrote the initial version, and Wayne
97 Davison <wayned@users.sourceforge.net> added support for protocol version 93 Davison <wayned@users.sourceforge.net> added support for protocol version
98 2. 94 2.
99 95
100BUGS 96OpenBSD 6.2 March 5, 2018 OpenBSD 6.2
101 It generates "Connection closed by remote host" messages on the consoles
102 of all the machines it scans if the server is older than version 2.9.
103 This is because it opens a connection to the ssh port, reads the public
104 key, and drops the connection as soon as it gets the key.
105
106OpenBSD 6.2 May 2, 2017 OpenBSD 6.2
diff --git a/ssh-keyscan.1 b/ssh-keyscan.1
index aa4a2ae83..f3d7a4078 100644
--- a/ssh-keyscan.1
+++ b/ssh-keyscan.1
@@ -1,4 +1,4 @@
1.\" $OpenBSD: ssh-keyscan.1,v 1.40 2017/05/02 17:04:09 jmc Exp $ 1.\" $OpenBSD: ssh-keyscan.1,v 1.44 2018/03/05 07:03:18 jmc 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.\"
@@ -6,30 +6,29 @@
6.\" permitted provided that due credit is given to the author and the 6.\" permitted provided that due credit is given to the author and the
7.\" OpenBSD project by leaving this copyright notice intact. 7.\" OpenBSD project by leaving this copyright notice intact.
8.\" 8.\"
9.Dd $Mdocdate: May 2 2017 $ 9.Dd $Mdocdate: March 5 2018 $
10.Dt SSH-KEYSCAN 1 10.Dt SSH-KEYSCAN 1
11.Os 11.Os
12.Sh NAME 12.Sh NAME
13.Nm ssh-keyscan 13.Nm ssh-keyscan
14.Nd gather ssh public keys 14.Nd gather SSH public keys
15.Sh SYNOPSIS 15.Sh SYNOPSIS
16.Nm ssh-keyscan 16.Nm ssh-keyscan
17.Bk -words 17.Op Fl 46cDHv
18.Op Fl 46cHv
19.Op Fl f Ar file 18.Op Fl f Ar file
20.Op Fl p Ar port 19.Op Fl p Ar port
21.Op Fl T Ar timeout 20.Op Fl T Ar timeout
22.Op Fl t Ar type 21.Op Fl t Ar type
23.Op Ar host | addrlist namelist 22.Op Ar host | addrlist namelist
24.Ar ...
25.Ek
26.Sh DESCRIPTION 23.Sh DESCRIPTION
27.Nm 24.Nm
28is a utility for gathering the public ssh host keys of a number of 25is a utility for gathering the public SSH host keys of a number of
29hosts. 26hosts.
30It was designed to aid in building and verifying 27It was designed to aid in building and verifying
31.Pa ssh_known_hosts 28.Pa ssh_known_hosts
32files. 29files,
30the format of which is documented in
31.Xr sshd 8 .
33.Nm 32.Nm
34provides a minimal interface suitable for use by shell and perl 33provides a minimal interface suitable for use by shell and perl
35scripts. 34scripts.
@@ -39,7 +38,8 @@ uses non-blocking socket I/O to contact as many hosts as possible in
39parallel, so it is very efficient. 38parallel, so it is very efficient.
40The keys from a domain of 1,000 39The keys from a domain of 1,000
41hosts can be collected in tens of seconds, even when some of those 40hosts can be collected in tens of seconds, even when some of those
42hosts are down or do not run ssh. 41hosts are down or do not run
42.Xr sshd 8 .
43For scanning, one does not need 43For scanning, one does not need
44login access to the machines that are being scanned, nor does the 44login access to the machines that are being scanned, nor does the
45scanning process involve any encryption. 45scanning process involve any encryption.
@@ -47,15 +47,21 @@ scanning process involve any encryption.
47The options are as follows: 47The options are as follows:
48.Bl -tag -width Ds 48.Bl -tag -width Ds
49.It Fl 4 49.It Fl 4
50Forces 50Force
51.Nm 51.Nm
52to use IPv4 addresses only. 52to use IPv4 addresses only.
53.It Fl 6 53.It Fl 6
54Forces 54Force
55.Nm 55.Nm
56to use IPv6 addresses only. 56to use IPv6 addresses only.
57.It Fl c 57.It Fl c
58Request certificates from target hosts instead of plain keys. 58Request certificates from target hosts instead of plain keys.
59.It Fl D
60Print keys found as SSHFP DNS records.
61The default is to print keys in a format usable as a
62.Xr ssh 1
63.Pa known_hosts
64file.
59.It Fl f Ar file 65.It Fl f Ar file
60Read hosts or 66Read hosts or
61.Dq addrlist namelist 67.Dq addrlist namelist
@@ -63,32 +69,36 @@ pairs from
63.Ar file , 69.Ar file ,
64one per line. 70one per line.
65If 71If
66.Pa - 72.Sq -
67is supplied instead of a filename, 73is supplied instead of a filename,
68.Nm 74.Nm
69will read hosts or 75will read from the standard input.
70.Dq addrlist namelist 76Input is expected in the format:
71pairs from the standard input. 77.Bd -literal
781.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
79.Ed
72.It Fl H 80.It Fl H
73Hash all hostnames and addresses in the output. 81Hash all hostnames and addresses in the output.
74Hashed names may be used normally by 82Hashed names may be used normally by
75.Nm ssh 83.Xr ssh 1
76and 84and
77.Nm sshd , 85.Xr sshd 8 ,
78but they do not reveal identifying information should the file's contents 86but they do not reveal identifying information should the file's contents
79be disclosed. 87be disclosed.
80.It Fl p Ar port 88.It Fl p Ar port
81Port to connect to on the remote host. 89Connect to
90.Ar port
91on the remote host.
82.It Fl T Ar timeout 92.It Fl T Ar timeout
83Set the timeout for connection attempts. 93Set the timeout for connection attempts.
84If 94If
85.Ar timeout 95.Ar timeout
86seconds have elapsed since a connection was initiated to a host or since the 96seconds have elapsed since a connection was initiated to a host or since the
87last time anything was read from that host, then the connection is 97last time anything was read from that host, the connection is
88closed and the host in question considered unavailable. 98closed and the host in question considered unavailable.
89Default is 5 seconds. 99The default is 5 seconds.
90.It Fl t Ar type 100.It Fl t Ar type
91Specifies the type of the key to fetch from the scanned hosts. 101Specify the type of the key to fetch from the scanned hosts.
92The possible values are 102The possible values are
93.Dq dsa , 103.Dq dsa ,
94.Dq ecdsa , 104.Dq ecdsa ,
@@ -103,12 +113,10 @@ and
103.Dq ed25519 113.Dq ed25519
104keys. 114keys.
105.It Fl v 115.It Fl v
106Verbose mode. 116Verbose mode:
107Causes 117print debugging messages about progress.
108.Nm
109to print debugging messages about its progress.
110.El 118.El
111.Sh SECURITY 119.Pp
112If an ssh_known_hosts file is constructed using 120If an ssh_known_hosts file is constructed using
113.Nm 121.Nm
114without verifying the keys, users will be vulnerable to 122without verifying the keys, users will be vulnerable to
@@ -119,54 +127,32 @@ On the other hand, if the security model allows such a risk,
119can help in the detection of tampered keyfiles or man in the middle 127can help in the detection of tampered keyfiles or man in the middle
120attacks which have begun after the ssh_known_hosts file was created. 128attacks which have begun after the ssh_known_hosts file was created.
121.Sh FILES 129.Sh FILES
122Input format:
123.Bd -literal
1241.2.3.4,1.2.4.4 name.my.domain,name,n.my.domain,n,1.2.3.4,1.2.4.4
125.Ed
126.Pp
127Output format for RSA, DSA, ECDSA, and Ed25519 keys:
128.Bd -literal
129host-or-namelist keytype base64-encoded-key
130.Ed
131.Pp
132Where
133.Ar keytype
134is either
135.Dq ecdsa-sha2-nistp256 ,
136.Dq ecdsa-sha2-nistp384 ,
137.Dq ecdsa-sha2-nistp521 ,
138.Dq ssh-ed25519 ,
139.Dq ssh-dss
140or
141.Dq ssh-rsa .
142.Pp
143.Pa /etc/ssh/ssh_known_hosts 130.Pa /etc/ssh/ssh_known_hosts
144.Sh EXAMPLES 131.Sh EXAMPLES
145Print the rsa host key for machine 132Print the RSA host key for machine
146.Ar hostname : 133.Ar hostname :
147.Bd -literal 134.Pp
148$ ssh-keyscan hostname 135.Dl $ ssh-keyscan -t rsa hostname
149.Ed
150.Pp 136.Pp
151Find all hosts from the file 137Find all hosts from the file
152.Pa ssh_hosts 138.Pa ssh_hosts
153which have new or different keys from those in the sorted file 139which have new or different keys from those in the sorted file
154.Pa ssh_known_hosts : 140.Pa ssh_known_hosts :
155.Bd -literal 141.Bd -literal -offset indent
156$ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \e 142$ ssh-keyscan -t rsa,dsa,ecdsa,ed25519 -f ssh_hosts | \e
157 sort -u - ssh_known_hosts | diff ssh_known_hosts - 143 sort -u - ssh_known_hosts | diff ssh_known_hosts -
158.Ed 144.Ed
159.Sh SEE ALSO 145.Sh SEE ALSO
160.Xr ssh 1 , 146.Xr ssh 1 ,
161.Xr sshd 8 147.Xr sshd 8
148.Rs
149.%D 2006
150.%R RFC 4255
151.%T Using DNS to Securely Publish Secure Shell (SSH) Key Fingerprints
152.Re
162.Sh AUTHORS 153.Sh AUTHORS
163.An -nosplit 154.An -nosplit
164.An David Mazieres Aq Mt dm@lcs.mit.edu 155.An David Mazieres Aq Mt dm@lcs.mit.edu
165wrote the initial version, and 156wrote the initial version, and
166.An Wayne Davison Aq Mt wayned@users.sourceforge.net 157.An Wayne Davison Aq Mt wayned@users.sourceforge.net
167added support for protocol version 2. 158added support for protocol version 2.
168.Sh BUGS
169It generates "Connection closed by remote host" messages on the consoles
170of all the machines it scans if the server is older than version 2.9.
171This is because it opens a connection to the ssh port, reads the public
172key, and drops the connection as soon as it gets the key.
diff --git a/ssh-keyscan.c b/ssh-keyscan.c
index 258123ae8..381fb0844 100644
--- a/ssh-keyscan.c
+++ b/ssh-keyscan.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keyscan.c,v 1.115 2017/06/30 04:17:23 dtucker Exp $ */ 1/* $OpenBSD: ssh-keyscan.c,v 1.119 2018/03/02 21:40:15 jmc 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 *
@@ -46,6 +46,7 @@
46#include "hostfile.h" 46#include "hostfile.h"
47#include "ssherr.h" 47#include "ssherr.h"
48#include "ssh_api.h" 48#include "ssh_api.h"
49#include "dns.h"
49 50
50/* Flag indicating whether IPv4 or IPv6. This can be set on the command line. 51/* Flag indicating whether IPv4 or IPv6. This can be set on the command line.
51 Default value is AF_UNSPEC means both IPv4 and IPv6. */ 52 Default value is AF_UNSPEC means both IPv4 and IPv6. */
@@ -57,15 +58,18 @@ int ssh_port = SSH_DEFAULT_PORT;
57#define KT_RSA (1<<1) 58#define KT_RSA (1<<1)
58#define KT_ECDSA (1<<2) 59#define KT_ECDSA (1<<2)
59#define KT_ED25519 (1<<3) 60#define KT_ED25519 (1<<3)
61#define KT_XMSS (1<<4)
60 62
61#define KT_MIN KT_DSA 63#define KT_MIN KT_DSA
62#define KT_MAX KT_ED25519 64#define KT_MAX KT_XMSS
63 65
64int get_cert = 0; 66int get_cert = 0;
65int get_keytypes = KT_RSA|KT_ECDSA|KT_ED25519; 67int get_keytypes = KT_RSA|KT_ECDSA|KT_ED25519;
66 68
67int hash_hosts = 0; /* Hash hostname on output */ 69int hash_hosts = 0; /* Hash hostname on output */
68 70
71int print_sshfp = 0; /* Print SSHFP records instead of known_hosts */
72
69#define MAXMAXFD 256 73#define MAXMAXFD 256
70 74
71/* The number of seconds after which to give up on a TCP connection */ 75/* The number of seconds after which to give up on a TCP connection */
@@ -235,6 +239,10 @@ keygrab_ssh2(con *c)
235 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ? 239 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ?
236 "ssh-ed25519-cert-v01@openssh.com" : "ssh-ed25519"; 240 "ssh-ed25519-cert-v01@openssh.com" : "ssh-ed25519";
237 break; 241 break;
242 case KT_XMSS:
243 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ?
244 "ssh-xmss-cert-v01@openssh.com" : "ssh-xmss@openssh.com";
245 break;
238 case KT_ECDSA: 246 case KT_ECDSA:
239 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ? 247 myproposal[PROPOSAL_SERVER_HOST_KEY_ALGS] = get_cert ?
240 "ecdsa-sha2-nistp256-cert-v01@openssh.com," 248 "ecdsa-sha2-nistp256-cert-v01@openssh.com,"
@@ -280,6 +288,11 @@ keyprint_one(const char *host, struct sshkey *key)
280 char *hostport; 288 char *hostport;
281 const char *known_host, *hashed; 289 const char *known_host, *hashed;
282 290
291 if (print_sshfp) {
292 export_dns_rr(host, key, stdout, 0);
293 return;
294 }
295
283 hostport = put_host_port(host, ssh_port); 296 hostport = put_host_port(host, ssh_port);
284 lowercase(hostport); 297 lowercase(hostport);
285 if (hash_hosts && (hashed = host_hash(host, NULL, 0)) == NULL) 298 if (hash_hosts && (hashed = host_hash(host, NULL, 0)) == NULL)
@@ -377,7 +390,7 @@ conalloc(char *iname, char *oname, int keytype)
377 fdcon[s].c_len = 4; 390 fdcon[s].c_len = 4;
378 fdcon[s].c_off = 0; 391 fdcon[s].c_off = 0;
379 fdcon[s].c_keytype = keytype; 392 fdcon[s].c_keytype = keytype;
380 gettimeofday(&fdcon[s].c_tv, NULL); 393 monotime_tv(&fdcon[s].c_tv);
381 fdcon[s].c_tv.tv_sec += timeout; 394 fdcon[s].c_tv.tv_sec += timeout;
382 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link); 395 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link);
383 FD_SET(s, read_wait); 396 FD_SET(s, read_wait);
@@ -411,7 +424,7 @@ static void
411contouch(int s) 424contouch(int s)
412{ 425{
413 TAILQ_REMOVE(&tq, &fdcon[s], c_link); 426 TAILQ_REMOVE(&tq, &fdcon[s], c_link);
414 gettimeofday(&fdcon[s].c_tv, NULL); 427 monotime_tv(&fdcon[s].c_tv);
415 fdcon[s].c_tv.tv_sec += timeout; 428 fdcon[s].c_tv.tv_sec += timeout;
416 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link); 429 TAILQ_INSERT_TAIL(&tq, &fdcon[s], c_link);
417} 430}
@@ -497,7 +510,8 @@ congreet(int s)
497 confree(s); 510 confree(s);
498 return; 511 return;
499 } 512 }
500 fprintf(stderr, "# %s:%d %s\n", c->c_name, ssh_port, chop(buf)); 513 fprintf(stderr, "%c %s:%d %s\n", print_sshfp ? ';' : '#',
514 c->c_name, ssh_port, chop(buf));
501 keygrab_ssh2(c); 515 keygrab_ssh2(c);
502 confree(s); 516 confree(s);
503} 517}
@@ -545,7 +559,7 @@ conloop(void)
545 con *c; 559 con *c;
546 int i; 560 int i;
547 561
548 gettimeofday(&now, NULL); 562 monotime_tv(&now);
549 c = TAILQ_FIRST(&tq); 563 c = TAILQ_FIRST(&tq);
550 564
551 if (c && (c->c_tv.tv_sec > now.tv_sec || 565 if (c && (c->c_tv.tv_sec > now.tv_sec ||
@@ -621,8 +635,8 @@ static void
621usage(void) 635usage(void)
622{ 636{
623 fprintf(stderr, 637 fprintf(stderr,
624 "usage: %s [-46cHv] [-f file] [-p port] [-T timeout] [-t type]\n" 638 "usage: %s [-46cDHv] [-f file] [-p port] [-T timeout] [-t type]\n"
625 "\t\t [host | addrlist namelist] ...\n", 639 "\t\t [host | addrlist namelist]\n",
626 __progname); 640 __progname);
627 exit(1); 641 exit(1);
628} 642}
@@ -650,7 +664,7 @@ main(int argc, char **argv)
650 if (argc <= 1) 664 if (argc <= 1)
651 usage(); 665 usage();
652 666
653 while ((opt = getopt(argc, argv, "cHv46p:T:t:f:")) != -1) { 667 while ((opt = getopt(argc, argv, "cDHv46p:T:t:f:")) != -1) {
654 switch (opt) { 668 switch (opt) {
655 case 'H': 669 case 'H':
656 hash_hosts = 1; 670 hash_hosts = 1;
@@ -658,6 +672,9 @@ main(int argc, char **argv)
658 case 'c': 672 case 'c':
659 get_cert = 1; 673 get_cert = 1;
660 break; 674 break;
675 case 'D':
676 print_sshfp = 1;
677 break;
661 case 'p': 678 case 'p':
662 ssh_port = a2port(optarg); 679 ssh_port = a2port(optarg);
663 if (ssh_port <= 0) { 680 if (ssh_port <= 0) {
@@ -706,6 +723,9 @@ main(int argc, char **argv)
706 case KEY_ED25519: 723 case KEY_ED25519:
707 get_keytypes |= KT_ED25519; 724 get_keytypes |= KT_ED25519;
708 break; 725 break;
726 case KEY_XMSS:
727 get_keytypes |= KT_XMSS;
728 break;
709 case KEY_UNSPEC: 729 case KEY_UNSPEC:
710 default: 730 default:
711 fatal("Unknown key type \"%s\"", tname); 731 fatal("Unknown key type \"%s\"", tname);
diff --git a/ssh-keysign.c b/ssh-keysign.c
index ac5034de8..78bb66b08 100644
--- a/ssh-keysign.c
+++ b/ssh-keysign.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-keysign.c,v 1.52 2016/02/15 09:47:49 dtucker Exp $ */ 1/* $OpenBSD: ssh-keysign.c,v 1.54 2018/02/23 15:58:38 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2002 Markus Friedl. All rights reserved. 3 * Copyright (c) 2002 Markus Friedl. All rights reserved.
4 * 4 *
@@ -158,7 +158,7 @@ valid_request(struct passwd *pw, char *host, struct sshkey **ret,
158 158
159 debug3("%s: fail %d", __func__, fail); 159 debug3("%s: fail %d", __func__, fail);
160 160
161 if (fail && key != NULL) 161 if (fail)
162 sshkey_free(key); 162 sshkey_free(key);
163 else if (ret != NULL) 163 else if (ret != NULL)
164 *ret = key; 164 *ret = key;
@@ -171,7 +171,7 @@ main(int argc, char **argv)
171{ 171{
172 struct sshbuf *b; 172 struct sshbuf *b;
173 Options options; 173 Options options;
174#define NUM_KEYTYPES 4 174#define NUM_KEYTYPES 5
175 struct sshkey *keys[NUM_KEYTYPES], *key = NULL; 175 struct sshkey *keys[NUM_KEYTYPES], *key = NULL;
176 struct passwd *pw; 176 struct passwd *pw;
177 int r, key_fd[NUM_KEYTYPES], i, found, version = 2, fd; 177 int r, key_fd[NUM_KEYTYPES], i, found, version = 2, fd;
@@ -198,6 +198,7 @@ main(int argc, char **argv)
198 key_fd[i++] = open(_PATH_HOST_DSA_KEY_FILE, O_RDONLY); 198 key_fd[i++] = open(_PATH_HOST_DSA_KEY_FILE, O_RDONLY);
199 key_fd[i++] = open(_PATH_HOST_ECDSA_KEY_FILE, O_RDONLY); 199 key_fd[i++] = open(_PATH_HOST_ECDSA_KEY_FILE, O_RDONLY);
200 key_fd[i++] = open(_PATH_HOST_ED25519_KEY_FILE, O_RDONLY); 200 key_fd[i++] = open(_PATH_HOST_ED25519_KEY_FILE, O_RDONLY);
201 key_fd[i++] = open(_PATH_HOST_XMSS_KEY_FILE, O_RDONLY);
201 key_fd[i++] = open(_PATH_HOST_RSA_KEY_FILE, O_RDONLY); 202 key_fd[i++] = open(_PATH_HOST_RSA_KEY_FILE, O_RDONLY);
202 203
203 original_real_uid = getuid(); /* XXX readconf.c needs this */ 204 original_real_uid = getuid(); /* XXX readconf.c needs this */
diff --git a/ssh-pkcs11-client.c b/ssh-pkcs11-client.c
index a79c87210..fc7582827 100644
--- a/ssh-pkcs11-client.c
+++ b/ssh-pkcs11-client.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11-client.c,v 1.7 2017/05/30 08:52:19 markus Exp $ */ 1/* $OpenBSD: ssh-pkcs11-client.c,v 1.8 2018/02/05 05:37:46 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -99,7 +99,8 @@ pkcs11_init(int interactive)
99void 99void
100pkcs11_terminate(void) 100pkcs11_terminate(void)
101{ 101{
102 close(fd); 102 if (fd >= 0)
103 close(fd);
103} 104}
104 105
105static int 106static int
diff --git a/ssh-pkcs11-helper.c b/ssh-pkcs11-helper.c
index fd3039c14..6301033c5 100644
--- a/ssh-pkcs11-helper.c
+++ b/ssh-pkcs11-helper.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11-helper.c,v 1.13 2017/05/30 08:52:19 markus Exp $ */ 1/* $OpenBSD: ssh-pkcs11-helper.c,v 1.14 2018/01/08 15:18:46 markus Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -30,12 +30,13 @@
30#include <errno.h> 30#include <errno.h>
31 31
32#include "xmalloc.h" 32#include "xmalloc.h"
33#include "buffer.h" 33#include "sshbuf.h"
34#include "log.h" 34#include "log.h"
35#include "misc.h" 35#include "misc.h"
36#include "key.h" 36#include "sshkey.h"
37#include "authfd.h" 37#include "authfd.h"
38#include "ssh-pkcs11.h" 38#include "ssh-pkcs11.h"
39#include "ssherr.h"
39 40
40#ifdef ENABLE_PKCS11 41#ifdef ENABLE_PKCS11
41 42
@@ -51,13 +52,9 @@ TAILQ_HEAD(, pkcs11_keyinfo) pkcs11_keylist;
51 52
52#define MAX_MSG_LENGTH 10240 /*XXX*/ 53#define MAX_MSG_LENGTH 10240 /*XXX*/
53 54
54/* helper */
55#define get_int() buffer_get_int(&iqueue);
56#define get_string(lenp) buffer_get_string(&iqueue, lenp);
57
58/* input and output queue */ 55/* input and output queue */
59Buffer iqueue; 56struct sshbuf *iqueue;
60Buffer oqueue; 57struct sshbuf *oqueue;
61 58
62static void 59static void
63add_key(struct sshkey *k, char *name) 60add_key(struct sshkey *k, char *name)
@@ -80,7 +77,7 @@ del_keys_by_name(char *name)
80 if (!strcmp(ki->providername, name)) { 77 if (!strcmp(ki->providername, name)) {
81 TAILQ_REMOVE(&pkcs11_keylist, ki, next); 78 TAILQ_REMOVE(&pkcs11_keylist, ki, next);
82 free(ki->providername); 79 free(ki->providername);
83 key_free(ki->key); 80 sshkey_free(ki->key);
84 free(ki); 81 free(ki);
85 } 82 }
86 } 83 }
@@ -94,20 +91,19 @@ lookup_key(struct sshkey *k)
94 91
95 TAILQ_FOREACH(ki, &pkcs11_keylist, next) { 92 TAILQ_FOREACH(ki, &pkcs11_keylist, next) {
96 debug("check %p %s", ki, ki->providername); 93 debug("check %p %s", ki, ki->providername);
97 if (key_equal(k, ki->key)) 94 if (sshkey_equal(k, ki->key))
98 return (ki->key); 95 return (ki->key);
99 } 96 }
100 return (NULL); 97 return (NULL);
101} 98}
102 99
103static void 100static void
104send_msg(Buffer *m) 101send_msg(struct sshbuf *m)
105{ 102{
106 int mlen = buffer_len(m); 103 int r;
107 104
108 buffer_put_int(&oqueue, mlen); 105 if ((r = sshbuf_put_stringb(oqueue, m)) != 0)
109 buffer_append(&oqueue, buffer_ptr(m), mlen); 106 fatal("%s: buffer error: %s", __func__, ssh_err(r));
110 buffer_consume(m, mlen);
111} 107}
112 108
113static void 109static void
@@ -115,69 +111,85 @@ process_add(void)
115{ 111{
116 char *name, *pin; 112 char *name, *pin;
117 struct sshkey **keys; 113 struct sshkey **keys;
118 int i, nkeys; 114 int r, i, nkeys;
119 u_char *blob; 115 u_char *blob;
120 u_int blen; 116 size_t blen;
121 Buffer msg; 117 struct sshbuf *msg;
122 118
123 buffer_init(&msg); 119 if ((msg = sshbuf_new()) == NULL)
124 name = get_string(NULL); 120 fatal("%s: sshbuf_new failed", __func__);
125 pin = get_string(NULL); 121 if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||
122 (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0)
123 fatal("%s: buffer error: %s", __func__, ssh_err(r));
126 if ((nkeys = pkcs11_add_provider(name, pin, &keys)) > 0) { 124 if ((nkeys = pkcs11_add_provider(name, pin, &keys)) > 0) {
127 buffer_put_char(&msg, SSH2_AGENT_IDENTITIES_ANSWER); 125 if ((r = sshbuf_put_u8(msg,
128 buffer_put_int(&msg, nkeys); 126 SSH2_AGENT_IDENTITIES_ANSWER)) != 0 ||
127 (r = sshbuf_put_u32(msg, nkeys)) != 0)
128 fatal("%s: buffer error: %s", __func__, ssh_err(r));
129 for (i = 0; i < nkeys; i++) { 129 for (i = 0; i < nkeys; i++) {
130 if (key_to_blob(keys[i], &blob, &blen) == 0) 130 if ((r = sshkey_to_blob(keys[i], &blob, &blen)) != 0) {
131 debug("%s: sshkey_to_blob: %s",
132 __func__, ssh_err(r));
131 continue; 133 continue;
132 buffer_put_string(&msg, blob, blen); 134 }
133 buffer_put_cstring(&msg, name); 135 if ((r = sshbuf_put_string(msg, blob, blen)) != 0 ||
136 (r = sshbuf_put_cstring(msg, name)) != 0)
137 fatal("%s: buffer error: %s",
138 __func__, ssh_err(r));
134 free(blob); 139 free(blob);
135 add_key(keys[i], name); 140 add_key(keys[i], name);
136 } 141 }
137 free(keys); 142 free(keys);
138 } else { 143 } else {
139 buffer_put_char(&msg, SSH_AGENT_FAILURE); 144 if ((r = sshbuf_put_u8(msg, SSH_AGENT_FAILURE)) != 0)
145 fatal("%s: buffer error: %s", __func__, ssh_err(r));
140 } 146 }
141 free(pin); 147 free(pin);
142 free(name); 148 free(name);
143 send_msg(&msg); 149 send_msg(msg);
144 buffer_free(&msg); 150 sshbuf_free(msg);
145} 151}
146 152
147static void 153static void
148process_del(void) 154process_del(void)
149{ 155{
150 char *name, *pin; 156 char *name, *pin;
151 Buffer msg; 157 struct sshbuf *msg;
152 158 int r;
153 buffer_init(&msg); 159
154 name = get_string(NULL); 160 if ((msg = sshbuf_new()) == NULL)
155 pin = get_string(NULL); 161 fatal("%s: sshbuf_new failed", __func__);
162 if ((r = sshbuf_get_cstring(iqueue, &name, NULL)) != 0 ||
163 (r = sshbuf_get_cstring(iqueue, &pin, NULL)) != 0)
164 fatal("%s: buffer error: %s", __func__, ssh_err(r));
156 del_keys_by_name(name); 165 del_keys_by_name(name);
157 if (pkcs11_del_provider(name) == 0) 166 if ((r = sshbuf_put_u8(msg, pkcs11_del_provider(name) == 0 ?
158 buffer_put_char(&msg, SSH_AGENT_SUCCESS); 167 SSH_AGENT_SUCCESS : SSH_AGENT_FAILURE)) != 0)
159 else 168 fatal("%s: buffer error: %s", __func__, ssh_err(r));
160 buffer_put_char(&msg, SSH_AGENT_FAILURE);
161 free(pin); 169 free(pin);
162 free(name); 170 free(name);
163 send_msg(&msg); 171 send_msg(msg);
164 buffer_free(&msg); 172 sshbuf_free(msg);
165} 173}
166 174
167static void 175static void
168process_sign(void) 176process_sign(void)
169{ 177{
170 u_char *blob, *data, *signature = NULL; 178 u_char *blob, *data, *signature = NULL;
171 u_int blen, dlen, slen = 0; 179 size_t blen, dlen, slen = 0;
172 int ok = -1; 180 int r, ok = -1;
173 struct sshkey *key, *found; 181 struct sshkey *key, *found;
174 Buffer msg; 182 struct sshbuf *msg;
175 183
176 blob = get_string(&blen); 184 /* XXX support SHA2 signature flags */
177 data = get_string(&dlen); 185 if ((r = sshbuf_get_string(iqueue, &blob, &blen)) != 0 ||
178 (void)get_int(); /* XXX ignore flags */ 186 (r = sshbuf_get_string(iqueue, &data, &dlen)) != 0 ||
187 (r = sshbuf_get_u32(iqueue, NULL)) != 0)
188 fatal("%s: buffer error: %s", __func__, ssh_err(r));
179 189
180 if ((key = key_from_blob(blob, blen)) != NULL) { 190 if ((r = sshkey_from_blob(blob, blen, &key)) != 0)
191 error("%s: sshkey_from_blob: %s", __func__, ssh_err(r));
192 else {
181 if ((found = lookup_key(key)) != NULL) { 193 if ((found = lookup_key(key)) != NULL) {
182#ifdef WITH_OPENSSL 194#ifdef WITH_OPENSSL
183 int ret; 195 int ret;
@@ -191,20 +203,23 @@ process_sign(void)
191 } 203 }
192#endif /* WITH_OPENSSL */ 204#endif /* WITH_OPENSSL */
193 } 205 }
194 key_free(key); 206 sshkey_free(key);
195 } 207 }
196 buffer_init(&msg); 208 if ((msg = sshbuf_new()) == NULL)
209 fatal("%s: sshbuf_new failed", __func__);
197 if (ok == 0) { 210 if (ok == 0) {
198 buffer_put_char(&msg, SSH2_AGENT_SIGN_RESPONSE); 211 if ((r = sshbuf_put_u8(msg, SSH2_AGENT_SIGN_RESPONSE)) != 0 ||
199 buffer_put_string(&msg, signature, slen); 212 (r = sshbuf_put_string(msg, signature, slen)) != 0)
213 fatal("%s: buffer error: %s", __func__, ssh_err(r));
200 } else { 214 } else {
201 buffer_put_char(&msg, SSH_AGENT_FAILURE); 215 if ((r = sshbuf_put_u8(msg, SSH2_AGENT_FAILURE)) != 0)
216 fatal("%s: buffer error: %s", __func__, ssh_err(r));
202 } 217 }
203 free(data); 218 free(data);
204 free(blob); 219 free(blob);
205 free(signature); 220 free(signature);
206 send_msg(&msg); 221 send_msg(msg);
207 buffer_free(&msg); 222 sshbuf_free(msg);
208} 223}
209 224
210static void 225static void
@@ -213,13 +228,14 @@ process(void)
213 u_int msg_len; 228 u_int msg_len;
214 u_int buf_len; 229 u_int buf_len;
215 u_int consumed; 230 u_int consumed;
216 u_int type; 231 u_char type;
217 u_char *cp; 232 const u_char *cp;
233 int r;
218 234
219 buf_len = buffer_len(&iqueue); 235 buf_len = sshbuf_len(iqueue);
220 if (buf_len < 5) 236 if (buf_len < 5)
221 return; /* Incomplete message. */ 237 return; /* Incomplete message. */
222 cp = buffer_ptr(&iqueue); 238 cp = sshbuf_ptr(iqueue);
223 msg_len = get_u32(cp); 239 msg_len = get_u32(cp);
224 if (msg_len > MAX_MSG_LENGTH) { 240 if (msg_len > MAX_MSG_LENGTH) {
225 error("bad message len %d", msg_len); 241 error("bad message len %d", msg_len);
@@ -227,9 +243,10 @@ process(void)
227 } 243 }
228 if (buf_len < msg_len + 4) 244 if (buf_len < msg_len + 4)
229 return; 245 return;
230 buffer_consume(&iqueue, 4); 246 if ((r = sshbuf_consume(iqueue, 4)) != 0 ||
247 (r = sshbuf_get_u8(iqueue, &type)) != 0)
248 fatal("%s: buffer error: %s", __func__, ssh_err(r));
231 buf_len -= 4; 249 buf_len -= 4;
232 type = buffer_get_char(&iqueue);
233 switch (type) { 250 switch (type) {
234 case SSH_AGENTC_ADD_SMARTCARD_KEY: 251 case SSH_AGENTC_ADD_SMARTCARD_KEY:
235 debug("process_add"); 252 debug("process_add");
@@ -248,17 +265,19 @@ process(void)
248 break; 265 break;
249 } 266 }
250 /* discard the remaining bytes from the current packet */ 267 /* discard the remaining bytes from the current packet */
251 if (buf_len < buffer_len(&iqueue)) { 268 if (buf_len < sshbuf_len(iqueue)) {
252 error("iqueue grew unexpectedly"); 269 error("iqueue grew unexpectedly");
253 cleanup_exit(255); 270 cleanup_exit(255);
254 } 271 }
255 consumed = buf_len - buffer_len(&iqueue); 272 consumed = buf_len - sshbuf_len(iqueue);
256 if (msg_len < consumed) { 273 if (msg_len < consumed) {
257 error("msg_len %d < consumed %d", msg_len, consumed); 274 error("msg_len %d < consumed %d", msg_len, consumed);
258 cleanup_exit(255); 275 cleanup_exit(255);
259 } 276 }
260 if (msg_len > consumed) 277 if (msg_len > consumed) {
261 buffer_consume(&iqueue, msg_len - consumed); 278 if ((r = sshbuf_consume(iqueue, msg_len - consumed)) != 0)
279 fatal("%s: buffer error: %s", __func__, ssh_err(r));
280 }
262} 281}
263 282
264void 283void
@@ -272,7 +291,7 @@ int
272main(int argc, char **argv) 291main(int argc, char **argv)
273{ 292{
274 fd_set *rset, *wset; 293 fd_set *rset, *wset;
275 int in, out, max, log_stderr = 0; 294 int r, in, out, max, log_stderr = 0;
276 ssize_t len, olen, set_size; 295 ssize_t len, olen, set_size;
277 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH; 296 SyslogFacility log_facility = SYSLOG_FACILITY_AUTH;
278 LogLevel log_level = SYSLOG_LEVEL_ERROR; 297 LogLevel log_level = SYSLOG_LEVEL_ERROR;
@@ -298,8 +317,10 @@ main(int argc, char **argv)
298 if (out > max) 317 if (out > max)
299 max = out; 318 max = out;
300 319
301 buffer_init(&iqueue); 320 if ((iqueue = sshbuf_new()) == NULL)
302 buffer_init(&oqueue); 321 fatal("%s: sshbuf_new failed", __func__);
322 if ((oqueue = sshbuf_new()) == NULL)
323 fatal("%s: sshbuf_new failed", __func__);
303 324
304 set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask); 325 set_size = howmany(max + 1, NFDBITS) * sizeof(fd_mask);
305 rset = xmalloc(set_size); 326 rset = xmalloc(set_size);
@@ -314,11 +335,13 @@ main(int argc, char **argv)
314 * the worst-case length packet it can generate, 335 * the worst-case length packet it can generate,
315 * otherwise apply backpressure by stopping reads. 336 * otherwise apply backpressure by stopping reads.
316 */ 337 */
317 if (buffer_check_alloc(&iqueue, sizeof(buf)) && 338 if ((r = sshbuf_check_reserve(iqueue, sizeof(buf))) == 0 &&
318 buffer_check_alloc(&oqueue, MAX_MSG_LENGTH)) 339 (r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0)
319 FD_SET(in, rset); 340 FD_SET(in, rset);
341 else if (r != SSH_ERR_NO_BUFFER_SPACE)
342 fatal("%s: buffer error: %s", __func__, ssh_err(r));
320 343
321 olen = buffer_len(&oqueue); 344 olen = sshbuf_len(oqueue);
322 if (olen > 0) 345 if (olen > 0)
323 FD_SET(out, wset); 346 FD_SET(out, wset);
324 347
@@ -338,18 +361,20 @@ main(int argc, char **argv)
338 } else if (len < 0) { 361 } else if (len < 0) {
339 error("read: %s", strerror(errno)); 362 error("read: %s", strerror(errno));
340 cleanup_exit(1); 363 cleanup_exit(1);
341 } else { 364 } else if ((r = sshbuf_put(iqueue, buf, len)) != 0) {
342 buffer_append(&iqueue, buf, len); 365 fatal("%s: buffer error: %s",
366 __func__, ssh_err(r));
343 } 367 }
344 } 368 }
345 /* send oqueue to stdout */ 369 /* send oqueue to stdout */
346 if (FD_ISSET(out, wset)) { 370 if (FD_ISSET(out, wset)) {
347 len = write(out, buffer_ptr(&oqueue), olen); 371 len = write(out, sshbuf_ptr(oqueue), olen);
348 if (len < 0) { 372 if (len < 0) {
349 error("write: %s", strerror(errno)); 373 error("write: %s", strerror(errno));
350 cleanup_exit(1); 374 cleanup_exit(1);
351 } else { 375 } else if ((r = sshbuf_consume(oqueue, len)) != 0) {
352 buffer_consume(&oqueue, len); 376 fatal("%s: buffer error: %s",
377 __func__, ssh_err(r));
353 } 378 }
354 } 379 }
355 380
@@ -358,8 +383,10 @@ main(int argc, char **argv)
358 * into the output buffer, otherwise stop processing input 383 * into the output buffer, otherwise stop processing input
359 * and let the output queue drain. 384 * and let the output queue drain.
360 */ 385 */
361 if (buffer_check_alloc(&oqueue, MAX_MSG_LENGTH)) 386 if ((r = sshbuf_check_reserve(oqueue, MAX_MSG_LENGTH)) == 0)
362 process(); 387 process();
388 else if (r != SSH_ERR_NO_BUFFER_SPACE)
389 fatal("%s: buffer error: %s", __func__, ssh_err(r));
363 } 390 }
364} 391}
365#else /* ENABLE_PKCS11 */ 392#else /* ENABLE_PKCS11 */
diff --git a/ssh-pkcs11.c b/ssh-pkcs11.c
index b37491c5d..65a7b5897 100644
--- a/ssh-pkcs11.c
+++ b/ssh-pkcs11.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-pkcs11.c,v 1.25 2017/05/31 09:15:42 deraadt Exp $ */ 1/* $OpenBSD: ssh-pkcs11.c,v 1.26 2018/02/07 02:06:51 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2010 Markus Friedl. All rights reserved. 3 * Copyright (c) 2010 Markus Friedl. All rights reserved.
4 * 4 *
@@ -532,8 +532,7 @@ pkcs11_fetch_keys_filter(struct pkcs11_provider *p, CK_ULONG slotidx,
532 == NULL) { 532 == NULL) {
533 error("RSAPublicKey_dup"); 533 error("RSAPublicKey_dup");
534 } 534 }
535 if (x509) 535 X509_free(x509);
536 X509_free(x509);
537 } 536 }
538 if (rsa && rsa->n && rsa->e && 537 if (rsa && rsa->n && rsa->e &&
539 pkcs11_rsa_wrap(p, slotidx, &attribs[0], rsa) == 0) { 538 pkcs11_rsa_wrap(p, slotidx, &attribs[0], rsa) == 0) {
diff --git a/ssh-rsa.c b/ssh-rsa.c
index f570ae6d4..49e71c87f 100644
--- a/ssh-rsa.c
+++ b/ssh-rsa.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-rsa.c,v 1.62 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: ssh-rsa.c,v 1.66 2018/02/14 16:27:24 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org> 3 * Copyright (c) 2000, 2003 Markus Friedl <markus@openbsd.org>
4 * 4 *
@@ -33,6 +33,7 @@
33#define SSHKEY_INTERNAL 33#define SSHKEY_INTERNAL
34#include "sshkey.h" 34#include "sshkey.h"
35#include "digest.h" 35#include "digest.h"
36#include "log.h"
36 37
37static int openssh_RSA_verify(int, u_char *, size_t, u_char *, size_t, RSA *); 38static int openssh_RSA_verify(int, u_char *, size_t, u_char *, size_t, RSA *);
38 39
@@ -78,13 +79,12 @@ rsa_hash_alg_nid(int type)
78 } 79 }
79} 80}
80 81
81/* calculate p-1 and q-1 */
82int 82int
83ssh_rsa_generate_additional_parameters(struct sshkey *key) 83ssh_rsa_generate_additional_parameters(struct sshkey *key)
84{ 84{
85 RSA *rsa;
86 BIGNUM *aux = NULL; 85 BIGNUM *aux = NULL;
87 BN_CTX *ctx = NULL; 86 BN_CTX *ctx = NULL;
87 BIGNUM d;
88 int r; 88 int r;
89 89
90 if (key == NULL || key->rsa == NULL || 90 if (key == NULL || key->rsa == NULL ||
@@ -97,12 +97,15 @@ ssh_rsa_generate_additional_parameters(struct sshkey *key)
97 r = SSH_ERR_ALLOC_FAIL; 97 r = SSH_ERR_ALLOC_FAIL;
98 goto out; 98 goto out;
99 } 99 }
100 rsa = key->rsa; 100 BN_set_flags(aux, BN_FLG_CONSTTIME);
101 101
102 if ((BN_sub(aux, rsa->q, BN_value_one()) == 0) || 102 BN_init(&d);
103 (BN_mod(rsa->dmq1, rsa->d, aux, ctx) == 0) || 103 BN_with_flags(&d, key->rsa->d, BN_FLG_CONSTTIME);
104 (BN_sub(aux, rsa->p, BN_value_one()) == 0) || 104
105 (BN_mod(rsa->dmp1, rsa->d, aux, ctx) == 0)) { 105 if ((BN_sub(aux, key->rsa->q, BN_value_one()) == 0) ||
106 (BN_mod(key->rsa->dmq1, &d, aux, ctx) == 0) ||
107 (BN_sub(aux, key->rsa->p, BN_value_one()) == 0) ||
108 (BN_mod(key->rsa->dmp1, &d, aux, ctx) == 0)) {
106 r = SSH_ERR_LIBCRYPTO_ERROR; 109 r = SSH_ERR_LIBCRYPTO_ERROR;
107 goto out; 110 goto out;
108 } 111 }
@@ -119,7 +122,7 @@ ssh_rsa_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
119 const u_char *data, size_t datalen, const char *alg_ident) 122 const u_char *data, size_t datalen, const char *alg_ident)
120{ 123{
121 u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL; 124 u_char digest[SSH_DIGEST_MAX_LENGTH], *sig = NULL;
122 size_t slen; 125 size_t slen = 0;
123 u_int dlen, len; 126 u_int dlen, len;
124 int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR; 127 int nid, hash_alg, ret = SSH_ERR_INTERNAL_ERROR;
125 struct sshbuf *b = NULL; 128 struct sshbuf *b = NULL;
@@ -188,21 +191,19 @@ ssh_rsa_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
188 ret = 0; 191 ret = 0;
189 out: 192 out:
190 explicit_bzero(digest, sizeof(digest)); 193 explicit_bzero(digest, sizeof(digest));
191 if (sig != NULL) { 194 freezero(sig, slen);
192 explicit_bzero(sig, slen);
193 free(sig);
194 }
195 sshbuf_free(b); 195 sshbuf_free(b);
196 return ret; 196 return ret;
197} 197}
198 198
199int 199int
200ssh_rsa_verify(const struct sshkey *key, 200ssh_rsa_verify(const struct sshkey *key,
201 const u_char *sig, size_t siglen, const u_char *data, size_t datalen) 201 const u_char *sig, size_t siglen, const u_char *data, size_t datalen,
202 const char *alg)
202{ 203{
203 char *ktype = NULL; 204 char *sigtype = NULL;
204 int hash_alg, ret = SSH_ERR_INTERNAL_ERROR; 205 int hash_alg, ret = SSH_ERR_INTERNAL_ERROR;
205 size_t len, diff, modlen, dlen; 206 size_t len = 0, diff, modlen, dlen;
206 struct sshbuf *b = NULL; 207 struct sshbuf *b = NULL;
207 u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL; 208 u_char digest[SSH_DIGEST_MAX_LENGTH], *osigblob, *sigblob = NULL;
208 209
@@ -215,11 +216,19 @@ ssh_rsa_verify(const struct sshkey *key,
215 216
216 if ((b = sshbuf_from(sig, siglen)) == NULL) 217 if ((b = sshbuf_from(sig, siglen)) == NULL)
217 return SSH_ERR_ALLOC_FAIL; 218 return SSH_ERR_ALLOC_FAIL;
218 if (sshbuf_get_cstring(b, &ktype, NULL) != 0) { 219 if (sshbuf_get_cstring(b, &sigtype, NULL) != 0) {
219 ret = SSH_ERR_INVALID_FORMAT; 220 ret = SSH_ERR_INVALID_FORMAT;
220 goto out; 221 goto out;
221 } 222 }
222 if ((hash_alg = rsa_hash_alg_from_ident(ktype)) == -1) { 223 /* XXX djm: need cert types that reliably yield SHA-2 signatures */
224 if (alg != NULL && strcmp(alg, sigtype) != 0 &&
225 strcmp(alg, "ssh-rsa-cert-v01@openssh.com") != 0) {
226 error("%s: RSA signature type mismatch: "
227 "expected %s received %s", __func__, alg, sigtype);
228 ret = SSH_ERR_SIGNATURE_INVALID;
229 goto out;
230 }
231 if ((hash_alg = rsa_hash_alg_from_ident(sigtype)) == -1) {
223 ret = SSH_ERR_KEY_TYPE_MISMATCH; 232 ret = SSH_ERR_KEY_TYPE_MISMATCH;
224 goto out; 233 goto out;
225 } 234 }
@@ -259,11 +268,8 @@ ssh_rsa_verify(const struct sshkey *key,
259 ret = openssh_RSA_verify(hash_alg, digest, dlen, sigblob, len, 268 ret = openssh_RSA_verify(hash_alg, digest, dlen, sigblob, len,
260 key->rsa); 269 key->rsa);
261 out: 270 out:
262 if (sigblob != NULL) { 271 freezero(sigblob, len);
263 explicit_bzero(sigblob, len); 272 free(sigtype);
264 free(sigblob);
265 }
266 free(ktype);
267 sshbuf_free(b); 273 sshbuf_free(b);
268 explicit_bzero(digest, sizeof(digest)); 274 explicit_bzero(digest, sizeof(digest));
269 return ret; 275 return ret;
@@ -384,10 +390,7 @@ openssh_RSA_verify(int hash_alg, u_char *hash, size_t hashlen,
384 } 390 }
385 ret = 0; 391 ret = 0;
386done: 392done:
387 if (decrypted) { 393 freezero(decrypted, rsasize);
388 explicit_bzero(decrypted, rsasize);
389 free(decrypted);
390 }
391 return ret; 394 return ret;
392} 395}
393#endif /* WITH_OPENSSL */ 396#endif /* WITH_OPENSSL */
diff --git a/ssh-xmss.c b/ssh-xmss.c
new file mode 100644
index 000000000..4c734fd7d
--- /dev/null
+++ b/ssh-xmss.c
@@ -0,0 +1,192 @@
1/* $OpenBSD: ssh-xmss.c,v 1.1 2018/02/23 15:58:38 markus Exp $*/
2/*
3 * Copyright (c) 2017 Stefan-Lukas Gazdag.
4 * Copyright (c) 2017 Markus Friedl.
5 *
6 * Permission to use, copy, modify, and distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
9 *
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17 */
18#include "includes.h"
19#ifdef WITH_XMSS
20
21#define SSHKEY_INTERNAL
22#include <sys/types.h>
23#include <limits.h>
24
25#include <string.h>
26#include <stdarg.h>
27#include <unistd.h>
28
29#include "log.h"
30#include "sshbuf.h"
31#include "sshkey.h"
32#include "sshkey-xmss.h"
33#include "ssherr.h"
34#include "ssh.h"
35
36#include "xmss_fast.h"
37
38int
39ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
40 const u_char *data, size_t datalen, u_int compat)
41{
42 u_char *sig = NULL;
43 size_t slen = 0, len = 0, required_siglen;
44 unsigned long long smlen;
45 int r, ret;
46 struct sshbuf *b = NULL;
47
48 if (lenp != NULL)
49 *lenp = 0;
50 if (sigp != NULL)
51 *sigp = NULL;
52
53 if (key == NULL ||
54 sshkey_type_plain(key->type) != KEY_XMSS ||
55 key->xmss_sk == NULL ||
56 sshkey_xmss_params(key) == NULL)
57 return SSH_ERR_INVALID_ARGUMENT;
58 if ((r = sshkey_xmss_siglen(key, &required_siglen)) != 0)
59 return r;
60 if (datalen >= INT_MAX - required_siglen)
61 return SSH_ERR_INVALID_ARGUMENT;
62 smlen = slen = datalen + required_siglen;
63 if ((sig = malloc(slen)) == NULL)
64 return SSH_ERR_ALLOC_FAIL;
65 if ((r = sshkey_xmss_get_state(key, error)) != 0)
66 goto out;
67 if ((ret = xmss_sign(key->xmss_sk, sshkey_xmss_bds_state(key), sig, &smlen,
68 data, datalen, sshkey_xmss_params(key))) != 0 || smlen <= datalen) {
69 r = SSH_ERR_INVALID_ARGUMENT; /* XXX better error? */
70 goto out;
71 }
72 /* encode signature */
73 if ((b = sshbuf_new()) == NULL) {
74 r = SSH_ERR_ALLOC_FAIL;
75 goto out;
76 }
77 if ((r = sshbuf_put_cstring(b, "ssh-xmss@openssh.com")) != 0 ||
78 (r = sshbuf_put_string(b, sig, smlen - datalen)) != 0)
79 goto out;
80 len = sshbuf_len(b);
81 if (sigp != NULL) {
82 if ((*sigp = malloc(len)) == NULL) {
83 r = SSH_ERR_ALLOC_FAIL;
84 goto out;
85 }
86 memcpy(*sigp, sshbuf_ptr(b), len);
87 }
88 if (lenp != NULL)
89 *lenp = len;
90 /* success */
91 r = 0;
92 out:
93 if ((ret = sshkey_xmss_update_state(key, error)) != 0) {
94 /* discard signature since we cannot update the state */
95 if (r == 0 && sigp != NULL && *sigp != NULL) {
96 explicit_bzero(*sigp, len);
97 free(*sigp);
98 }
99 if (sigp != NULL)
100 *sigp = NULL;
101 if (lenp != NULL)
102 *lenp = 0;
103 r = ret;
104 }
105 sshbuf_free(b);
106 if (sig != NULL) {
107 explicit_bzero(sig, slen);
108 free(sig);
109 }
110
111 return r;
112}
113
114int
115ssh_xmss_verify(const struct sshkey *key,
116 const u_char *signature, size_t signaturelen,
117 const u_char *data, size_t datalen, u_int compat)
118{
119 struct sshbuf *b = NULL;
120 char *ktype = NULL;
121 const u_char *sigblob;
122 u_char *sm = NULL, *m = NULL;
123 size_t len, required_siglen;
124 unsigned long long smlen = 0, mlen = 0;
125 int r, ret;
126
127 if (key == NULL ||
128 sshkey_type_plain(key->type) != KEY_XMSS ||
129 key->xmss_pk == NULL ||
130 sshkey_xmss_params(key) == NULL ||
131 signature == NULL || signaturelen == 0)
132 return SSH_ERR_INVALID_ARGUMENT;
133 if ((r = sshkey_xmss_siglen(key, &required_siglen)) != 0)
134 return r;
135 if (datalen >= INT_MAX - required_siglen)
136 return SSH_ERR_INVALID_ARGUMENT;
137
138 if ((b = sshbuf_from(signature, signaturelen)) == NULL)
139 return SSH_ERR_ALLOC_FAIL;
140 if ((r = sshbuf_get_cstring(b, &ktype, NULL)) != 0 ||
141 (r = sshbuf_get_string_direct(b, &sigblob, &len)) != 0)
142 goto out;
143 if (strcmp("ssh-xmss@openssh.com", ktype) != 0) {
144 r = SSH_ERR_KEY_TYPE_MISMATCH;
145 goto out;
146 }
147 if (sshbuf_len(b) != 0) {
148 r = SSH_ERR_UNEXPECTED_TRAILING_DATA;
149 goto out;
150 }
151 if (len != required_siglen) {
152 r = SSH_ERR_INVALID_FORMAT;
153 goto out;
154 }
155 if (datalen >= SIZE_MAX - len) {
156 r = SSH_ERR_INVALID_ARGUMENT;
157 goto out;
158 }
159 smlen = len + datalen;
160 mlen = smlen;
161 if ((sm = malloc(smlen)) == NULL || (m = malloc(mlen)) == NULL) {
162 r = SSH_ERR_ALLOC_FAIL;
163 goto out;
164 }
165 memcpy(sm, sigblob, len);
166 memcpy(sm+len, data, datalen);
167 if ((ret = xmss_sign_open(m, &mlen, sm, smlen,
168 key->xmss_pk, sshkey_xmss_params(key))) != 0) {
169 debug2("%s: crypto_sign_xmss_open failed: %d",
170 __func__, ret);
171 }
172 if (ret != 0 || mlen != datalen) {
173 r = SSH_ERR_SIGNATURE_INVALID;
174 goto out;
175 }
176 /* XXX compare 'm' and 'data' ? */
177 /* success */
178 r = 0;
179 out:
180 if (sm != NULL) {
181 explicit_bzero(sm, smlen);
182 free(sm);
183 }
184 if (m != NULL) {
185 explicit_bzero(m, smlen); /* NB mlen may be invalid if r != 0 */
186 free(m);
187 }
188 sshbuf_free(b);
189 free(ktype);
190 return r;
191}
192#endif /* WITH_XMSS */
diff --git a/ssh.0 b/ssh.0
index f920dd97e..228553c8b 100644
--- a/ssh.0
+++ b/ssh.0
@@ -4,13 +4,13 @@ NAME
4 ssh M-bM-^@M-^S OpenSSH SSH client (remote login program) 4 ssh M-bM-^@M-^S OpenSSH SSH client (remote login program)
5 5
6SYNOPSIS 6SYNOPSIS
7 ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec] 7 ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface] [-b bind_address]
8 [-D [bind_address:]port] [-E log_file] [-e escape_char] 8 [-c cipher_spec] [-D [bind_address:]port] [-E log_file]
9 [-F configfile] [-I pkcs11] [-i identity_file] 9 [-e escape_char] [-F configfile] [-I pkcs11] [-i identity_file]
10 [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec] 10 [-J destination] [-L address] [-l login_name] [-m mac_spec]
11 [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address] 11 [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]
12 [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] 12 [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]] destination
13 [user@]hostname [command] 13 [command]
14 14
15DESCRIPTION 15DESCRIPTION
16 ssh (SSH client) is a program for logging into a remote machine and for 16 ssh (SSH client) is a program for logging into a remote machine and for
@@ -19,11 +19,12 @@ DESCRIPTION
19 network. X11 connections, arbitrary TCP ports and UNIX-domain sockets 19 network. X11 connections, arbitrary TCP ports and UNIX-domain sockets
20 can also be forwarded over the secure channel. 20 can also be forwarded over the secure channel.
21 21
22 ssh connects and logs into the specified hostname (with optional user 22 ssh connects and logs into the specified destination, which may be
23 name). The user must prove his/her identity to the remote machine using 23 specified as either [user@]hostname or a URI of the form
24 one of several methods (see below). 24 ssh://[user@]hostname[:port]. The user must prove his/her identity to
25 the remote machine using one of several methods (see below).
25 26
26 If command is specified, it is executed on the remote host instead of a 27 If a command is specified, it is executed on the remote host instead of a
27 login shell. 28 login shell.
28 29
29 The options are as follows: 30 The options are as follows:
@@ -46,6 +47,11 @@ DESCRIPTION
46 47
47 -a Disables forwarding of the authentication agent connection. 48 -a Disables forwarding of the authentication agent connection.
48 49
50 -B bind_interface
51 Bind to the address of bind_interface before attempting to
52 connect to the destination host. This is only useful on systems
53 with more than one address.
54
49 -b bind_address 55 -b bind_address
50 Use bind_address on the local machine as the source address of 56 Use bind_address on the local machine as the source address of
51 the connection. Only useful on systems with more than one 57 the connection. Only useful on systems with more than one
@@ -138,12 +144,12 @@ DESCRIPTION
138 information from the filename obtained by appending -cert.pub to 144 information from the filename obtained by appending -cert.pub to
139 identity filenames. 145 identity filenames.
140 146
141 -J [user@]host[:port] 147 -J destination
142 Connect to the target host by first making a ssh connection to 148 Connect to the target host by first making a ssh connection to
143 the jump host and then establishing a TCP forwarding to the 149 the jump host described by destination and then establishing a
144 ultimate destination from there. Multiple jump hops may be 150 TCP forwarding to the ultimate destination from there. Multiple
145 specified separated by comma characters. This is a shortcut to 151 jump hops may be specified separated by comma characters. This
146 specify a ProxyJump configuration directive. 152 is a shortcut to specify a ProxyJump configuration directive.
147 153
148 -K Enables GSSAPI-based authentication and forwarding (delegation) 154 -K Enables GSSAPI-based authentication and forwarding (delegation)
149 of GSSAPI credentials to the server. 155 of GSSAPI credentials to the server.
@@ -785,6 +791,16 @@ ENVIRONMENT
785 command. If the current session has no tty, this 791 command. If the current session has no tty, this
786 variable is not set. 792 variable is not set.
787 793
794 SSH_TUNNEL Optionally set by sshd(8) to contain the interface
795 names assigned if tunnel forwarding was requested
796 by the client.
797
798 SSH_USER_AUTH Optionally set by sshd(8), this variable may
799 contain a pathname to a file that lists the
800 authentication methods successfully used when the
801 session was established, including any public keys
802 that were used.
803
788 TZ This variable is set to indicate the present time 804 TZ This variable is set to indicate the present time
789 zone if it was set when the daemon was started 805 zone if it was set when the daemon was started
790 (i.e. the daemon passes the value on to new 806 (i.e. the daemon passes the value on to new
@@ -846,7 +862,7 @@ FILES
846 ignore a private key file if it is accessible by others. It is 862 ignore a private key file if it is accessible by others. It is
847 possible to specify a passphrase when generating the key which 863 possible to specify a passphrase when generating the key which
848 will be used to encrypt the sensitive part of this file using 864 will be used to encrypt the sensitive part of this file using
849 3DES. 865 AES-128.
850 866
851 ~/.ssh/id_dsa.pub 867 ~/.ssh/id_dsa.pub
852 ~/.ssh/id_ecdsa.pub 868 ~/.ssh/id_ecdsa.pub
@@ -957,4 +973,4 @@ AUTHORS
957 created OpenSSH. Markus Friedl contributed the support for SSH protocol 973 created OpenSSH. Markus Friedl contributed the support for SSH protocol
958 versions 1.5 and 2.0. 974 versions 1.5 and 2.0.
959 975
960OpenBSD 6.2 September 21, 2017 OpenBSD 6.2 976OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/ssh.1 b/ssh.1
index 2ab1697f9..b4078525b 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.384 2017/09/21 19:16:53 markus Exp $ 36.\" $OpenBSD: ssh.1,v 1.391 2018/02/23 07:38:09 jmc Exp $
37.Dd $Mdocdate: September 21 2017 $ 37.Dd $Mdocdate: February 23 2018 $
38.Dt SSH 1 38.Dt SSH 1
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -42,8 +42,8 @@
42.Nd OpenSSH SSH client (remote login program) 42.Nd OpenSSH SSH client (remote login program)
43.Sh SYNOPSIS 43.Sh SYNOPSIS
44.Nm ssh 44.Nm ssh
45.Bk -words
46.Op Fl 46AaCfGgKkMNnqsTtVvXxYy 45.Op Fl 46AaCfGgKkMNnqsTtVvXxYy
46.Op Fl B Ar bind_interface
47.Op Fl b Ar bind_address 47.Op Fl b Ar bind_address
48.Op Fl c Ar cipher_spec 48.Op Fl c Ar cipher_spec
49.Op Fl D Oo Ar bind_address : Oc Ns Ar port 49.Op Fl D Oo Ar bind_address : Oc Ns Ar port
@@ -52,7 +52,7 @@
52.Op Fl F Ar configfile 52.Op Fl F Ar configfile
53.Op Fl I Ar pkcs11 53.Op Fl I Ar pkcs11
54.Op Fl i Ar identity_file 54.Op Fl i Ar identity_file
55.Op Fl J Oo Ar user Ns @ Oc Ns Ar host Ns Op : Ns Ar port 55.Op Fl J Ar destination
56.Op Fl L Ar address 56.Op Fl L Ar address
57.Op Fl l Ar login_name 57.Op Fl l Ar login_name
58.Op Fl m Ar mac_spec 58.Op Fl m Ar mac_spec
@@ -64,9 +64,8 @@
64.Op Fl S Ar ctl_path 64.Op Fl S Ar ctl_path
65.Op Fl W Ar host : Ns Ar port 65.Op Fl W Ar host : Ns Ar port
66.Op Fl w Ar local_tun Ns Op : Ns Ar remote_tun 66.Op Fl w Ar local_tun Ns Op : Ns Ar remote_tun
67.Oo Ar user Ns @ Oc Ns Ar hostname 67.Ar destination
68.Op Ar command 68.Op Ar command
69.Ek
70.Sh DESCRIPTION 69.Sh DESCRIPTION
71.Nm 70.Nm
72(SSH client) is a program for logging into a remote machine and for 71(SSH client) is a program for logging into a remote machine and for
@@ -79,15 +78,20 @@ sockets can also be forwarded over the secure channel.
79.Pp 78.Pp
80.Nm 79.Nm
81connects and logs into the specified 80connects and logs into the specified
82.Ar hostname 81.Ar destination ,
83(with optional 82which may be specified as either
84.Ar user 83.Sm off
85name). 84.Oo user @ Oc hostname
85.Sm on
86or a URI of the form
87.Sm off
88.No ssh:// Oo user @ Oc hostname Op : port .
89.Sm on
86The user must prove 90The user must prove
87his/her identity to the remote machine using one of several methods 91his/her identity to the remote machine using one of several methods
88(see below). 92(see below).
89.Pp 93.Pp
90If 94If a
91.Ar command 95.Ar command
92is specified, 96is specified,
93it is executed on the remote host instead of a login shell. 97it is executed on the remote host instead of a login shell.
@@ -121,6 +125,12 @@ authenticate using the identities loaded into the agent.
121.It Fl a 125.It Fl a
122Disables forwarding of the authentication agent connection. 126Disables forwarding of the authentication agent connection.
123.Pp 127.Pp
128.It Fl B Ar bind_interface
129Bind to the address of
130.Ar bind_interface
131before attempting to connect to the destination host.
132This is only useful on systems with more than one address.
133.Pp
124.It Fl b Ar bind_address 134.It Fl b Ar bind_address
125Use 135Use
126.Ar bind_address 136.Ar bind_address
@@ -287,17 +297,11 @@ by appending
287.Pa -cert.pub 297.Pa -cert.pub
288to identity filenames. 298to identity filenames.
289.Pp 299.Pp
290.It Fl J Xo 300.It Fl J Ar destination
291.Sm off
292.Op Ar user No @
293.Ar host
294.Op : Ar port
295.Sm on
296.Xc
297Connect to the target host by first making a 301Connect to the target host by first making a
298.Nm 302.Nm
299connection to the jump 303connection to the jump host described by
300.Ar host 304.Ar destination
301and then establishing a TCP forwarding to the ultimate destination from 305and then establishing a TCP forwarding to the ultimate destination from
302there. 306there.
303Multiple jump hops may be specified separated by comma characters. 307Multiple jump hops may be specified separated by comma characters.
@@ -1393,6 +1397,17 @@ This is set to the name of the tty (path to the device) associated
1393with the current shell or command. 1397with the current shell or command.
1394If the current session has no tty, 1398If the current session has no tty,
1395this variable is not set. 1399this variable is not set.
1400.It Ev SSH_TUNNEL
1401Optionally set by
1402.Xr sshd 8
1403to contain the interface names assigned if tunnel forwarding was
1404requested by the client.
1405.It Ev SSH_USER_AUTH
1406Optionally set by
1407.Xr sshd 8 ,
1408this variable may contain a pathname to a file that lists the authentication
1409methods successfully used when the session was established, including any
1410public keys that were used.
1396.It Ev TZ 1411.It Ev TZ
1397This variable is set to indicate the present time zone if it 1412This variable is set to indicate the present time zone if it
1398was set when the daemon was started (i.e. the daemon passes the value 1413was set when the daemon was started (i.e. the daemon passes the value
@@ -1474,7 +1489,7 @@ accessible by others (read/write/execute).
1474will simply ignore a private key file if it is accessible by others. 1489will simply ignore a private key file if it is accessible by others.
1475It is possible to specify a passphrase when 1490It is possible to specify a passphrase when
1476generating the key which will be used to encrypt the 1491generating the key which will be used to encrypt the
1477sensitive part of this file using 3DES. 1492sensitive part of this file using AES-128.
1478.Pp 1493.Pp
1479.It Pa ~/.ssh/id_dsa.pub 1494.It Pa ~/.ssh/id_dsa.pub
1480.It Pa ~/.ssh/id_ecdsa.pub 1495.It Pa ~/.ssh/id_ecdsa.pub
diff --git a/ssh.c b/ssh.c
index ae37432bd..d3619fe29 100644
--- a/ssh.c
+++ b/ssh.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh.c,v 1.464 2017/09/21 19:16:53 markus Exp $ */ 1/* $OpenBSD: ssh.c,v 1.475 2018/02/23 15:58:38 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
@@ -168,6 +168,10 @@ char *config = NULL;
168 */ 168 */
169char *host; 169char *host;
170 170
171/* Various strings used to to percent_expand() arguments */
172static char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV];
173static char uidstr[32], *host_arg, *conn_hash_hex;
174
171/* socket address the host resolves to */ 175/* socket address the host resolves to */
172struct sockaddr_storage hostaddr; 176struct sockaddr_storage hostaddr;
173 177
@@ -197,19 +201,19 @@ static void
197usage(void) 201usage(void)
198{ 202{
199 fprintf(stderr, 203 fprintf(stderr,
200"usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]\n" 204"usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]\n"
201" [-D [bind_address:]port] [-E log_file] [-e escape_char]\n" 205" [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]\n"
202" [-F configfile] [-I pkcs11] [-i identity_file]\n" 206" [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]\n"
203" [-J [user@]host[:port]] [-L address] [-l login_name] [-m mac_spec]\n" 207" [-i identity_file] [-J [user@]host[:port]] [-L address]\n"
204" [-O ctl_cmd] [-o option] [-p port] [-Q query_option] [-R address]\n" 208" [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]\n"
205" [-S ctl_path] [-W host:port] [-w local_tun[:remote_tun]]\n" 209" [-Q query_option] [-R address] [-S ctl_path] [-W host:port]\n"
206" [user@]hostname [command]\n" 210" [-w local_tun[:remote_tun]] destination [command]\n"
207 ); 211 );
208 exit(255); 212 exit(255);
209} 213}
210 214
211static int ssh_session2(struct ssh *); 215static int ssh_session2(struct ssh *, struct passwd *);
212static void load_public_identity_files(void); 216static void load_public_identity_files(struct passwd *);
213static void main_sigchld_handler(int); 217static void main_sigchld_handler(int);
214 218
215/* ~/ expand a list of paths. NB. assumes path[n] is heap-allocated. */ 219/* ~/ expand a list of paths. NB. assumes path[n] is heap-allocated. */
@@ -267,6 +271,40 @@ resolve_host(const char *name, int port, int logerr, char *cname, size_t clen)
267 return res; 271 return res;
268} 272}
269 273
274/* Returns non-zero if name can only be an address and not a hostname */
275static int
276is_addr_fast(const char *name)
277{
278 return (strchr(name, '%') != NULL || strchr(name, ':') != NULL ||
279 strspn(name, "0123456789.") == strlen(name));
280}
281
282/* Returns non-zero if name represents a valid, single address */
283static int
284is_addr(const char *name)
285{
286 char strport[NI_MAXSERV];
287 struct addrinfo hints, *res;
288
289 if (is_addr_fast(name))
290 return 1;
291
292 snprintf(strport, sizeof strport, "%u", default_ssh_port());
293 memset(&hints, 0, sizeof(hints));
294 hints.ai_family = options.address_family == -1 ?
295 AF_UNSPEC : options.address_family;
296 hints.ai_socktype = SOCK_STREAM;
297 hints.ai_flags = AI_NUMERICHOST|AI_NUMERICSERV;
298 if (getaddrinfo(name, strport, &hints, &res) != 0)
299 return 0;
300 if (res == NULL || res->ai_next != NULL) {
301 freeaddrinfo(res);
302 return 0;
303 }
304 freeaddrinfo(res);
305 return 1;
306}
307
270/* 308/*
271 * Attempt to resolve a numeric host address / port to a single address. 309 * Attempt to resolve a numeric host address / port to a single address.
272 * Returns a canonical address string. 310 * Returns a canonical address string.
@@ -372,20 +410,10 @@ resolve_canonicalize(char **hostp, int port)
372 char *cp, *fullhost, newname[NI_MAXHOST]; 410 char *cp, *fullhost, newname[NI_MAXHOST];
373 struct addrinfo *addrs; 411 struct addrinfo *addrs;
374 412
375 if (options.canonicalize_hostname == SSH_CANONICALISE_NO)
376 return NULL;
377
378 /* 413 /*
379 * Don't attempt to canonicalize names that will be interpreted by 414 * Attempt to canonicalise addresses, regardless of
380 * a proxy unless the user specifically requests so. 415 * whether hostname canonicalisation was requested
381 */ 416 */
382 direct = option_clear_or_none(options.proxy_command) &&
383 options.jump_host == NULL;
384 if (!direct &&
385 options.canonicalize_hostname != SSH_CANONICALISE_ALWAYS)
386 return NULL;
387
388 /* Try numeric hostnames first */
389 if ((addrs = resolve_addr(*hostp, port, 417 if ((addrs = resolve_addr(*hostp, port,
390 newname, sizeof(newname))) != NULL) { 418 newname, sizeof(newname))) != NULL) {
391 debug2("%s: hostname %.100s is address", __func__, *hostp); 419 debug2("%s: hostname %.100s is address", __func__, *hostp);
@@ -398,6 +426,30 @@ resolve_canonicalize(char **hostp, int port)
398 return addrs; 426 return addrs;
399 } 427 }
400 428
429 /*
430 * If this looks like an address but didn't parse as one, it might
431 * be an address with an invalid interface scope. Skip further
432 * attempts at canonicalisation.
433 */
434 if (is_addr_fast(*hostp)) {
435 debug("%s: hostname %.100s is an unrecognised address",
436 __func__, *hostp);
437 return NULL;
438 }
439
440 if (options.canonicalize_hostname == SSH_CANONICALISE_NO)
441 return NULL;
442
443 /*
444 * Don't attempt to canonicalize names that will be interpreted by
445 * a proxy unless the user specifically requests so.
446 */
447 direct = option_clear_or_none(options.proxy_command) &&
448 options.jump_host == NULL;
449 if (!direct &&
450 options.canonicalize_hostname != SSH_CANONICALISE_ALWAYS)
451 return NULL;
452
401 /* If domain name is anchored, then resolve it now */ 453 /* If domain name is anchored, then resolve it now */
402 if ((*hostp)[strlen(*hostp) - 1] == '.') { 454 if ((*hostp)[strlen(*hostp) - 1] == '.') {
403 debug3("%s: name is fully qualified", __func__); 455 debug3("%s: name is fully qualified", __func__);
@@ -456,14 +508,14 @@ resolve_canonicalize(char **hostp, int port)
456 * file if the user specifies a config file on the command line. 508 * file if the user specifies a config file on the command line.
457 */ 509 */
458static void 510static void
459process_config_files(const char *host_arg, struct passwd *pw, int post_canon) 511process_config_files(const char *host_name, struct passwd *pw, int post_canon)
460{ 512{
461 char buf[PATH_MAX]; 513 char buf[PATH_MAX];
462 int r; 514 int r;
463 515
464 if (config != NULL) { 516 if (config != NULL) {
465 if (strcasecmp(config, "none") != 0 && 517 if (strcasecmp(config, "none") != 0 &&
466 !read_config_file(config, pw, host, host_arg, &options, 518 !read_config_file(config, pw, host, host_name, &options,
467 SSHCONF_USERCONF | (post_canon ? SSHCONF_POSTCANON : 0))) 519 SSHCONF_USERCONF | (post_canon ? SSHCONF_POSTCANON : 0)))
468 fatal("Can't open user config file %.100s: " 520 fatal("Can't open user config file %.100s: "
469 "%.100s", config, strerror(errno)); 521 "%.100s", config, strerror(errno));
@@ -471,13 +523,13 @@ process_config_files(const char *host_arg, struct passwd *pw, int post_canon)
471 r = snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, 523 r = snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir,
472 _PATH_SSH_USER_CONFFILE); 524 _PATH_SSH_USER_CONFFILE);
473 if (r > 0 && (size_t)r < sizeof(buf)) 525 if (r > 0 && (size_t)r < sizeof(buf))
474 (void)read_config_file(buf, pw, host, host_arg, 526 (void)read_config_file(buf, pw, host, host_name,
475 &options, SSHCONF_CHECKPERM | SSHCONF_USERCONF | 527 &options, SSHCONF_CHECKPERM | SSHCONF_USERCONF |
476 (post_canon ? SSHCONF_POSTCANON : 0)); 528 (post_canon ? SSHCONF_POSTCANON : 0));
477 529
478 /* Read systemwide configuration file after user config. */ 530 /* Read systemwide configuration file after user config. */
479 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw, 531 (void)read_config_file(_PATH_HOST_CONFIG_FILE, pw,
480 host, host_arg, &options, 532 host, host_name, &options,
481 post_canon ? SSHCONF_POSTCANON : 0); 533 post_canon ? SSHCONF_POSTCANON : 0);
482 } 534 }
483} 535}
@@ -510,10 +562,9 @@ main(int ac, char **av)
510{ 562{
511 struct ssh *ssh = NULL; 563 struct ssh *ssh = NULL;
512 int i, r, opt, exit_status, use_syslog, direct, timeout_ms; 564 int i, r, opt, exit_status, use_syslog, direct, timeout_ms;
513 int config_test = 0, opt_terminated = 0; 565 int was_addr, config_test = 0, opt_terminated = 0;
514 char *p, *cp, *line, *argv0, buf[PATH_MAX], *host_arg, *logfile; 566 char *p, *cp, *line, *argv0, buf[PATH_MAX], *logfile;
515 char thishost[NI_MAXHOST], shorthost[NI_MAXHOST], portstr[NI_MAXSERV]; 567 char cname[NI_MAXHOST];
516 char cname[NI_MAXHOST], uidstr[32], *conn_hash_hex;
517 struct stat st; 568 struct stat st;
518 struct passwd *pw; 569 struct passwd *pw;
519 extern int optind, optreset; 570 extern int optind, optreset;
@@ -612,7 +663,7 @@ main(int ac, char **av)
612 663
613 again: 664 again:
614 while ((opt = getopt(ac, av, "1246ab:c:e:fgi:kl:m:no:p:qstvx" 665 while ((opt = getopt(ac, av, "1246ab:c:e:fgi:kl:m:no:p:qstvx"
615 "ACD:E:F:GI:J:KL:MNO:PQ:R:S:TVw:W:XYy")) != -1) { 666 "AB:CD:E:F:GI:J:KL:MNO:PQ:R:S:TVw:W:XYy")) != -1) {
616 switch (opt) { 667 switch (opt) {
617 case '1': 668 case '1':
618 fatal("SSH protocol v.1 is no longer supported"); 669 fatal("SSH protocol v.1 is no longer supported");
@@ -846,14 +897,18 @@ main(int ac, char **av)
846 options.control_master = SSHCTL_MASTER_YES; 897 options.control_master = SSHCTL_MASTER_YES;
847 break; 898 break;
848 case 'p': 899 case 'p':
849 options.port = a2port(optarg); 900 if (options.port == -1) {
850 if (options.port <= 0) { 901 options.port = a2port(optarg);
851 fprintf(stderr, "Bad port '%s'\n", optarg); 902 if (options.port <= 0) {
852 exit(255); 903 fprintf(stderr, "Bad port '%s'\n",
904 optarg);
905 exit(255);
906 }
853 } 907 }
854 break; 908 break;
855 case 'l': 909 case 'l':
856 options.user = optarg; 910 if (options.user == NULL)
911 options.user = optarg;
857 break; 912 break;
858 913
859 case 'L': 914 case 'L':
@@ -918,6 +973,9 @@ main(int ac, char **av)
918 case 'b': 973 case 'b':
919 options.bind_address = optarg; 974 options.bind_address = optarg;
920 break; 975 break;
976 case 'B':
977 options.bind_interface = optarg;
978 break;
921 case 'F': 979 case 'F':
922 config = optarg; 980 config = optarg;
923 break; 981 break;
@@ -933,16 +991,38 @@ main(int ac, char **av)
933 av += optind; 991 av += optind;
934 992
935 if (ac > 0 && !host) { 993 if (ac > 0 && !host) {
936 if (strrchr(*av, '@')) { 994 int tport;
995 char *tuser;
996 switch (parse_ssh_uri(*av, &tuser, &host, &tport)) {
997 case -1:
998 usage();
999 break;
1000 case 0:
1001 if (options.user == NULL) {
1002 options.user = tuser;
1003 tuser = NULL;
1004 }
1005 free(tuser);
1006 if (options.port == -1 && tport != -1)
1007 options.port = tport;
1008 break;
1009 default:
937 p = xstrdup(*av); 1010 p = xstrdup(*av);
938 cp = strrchr(p, '@'); 1011 cp = strrchr(p, '@');
939 if (cp == NULL || cp == p) 1012 if (cp != NULL) {
940 usage(); 1013 if (cp == p)
941 options.user = p; 1014 usage();
942 *cp = '\0'; 1015 if (options.user == NULL) {
943 host = xstrdup(++cp); 1016 options.user = p;
944 } else 1017 p = NULL;
945 host = xstrdup(*av); 1018 }
1019 *cp++ = '\0';
1020 host = xstrdup(cp);
1021 free(p);
1022 } else
1023 host = p;
1024 break;
1025 }
946 if (ac > 1 && !opt_terminated) { 1026 if (ac > 1 && !opt_terminated) {
947 optind = optreset = 1; 1027 optind = optreset = 1;
948 goto again; 1028 goto again;
@@ -994,9 +1074,9 @@ main(int ac, char **av)
994 if (logfile != NULL) 1074 if (logfile != NULL)
995 log_redirect_stderr_to(logfile); 1075 log_redirect_stderr_to(logfile);
996 log_init(argv0, 1076 log_init(argv0,
997 options.log_level == SYSLOG_LEVEL_NOT_SET ? 1077 options.log_level == SYSLOG_LEVEL_NOT_SET ?
998 SYSLOG_LEVEL_INFO : options.log_level, 1078 SYSLOG_LEVEL_INFO : options.log_level,
999 options.log_facility == SYSLOG_FACILITY_NOT_SET ? 1079 options.log_facility == SYSLOG_FACILITY_NOT_SET ?
1000 SYSLOG_FACILITY_USER : options.log_facility, 1080 SYSLOG_FACILITY_USER : options.log_facility,
1001 !use_syslog); 1081 !use_syslog);
1002 1082
@@ -1026,16 +1106,22 @@ main(int ac, char **av)
1026 options.hostname = xstrdup(host); 1106 options.hostname = xstrdup(host);
1027 } 1107 }
1028 1108
1029 /* If canonicalization requested then try to apply it */ 1109 /* Don't lowercase addresses, they will be explicitly canonicalised */
1030 lowercase(host); 1110 if ((was_addr = is_addr(host)) == 0)
1031 if (options.canonicalize_hostname != SSH_CANONICALISE_NO) 1111 lowercase(host);
1112
1113 /*
1114 * Try to canonicalize if requested by configuration or the
1115 * hostname is an address.
1116 */
1117 if (options.canonicalize_hostname != SSH_CANONICALISE_NO || was_addr)
1032 addrs = resolve_canonicalize(&host, options.port); 1118 addrs = resolve_canonicalize(&host, options.port);
1033 1119
1034 /* 1120 /*
1035 * If CanonicalizePermittedCNAMEs have been specified but 1121 * If CanonicalizePermittedCNAMEs have been specified but
1036 * other canonicalization did not happen (by not being requested 1122 * other canonicalization did not happen (by not being requested
1037 * or by failing with fallback) then the hostname may still be changed 1123 * or by failing with fallback) then the hostname may still be changed
1038 * as a result of CNAME following. 1124 * as a result of CNAME following.
1039 * 1125 *
1040 * Try to resolve the bare hostname name using the system resolver's 1126 * Try to resolve the bare hostname name using the system resolver's
1041 * usual search rules and then apply the CNAME follow rules. 1127 * usual search rules and then apply the CNAME follow rules.
@@ -1177,6 +1263,7 @@ main(int ac, char **av)
1177 if (options.user == NULL) 1263 if (options.user == NULL)
1178 options.user = xstrdup(pw->pw_name); 1264 options.user = xstrdup(pw->pw_name);
1179 1265
1266 /* Set up strings used to percent_expand() arguments */
1180 if (gethostname(thishost, sizeof(thishost)) == -1) 1267 if (gethostname(thishost, sizeof(thishost)) == -1)
1181 fatal("gethostname: %s", strerror(errno)); 1268 fatal("gethostname: %s", strerror(errno));
1182 strlcpy(shorthost, thishost, sizeof(shorthost)); 1269 strlcpy(shorthost, thishost, sizeof(shorthost));
@@ -1194,24 +1281,11 @@ main(int ac, char **av)
1194 ssh_digest_free(md); 1281 ssh_digest_free(md);
1195 conn_hash_hex = tohex(conn_hash, ssh_digest_bytes(SSH_DIGEST_SHA1)); 1282 conn_hash_hex = tohex(conn_hash, ssh_digest_bytes(SSH_DIGEST_SHA1));
1196 1283
1197 if (options.local_command != NULL) { 1284 /*
1198 debug3("expanding LocalCommand: %s", options.local_command); 1285 * Expand tokens in arguments. NB. LocalCommand is expanded later,
1199 cp = options.local_command; 1286 * after port-forwarding is set up, so it may pick up any local
1200 options.local_command = percent_expand(cp, 1287 * tunnel interface name allocated.
1201 "C", conn_hash_hex, 1288 */
1202 "L", shorthost,
1203 "d", pw->pw_dir,
1204 "h", host,
1205 "l", thishost,
1206 "n", host_arg,
1207 "p", portstr,
1208 "r", options.user,
1209 "u", pw->pw_name,
1210 (char *)NULL);
1211 debug3("expanded LocalCommand: %s", options.local_command);
1212 free(cp);
1213 }
1214
1215 if (options.remote_command != NULL) { 1289 if (options.remote_command != NULL) {
1216 debug3("expanding RemoteCommand: %s", options.remote_command); 1290 debug3("expanding RemoteCommand: %s", options.remote_command);
1217 cp = options.remote_command; 1291 cp = options.remote_command;
@@ -1230,7 +1304,6 @@ main(int ac, char **av)
1230 free(cp); 1304 free(cp);
1231 buffer_append(&command, options.remote_command, 1305 buffer_append(&command, options.remote_command,
1232 strlen(options.remote_command)); 1306 strlen(options.remote_command));
1233
1234 } 1307 }
1235 1308
1236 if (options.control_path != NULL) { 1309 if (options.control_path != NULL) {
@@ -1311,7 +1384,7 @@ main(int ac, char **av)
1311 sensitive_data.keys = NULL; 1384 sensitive_data.keys = NULL;
1312 sensitive_data.external_keysign = 0; 1385 sensitive_data.external_keysign = 0;
1313 if (options.hostbased_authentication) { 1386 if (options.hostbased_authentication) {
1314 sensitive_data.nkeys = 9; 1387 sensitive_data.nkeys = 11;
1315 sensitive_data.keys = xcalloc(sensitive_data.nkeys, 1388 sensitive_data.keys = xcalloc(sensitive_data.nkeys,
1316 sizeof(struct sshkey)); /* XXX */ 1389 sizeof(struct sshkey)); /* XXX */
1317 for (i = 0; i < sensitive_data.nkeys; i++) 1390 for (i = 0; i < sensitive_data.nkeys; i++)
@@ -1338,6 +1411,10 @@ main(int ac, char **av)
1338 _PATH_HOST_RSA_KEY_FILE, "", NULL, NULL); 1411 _PATH_HOST_RSA_KEY_FILE, "", NULL, NULL);
1339 sensitive_data.keys[8] = key_load_private_type(KEY_DSA, 1412 sensitive_data.keys[8] = key_load_private_type(KEY_DSA,
1340 _PATH_HOST_DSA_KEY_FILE, "", NULL, NULL); 1413 _PATH_HOST_DSA_KEY_FILE, "", NULL, NULL);
1414 sensitive_data.keys[9] = key_load_private_cert(KEY_XMSS,
1415 _PATH_HOST_XMSS_KEY_FILE, "", NULL);
1416 sensitive_data.keys[10] = key_load_private_type(KEY_XMSS,
1417 _PATH_HOST_XMSS_KEY_FILE, "", NULL, NULL);
1341 PRIV_END; 1418 PRIV_END;
1342 1419
1343 if (options.hostbased_authentication == 1 && 1420 if (options.hostbased_authentication == 1 &&
@@ -1345,7 +1422,8 @@ main(int ac, char **av)
1345 sensitive_data.keys[5] == NULL && 1422 sensitive_data.keys[5] == NULL &&
1346 sensitive_data.keys[6] == NULL && 1423 sensitive_data.keys[6] == NULL &&
1347 sensitive_data.keys[7] == NULL && 1424 sensitive_data.keys[7] == NULL &&
1348 sensitive_data.keys[8] == NULL) { 1425 sensitive_data.keys[8] == NULL &&
1426 sensitive_data.keys[9] == NULL) {
1349#ifdef OPENSSL_HAS_ECC 1427#ifdef OPENSSL_HAS_ECC
1350 sensitive_data.keys[1] = key_load_cert( 1428 sensitive_data.keys[1] = key_load_cert(
1351 _PATH_HOST_ECDSA_KEY_FILE); 1429 _PATH_HOST_ECDSA_KEY_FILE);
@@ -1366,6 +1444,10 @@ main(int ac, char **av)
1366 _PATH_HOST_RSA_KEY_FILE, NULL); 1444 _PATH_HOST_RSA_KEY_FILE, NULL);
1367 sensitive_data.keys[8] = key_load_public( 1445 sensitive_data.keys[8] = key_load_public(
1368 _PATH_HOST_DSA_KEY_FILE, NULL); 1446 _PATH_HOST_DSA_KEY_FILE, NULL);
1447 sensitive_data.keys[9] = key_load_cert(
1448 _PATH_HOST_XMSS_KEY_FILE);
1449 sensitive_data.keys[10] = key_load_public(
1450 _PATH_HOST_XMSS_KEY_FILE, NULL);
1369 sensitive_data.external_keysign = 1; 1451 sensitive_data.external_keysign = 1;
1370 } 1452 }
1371 } 1453 }
@@ -1401,7 +1483,7 @@ main(int ac, char **av)
1401 } 1483 }
1402 } 1484 }
1403 /* load options.identity_files */ 1485 /* load options.identity_files */
1404 load_public_identity_files(); 1486 load_public_identity_files(pw);
1405 1487
1406 /* optionally set the SSH_AUTHSOCKET_ENV_NAME varibale */ 1488 /* optionally set the SSH_AUTHSOCKET_ENV_NAME varibale */
1407 if (options.identity_agent && 1489 if (options.identity_agent &&
@@ -1465,7 +1547,7 @@ main(int ac, char **av)
1465 } 1547 }
1466 1548
1467 skip_connect: 1549 skip_connect:
1468 exit_status = ssh_session2(ssh); 1550 exit_status = ssh_session2(ssh, pw);
1469 packet_close(); 1551 packet_close();
1470 1552
1471 if (options.control_path != NULL && muxserver_sock != -1) 1553 if (options.control_path != NULL && muxserver_sock != -1)
@@ -1485,29 +1567,29 @@ control_persist_detach(void)
1485 1567
1486 debug("%s: backgrounding master process", __func__); 1568 debug("%s: backgrounding master process", __func__);
1487 1569
1488 /* 1570 /*
1489 * master (current process) into the background, and make the 1571 * master (current process) into the background, and make the
1490 * foreground process a client of the backgrounded master. 1572 * foreground process a client of the backgrounded master.
1491 */ 1573 */
1492 switch ((pid = fork())) { 1574 switch ((pid = fork())) {
1493 case -1: 1575 case -1:
1494 fatal("%s: fork: %s", __func__, strerror(errno)); 1576 fatal("%s: fork: %s", __func__, strerror(errno));
1495 case 0: 1577 case 0:
1496 /* Child: master process continues mainloop */ 1578 /* Child: master process continues mainloop */
1497 break; 1579 break;
1498 default: 1580 default:
1499 /* Parent: set up mux slave to connect to backgrounded master */ 1581 /* Parent: set up mux slave to connect to backgrounded master */
1500 debug2("%s: background process is %ld", __func__, (long)pid); 1582 debug2("%s: background process is %ld", __func__, (long)pid);
1501 stdin_null_flag = ostdin_null_flag; 1583 stdin_null_flag = ostdin_null_flag;
1502 options.request_tty = orequest_tty; 1584 options.request_tty = orequest_tty;
1503 tty_flag = otty_flag; 1585 tty_flag = otty_flag;
1504 close(muxserver_sock); 1586 close(muxserver_sock);
1505 muxserver_sock = -1; 1587 muxserver_sock = -1;
1506 options.control_master = SSHCTL_MASTER_NO; 1588 options.control_master = SSHCTL_MASTER_NO;
1507 muxclient(options.control_path); 1589 muxclient(options.control_path);
1508 /* muxclient() doesn't return on success. */ 1590 /* muxclient() doesn't return on success. */
1509 fatal("Failed to connect to new control master"); 1591 fatal("Failed to connect to new control master");
1510 } 1592 }
1511 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) { 1593 if ((devnull = open(_PATH_DEVNULL, O_RDWR)) == -1) {
1512 error("%s: open(\"/dev/null\"): %s", __func__, 1594 error("%s: open(\"/dev/null\"): %s", __func__,
1513 strerror(errno)); 1595 strerror(errno));
@@ -1562,7 +1644,7 @@ ssh_confirm_remote_forward(struct ssh *ssh, int type, u_int32_t seq, void *ctxt)
1562 channel_update_permitted_opens(ssh, rfwd->handle, -1); 1644 channel_update_permitted_opens(ssh, rfwd->handle, -1);
1563 } 1645 }
1564 } 1646 }
1565 1647
1566 if (type == SSH2_MSG_REQUEST_FAILURE) { 1648 if (type == SSH2_MSG_REQUEST_FAILURE) {
1567 if (options.exit_on_forward_failure) { 1649 if (options.exit_on_forward_failure) {
1568 if (rfwd->listen_path != NULL) 1650 if (rfwd->listen_path != NULL)
@@ -1624,7 +1706,7 @@ ssh_init_stdio_forwarding(struct ssh *ssh)
1624} 1706}
1625 1707
1626static void 1708static void
1627ssh_init_forwarding(struct ssh *ssh) 1709ssh_init_forwarding(struct ssh *ssh, char **ifname)
1628{ 1710{
1629 int success = 0; 1711 int success = 0;
1630 int i; 1712 int i;
@@ -1682,14 +1764,15 @@ ssh_init_forwarding(struct ssh *ssh)
1682 1764
1683 /* Initiate tunnel forwarding. */ 1765 /* Initiate tunnel forwarding. */
1684 if (options.tun_open != SSH_TUNMODE_NO) { 1766 if (options.tun_open != SSH_TUNMODE_NO) {
1685 if (client_request_tun_fwd(ssh, options.tun_open, 1767 if ((*ifname = client_request_tun_fwd(ssh,
1686 options.tun_local, options.tun_remote) == -1) { 1768 options.tun_open, options.tun_local,
1769 options.tun_remote)) == NULL) {
1687 if (options.exit_on_forward_failure) 1770 if (options.exit_on_forward_failure)
1688 fatal("Could not request tunnel forwarding."); 1771 fatal("Could not request tunnel forwarding.");
1689 else 1772 else
1690 error("Could not request tunnel forwarding."); 1773 error("Could not request tunnel forwarding.");
1691 } 1774 }
1692 } 1775 }
1693} 1776}
1694 1777
1695static void 1778static void
@@ -1798,20 +1881,41 @@ ssh_session2_open(struct ssh *ssh)
1798} 1881}
1799 1882
1800static int 1883static int
1801ssh_session2(struct ssh *ssh) 1884ssh_session2(struct ssh *ssh, struct passwd *pw)
1802{ 1885{
1803 int id = -1; 1886 int devnull, id = -1;
1887 char *cp, *tun_fwd_ifname = NULL;
1804 1888
1805 /* XXX should be pre-session */ 1889 /* XXX should be pre-session */
1806 if (!options.control_persist) 1890 if (!options.control_persist)
1807 ssh_init_stdio_forwarding(ssh); 1891 ssh_init_stdio_forwarding(ssh);
1808 ssh_init_forwarding(ssh); 1892
1893 ssh_init_forwarding(ssh, &tun_fwd_ifname);
1894
1895 if (options.local_command != NULL) {
1896 debug3("expanding LocalCommand: %s", options.local_command);
1897 cp = options.local_command;
1898 options.local_command = percent_expand(cp,
1899 "C", conn_hash_hex,
1900 "L", shorthost,
1901 "d", pw->pw_dir,
1902 "h", host,
1903 "l", thishost,
1904 "n", host_arg,
1905 "p", portstr,
1906 "r", options.user,
1907 "u", pw->pw_name,
1908 "T", tun_fwd_ifname == NULL ? "NONE" : tun_fwd_ifname,
1909 (char *)NULL);
1910 debug3("expanded LocalCommand: %s", options.local_command);
1911 free(cp);
1912 }
1809 1913
1810 /* Start listening for multiplex clients */ 1914 /* Start listening for multiplex clients */
1811 if (!packet_get_mux()) 1915 if (!packet_get_mux())
1812 muxserver_listen(ssh); 1916 muxserver_listen(ssh);
1813 1917
1814 /* 1918 /*
1815 * If we are in control persist mode and have a working mux listen 1919 * If we are in control persist mode and have a working mux listen
1816 * socket, then prepare to background ourselves and have a foreground 1920 * socket, then prepare to background ourselves and have a foreground
1817 * client attach as a control slave. 1921 * client attach as a control slave.
@@ -1820,18 +1924,18 @@ ssh_session2(struct ssh *ssh)
1820 * after the connection is fully established (in particular, 1924 * after the connection is fully established (in particular,
1821 * async rfwd replies have been received for ExitOnForwardFailure). 1925 * async rfwd replies have been received for ExitOnForwardFailure).
1822 */ 1926 */
1823 if (options.control_persist && muxserver_sock != -1) { 1927 if (options.control_persist && muxserver_sock != -1) {
1824 ostdin_null_flag = stdin_null_flag; 1928 ostdin_null_flag = stdin_null_flag;
1825 ono_shell_flag = no_shell_flag; 1929 ono_shell_flag = no_shell_flag;
1826 orequest_tty = options.request_tty; 1930 orequest_tty = options.request_tty;
1827 otty_flag = tty_flag; 1931 otty_flag = tty_flag;
1828 stdin_null_flag = 1; 1932 stdin_null_flag = 1;
1829 no_shell_flag = 1; 1933 no_shell_flag = 1;
1830 tty_flag = 0; 1934 tty_flag = 0;
1831 if (!fork_after_authentication_flag) 1935 if (!fork_after_authentication_flag)
1832 need_controlpersist_detach = 1; 1936 need_controlpersist_detach = 1;
1833 fork_after_authentication_flag = 1; 1937 fork_after_authentication_flag = 1;
1834 } 1938 }
1835 /* 1939 /*
1836 * ControlPersist mux listen socket setup failed, attempt the 1940 * ControlPersist mux listen socket setup failed, attempt the
1837 * stdio forward setup that we skipped earlier. 1941 * stdio forward setup that we skipped earlier.
@@ -1839,7 +1943,7 @@ ssh_session2(struct ssh *ssh)
1839 if (options.control_persist && muxserver_sock == -1) 1943 if (options.control_persist && muxserver_sock == -1)
1840 ssh_init_stdio_forwarding(ssh); 1944 ssh_init_stdio_forwarding(ssh);
1841 1945
1842 if (!no_shell_flag || (datafellows & SSH_BUG_DUMMYCHAN)) 1946 if (!no_shell_flag)
1843 id = ssh_session2_open(ssh); 1947 id = ssh_session2_open(ssh);
1844 else { 1948 else {
1845 packet_set_interactive( 1949 packet_set_interactive(
@@ -1863,6 +1967,22 @@ ssh_session2(struct ssh *ssh)
1863 ssh_local_cmd(options.local_command); 1967 ssh_local_cmd(options.local_command);
1864 1968
1865 /* 1969 /*
1970 * stdout is now owned by the session channel; clobber it here
1971 * so future channel closes are propagated to the local fd.
1972 * NB. this can only happen after LocalCommand has completed,
1973 * as it may want to write to stdout.
1974 */
1975 if (!need_controlpersist_detach) {
1976 if ((devnull = open(_PATH_DEVNULL, O_WRONLY)) == -1)
1977 error("%s: open %s: %s", __func__,
1978 _PATH_DEVNULL, strerror(errno));
1979 if (dup2(devnull, STDOUT_FILENO) < 0)
1980 fatal("%s: dup2() stdout failed", __func__);
1981 if (devnull > STDERR_FILENO)
1982 close(devnull);
1983 }
1984
1985 /*
1866 * If requested and we are not interested in replies to remote 1986 * If requested and we are not interested in replies to remote
1867 * forwarding requests, then let ssh continue in the background. 1987 * forwarding requests, then let ssh continue in the background.
1868 */ 1988 */
@@ -1881,12 +2001,10 @@ ssh_session2(struct ssh *ssh)
1881 2001
1882/* Loads all IdentityFile and CertificateFile keys */ 2002/* Loads all IdentityFile and CertificateFile keys */
1883static void 2003static void
1884load_public_identity_files(void) 2004load_public_identity_files(struct passwd *pw)
1885{ 2005{
1886 char *filename, *cp, thishost[NI_MAXHOST]; 2006 char *filename, *cp;
1887 char *pwdir = NULL, *pwname = NULL;
1888 struct sshkey *public; 2007 struct sshkey *public;
1889 struct passwd *pw;
1890 int i; 2008 int i;
1891 u_int n_ids, n_certs; 2009 u_int n_ids, n_certs;
1892 char *identity_files[SSH_MAX_IDENTITY_FILES]; 2010 char *identity_files[SSH_MAX_IDENTITY_FILES];
@@ -1925,11 +2043,6 @@ load_public_identity_files(void)
1925#endif /* ENABLE_PKCS11 */ 2043#endif /* ENABLE_PKCS11 */
1926 if ((pw = getpwuid(original_real_uid)) == NULL) 2044 if ((pw = getpwuid(original_real_uid)) == NULL)
1927 fatal("load_public_identity_files: getpwuid failed"); 2045 fatal("load_public_identity_files: getpwuid failed");
1928 pwname = xstrdup(pw->pw_name);
1929 pwdir = xstrdup(pw->pw_dir);
1930 if (gethostname(thishost, sizeof(thishost)) == -1)
1931 fatal("load_public_identity_files: gethostname: %s",
1932 strerror(errno));
1933 for (i = 0; i < options.num_identity_files; i++) { 2046 for (i = 0; i < options.num_identity_files; i++) {
1934 if (n_ids >= SSH_MAX_IDENTITY_FILES || 2047 if (n_ids >= SSH_MAX_IDENTITY_FILES ||
1935 strcasecmp(options.identity_files[i], "none") == 0) { 2048 strcasecmp(options.identity_files[i], "none") == 0) {
@@ -1939,8 +2052,8 @@ load_public_identity_files(void)
1939 } 2052 }
1940 cp = tilde_expand_filename(options.identity_files[i], 2053 cp = tilde_expand_filename(options.identity_files[i],
1941 original_real_uid); 2054 original_real_uid);
1942 filename = percent_expand(cp, "d", pwdir, 2055 filename = percent_expand(cp, "d", pw->pw_dir,
1943 "u", pwname, "l", thishost, "h", host, 2056 "u", pw->pw_name, "l", thishost, "h", host,
1944 "r", options.user, (char *)NULL); 2057 "r", options.user, (char *)NULL);
1945 free(cp); 2058 free(cp);
1946 public = key_load_public(filename, NULL); 2059 public = key_load_public(filename, NULL);
@@ -1985,8 +2098,8 @@ load_public_identity_files(void)
1985 for (i = 0; i < options.num_certificate_files; i++) { 2098 for (i = 0; i < options.num_certificate_files; i++) {
1986 cp = tilde_expand_filename(options.certificate_files[i], 2099 cp = tilde_expand_filename(options.certificate_files[i],
1987 original_real_uid); 2100 original_real_uid);
1988 filename = percent_expand(cp, "d", pwdir, 2101 filename = percent_expand(cp, "d", pw->pw_dir,
1989 "u", pwname, "l", thishost, "h", host, 2102 "u", pw->pw_name, "l", thishost, "h", host,
1990 "r", options.user, (char *)NULL); 2103 "r", options.user, (char *)NULL);
1991 free(cp); 2104 free(cp);
1992 2105
@@ -2019,11 +2132,6 @@ load_public_identity_files(void)
2019 memcpy(options.certificate_files, 2132 memcpy(options.certificate_files,
2020 certificate_files, sizeof(certificate_files)); 2133 certificate_files, sizeof(certificate_files));
2021 memcpy(options.certificates, certificates, sizeof(certificates)); 2134 memcpy(options.certificates, certificates, sizeof(certificates));
2022
2023 explicit_bzero(pwname, strlen(pwname));
2024 free(pwname);
2025 explicit_bzero(pwdir, strlen(pwdir));
2026 free(pwdir);
2027} 2135}
2028 2136
2029static void 2137static void
@@ -2036,7 +2144,5 @@ main_sigchld_handler(int sig)
2036 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || 2144 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 ||
2037 (pid < 0 && errno == EINTR)) 2145 (pid < 0 && errno == EINTR))
2038 ; 2146 ;
2039
2040 signal(sig, main_sigchld_handler);
2041 errno = save_errno; 2147 errno = save_errno;
2042} 2148}
diff --git a/ssh_config.0 b/ssh_config.0
index 9493953ab..4109b1909 100644
--- a/ssh_config.0
+++ b/ssh_config.0
@@ -112,6 +112,11 @@ DESCRIPTION
112 one address. Note that this option does not work if 112 one address. Note that this option does not work if
113 UsePrivilegedPort is set to yes. 113 UsePrivilegedPort is set to yes.
114 114
115 BindInterface
116 Use the address of the specified interface on the local machine
117 as the source address of the connection. Note that this option
118 does not work if UsePrivilegedPort is set to yes.
119
115 CanonicalDomains 120 CanonicalDomains
116 When CanonicalizeHostname is enabled, this option specifies the 121 When CanonicalizeHostname is enabled, this option specifies the
117 list of domain suffixes in which to search for the specified 122 list of domain suffixes in which to search for the specified
@@ -583,7 +588,10 @@ DESCRIPTION
583 curve25519-sha256,curve25519-sha256@libssh.org, 588 curve25519-sha256,curve25519-sha256@libssh.org,
584 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 589 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
585 diffie-hellman-group-exchange-sha256, 590 diffie-hellman-group-exchange-sha256,
591 diffie-hellman-group16-sha512,
592 diffie-hellman-group18-sha512,
586 diffie-hellman-group-exchange-sha1, 593 diffie-hellman-group-exchange-sha1,
594 diffie-hellman-group14-sha256,
587 diffie-hellman-group14-sha1 595 diffie-hellman-group14-sha1
588 596
589 The list of available key exchange algorithms may also be 597 The list of available key exchange algorithms may also be
@@ -652,12 +660,8 @@ DESCRIPTION
652 "ssh -Q mac". 660 "ssh -Q mac".
653 661
654 NoHostAuthenticationForLocalhost 662 NoHostAuthenticationForLocalhost
655 This option can be used if the home directory is shared across 663 Disable host authentication for localhost (loopback addresses).
656 machines. In this case localhost will refer to a different 664 The argument to this keyword must be yes or no (the default).
657 machine on each of the machines and the user will get many
658 warnings about changed host keys. However, this option disables
659 host authentication for localhost. The argument to this keyword
660 must be yes or no (the default).
661 665
662 NumberOfPasswordPrompts 666 NumberOfPasswordPrompts
663 Specifies the number of password prompts before giving up. The 667 Specifies the number of password prompts before giving up. The
@@ -713,12 +717,12 @@ DESCRIPTION
713 ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p 717 ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
714 718
715 ProxyJump 719 ProxyJump
716 Specifies one or more jump proxies as [user@]host[:port]. 720 Specifies one or more jump proxies as either [user@]host[:port]
717 Multiple proxies may be separated by comma characters and will be 721 or an ssh URI. Multiple proxies may be separated by comma
718 visited sequentially. Setting this option will cause ssh(1) to 722 characters and will be visited sequentially. Setting this option
719 connect to the target host by first making a ssh(1) connection to 723 will cause ssh(1) to connect to the target host by first making a
720 the specified ProxyJump host and then establishing a TCP 724 ssh(1) connection to the specified ProxyJump host and then
721 forwarding to the ultimate target from there. 725 establishing a TCP forwarding to the ultimate target from there.
722 726
723 Note that this option will compete with the ProxyCommand option - 727 Note that this option will compete with the ProxyCommand option -
724 whichever is specified first will prevent later instances of the 728 whichever is specified first will prevent later instances of the
@@ -883,8 +887,8 @@ DESCRIPTION
883 If this flag is set to yes, ssh(1) will never automatically add 887 If this flag is set to yes, ssh(1) will never automatically add
884 host keys to the ~/.ssh/known_hosts file, and refuses to connect 888 host keys to the ~/.ssh/known_hosts file, and refuses to connect
885 to hosts whose host key has changed. This provides maximum 889 to hosts whose host key has changed. This provides maximum
886 protection against trojan horse attacks, though it can be 890 protection against man-in-the-middle (MITM) attacks, though it
887 annoying when the /etc/ssh/ssh_known_hosts file is poorly 891 can be annoying when the /etc/ssh/ssh_known_hosts file is poorly
888 maintained or when connections to new hosts are frequently made. 892 maintained or when connections to new hosts are frequently made.
889 This option forces the user to manually add all new hosts. 893 This option forces the user to manually add all new hosts.
890 894
@@ -918,6 +922,7 @@ DESCRIPTION
918 dies. This is important in scripts, and many users want it too. 922 dies. This is important in scripts, and many users want it too.
919 923
920 To disable TCP keepalive messages, the value should be set to no. 924 To disable TCP keepalive messages, the value should be set to no.
925 See also ServerAliveInterval for protocol-level keepalives.
921 926
922 Tunnel Request tun(4) device forwarding between the client and the 927 Tunnel Request tun(4) device forwarding between the client and the
923 server. The argument must be yes, point-to-point (layer 3), 928 server. The argument must be yes, point-to-point (layer 3),
@@ -1012,12 +1017,23 @@ PATTERNS
1012 1017
1013 from="!*.dialup.example.com,*.example.com" 1018 from="!*.dialup.example.com,*.example.com"
1014 1019
1020 Note that a negated match will never produce a positive result by itself.
1021 For example, attempting to match "host3" against the following pattern-
1022 list will fail:
1023
1024 from="!host1,!host2"
1025
1026 The solution here is to include a term that will yield a positive match,
1027 such as a wildcard:
1028
1029 from="!host1,!host2,*"
1030
1015TOKENS 1031TOKENS
1016 Arguments to some keywords can make use of tokens, which are expanded at 1032 Arguments to some keywords can make use of tokens, which are expanded at
1017 runtime: 1033 runtime:
1018 1034
1019 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y. 1035 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y.
1020 %C Shorthand for %l%h%p%r. 1036 %C Hash of %l%h%p%r.
1021 %d Local user's home directory. 1037 %d Local user's home directory.
1022 %h The remote hostname. 1038 %h The remote hostname.
1023 %i The local user ID. 1039 %i The local user ID.
@@ -1026,6 +1042,8 @@ TOKENS
1026 %n The original remote hostname, as given on the command line. 1042 %n The original remote hostname, as given on the command line.
1027 %p The remote port. 1043 %p The remote port.
1028 %r The remote username. 1044 %r The remote username.
1045 %T The local tun(4) or tap(4) network interface assigned if
1046 tunnel forwarding was requested, or "NONE" otherwise.
1029 %u The local username. 1047 %u The local username.
1030 1048
1031 Match exec accepts the tokens %%, %h, %L, %l, %n, %p, %r, and %u. 1049 Match exec accepts the tokens %%, %h, %L, %l, %n, %p, %r, and %u.
@@ -1040,7 +1058,8 @@ TOKENS
1040 IdentityAgent and IdentityFile accept the tokens %%, %d, %h, %l, %r, and 1058 IdentityAgent and IdentityFile accept the tokens %%, %d, %h, %l, %r, and
1041 %u. 1059 %u.
1042 1060
1043 LocalCommand accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, and %u. 1061 LocalCommand accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, %T, and
1062 %u.
1044 1063
1045 ProxyCommand accepts the tokens %%, %h, %p, and %r. 1064 ProxyCommand accepts the tokens %%, %h, %p, and %r.
1046 1065
@@ -1070,4 +1089,4 @@ AUTHORS
1070 created OpenSSH. Markus Friedl contributed the support for SSH protocol 1089 created OpenSSH. Markus Friedl contributed the support for SSH protocol
1071 versions 1.5 and 2.0. 1090 versions 1.5 and 2.0.
1072 1091
1073OpenBSD 6.2 September 21, 2017 OpenBSD 6.2 1092OpenBSD 6.2 February 23, 2018 OpenBSD 6.2
diff --git a/ssh_config.5 b/ssh_config.5
index eab8dd01c..71705cabd 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.256 2017/09/21 19:16:53 markus Exp $ 36.\" $OpenBSD: ssh_config.5,v 1.268 2018/02/23 07:38:09 jmc Exp $
37.Dd $Mdocdate: September 21 2017 $ 37.Dd $Mdocdate: February 23 2018 $
38.Dt SSH_CONFIG 5 38.Dt SSH_CONFIG 5
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -262,6 +262,13 @@ Note that this option does not work if
262.Cm UsePrivilegedPort 262.Cm UsePrivilegedPort
263is set to 263is set to
264.Cm yes . 264.Cm yes .
265.It Cm BindInterface
266Use the address of the specified interface on the local machine as the
267source address of the connection.
268Note that this option does not work if
269.Cm UsePrivilegedPort
270is set to
271.Cm yes .
265.It Cm CanonicalDomains 272.It Cm CanonicalDomains
266When 273When
267.Cm CanonicalizeHostname 274.Cm CanonicalizeHostname
@@ -1015,7 +1022,10 @@ The default is:
1015curve25519-sha256,curve25519-sha256@libssh.org, 1022curve25519-sha256,curve25519-sha256@libssh.org,
1016ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 1023ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
1017diffie-hellman-group-exchange-sha256, 1024diffie-hellman-group-exchange-sha256,
1025diffie-hellman-group16-sha512,
1026diffie-hellman-group18-sha512,
1018diffie-hellman-group-exchange-sha1, 1027diffie-hellman-group-exchange-sha1,
1028diffie-hellman-group14-sha256,
1019diffie-hellman-group14-sha1 1029diffie-hellman-group14-sha1
1020.Ed 1030.Ed
1021.Pp 1031.Pp
@@ -1107,10 +1117,7 @@ hmac-sha2-256,hmac-sha2-512,hmac-sha1
1107The list of available MAC algorithms may also be obtained using 1117The list of available MAC algorithms may also be obtained using
1108.Qq ssh -Q mac . 1118.Qq ssh -Q mac .
1109.It Cm NoHostAuthenticationForLocalhost 1119.It Cm NoHostAuthenticationForLocalhost
1110This option can be used if the home directory is shared across machines. 1120Disable host authentication for localhost (loopback addresses).
1111In this case localhost will refer to a different machine on each of
1112the machines and the user will get many warnings about changed host keys.
1113However, this option disables host authentication for localhost.
1114The argument to this keyword must be 1121The argument to this keyword must be
1115.Cm yes 1122.Cm yes
1116or 1123or
@@ -1198,13 +1205,14 @@ For example, the following directive would connect via an HTTP proxy at
1198ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p 1205ProxyCommand /usr/bin/nc -X connect -x 192.0.2.0:8080 %h %p
1199.Ed 1206.Ed
1200.It Cm ProxyJump 1207.It Cm ProxyJump
1201Specifies one or more jump proxies as 1208Specifies one or more jump proxies as either
1202.Xo 1209.Xo
1203.Sm off 1210.Sm off
1204.Op Ar user No @ 1211.Op Ar user No @
1205.Ar host 1212.Ar host
1206.Op : Ns Ar port 1213.Op : Ns Ar port
1207.Sm on 1214.Sm on
1215or an ssh URI
1208.Xc . 1216.Xc .
1209Multiple proxies may be separated by comma characters and will be visited 1217Multiple proxies may be separated by comma characters and will be visited
1210sequentially. 1218sequentially.
@@ -1457,7 +1465,7 @@ If this flag is set to
1457will never automatically add host keys to the 1465will never automatically add host keys to the
1458.Pa ~/.ssh/known_hosts 1466.Pa ~/.ssh/known_hosts
1459file, and refuses to connect to hosts whose host key has changed. 1467file, and refuses to connect to hosts whose host key has changed.
1460This provides maximum protection against trojan horse attacks, 1468This provides maximum protection against man-in-the-middle (MITM) attacks,
1461though it can be annoying when the 1469though it can be annoying when the
1462.Pa /etc/ssh/ssh_known_hosts 1470.Pa /etc/ssh/ssh_known_hosts
1463file is poorly maintained or when connections to new hosts are 1471file is poorly maintained or when connections to new hosts are
@@ -1509,6 +1517,9 @@ This is important in scripts, and many users want it too.
1509.Pp 1517.Pp
1510To disable TCP keepalive messages, the value should be set to 1518To disable TCP keepalive messages, the value should be set to
1511.Cm no . 1519.Cm no .
1520See also
1521.Cm ServerAliveInterval
1522for protocol-level keepalives.
1512.It Cm Tunnel 1523.It Cm Tunnel
1513Request 1524Request
1514.Xr tun 4 1525.Xr tun 4
@@ -1674,6 +1685,18 @@ pool,
1674the following entry (in authorized_keys) could be used: 1685the following entry (in authorized_keys) could be used:
1675.Pp 1686.Pp
1676.Dl from=\&"!*.dialup.example.com,*.example.com\&" 1687.Dl from=\&"!*.dialup.example.com,*.example.com\&"
1688.Pp
1689Note that a negated match will never produce a positive result by itself.
1690For example, attempting to match
1691.Qq host3
1692against the following pattern-list will fail:
1693.Pp
1694.Dl from=\&"!host1,!host2\&"
1695.Pp
1696The solution here is to include a term that will yield a positive match,
1697such as a wildcard:
1698.Pp
1699.Dl from=\&"!host1,!host2,*\&"
1677.Sh TOKENS 1700.Sh TOKENS
1678Arguments to some keywords can make use of tokens, 1701Arguments to some keywords can make use of tokens,
1679which are expanded at runtime: 1702which are expanded at runtime:
@@ -1683,7 +1706,7 @@ which are expanded at runtime:
1683A literal 1706A literal
1684.Sq % . 1707.Sq % .
1685.It \&%C 1708.It \&%C
1686Shorthand for %l%h%p%r. 1709Hash of %l%h%p%r.
1687.It %d 1710.It %d
1688Local user's home directory. 1711Local user's home directory.
1689.It %h 1712.It %h
@@ -1700,6 +1723,15 @@ The original remote hostname, as given on the command line.
1700The remote port. 1723The remote port.
1701.It %r 1724.It %r
1702The remote username. 1725The remote username.
1726.It \&%T
1727The local
1728.Xr tun 4
1729or
1730.Xr tap 4
1731network interface assigned if
1732tunnel forwarding was requested, or
1733.Qq NONE
1734otherwise.
1703.It %u 1735.It %u
1704The local username. 1736The local username.
1705.El 1737.El
@@ -1722,7 +1754,7 @@ and
1722accept the tokens %%, %d, %h, %l, %r, and %u. 1754accept the tokens %%, %d, %h, %l, %r, and %u.
1723.Pp 1755.Pp
1724.Cm LocalCommand 1756.Cm LocalCommand
1725accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, and %u. 1757accepts the tokens %%, %C, %d, %h, %l, %n, %p, %r, %T, and %u.
1726.Pp 1758.Pp
1727.Cm ProxyCommand 1759.Cm ProxyCommand
1728accepts the tokens %%, %h, %p, and %r. 1760accepts the tokens %%, %h, %p, and %r.
diff --git a/sshconnect.c b/sshconnect.c
index dc7a704d2..3805d35d9 100644
--- a/sshconnect.c
+++ b/sshconnect.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect.c,v 1.287 2017/09/14 04:32:21 djm Exp $ */ 1/* $OpenBSD: sshconnect.c,v 1.297 2018/02/23 15:58:38 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
@@ -23,6 +23,7 @@
23# include <sys/time.h> 23# include <sys/time.h>
24#endif 24#endif
25 25
26#include <net/if.h>
26#include <netinet/in.h> 27#include <netinet/in.h>
27#include <arpa/inet.h> 28#include <arpa/inet.h>
28 29
@@ -43,6 +44,9 @@
43#include <stdlib.h> 44#include <stdlib.h>
44#include <string.h> 45#include <string.h>
45#include <unistd.h> 46#include <unistd.h>
47#ifdef HAVE_IFADDRS_H
48# include <ifaddrs.h>
49#endif
46 50
47#include "xmalloc.h" 51#include "xmalloc.h"
48#include "key.h" 52#include "key.h"
@@ -270,14 +274,83 @@ ssh_kill_proxy_command(void)
270 kill(proxy_command_pid, SIGHUP); 274 kill(proxy_command_pid, SIGHUP);
271} 275}
272 276
277#ifdef HAVE_IFADDRS_H
278/*
279 * Search a interface address list (returned from getifaddrs(3)) for an
280 * address that matches the desired address family on the specifed interface.
281 * Returns 0 and fills in *resultp and *rlenp on success. Returns -1 on failure.
282 */
283static int
284check_ifaddrs(const char *ifname, int af, const struct ifaddrs *ifaddrs,
285 struct sockaddr_storage *resultp, socklen_t *rlenp)
286{
287 struct sockaddr_in6 *sa6;
288 struct sockaddr_in *sa;
289 struct in6_addr *v6addr;
290 const struct ifaddrs *ifa;
291 int allow_local;
292
293 /*
294 * Prefer addresses that are not loopback or linklocal, but use them
295 * if nothing else matches.
296 */
297 for (allow_local = 0; allow_local < 2; allow_local++) {
298 for (ifa = ifaddrs; ifa != NULL; ifa = ifa->ifa_next) {
299 if (ifa->ifa_addr == NULL || ifa->ifa_name == NULL ||
300 (ifa->ifa_flags & IFF_UP) == 0 ||
301 ifa->ifa_addr->sa_family != af ||
302 strcmp(ifa->ifa_name, options.bind_interface) != 0)
303 continue;
304 switch (ifa->ifa_addr->sa_family) {
305 case AF_INET:
306 sa = (struct sockaddr_in *)ifa->ifa_addr;
307 if (!allow_local && sa->sin_addr.s_addr ==
308 htonl(INADDR_LOOPBACK))
309 continue;
310 if (*rlenp < sizeof(struct sockaddr_in)) {
311 error("%s: v4 addr doesn't fit",
312 __func__);
313 return -1;
314 }
315 *rlenp = sizeof(struct sockaddr_in);
316 memcpy(resultp, sa, *rlenp);
317 return 0;
318 case AF_INET6:
319 sa6 = (struct sockaddr_in6 *)ifa->ifa_addr;
320 v6addr = &sa6->sin6_addr;
321 if (!allow_local &&
322 (IN6_IS_ADDR_LINKLOCAL(v6addr) ||
323 IN6_IS_ADDR_LOOPBACK(v6addr)))
324 continue;
325 if (*rlenp < sizeof(struct sockaddr_in6)) {
326 error("%s: v6 addr doesn't fit",
327 __func__);
328 return -1;
329 }
330 *rlenp = sizeof(struct sockaddr_in6);
331 memcpy(resultp, sa6, *rlenp);
332 return 0;
333 }
334 }
335 }
336 return -1;
337}
338#endif
339
273/* 340/*
274 * Creates a (possibly privileged) socket for use as the ssh connection. 341 * Creates a (possibly privileged) socket for use as the ssh connection.
275 */ 342 */
276static int 343static int
277ssh_create_socket(int privileged, struct addrinfo *ai) 344ssh_create_socket(int privileged, struct addrinfo *ai)
278{ 345{
279 int sock, r, gaierr; 346 int sock, r, oerrno;
347 struct sockaddr_storage bindaddr;
348 socklen_t bindaddrlen = 0;
280 struct addrinfo hints, *res = NULL; 349 struct addrinfo hints, *res = NULL;
350#ifdef HAVE_IFADDRS_H
351 struct ifaddrs *ifaddrs = NULL;
352#endif
353 char ntop[NI_MAXHOST];
281 354
282 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); 355 sock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
283 if (sock < 0) { 356 if (sock < 0) {
@@ -287,22 +360,55 @@ ssh_create_socket(int privileged, struct addrinfo *ai)
287 fcntl(sock, F_SETFD, FD_CLOEXEC); 360 fcntl(sock, F_SETFD, FD_CLOEXEC);
288 361
289 /* Bind the socket to an alternative local IP address */ 362 /* Bind the socket to an alternative local IP address */
290 if (options.bind_address == NULL && !privileged) 363 if (options.bind_address == NULL && options.bind_interface == NULL &&
364 !privileged)
291 return sock; 365 return sock;
292 366
293 if (options.bind_address) { 367 if (options.bind_address != NULL) {
294 memset(&hints, 0, sizeof(hints)); 368 memset(&hints, 0, sizeof(hints));
295 hints.ai_family = ai->ai_family; 369 hints.ai_family = ai->ai_family;
296 hints.ai_socktype = ai->ai_socktype; 370 hints.ai_socktype = ai->ai_socktype;
297 hints.ai_protocol = ai->ai_protocol; 371 hints.ai_protocol = ai->ai_protocol;
298 hints.ai_flags = AI_PASSIVE; 372 hints.ai_flags = AI_PASSIVE;
299 gaierr = getaddrinfo(options.bind_address, NULL, &hints, &res); 373 if ((r = getaddrinfo(options.bind_address, NULL,
300 if (gaierr) { 374 &hints, &res)) != 0) {
301 error("getaddrinfo: %s: %s", options.bind_address, 375 error("getaddrinfo: %s: %s", options.bind_address,
302 ssh_gai_strerror(gaierr)); 376 ssh_gai_strerror(r));
303 close(sock); 377 goto fail;
304 return -1; 378 }
379 if (res == NULL) {
380 error("getaddrinfo: no addrs");
381 goto fail;
305 } 382 }
383 if (res->ai_addrlen > sizeof(bindaddr)) {
384 error("%s: addr doesn't fit", __func__);
385 goto fail;
386 }
387 memcpy(&bindaddr, res->ai_addr, res->ai_addrlen);
388 bindaddrlen = res->ai_addrlen;
389 } else if (options.bind_interface != NULL) {
390#ifdef HAVE_IFADDRS_H
391 if ((r = getifaddrs(&ifaddrs)) != 0) {
392 error("getifaddrs: %s: %s", options.bind_interface,
393 strerror(errno));
394 goto fail;
395 }
396 bindaddrlen = sizeof(bindaddr);
397 if (check_ifaddrs(options.bind_interface, ai->ai_family,
398 ifaddrs, &bindaddr, &bindaddrlen) != 0) {
399 logit("getifaddrs: %s: no suitable addresses",
400 options.bind_interface);
401 goto fail;
402 }
403#else
404 error("BindInterface not supported on this platform.");
405#endif
406 }
407 if ((r = getnameinfo((struct sockaddr *)&bindaddr, bindaddrlen,
408 ntop, sizeof(ntop), NULL, 0, NI_NUMERICHOST)) != 0) {
409 error("%s: getnameinfo failed: %s", __func__,
410 ssh_gai_strerror(r));
411 goto fail;
306 } 412 }
307 /* 413 /*
308 * If we are running as root and want to connect to a privileged 414 * If we are running as root and want to connect to a privileged
@@ -310,25 +416,32 @@ ssh_create_socket(int privileged, struct addrinfo *ai)
310 */ 416 */
311 if (privileged) { 417 if (privileged) {
312 PRIV_START; 418 PRIV_START;
313 r = bindresvport_sa(sock, res ? res->ai_addr : NULL); 419 r = bindresvport_sa(sock,
420 bindaddrlen == 0 ? NULL : (struct sockaddr *)&bindaddr);
421 oerrno = errno;
314 PRIV_END; 422 PRIV_END;
315 if (r < 0) { 423 if (r < 0) {
316 error("bindresvport_sa: af=%d %s", ai->ai_family, 424 error("bindresvport_sa %s: %s", ntop,
317 strerror(errno)); 425 strerror(oerrno));
318 goto fail; 426 goto fail;
319 } 427 }
320 } else { 428 } else if (bind(sock, (struct sockaddr *)&bindaddr, bindaddrlen) != 0) {
321 if (bind(sock, res->ai_addr, res->ai_addrlen) < 0) { 429 error("bind %s: %s", ntop, strerror(errno));
322 error("bind: %s: %s", options.bind_address, 430 goto fail;
323 strerror(errno));
324 fail:
325 close(sock);
326 freeaddrinfo(res);
327 return -1;
328 }
329 } 431 }
432 debug("%s: bound to %s", __func__, ntop);
433 /* success */
434 goto out;
435fail:
436 close(sock);
437 sock = -1;
438 out:
330 if (res != NULL) 439 if (res != NULL)
331 freeaddrinfo(res); 440 freeaddrinfo(res);
441#ifdef HAVE_IFADDRS_H
442 if (ifaddrs != NULL)
443 freeifaddrs(ifaddrs);
444#endif
332 return sock; 445 return sock;
333} 446}
334 447
@@ -344,7 +457,7 @@ waitrfd(int fd, int *timeoutp)
344 struct timeval t_start; 457 struct timeval t_start;
345 int oerrno, r; 458 int oerrno, r;
346 459
347 gettimeofday(&t_start, NULL); 460 monotime_tv(&t_start);
348 pfd.fd = fd; 461 pfd.fd = fd;
349 pfd.events = POLLIN; 462 pfd.events = POLLIN;
350 for (; *timeoutp >= 0;) { 463 for (; *timeoutp >= 0;) {
@@ -416,7 +529,7 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
416 int connection_attempts, int *timeout_ms, int want_keepalive, int needpriv) 529 int connection_attempts, int *timeout_ms, int want_keepalive, int needpriv)
417{ 530{
418 int on = 1; 531 int on = 1;
419 int sock = -1, attempt; 532 int oerrno, sock = -1, attempt;
420 char ntop[NI_MAXHOST], strport[NI_MAXSERV]; 533 char ntop[NI_MAXHOST], strport[NI_MAXSERV];
421 struct addrinfo *ai; 534 struct addrinfo *ai;
422 535
@@ -436,12 +549,16 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
436 */ 549 */
437 for (ai = aitop; ai; ai = ai->ai_next) { 550 for (ai = aitop; ai; ai = ai->ai_next) {
438 if (ai->ai_family != AF_INET && 551 if (ai->ai_family != AF_INET &&
439 ai->ai_family != AF_INET6) 552 ai->ai_family != AF_INET6) {
553 errno = EAFNOSUPPORT;
440 continue; 554 continue;
555 }
441 if (getnameinfo(ai->ai_addr, ai->ai_addrlen, 556 if (getnameinfo(ai->ai_addr, ai->ai_addrlen,
442 ntop, sizeof(ntop), strport, sizeof(strport), 557 ntop, sizeof(ntop), strport, sizeof(strport),
443 NI_NUMERICHOST|NI_NUMERICSERV) != 0) { 558 NI_NUMERICHOST|NI_NUMERICSERV) != 0) {
559 oerrno = errno;
444 error("%s: getnameinfo failed", __func__); 560 error("%s: getnameinfo failed", __func__);
561 errno = oerrno;
445 continue; 562 continue;
446 } 563 }
447 debug("Connecting to %.200s [%.100s] port %s.", 564 debug("Connecting to %.200s [%.100s] port %s.",
@@ -449,9 +566,11 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
449 566
450 /* Create a socket for connecting. */ 567 /* Create a socket for connecting. */
451 sock = ssh_create_socket(needpriv, ai); 568 sock = ssh_create_socket(needpriv, ai);
452 if (sock < 0) 569 if (sock < 0) {
453 /* Any error is already output */ 570 /* Any error is already output */
571 errno = 0;
454 continue; 572 continue;
573 }
455 574
456 if (timeout_connect(sock, ai->ai_addr, ai->ai_addrlen, 575 if (timeout_connect(sock, ai->ai_addr, ai->ai_addrlen,
457 timeout_ms) >= 0) { 576 timeout_ms) >= 0) {
@@ -459,10 +578,12 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
459 memcpy(hostaddr, ai->ai_addr, ai->ai_addrlen); 578 memcpy(hostaddr, ai->ai_addr, ai->ai_addrlen);
460 break; 579 break;
461 } else { 580 } else {
581 oerrno = errno;
462 debug("connect to address %s port %s: %s", 582 debug("connect to address %s port %s: %s",
463 ntop, strport, strerror(errno)); 583 ntop, strport, strerror(errno));
464 close(sock); 584 close(sock);
465 sock = -1; 585 sock = -1;
586 errno = oerrno;
466 } 587 }
467 } 588 }
468 if (sock != -1) 589 if (sock != -1)
@@ -472,8 +593,8 @@ ssh_connect_direct(struct ssh *ssh, const char *host, struct addrinfo *aitop,
472 /* Return failure if we didn't get a successful connection. */ 593 /* Return failure if we didn't get a successful connection. */
473 if (sock == -1) { 594 if (sock == -1) {
474 error("ssh: connect to host %s port %s: %s", 595 error("ssh: connect to host %s port %s: %s",
475 host, strport, strerror(errno)); 596 host, strport, errno == 0 ? "failure" : strerror(errno));
476 return (-1); 597 return -1;
477 } 598 }
478 599
479 debug("Connection established."); 600 debug("Connection established.");
@@ -610,9 +731,6 @@ ssh_exchange_identification(int timeout_ms)
610 if (mismatch) 731 if (mismatch)
611 fatal("Protocol major versions differ: %d vs. %d", 732 fatal("Protocol major versions differ: %d vs. %d",
612 PROTOCOL_MAJOR_2, remote_major); 733 PROTOCOL_MAJOR_2, remote_major);
613 if ((datafellows & SSH_BUG_DERIVEKEY) != 0)
614 fatal("Server version \"%.100s\" uses unsafe key agreement; "
615 "refusing connection", remote_version);
616 if ((datafellows & SSH_BUG_RSASIGMD5) != 0) 734 if ((datafellows & SSH_BUG_RSASIGMD5) != 0)
617 logit("Server version \"%.100s\" uses unsafe RSA signature " 735 logit("Server version \"%.100s\" uses unsafe RSA signature "
618 "scheme; disabling use of RSA keys", remote_version); 736 "scheme; disabling use of RSA keys", remote_version);
@@ -631,11 +749,12 @@ confirm(const char *prompt)
631 return 0; 749 return 0;
632 for (msg = prompt;;msg = again) { 750 for (msg = prompt;;msg = again) {
633 p = read_passphrase(msg, RP_ECHO); 751 p = read_passphrase(msg, RP_ECHO);
634 if (p == NULL || 752 if (p == NULL)
635 (p[0] == '\0') || (p[0] == '\n') || 753 return 0;
636 strncasecmp(p, "no", 2) == 0) 754 p[strcspn(p, "\n")] = '\0';
755 if (p[0] == '\0' || strcasecmp(p, "no") == 0)
637 ret = 0; 756 ret = 0;
638 if (p && strncasecmp(p, "yes", 3) == 0) 757 else if (strcasecmp(p, "yes") == 0)
639 ret = 1; 758 ret = 1;
640 free(p); 759 free(p);
641 if (ret != -1) 760 if (ret != -1)
@@ -1171,8 +1290,7 @@ fail:
1171 host_key = raw_key; 1290 host_key = raw_key;
1172 goto retry; 1291 goto retry;
1173 } 1292 }
1174 if (raw_key != NULL) 1293 sshkey_free(raw_key);
1175 sshkey_free(raw_key);
1176 free(ip); 1294 free(ip);
1177 free(host); 1295 free(host);
1178 if (host_hostkeys != NULL) 1296 if (host_hostkeys != NULL)
@@ -1357,6 +1475,7 @@ show_other_keys(struct hostkeys *hostkeys, struct sshkey *key)
1357 KEY_DSA, 1475 KEY_DSA,
1358 KEY_ECDSA, 1476 KEY_ECDSA,
1359 KEY_ED25519, 1477 KEY_ED25519,
1478 KEY_XMSS,
1360 -1 1479 -1
1361 }; 1480 };
1362 int i, ret = 0; 1481 int i, ret = 0;
@@ -1453,8 +1572,8 @@ ssh_local_cmd(const char *args)
1453} 1572}
1454 1573
1455void 1574void
1456maybe_add_key_to_agent(char *authfile, struct sshkey *private, char *comment, 1575maybe_add_key_to_agent(char *authfile, const struct sshkey *private,
1457 char *passphrase) 1576 char *comment, char *passphrase)
1458{ 1577{
1459 int auth_sock = -1, r; 1578 int auth_sock = -1, r;
1460 1579
@@ -1474,7 +1593,7 @@ maybe_add_key_to_agent(char *authfile, struct sshkey *private, char *comment,
1474 } 1593 }
1475 1594
1476 if ((r = ssh_add_identity_constrained(auth_sock, private, comment, 0, 1595 if ((r = ssh_add_identity_constrained(auth_sock, private, comment, 0,
1477 (options.add_keys_to_agent == 3))) == 0) 1596 (options.add_keys_to_agent == 3), 0)) == 0)
1478 debug("identity added to agent: %s", authfile); 1597 debug("identity added to agent: %s", authfile);
1479 else 1598 else
1480 debug("could not add identity to agent: %s (%d)", authfile, r); 1599 debug("could not add identity to agent: %s (%d)", authfile, r);
diff --git a/sshconnect.h b/sshconnect.h
index b5029e234..dd648b096 100644
--- a/sshconnect.h
+++ b/sshconnect.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect.h,v 1.31 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: sshconnect.h,v 1.32 2018/02/10 09:25:35 djm Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2000 Markus Friedl. All rights reserved. 4 * Copyright (c) 2000 Markus Friedl. All rights reserved.
@@ -57,7 +57,7 @@ void ssh_userauth2(const char *, const char *, char *, Sensitive *);
57void ssh_put_password(char *); 57void ssh_put_password(char *);
58int ssh_local_cmd(const char *); 58int ssh_local_cmd(const char *);
59 59
60void maybe_add_key_to_agent(char *, struct sshkey *, char *, char *); 60void maybe_add_key_to_agent(char *, const struct sshkey *, char *, char *);
61 61
62/* 62/*
63 * Macros to raise/lower permissions. 63 * Macros to raise/lower permissions.
diff --git a/sshconnect2.c b/sshconnect2.c
index be9397e48..1f4a74cf4 100644
--- a/sshconnect2.c
+++ b/sshconnect2.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshconnect2.c,v 1.266 2017/08/27 00:38:41 dtucker Exp $ */ 1/* $OpenBSD: sshconnect2.c,v 1.270 2018/03/24 19:28:43 markus 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.
@@ -578,7 +578,6 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
578 Authctxt *authctxt = ssh->authctxt; 578 Authctxt *authctxt = ssh->authctxt;
579 struct sshkey *key = NULL; 579 struct sshkey *key = NULL;
580 Identity *id = NULL; 580 Identity *id = NULL;
581 Buffer b;
582 int pktype, sent = 0; 581 int pktype, sent = 0;
583 u_int alen, blen; 582 u_int alen, blen;
584 char *pkalg, *fp; 583 char *pkalg, *fp;
@@ -586,18 +585,9 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
586 585
587 if (authctxt == NULL) 586 if (authctxt == NULL)
588 fatal("input_userauth_pk_ok: no authentication context"); 587 fatal("input_userauth_pk_ok: no authentication context");
589 if (datafellows & SSH_BUG_PKOK) { 588
590 /* this is similar to SSH_BUG_PKAUTH */ 589 pkalg = packet_get_string(&alen);
591 debug2("input_userauth_pk_ok: SSH_BUG_PKOK"); 590 pkblob = packet_get_string(&blen);
592 pkblob = packet_get_string(&blen);
593 buffer_init(&b);
594 buffer_append(&b, pkblob, blen);
595 pkalg = buffer_get_string(&b, &alen);
596 buffer_free(&b);
597 } else {
598 pkalg = packet_get_string(&alen);
599 pkblob = packet_get_string(&blen);
600 }
601 packet_check_eom(); 591 packet_check_eom();
602 592
603 debug("Server accepts key: pkalg %s blen %u", pkalg, blen); 593 debug("Server accepts key: pkalg %s blen %u", pkalg, blen);
@@ -634,8 +624,7 @@ input_userauth_pk_ok(int type, u_int32_t seq, struct ssh *ssh)
634 } 624 }
635 } 625 }
636done: 626done:
637 if (key != NULL) 627 key_free(key);
638 key_free(key);
639 free(pkalg); 628 free(pkalg);
640 free(pkblob); 629 free(pkblob);
641 630
@@ -1013,17 +1002,46 @@ key_sign_encode(const struct sshkey *key)
1013 return key_ssh_name(key); 1002 return key_ssh_name(key);
1014} 1003}
1015 1004
1005/*
1006 * Some agents will return ssh-rsa signatures when asked to make a
1007 * rsa-sha2-* signature. Check what they actually gave back and warn the
1008 * user if the agent has returned an unexpected type.
1009 */
1010static int
1011check_sigtype(const struct sshkey *key, const u_char *sig, size_t len)
1012{
1013 int r;
1014 char *sigtype = NULL;
1015 const char *alg = key_sign_encode(key);
1016
1017 if (sshkey_is_cert(key))
1018 return 0;
1019 if ((r = sshkey_sigtype(sig, len, &sigtype)) != 0)
1020 return r;
1021 if (strcmp(sigtype, alg) != 0) {
1022 logit("warning: agent returned different signature type %s "
1023 "(expected %s)", sigtype, alg);
1024 }
1025 free(sigtype);
1026 /* Incorrect signature types aren't an error ... yet */
1027 return 0;
1028}
1029
1016static int 1030static int
1017identity_sign(struct identity *id, u_char **sigp, size_t *lenp, 1031identity_sign(struct identity *id, u_char **sigp, size_t *lenp,
1018 const u_char *data, size_t datalen, u_int compat) 1032 const u_char *data, size_t datalen, u_int compat)
1019{ 1033{
1020 struct sshkey *prv; 1034 struct sshkey *prv;
1021 int ret; 1035 int r;
1022 1036
1023 /* the agent supports this key */ 1037 /* the agent supports this key */
1024 if (id->key != NULL && id->agent_fd != -1) 1038 if (id->key != NULL && id->agent_fd != -1) {
1025 return ssh_agent_sign(id->agent_fd, id->key, sigp, lenp, 1039 if ((r = ssh_agent_sign(id->agent_fd, id->key, sigp, lenp,
1026 data, datalen, key_sign_encode(id->key), compat); 1040 data, datalen, key_sign_encode(id->key), compat)) != 0 ||
1041 (r = check_sigtype(id->key, *sigp, *lenp)) != 0)
1042 return r;
1043 return 0;
1044 }
1027 1045
1028 /* 1046 /*
1029 * we have already loaded the private key or 1047 * we have already loaded the private key or
@@ -1042,10 +1060,10 @@ identity_sign(struct identity *id, u_char **sigp, size_t *lenp,
1042 __func__, id->filename); 1060 __func__, id->filename);
1043 return SSH_ERR_KEY_NOT_FOUND; 1061 return SSH_ERR_KEY_NOT_FOUND;
1044 } 1062 }
1045 ret = sshkey_sign(prv, sigp, lenp, data, datalen, 1063 r = sshkey_sign(prv, sigp, lenp, data, datalen,
1046 key_sign_encode(prv), compat); 1064 key_sign_encode(prv), compat);
1047 sshkey_free(prv); 1065 sshkey_free(prv);
1048 return (ret); 1066 return r;
1049} 1067}
1050 1068
1051static int 1069static int
@@ -1100,17 +1118,10 @@ sign_and_send_pubkey(Authctxt *authctxt, Identity *id)
1100 } 1118 }
1101 buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST); 1119 buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST);
1102 buffer_put_cstring(&b, authctxt->server_user); 1120 buffer_put_cstring(&b, authctxt->server_user);
1103 buffer_put_cstring(&b, 1121 buffer_put_cstring(&b, authctxt->service);
1104 datafellows & SSH_BUG_PKSERVICE ? 1122 buffer_put_cstring(&b, authctxt->method->name);
1105 "ssh-userauth" : 1123 buffer_put_char(&b, have_sig);
1106 authctxt->service); 1124 buffer_put_cstring(&b, key_sign_encode(id->key));
1107 if (datafellows & SSH_BUG_PKAUTH) {
1108 buffer_put_char(&b, have_sig);
1109 } else {
1110 buffer_put_cstring(&b, authctxt->method->name);
1111 buffer_put_char(&b, have_sig);
1112 buffer_put_cstring(&b, key_sign_encode(id->key));
1113 }
1114 buffer_put_string(&b, blob, bloblen); 1125 buffer_put_string(&b, blob, bloblen);
1115 1126
1116 /* 1127 /*
@@ -1170,19 +1181,6 @@ sign_and_send_pubkey(Authctxt *authctxt, Identity *id)
1170#ifdef DEBUG_PK 1181#ifdef DEBUG_PK
1171 buffer_dump(&b); 1182 buffer_dump(&b);
1172#endif 1183#endif
1173 if (datafellows & SSH_BUG_PKSERVICE) {
1174 buffer_clear(&b);
1175 buffer_append(&b, session_id2, session_id2_len);
1176 skip = session_id2_len;
1177 buffer_put_char(&b, SSH2_MSG_USERAUTH_REQUEST);
1178 buffer_put_cstring(&b, authctxt->server_user);
1179 buffer_put_cstring(&b, authctxt->service);
1180 buffer_put_cstring(&b, authctxt->method->name);
1181 buffer_put_char(&b, have_sig);
1182 if (!(datafellows & SSH_BUG_PKAUTH))
1183 buffer_put_cstring(&b, key_ssh_name(id->key));
1184 buffer_put_string(&b, blob, bloblen);
1185 }
1186 free(blob); 1184 free(blob);
1187 1185
1188 /* append signature */ 1186 /* append signature */
@@ -1224,8 +1222,7 @@ send_pubkey_test(Authctxt *authctxt, Identity *id)
1224 packet_put_cstring(authctxt->service); 1222 packet_put_cstring(authctxt->service);
1225 packet_put_cstring(authctxt->method->name); 1223 packet_put_cstring(authctxt->method->name);
1226 packet_put_char(have_sig); 1224 packet_put_char(have_sig);
1227 if (!(datafellows & SSH_BUG_PKAUTH)) 1225 packet_put_cstring(key_sign_encode(id->key));
1228 packet_put_cstring(key_sign_encode(id->key));
1229 packet_put_string(blob, bloblen); 1226 packet_put_string(blob, bloblen);
1230 free(blob); 1227 free(blob);
1231 packet_send(); 1228 packet_send();
@@ -1741,7 +1738,6 @@ userauth_hostbased(Authctxt *authctxt)
1741 struct ssh *ssh = active_state; 1738 struct ssh *ssh = active_state;
1742 struct sshkey *private = NULL; 1739 struct sshkey *private = NULL;
1743 struct sshbuf *b = NULL; 1740 struct sshbuf *b = NULL;
1744 const char *service;
1745 u_char *sig = NULL, *keyblob = NULL; 1741 u_char *sig = NULL, *keyblob = NULL;
1746 char *fp = NULL, *chost = NULL, *lname = NULL; 1742 char *fp = NULL, *chost = NULL, *lname = NULL;
1747 size_t siglen = 0, keylen = 0; 1743 size_t siglen = 0, keylen = 0;
@@ -1812,9 +1808,6 @@ userauth_hostbased(Authctxt *authctxt)
1812 xasprintf(&chost, "%s.", lname); 1808 xasprintf(&chost, "%s.", lname);
1813 debug2("%s: chost %s", __func__, chost); 1809 debug2("%s: chost %s", __func__, chost);
1814 1810
1815 service = datafellows & SSH_BUG_HBSERVICE ? "ssh-userauth" :
1816 authctxt->service;
1817
1818 /* construct data */ 1811 /* construct data */
1819 if ((b = sshbuf_new()) == NULL) { 1812 if ((b = sshbuf_new()) == NULL) {
1820 error("%s: sshbuf_new failed", __func__); 1813 error("%s: sshbuf_new failed", __func__);
@@ -1827,7 +1820,7 @@ userauth_hostbased(Authctxt *authctxt)
1827 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 || 1820 if ((r = sshbuf_put_string(b, session_id2, session_id2_len)) != 0 ||
1828 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 || 1821 (r = sshbuf_put_u8(b, SSH2_MSG_USERAUTH_REQUEST)) != 0 ||
1829 (r = sshbuf_put_cstring(b, authctxt->server_user)) != 0 || 1822 (r = sshbuf_put_cstring(b, authctxt->server_user)) != 0 ||
1830 (r = sshbuf_put_cstring(b, service)) != 0 || 1823 (r = sshbuf_put_cstring(b, authctxt->service)) != 0 ||
1831 (r = sshbuf_put_cstring(b, authctxt->method->name)) != 0 || 1824 (r = sshbuf_put_cstring(b, authctxt->method->name)) != 0 ||
1832 (r = sshbuf_put_cstring(b, key_ssh_name(private))) != 0 || 1825 (r = sshbuf_put_cstring(b, key_ssh_name(private))) != 0 ||
1833 (r = sshbuf_put_string(b, keyblob, keylen)) != 0 || 1826 (r = sshbuf_put_string(b, keyblob, keylen)) != 0 ||
diff --git a/sshd.0 b/sshd.0
index 92c8ec533..999d160bf 100644
--- a/sshd.0
+++ b/sshd.0
@@ -33,12 +33,14 @@ DESCRIPTION
33 -C connection_spec 33 -C connection_spec
34 Specify the connection parameters to use for the -T extended test 34 Specify the connection parameters to use for the -T extended test
35 mode. If provided, any Match directives in the configuration 35 mode. If provided, any Match directives in the configuration
36 file that would apply to the specified user, host, and address 36 file that would apply are applied before the configuration is
37 will be set before the configuration is written to standard 37 written to standard output. The connection parameters are
38 output. The connection parameters are supplied as keyword=value 38 supplied as keyword=value pairs and may be supplied in any order,
39 pairs. The keywords are M-bM-^@M-^\userM-bM-^@M-^], M-bM-^@M-^\hostM-bM-^@M-^], M-bM-^@M-^\laddrM-bM-^@M-^], M-bM-^@M-^\lportM-bM-^@M-^], and
40 M-bM-^@M-^\addrM-bM-^@M-^]. All are required and may be supplied in any order,
41 either with multiple -C options or as a comma-separated list. 39 either with multiple -C options or as a comma-separated list.
40 The keywords are M-bM-^@M-^\addr,M-bM-^@M-^] M-bM-^@M-^\userM-bM-^@M-^], M-bM-^@M-^\hostM-bM-^@M-^], M-bM-^@M-^\laddrM-bM-^@M-^], M-bM-^@M-^\lportM-bM-^@M-^], and
41 M-bM-^@M-^\rdomainM-bM-^@M-^] and correspond to source address, user, resolved source
42 host name, local address, local port number and routing domain
43 respectively.
42 44
43 -c host_certificate_file 45 -c host_certificate_file
44 Specifies a path to a certificate file to identify sshd during 46 Specifies a path to a certificate file to identify sshd during
@@ -75,10 +77,9 @@ DESCRIPTION
75 Specifies a file from which a host key is read. This option must 77 Specifies a file from which a host key is read. This option must
76 be given if sshd is not run as root (as the normal host key files 78 be given if sshd is not run as root (as the normal host key files
77 are normally not readable by anyone but root). The default is 79 are normally not readable by anyone but root). The default is
78 /etc/ssh/ssh_host_dsa_key, /etc/ssh/ssh_host_ecdsa_key, 80 /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key and
79 /etc/ssh/ssh_host_ed25519_key and /etc/ssh/ssh_host_rsa_key. It 81 /etc/ssh/ssh_host_rsa_key. It is possible to have multiple host
80 is possible to have multiple host key files for the different 82 key files for the different host key algorithms.
81 host key algorithms.
82 83
83 -i Specifies that sshd is being run from inetd(8). 84 -i Specifies that sshd is being run from inetd(8).
84 85
@@ -247,7 +248,7 @@ AUTHORIZED_KEYS FILE FORMAT
247 You don't want to type them in; instead, copy the id_dsa.pub, 248 You don't want to type them in; instead, copy the id_dsa.pub,
248 id_ecdsa.pub, id_ed25519.pub, or the id_rsa.pub file and edit it. 249 id_ecdsa.pub, id_ed25519.pub, or the id_rsa.pub file and edit it.
249 250
250 sshd enforces a minimum RSA key modulus size of 768 bits. 251 sshd enforces a minimum RSA key modulus size of 1024 bits.
251 252
252 The options (if present) consist of comma-separated option 253 The options (if present) consist of comma-separated option
253 specifications. No spaces are permitted, except within double quotes. 254 specifications. No spaces are permitted, except within double quotes.
@@ -299,6 +300,11 @@ AUTHORIZED_KEYS FILE FORMAT
299 this type are permitted. Environment processing is disabled by 300 this type are permitted. Environment processing is disabled by
300 default and is controlled via the PermitUserEnvironment option. 301 default and is controlled via the PermitUserEnvironment option.
301 302
303 expiry-time="timespec"
304 Specifies a time after which the key will not be accepted. The
305 time may be specified as a YYYYMMDD date or a YYYYMMDDHHMM[SS]
306 time in the system time-zone.
307
302 from="pattern-list" 308 from="pattern-list"
303 Specifies that in addition to public key authentication, either 309 Specifies that in addition to public key authentication, either
304 the canonical name of the remote host or its IP address must be 310 the canonical name of the remote host or its IP address must be
@@ -346,6 +352,7 @@ AUTHORIZED_KEYS FILE FORMAT
346 352
347 port-forwarding 353 port-forwarding
348 Enable port forwarding previously disabled by the restrict 354 Enable port forwarding previously disabled by the restrict
355 option.
349 356
350 principals="principals" 357 principals="principals"
351 On a cert-authority line, specifies allowed principals for 358 On a cert-authority line, specifies allowed principals for
@@ -567,7 +574,6 @@ FILES
567 allows host-based authentication without permitting login with 574 allows host-based authentication without permitting login with
568 rlogin/rsh. 575 rlogin/rsh.
569 576
570 /etc/ssh/ssh_host_dsa_key
571 /etc/ssh/ssh_host_ecdsa_key 577 /etc/ssh/ssh_host_ecdsa_key
572 /etc/ssh/ssh_host_ed25519_key 578 /etc/ssh/ssh_host_ed25519_key
573 /etc/ssh/ssh_host_rsa_key 579 /etc/ssh/ssh_host_rsa_key
@@ -576,7 +582,6 @@ FILES
576 not accessible to others. Note that sshd does not start if these 582 not accessible to others. Note that sshd does not start if these
577 files are group/world-accessible. 583 files are group/world-accessible.
578 584
579 /etc/ssh/ssh_host_dsa_key.pub
580 /etc/ssh/ssh_host_ecdsa_key.pub 585 /etc/ssh/ssh_host_ecdsa_key.pub
581 /etc/ssh/ssh_host_ed25519_key.pub 586 /etc/ssh/ssh_host_ed25519_key.pub
582 /etc/ssh/ssh_host_rsa_key.pub 587 /etc/ssh/ssh_host_rsa_key.pub
@@ -629,4 +634,4 @@ AUTHORS
629 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support 634 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
630 for privilege separation. 635 for privilege separation.
631 636
632OpenBSD 6.2 June 24, 2017 OpenBSD 6.2 637OpenBSD 6.2 March 14, 2018 OpenBSD 6.2
diff --git a/sshd.8 b/sshd.8
index a4201146b..968ba66bb 100644
--- a/sshd.8
+++ b/sshd.8
@@ -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.8,v 1.291 2017/06/24 06:28:50 jmc Exp $ 36.\" $OpenBSD: sshd.8,v 1.299 2018/03/14 06:56:20 jmc Exp $
37.Dd $Mdocdate: June 24 2017 $ 37.Dd $Mdocdate: March 14 2018 $
38.Dt SSHD 8 38.Dt SSHD 8
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -100,20 +100,22 @@ Specify the connection parameters to use for the
100extended test mode. 100extended test mode.
101If provided, any 101If provided, any
102.Cm Match 102.Cm Match
103directives in the configuration file 103directives in the configuration file that would apply are applied before the
104that would apply to the specified user, host, and address will be set before 104configuration is written to standard output.
105the configuration is written to standard output. 105The connection parameters are supplied as keyword=value pairs and may be
106The connection parameters are supplied as keyword=value pairs. 106supplied in any order, either with multiple
107.Fl C
108options or as a comma-separated list.
107The keywords are 109The keywords are
110.Dq addr,
108.Dq user , 111.Dq user ,
109.Dq host , 112.Dq host ,
110.Dq laddr , 113.Dq laddr ,
111.Dq lport , 114.Dq lport ,
112and 115and
113.Dq addr . 116.Dq rdomain
114All are required and may be supplied in any order, either with multiple 117and correspond to source address, user, resolved source host name,
115.Fl C 118local address, local port number and routing domain respectively.
116options or as a comma-separated list.
117.It Fl c Ar host_certificate_file 119.It Fl c Ar host_certificate_file
118Specifies a path to a certificate file to identify 120Specifies a path to a certificate file to identify
119.Nm 121.Nm
@@ -164,7 +166,6 @@ This option must be given if
164is not run as root (as the normal 166is not run as root (as the normal
165host key files are normally not readable by anyone but root). 167host key files are normally not readable by anyone but root).
166The default is 168The default is
167.Pa /etc/ssh/ssh_host_dsa_key ,
168.Pa /etc/ssh/ssh_host_ecdsa_key , 169.Pa /etc/ssh/ssh_host_ecdsa_key ,
169.Pa /etc/ssh/ssh_host_ed25519_key 170.Pa /etc/ssh/ssh_host_ed25519_key
170and 171and
@@ -452,7 +453,7 @@ or the
452file and edit it. 453file and edit it.
453.Pp 454.Pp
454.Nm 455.Nm
455enforces a minimum RSA key modulus size of 768 bits. 456enforces a minimum RSA key modulus size of 1024 bits.
456.Pp 457.Pp
457The options (if present) consist of comma-separated option 458The options (if present) consist of comma-separated option
458specifications. 459specifications.
@@ -512,6 +513,10 @@ Environment processing is disabled by default and is
512controlled via the 513controlled via the
513.Cm PermitUserEnvironment 514.Cm PermitUserEnvironment
514option. 515option.
516.It Cm expiry-time="timespec"
517Specifies a time after which the key will not be accepted.
518The time may be specified as a YYYYMMDD date or a YYYYMMDDHHMM[SS] time
519in the system time-zone.
515.It Cm from="pattern-list" 520.It Cm from="pattern-list"
516Specifies that in addition to public key authentication, either the canonical 521Specifies that in addition to public key authentication, either the canonical
517name of the remote host or its IP address must be present in the 522name of the remote host or its IP address must be present in the
@@ -566,6 +571,7 @@ matches any port.
566.It Cm port-forwarding 571.It Cm port-forwarding
567Enable port forwarding previously disabled by the 572Enable port forwarding previously disabled by the
568.Cm restrict 573.Cm restrict
574option.
569.It Cm principals="principals" 575.It Cm principals="principals"
570On a 576On a
571.Cm cert-authority 577.Cm cert-authority
@@ -871,7 +877,6 @@ This file is used in exactly the same way as
871but allows host-based authentication without permitting login with 877but allows host-based authentication without permitting login with
872rlogin/rsh. 878rlogin/rsh.
873.Pp 879.Pp
874.It Pa /etc/ssh/ssh_host_dsa_key
875.It Pa /etc/ssh/ssh_host_ecdsa_key 880.It Pa /etc/ssh/ssh_host_ecdsa_key
876.It Pa /etc/ssh/ssh_host_ed25519_key 881.It Pa /etc/ssh/ssh_host_ed25519_key
877.It Pa /etc/ssh/ssh_host_rsa_key 882.It Pa /etc/ssh/ssh_host_rsa_key
@@ -882,7 +887,6 @@ Note that
882.Nm 887.Nm
883does not start if these files are group/world-accessible. 888does not start if these files are group/world-accessible.
884.Pp 889.Pp
885.It Pa /etc/ssh/ssh_host_dsa_key.pub
886.It Pa /etc/ssh/ssh_host_ecdsa_key.pub 890.It Pa /etc/ssh/ssh_host_ecdsa_key.pub
887.It Pa /etc/ssh/ssh_host_ed25519_key.pub 891.It Pa /etc/ssh/ssh_host_ed25519_key.pub
888.It Pa /etc/ssh/ssh_host_rsa_key.pub 892.It Pa /etc/ssh/ssh_host_rsa_key.pub
diff --git a/sshd.c b/sshd.c
index 51a1aaf6e..fd95b681b 100644
--- a/sshd.c
+++ b/sshd.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshd.c,v 1.492 2017/09/12 06:32:07 djm Exp $ */ 1/* $OpenBSD: sshd.c,v 1.506 2018/03/03 03:15:51 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
@@ -119,6 +119,7 @@
119#endif 119#endif
120#include "monitor_wrap.h" 120#include "monitor_wrap.h"
121#include "ssh-sandbox.h" 121#include "ssh-sandbox.h"
122#include "auth-options.h"
122#include "version.h" 123#include "version.h"
123#include "ssherr.h" 124#include "ssherr.h"
124 125
@@ -144,7 +145,12 @@ char *config_file_name = _PATH_SERVER_CONFIG_FILE;
144 */ 145 */
145int debug_flag = 0; 146int debug_flag = 0;
146 147
147/* Flag indicating that the daemon should only test the configuration and keys. */ 148/*
149 * Indicating that the daemon should only test the configuration and keys.
150 * If test_flag > 1 ("-T" flag), then sshd will also dump the effective
151 * configuration, optionally using connection information provided by the
152 * "-C" flag.
153 */
148int test_flag = 0; 154int test_flag = 0;
149 155
150/* Flag indicating that the daemon is being started from inetd. */ 156/* Flag indicating that the daemon is being started from inetd. */
@@ -227,6 +233,9 @@ static int privsep_chroot = 1;
227/* global authentication context */ 233/* global authentication context */
228Authctxt *the_authctxt = NULL; 234Authctxt *the_authctxt = NULL;
229 235
236/* global key/cert auth options. XXX move to permanent ssh->authctxt? */
237struct sshauthopt *auth_opts = NULL;
238
230/* sshd_config buffer */ 239/* sshd_config buffer */
231Buffer cfg; 240Buffer cfg;
232 241
@@ -278,7 +287,6 @@ sighup_handler(int sig)
278 int save_errno = errno; 287 int save_errno = errno;
279 288
280 received_sighup = 1; 289 received_sighup = 1;
281 signal(SIGHUP, sighup_handler);
282 errno = save_errno; 290 errno = save_errno;
283} 291}
284 292
@@ -328,8 +336,6 @@ main_sigchld_handler(int sig)
328 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 || 336 while ((pid = waitpid(-1, &status, WNOHANG)) > 0 ||
329 (pid < 0 && errno == EINTR)) 337 (pid < 0 && errno == EINTR))
330 ; 338 ;
331
332 signal(SIGCHLD, main_sigchld_handler);
333 errno = save_errno; 339 errno = save_errno;
334} 340}
335 341
@@ -441,16 +447,12 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
441 logit("Client version \"%.100s\" uses unsafe RSA signature " 447 logit("Client version \"%.100s\" uses unsafe RSA signature "
442 "scheme; disabling use of RSA keys", remote_version); 448 "scheme; disabling use of RSA keys", remote_version);
443 } 449 }
444 if ((ssh->compat & SSH_BUG_DERIVEKEY) != 0) {
445 fatal("Client version \"%.100s\" uses unsafe key agreement; "
446 "refusing connection", remote_version);
447 }
448 450
449 chop(server_version_string); 451 chop(server_version_string);
450 debug("Local version string %.200s", server_version_string); 452 debug("Local version string %.200s", server_version_string);
451 453
452 if (remote_major != 2 || 454 if (remote_major != 2 &&
453 (remote_major == 1 && remote_minor != 99)) { 455 !(remote_major == 1 && remote_minor == 99)) {
454 s = "Protocol major versions differ.\n"; 456 s = "Protocol major versions differ.\n";
455 (void) atomicio(vwrite, sock_out, s, strlen(s)); 457 (void) atomicio(vwrite, sock_out, s, strlen(s));
456 close(sock_in); 458 close(sock_in);
@@ -467,7 +469,7 @@ sshd_exchange_identification(struct ssh *ssh, int sock_in, int sock_out)
467void 469void
468destroy_sensitive_data(void) 470destroy_sensitive_data(void)
469{ 471{
470 int i; 472 u_int i;
471 473
472 for (i = 0; i < options.num_host_key_files; i++) { 474 for (i = 0; i < options.num_host_key_files; i++) {
473 if (sensitive_data.host_keys[i]) { 475 if (sensitive_data.host_keys[i]) {
@@ -486,7 +488,7 @@ void
486demote_sensitive_data(void) 488demote_sensitive_data(void)
487{ 489{
488 struct sshkey *tmp; 490 struct sshkey *tmp;
489 int i; 491 u_int i;
490 492
491 for (i = 0; i < options.num_host_key_files; i++) { 493 for (i = 0; i < options.num_host_key_files; i++) {
492 if (sensitive_data.host_keys[i]) { 494 if (sensitive_data.host_keys[i]) {
@@ -685,7 +687,7 @@ list_hostkey_types(void)
685 Buffer b; 687 Buffer b;
686 const char *p; 688 const char *p;
687 char *ret; 689 char *ret;
688 int i; 690 u_int i;
689 struct sshkey *key; 691 struct sshkey *key;
690 692
691 buffer_init(&b); 693 buffer_init(&b);
@@ -707,6 +709,7 @@ list_hostkey_types(void)
707 case KEY_DSA: 709 case KEY_DSA:
708 case KEY_ECDSA: 710 case KEY_ECDSA:
709 case KEY_ED25519: 711 case KEY_ED25519:
712 case KEY_XMSS:
710 if (buffer_len(&b) > 0) 713 if (buffer_len(&b) > 0)
711 buffer_append(&b, ",", 1); 714 buffer_append(&b, ",", 1);
712 p = key_ssh_name(key); 715 p = key_ssh_name(key);
@@ -728,6 +731,7 @@ list_hostkey_types(void)
728 case KEY_DSA_CERT: 731 case KEY_DSA_CERT:
729 case KEY_ECDSA_CERT: 732 case KEY_ECDSA_CERT:
730 case KEY_ED25519_CERT: 733 case KEY_ED25519_CERT:
734 case KEY_XMSS_CERT:
731 if (buffer_len(&b) > 0) 735 if (buffer_len(&b) > 0)
732 buffer_append(&b, ",", 1); 736 buffer_append(&b, ",", 1);
733 p = key_ssh_name(key); 737 p = key_ssh_name(key);
@@ -745,7 +749,7 @@ list_hostkey_types(void)
745static struct sshkey * 749static struct sshkey *
746get_hostkey_by_type(int type, int nid, int need_private, struct ssh *ssh) 750get_hostkey_by_type(int type, int nid, int need_private, struct ssh *ssh)
747{ 751{
748 int i; 752 u_int i;
749 struct sshkey *key; 753 struct sshkey *key;
750 754
751 for (i = 0; i < options.num_host_key_files; i++) { 755 for (i = 0; i < options.num_host_key_files; i++) {
@@ -754,6 +758,7 @@ get_hostkey_by_type(int type, int nid, int need_private, struct ssh *ssh)
754 case KEY_DSA_CERT: 758 case KEY_DSA_CERT:
755 case KEY_ECDSA_CERT: 759 case KEY_ECDSA_CERT:
756 case KEY_ED25519_CERT: 760 case KEY_ED25519_CERT:
761 case KEY_XMSS_CERT:
757 key = sensitive_data.host_certificates[i]; 762 key = sensitive_data.host_certificates[i];
758 break; 763 break;
759 default: 764 default:
@@ -785,7 +790,7 @@ get_hostkey_private_by_type(int type, int nid, struct ssh *ssh)
785struct sshkey * 790struct sshkey *
786get_hostkey_by_index(int ind) 791get_hostkey_by_index(int ind)
787{ 792{
788 if (ind < 0 || ind >= options.num_host_key_files) 793 if (ind < 0 || (u_int)ind >= options.num_host_key_files)
789 return (NULL); 794 return (NULL);
790 return (sensitive_data.host_keys[ind]); 795 return (sensitive_data.host_keys[ind]);
791} 796}
@@ -793,7 +798,7 @@ get_hostkey_by_index(int ind)
793struct sshkey * 798struct sshkey *
794get_hostkey_public_by_index(int ind, struct ssh *ssh) 799get_hostkey_public_by_index(int ind, struct ssh *ssh)
795{ 800{
796 if (ind < 0 || ind >= options.num_host_key_files) 801 if (ind < 0 || (u_int)ind >= options.num_host_key_files)
797 return (NULL); 802 return (NULL);
798 return (sensitive_data.host_pubkeys[ind]); 803 return (sensitive_data.host_pubkeys[ind]);
799} 804}
@@ -801,7 +806,7 @@ get_hostkey_public_by_index(int ind, struct ssh *ssh)
801int 806int
802get_hostkey_index(struct sshkey *key, int compare, struct ssh *ssh) 807get_hostkey_index(struct sshkey *key, int compare, struct ssh *ssh)
803{ 808{
804 int i; 809 u_int i;
805 810
806 for (i = 0; i < options.num_host_key_files; i++) { 811 for (i = 0; i < options.num_host_key_files; i++) {
807 if (key_is_cert(key)) { 812 if (key_is_cert(key)) {
@@ -830,7 +835,8 @@ notify_hostkeys(struct ssh *ssh)
830{ 835{
831 struct sshbuf *buf; 836 struct sshbuf *buf;
832 struct sshkey *key; 837 struct sshkey *key;
833 int i, nkeys, r; 838 u_int i, nkeys;
839 int r;
834 char *fp; 840 char *fp;
835 841
836 /* Some clients cannot cope with the hostkeys message, skip those. */ 842 /* Some clients cannot cope with the hostkeys message, skip those. */
@@ -861,7 +867,7 @@ notify_hostkeys(struct ssh *ssh)
861 packet_put_string(sshbuf_ptr(buf), sshbuf_len(buf)); 867 packet_put_string(sshbuf_ptr(buf), sshbuf_len(buf));
862 nkeys++; 868 nkeys++;
863 } 869 }
864 debug3("%s: sent %d hostkeys", __func__, nkeys); 870 debug3("%s: sent %u hostkeys", __func__, nkeys);
865 if (nkeys == 0) 871 if (nkeys == 0)
866 fatal("%s: no hostkeys", __func__); 872 fatal("%s: no hostkeys", __func__);
867 packet_send(); 873 packet_send();
@@ -1014,13 +1020,13 @@ server_accept_inetd(int *sock_in, int *sock_out)
1014 * Listen for TCP connections 1020 * Listen for TCP connections
1015 */ 1021 */
1016static void 1022static void
1017server_listen(void) 1023listen_on_addrs(struct listenaddr *la)
1018{ 1024{
1019 int ret, listen_sock, on = 1; 1025 int ret, listen_sock;
1020 struct addrinfo *ai; 1026 struct addrinfo *ai;
1021 char ntop[NI_MAXHOST], strport[NI_MAXSERV]; 1027 char ntop[NI_MAXHOST], strport[NI_MAXSERV];
1022 1028
1023 for (ai = options.listen_addrs; ai; ai = ai->ai_next) { 1029 for (ai = la->addrs; ai; ai = ai->ai_next) {
1024 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6) 1030 if (ai->ai_family != AF_INET && ai->ai_family != AF_INET6)
1025 continue; 1031 continue;
1026 if (num_listen_socks >= MAX_LISTEN_SOCKS) 1032 if (num_listen_socks >= MAX_LISTEN_SOCKS)
@@ -1050,13 +1056,13 @@ server_listen(void)
1050 close(listen_sock); 1056 close(listen_sock);
1051 continue; 1057 continue;
1052 } 1058 }
1053 /* 1059 /* Socket options */
1054 * Set socket options. 1060 set_reuseaddr(listen_sock);
1055 * Allow local port reuse in TIME_WAIT. 1061 if (la->rdomain != NULL &&
1056 */ 1062 set_rdomain(listen_sock, la->rdomain) == -1) {
1057 if (setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, 1063 close(listen_sock);
1058 &on, sizeof(on)) == -1) 1064 continue;
1059 error("setsockopt SO_REUSEADDR: %s", strerror(errno)); 1065 }
1060 1066
1061 /* Only communicate in IPv6 over AF_INET6 sockets. */ 1067 /* Only communicate in IPv6 over AF_INET6 sockets. */
1062 if (ai->ai_family == AF_INET6) 1068 if (ai->ai_family == AF_INET6)
@@ -1078,9 +1084,28 @@ server_listen(void)
1078 if (listen(listen_sock, SSH_LISTEN_BACKLOG) < 0) 1084 if (listen(listen_sock, SSH_LISTEN_BACKLOG) < 0)
1079 fatal("listen on [%s]:%s: %.100s", 1085 fatal("listen on [%s]:%s: %.100s",
1080 ntop, strport, strerror(errno)); 1086 ntop, strport, strerror(errno));
1081 logit("Server listening on %s port %s.", ntop, strport); 1087 logit("Server listening on %s port %s%s%s.",
1088 ntop, strport,
1089 la->rdomain == NULL ? "" : " rdomain ",
1090 la->rdomain == NULL ? "" : la->rdomain);
1091 }
1092}
1093
1094static void
1095server_listen(void)
1096{
1097 u_int i;
1098
1099 for (i = 0; i < options.num_listen_addrs; i++) {
1100 listen_on_addrs(&options.listen_addrs[i]);
1101 freeaddrinfo(options.listen_addrs[i].addrs);
1102 free(options.listen_addrs[i].rdomain);
1103 memset(&options.listen_addrs[i], 0,
1104 sizeof(options.listen_addrs[i]));
1082 } 1105 }
1083 freeaddrinfo(options.listen_addrs); 1106 free(options.listen_addrs);
1107 options.listen_addrs = NULL;
1108 options.num_listen_addrs = 0;
1084 1109
1085 if (!num_listen_socks) 1110 if (!num_listen_socks)
1086 fatal("Cannot bind any address."); 1111 fatal("Cannot bind any address.");
@@ -1348,6 +1373,46 @@ check_ip_options(struct ssh *ssh)
1348#endif /* IP_OPTIONS */ 1373#endif /* IP_OPTIONS */
1349} 1374}
1350 1375
1376/* Set the routing domain for this process */
1377static void
1378set_process_rdomain(struct ssh *ssh, const char *name)
1379{
1380#if defined(HAVE_SYS_SET_PROCESS_RDOMAIN)
1381 if (name == NULL)
1382 return; /* default */
1383
1384 if (strcmp(name, "%D") == 0) {
1385 /* "expands" to routing domain of connection */
1386 if ((name = ssh_packet_rdomain_in(ssh)) == NULL)
1387 return;
1388 }
1389 /* NB. We don't pass 'ssh' to sys_set_process_rdomain() */
1390 return sys_set_process_rdomain(name);
1391#elif defined(__OpenBSD__)
1392 int rtable, ortable = getrtable();
1393 const char *errstr;
1394
1395 if (name == NULL)
1396 return; /* default */
1397
1398 if (strcmp(name, "%D") == 0) {
1399 /* "expands" to routing domain of connection */
1400 if ((name = ssh_packet_rdomain_in(ssh)) == NULL)
1401 return;
1402 }
1403
1404 rtable = (int)strtonum(name, 0, 255, &errstr);
1405 if (errstr != NULL) /* Shouldn't happen */
1406 fatal("Invalid routing domain \"%s\": %s", name, errstr);
1407 if (rtable != ortable && setrtable(rtable) != 0)
1408 fatal("Unable to set routing domain %d: %s",
1409 rtable, strerror(errno));
1410 debug("%s: set routing domain %d (was %d)", __func__, rtable, ortable);
1411#else /* defined(__OpenBSD__) */
1412 fatal("Unable to set routing domain: not supported in this platform");
1413#endif
1414}
1415
1351/* 1416/*
1352 * Main program for the daemon. 1417 * Main program for the daemon.
1353 */ 1418 */
@@ -1357,20 +1422,19 @@ main(int ac, char **av)
1357 struct ssh *ssh = NULL; 1422 struct ssh *ssh = NULL;
1358 extern char *optarg; 1423 extern char *optarg;
1359 extern int optind; 1424 extern int optind;
1360 int r, opt, i, j, on = 1, already_daemon; 1425 int r, opt, on = 1, already_daemon, remote_port;
1361 int sock_in = -1, sock_out = -1, newsock = -1; 1426 int sock_in = -1, sock_out = -1, newsock = -1;
1362 const char *remote_ip; 1427 const char *remote_ip, *rdomain;
1363 int remote_port;
1364 char *fp, *line, *laddr, *logfile = NULL; 1428 char *fp, *line, *laddr, *logfile = NULL;
1365 int config_s[2] = { -1 , -1 }; 1429 int config_s[2] = { -1 , -1 };
1366 u_int n; 1430 u_int i, j;
1367 u_int64_t ibytes, obytes; 1431 u_int64_t ibytes, obytes;
1368 mode_t new_umask; 1432 mode_t new_umask;
1369 struct sshkey *key; 1433 struct sshkey *key;
1370 struct sshkey *pubkey; 1434 struct sshkey *pubkey;
1371 int keytype; 1435 int keytype;
1372 Authctxt *authctxt; 1436 Authctxt *authctxt;
1373 struct connection_info *connection_info = get_connection_info(0, 0); 1437 struct connection_info *connection_info = NULL;
1374 1438
1375 ssh_malloc_init(); /* must be called before any mallocs */ 1439 ssh_malloc_init(); /* must be called before any mallocs */
1376 1440
@@ -1383,7 +1447,7 @@ main(int ac, char **av)
1383 saved_argc = ac; 1447 saved_argc = ac;
1384 rexec_argc = ac; 1448 rexec_argc = ac;
1385 saved_argv = xcalloc(ac + 1, sizeof(*saved_argv)); 1449 saved_argv = xcalloc(ac + 1, sizeof(*saved_argv));
1386 for (i = 0; i < ac; i++) 1450 for (i = 0; (int)i < ac; i++)
1387 saved_argv[i] = xstrdup(av[i]); 1451 saved_argv[i] = xstrdup(av[i]);
1388 saved_argv[i] = NULL; 1452 saved_argv[i] = NULL;
1389 1453
@@ -1416,12 +1480,8 @@ main(int ac, char **av)
1416 config_file_name = optarg; 1480 config_file_name = optarg;
1417 break; 1481 break;
1418 case 'c': 1482 case 'c':
1419 if (options.num_host_cert_files >= MAX_HOSTCERTS) { 1483 servconf_add_hostcert("[command-line]", 0,
1420 fprintf(stderr, "too many host certificates.\n"); 1484 &options, optarg);
1421 exit(1);
1422 }
1423 options.host_cert_files[options.num_host_cert_files++] =
1424 derelativise_path(optarg);
1425 break; 1485 break;
1426 case 'd': 1486 case 'd':
1427 if (debug_flag == 0) { 1487 if (debug_flag == 0) {
@@ -1480,12 +1540,8 @@ main(int ac, char **av)
1480 /* protocol 1, ignored */ 1540 /* protocol 1, ignored */
1481 break; 1541 break;
1482 case 'h': 1542 case 'h':
1483 if (options.num_host_key_files >= MAX_HOSTKEYS) { 1543 servconf_add_hostkey("[command-line]", 0,
1484 fprintf(stderr, "too many host keys.\n"); 1544 &options, optarg);
1485 exit(1);
1486 }
1487 options.host_key_files[options.num_host_key_files++] =
1488 derelativise_path(optarg);
1489 break; 1545 break;
1490 case 't': 1546 case 't':
1491 test_flag = 1; 1547 test_flag = 1;
@@ -1494,6 +1550,7 @@ main(int ac, char **av)
1494 test_flag = 2; 1550 test_flag = 2;
1495 break; 1551 break;
1496 case 'C': 1552 case 'C':
1553 connection_info = get_connection_info(0, 0);
1497 if (parse_server_match_testspec(connection_info, 1554 if (parse_server_match_testspec(connection_info,
1498 optarg) == -1) 1555 optarg) == -1)
1499 exit(1); 1556 exit(1);
@@ -1552,24 +1609,13 @@ main(int ac, char **av)
1552 if (getenv("KRB5CCNAME") != NULL) 1609 if (getenv("KRB5CCNAME") != NULL)
1553 (void) unsetenv("KRB5CCNAME"); 1610 (void) unsetenv("KRB5CCNAME");
1554 1611
1555#ifdef _UNICOS
1556 /* Cray can define user privs drop all privs now!
1557 * Not needed on PRIV_SU systems!
1558 */
1559 drop_cray_privs();
1560#endif
1561
1562 sensitive_data.have_ssh2_key = 0; 1612 sensitive_data.have_ssh2_key = 0;
1563 1613
1564 /* 1614 /*
1565 * If we're doing an extended config test, make sure we have all of 1615 * If we're not doing an extended test do not silently ignore connection
1566 * the parameters we need. If we're not doing an extended test, 1616 * test params.
1567 * do not silently ignore connection test params.
1568 */ 1617 */
1569 if (test_flag >= 2 && server_match_spec_complete(connection_info) == 0) 1618 if (test_flag < 2 && connection_info != NULL)
1570 fatal("user, host and addr are all required when testing "
1571 "Match configs");
1572 if (test_flag < 2 && server_match_spec_complete(connection_info) >= 0)
1573 fatal("Config test connection parameter (-C) provided without " 1619 fatal("Config test connection parameter (-C) provided without "
1574 "test mode (-T)"); 1620 "test mode (-T)");
1575 1621
@@ -1611,12 +1657,12 @@ main(int ac, char **av)
1611 * and warns for trivial misconfigurations that could break login. 1657 * and warns for trivial misconfigurations that could break login.
1612 */ 1658 */
1613 if (options.num_auth_methods != 0) { 1659 if (options.num_auth_methods != 0) {
1614 for (n = 0; n < options.num_auth_methods; n++) { 1660 for (i = 0; i < options.num_auth_methods; i++) {
1615 if (auth2_methods_valid(options.auth_methods[n], 1661 if (auth2_methods_valid(options.auth_methods[i],
1616 1) == 0) 1662 1) == 0)
1617 break; 1663 break;
1618 } 1664 }
1619 if (n >= options.num_auth_methods) 1665 if (i >= options.num_auth_methods)
1620 fatal("AuthenticationMethods cannot be satisfied by " 1666 fatal("AuthenticationMethods cannot be satisfied by "
1621 "enabled authentication methods"); 1667 "enabled authentication methods");
1622 } 1668 }
@@ -1642,10 +1688,8 @@ main(int ac, char **av)
1642 fatal("Privilege separation user %s does not exist", 1688 fatal("Privilege separation user %s does not exist",
1643 SSH_PRIVSEP_USER); 1689 SSH_PRIVSEP_USER);
1644 } else { 1690 } else {
1645 explicit_bzero(privsep_pw->pw_passwd,
1646 strlen(privsep_pw->pw_passwd));
1647 privsep_pw = pwcopy(privsep_pw); 1691 privsep_pw = pwcopy(privsep_pw);
1648 free(privsep_pw->pw_passwd); 1692 freezero(privsep_pw->pw_passwd, strlen(privsep_pw->pw_passwd));
1649 privsep_pw->pw_passwd = xstrdup("*"); 1693 privsep_pw->pw_passwd = xstrdup("*");
1650 } 1694 }
1651 endpwent(); 1695 endpwent();
@@ -1697,6 +1741,7 @@ main(int ac, char **av)
1697 case KEY_DSA: 1741 case KEY_DSA:
1698 case KEY_ECDSA: 1742 case KEY_ECDSA:
1699 case KEY_ED25519: 1743 case KEY_ED25519:
1744 case KEY_XMSS:
1700 if (have_agent || key != NULL) 1745 if (have_agent || key != NULL)
1701 sensitive_data.have_ssh2_key = 1; 1746 sensitive_data.have_ssh2_key = 1;
1702 break; 1747 break;
@@ -1752,7 +1797,7 @@ main(int ac, char **av)
1752 continue; 1797 continue;
1753 } 1798 }
1754 sensitive_data.host_certificates[j] = key; 1799 sensitive_data.host_certificates[j] = key;
1755 debug("host certificate: #%d type %d %s", j, key->type, 1800 debug("host certificate: #%u type %d %s", j, key->type,
1756 key_type(key)); 1801 key_type(key));
1757 } 1802 }
1758 1803
@@ -1776,8 +1821,13 @@ main(int ac, char **av)
1776 } 1821 }
1777 1822
1778 if (test_flag > 1) { 1823 if (test_flag > 1) {
1779 if (server_match_spec_complete(connection_info) == 1) 1824 /*
1780 parse_server_match_config(&options, connection_info); 1825 * If no connection info was provided by -C then use
1826 * use a blank one that will cause no predicate to match.
1827 */
1828 if (connection_info == NULL)
1829 connection_info = get_connection_info(0, 0);
1830 parse_server_match_config(&options, connection_info);
1781 dump_config(&options); 1831 dump_config(&options);
1782 } 1832 }
1783 1833
@@ -1796,8 +1846,10 @@ main(int ac, char **av)
1796 debug("setgroups() failed: %.200s", strerror(errno)); 1846 debug("setgroups() failed: %.200s", strerror(errno));
1797 1847
1798 if (rexec_flag) { 1848 if (rexec_flag) {
1849 if (rexec_argc < 0)
1850 fatal("rexec_argc %d < 0", rexec_argc);
1799 rexec_argv = xcalloc(rexec_argc + 2, sizeof(char *)); 1851 rexec_argv = xcalloc(rexec_argc + 2, sizeof(char *));
1800 for (i = 0; i < rexec_argc; i++) { 1852 for (i = 0; i < (u_int)rexec_argc; i++) {
1801 debug("rexec_argv[%d]='%s'", i, saved_argv[i]); 1853 debug("rexec_argv[%d]='%s'", i, saved_argv[i]);
1802 rexec_argv[i] = saved_argv[i]; 1854 rexec_argv[i] = saved_argv[i];
1803 } 1855 }
@@ -1970,6 +2022,9 @@ main(int ac, char **av)
1970 cleanup_exit(255); 2022 cleanup_exit(255);
1971 } 2023 }
1972 2024
2025 if (options.routing_domain != NULL)
2026 set_process_rdomain(ssh, options.routing_domain);
2027
1973 /* 2028 /*
1974 * The rest of the code depends on the fact that 2029 * The rest of the code depends on the fact that
1975 * ssh_remote_ipaddr() caches the remote ip, even if 2030 * ssh_remote_ipaddr() caches the remote ip, even if
@@ -1981,10 +2036,15 @@ main(int ac, char **av)
1981 audit_connection_from(remote_ip, remote_port); 2036 audit_connection_from(remote_ip, remote_port);
1982#endif 2037#endif
1983 2038
2039 rdomain = ssh_packet_rdomain_in(ssh);
2040
1984 /* Log the connection. */ 2041 /* Log the connection. */
1985 laddr = get_local_ipaddr(sock_in); 2042 laddr = get_local_ipaddr(sock_in);
1986 verbose("Connection from %s port %d on %s port %d", 2043 verbose("Connection from %s port %d on %s port %d%s%s%s",
1987 remote_ip, remote_port, laddr, ssh_local_port(ssh)); 2044 remote_ip, remote_port, laddr, ssh_local_port(ssh),
2045 rdomain == NULL ? "" : " rdomain \"",
2046 rdomain == NULL ? "" : rdomain,
2047 rdomain == NULL ? "" : "\"");
1988 free(laddr); 2048 free(laddr);
1989 2049
1990 /* 2050 /*
@@ -2010,6 +2070,10 @@ main(int ac, char **av)
2010 /* XXX global for cleanup, access from other modules */ 2070 /* XXX global for cleanup, access from other modules */
2011 the_authctxt = authctxt; 2071 the_authctxt = authctxt;
2012 2072
2073 /* Set default key authentication options */
2074 if ((auth_opts = sshauthopt_new_with_keys_defaults()) == NULL)
2075 fatal("allocation failed");
2076
2013 /* prepare buffer to collect messages to display to user after login */ 2077 /* prepare buffer to collect messages to display to user after login */
2014 buffer_init(&loginmsg); 2078 buffer_init(&loginmsg);
2015 auth_debug_reset(); 2079 auth_debug_reset();
@@ -2066,7 +2130,7 @@ main(int ac, char **av)
2066#ifdef USE_PAM 2130#ifdef USE_PAM
2067 if (options.use_pam) { 2131 if (options.use_pam) {
2068 do_pam_setcred(1); 2132 do_pam_setcred(1);
2069 do_pam_session(); 2133 do_pam_session(ssh);
2070 } 2134 }
2071#endif 2135#endif
2072 2136
diff --git a/sshd_config b/sshd_config
index 4eb2e02e0..3109d5d73 100644
--- a/sshd_config
+++ b/sshd_config
@@ -1,4 +1,4 @@
1# $OpenBSD: sshd_config,v 1.101 2017/03/14 07:19:07 djm Exp $ 1# $OpenBSD: sshd_config,v 1.102 2018/02/16 02:32:40 djm Exp $
2 2
3# This is the sshd server system-wide configuration file. See 3# This is the sshd server system-wide configuration file. See
4# sshd_config(5) for more information. 4# sshd_config(5) for more information.
@@ -16,7 +16,6 @@
16#ListenAddress :: 16#ListenAddress ::
17 17
18#HostKey /etc/ssh/ssh_host_rsa_key 18#HostKey /etc/ssh/ssh_host_rsa_key
19#HostKey /etc/ssh/ssh_host_dsa_key
20#HostKey /etc/ssh/ssh_host_ecdsa_key 19#HostKey /etc/ssh/ssh_host_ecdsa_key
21#HostKey /etc/ssh/ssh_host_ed25519_key 20#HostKey /etc/ssh/ssh_host_ed25519_key
22 21
diff --git a/sshd_config.0 b/sshd_config.0
index 678ee14b4..95c17fc8d 100644
--- a/sshd_config.0
+++ b/sshd_config.0
@@ -6,9 +6,10 @@ NAME
6DESCRIPTION 6DESCRIPTION
7 sshd(8) reads configuration data from /etc/ssh/sshd_config (or the file 7 sshd(8) reads configuration data from /etc/ssh/sshd_config (or the file
8 specified with -f on the command line). The file contains keyword- 8 specified with -f on the command line). The file contains keyword-
9 argument pairs, one per line. Lines starting with M-bM-^@M-^X#M-bM-^@M-^Y and empty lines 9 argument pairs, one per line. For each keyword, the first obtained value
10 are interpreted as comments. Arguments may optionally be enclosed in 10 will be used. Lines starting with M-bM-^@M-^X#M-bM-^@M-^Y and empty lines are interpreted as
11 double quotes (") in order to represent arguments containing spaces. 11 comments. Arguments may optionally be enclosed in double quotes (") in
12 order to represent arguments containing spaces.
12 13
13 The possible keywords and their meanings are as follows (note that 14 The possible keywords and their meanings are as follows (note that
14 keywords are case-insensitive and arguments are case-sensitive): 15 keywords are case-insensitive and arguments are case-sensitive):
@@ -422,9 +423,8 @@ DESCRIPTION
422 423
423 HostKey 424 HostKey
424 Specifies a file containing a private host key used by SSH. The 425 Specifies a file containing a private host key used by SSH. The
425 defaults are /etc/ssh/ssh_host_dsa_key, 426 defaults are /etc/ssh/ssh_host_ecdsa_key,
426 /etc/ssh/ssh_host_ecdsa_key, /etc/ssh/ssh_host_ed25519_key and 427 /etc/ssh/ssh_host_ed25519_key and /etc/ssh/ssh_host_rsa_key.
427 /etc/ssh/ssh_host_rsa_key.
428 428
429 Note that sshd(8) will refuse to use a file if it is group/world- 429 Note that sshd(8) will refuse to use a file if it is group/world-
430 accessible and that the HostKeyAlgorithms option restricts which 430 accessible and that the HostKeyAlgorithms option restricts which
@@ -465,8 +465,9 @@ DESCRIPTION
465 465
466 IgnoreUserKnownHosts 466 IgnoreUserKnownHosts
467 Specifies whether sshd(8) should ignore the user's 467 Specifies whether sshd(8) should ignore the user's
468 ~/.ssh/known_hosts during HostbasedAuthentication. The default 468 ~/.ssh/known_hosts during HostbasedAuthentication and use only
469 is no. 469 the system-wide known hosts file /etc/ssh/known_hosts. The
470 default is no.
470 471
471 IPQoS Specifies the IPv4 type-of-service or DSCP class for the 472 IPQoS Specifies the IPv4 type-of-service or DSCP class for the
472 connection. Accepted values are af11, af12, af13, af21, af22, 473 connection. Accepted values are af11, af12, af13, af21, af22,
@@ -521,6 +522,9 @@ DESCRIPTION
521 curve25519-sha256@libssh.org 522 curve25519-sha256@libssh.org
522 diffie-hellman-group1-sha1 523 diffie-hellman-group1-sha1
523 diffie-hellman-group14-sha1 524 diffie-hellman-group14-sha1
525 diffie-hellman-group14-sha256
526 diffie-hellman-group16-sha512
527 diffie-hellman-group18-sha512
524 diffie-hellman-group-exchange-sha1 528 diffie-hellman-group-exchange-sha1
525 diffie-hellman-group-exchange-sha256 529 diffie-hellman-group-exchange-sha256
526 ecdh-sha2-nistp256 530 ecdh-sha2-nistp256
@@ -532,7 +536,8 @@ DESCRIPTION
532 curve25519-sha256,curve25519-sha256@libssh.org, 536 curve25519-sha256,curve25519-sha256@libssh.org,
533 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 537 ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
534 diffie-hellman-group-exchange-sha256, 538 diffie-hellman-group-exchange-sha256,
535 diffie-hellman-group14-sha1 539 diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,
540 diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
536 541
537 The list of available key exchange algorithms may also be 542 The list of available key exchange algorithms may also be
538 obtained using "ssh -Q kex". 543 obtained using "ssh -Q kex".
@@ -541,13 +546,18 @@ DESCRIPTION
541 Specifies the local addresses sshd(8) should listen on. The 546 Specifies the local addresses sshd(8) should listen on. The
542 following forms may be used: 547 following forms may be used:
543 548
544 ListenAddress host|IPv4_addr|IPv6_addr 549 ListenAddress hostname|address [rdomain domain]
545 ListenAddress host|IPv4_addr:port 550 ListenAddress hostname:port [rdomain domain]
546 ListenAddress [host|IPv6_addr]:port 551 ListenAddress IPv4_address:port [rdomain domain]
552 ListenAddress [hostname|address]:port [rdomain domain]
547 553
548 If port is not specified, sshd will listen on the address and all 554 The optional rdomain qualifier requests sshd(8) listen in an
549 Port options specified. The default is to listen on all local 555 explicit routing domain. If port is not specified, sshd will
550 addresses. Multiple ListenAddress options are permitted. 556 listen on the address and all Port options specified. The
557 default is to listen on all local addresses on the current
558 default routing domain. Multiple ListenAddress options are
559 permitted. For more information on routing domains, see
560 rdomain(4).
551 561
552 LoginGraceTime 562 LoginGraceTime
553 The server disconnects after this time if the user has not 563 The server disconnects after this time if the user has not
@@ -612,10 +622,13 @@ DESCRIPTION
612 622
613 The arguments to Match are one or more criteria-pattern pairs or 623 The arguments to Match are one or more criteria-pattern pairs or
614 the single token All which matches all criteria. The available 624 the single token All which matches all criteria. The available
615 criteria are User, Group, Host, LocalAddress, LocalPort, and 625 criteria are User, Group, Host, LocalAddress, LocalPort, RDomain,
616 Address. The match patterns may consist of single entries or 626 and Address (with RDomain representing the rdomain(4) on which
617 comma-separated lists and may use the wildcard and negation 627 the connection was received.)
618 operators described in the PATTERNS section of ssh_config(5). 628
629 The match patterns may consist of single entries or comma-
630 separated lists and may use the wildcard and negation operators
631 described in the PATTERNS section of ssh_config(5).
619 632
620 The patterns in an Address criteria may additionally contain 633 The patterns in an Address criteria may additionally contain
621 addresses to match in CIDR address/masklen format, such as 634 addresses to match in CIDR address/masklen format, such as
@@ -640,7 +653,7 @@ DESCRIPTION
640 MaxAuthTries, MaxSessions, PasswordAuthentication, 653 MaxAuthTries, MaxSessions, PasswordAuthentication,
641 PermitEmptyPasswords, PermitOpen, PermitRootLogin, PermitTTY, 654 PermitEmptyPasswords, PermitOpen, PermitRootLogin, PermitTTY,
642 PermitTunnel, PermitUserRC, PubkeyAcceptedKeyTypes, 655 PermitTunnel, PermitUserRC, PubkeyAcceptedKeyTypes,
643 PubkeyAuthentication, RekeyLimit, RevokedKeys, 656 PubkeyAuthentication, RekeyLimit, RevokedKeys, RDomain,
644 StreamLocalBindMask, StreamLocalBindUnlink, TrustedUserCAKeys, 657 StreamLocalBindMask, StreamLocalBindUnlink, TrustedUserCAKeys,
645 X11DisplayOffset, X11Forwarding and X11UseLocalHost. 658 X11DisplayOffset, X11Forwarding and X11UseLocalHost.
646 659
@@ -700,12 +713,12 @@ DESCRIPTION
700 713
701 PermitRootLogin 714 PermitRootLogin
702 Specifies whether root can log in using ssh(1). The argument 715 Specifies whether root can log in using ssh(1). The argument
703 must be yes, prohibit-password, without-password, 716 must be yes, prohibit-password, forced-commands-only, or no. The
704 forced-commands-only, or no. The default is prohibit-password. 717 default is prohibit-password.
705 718
706 If this option is set to prohibit-password or without-password, 719 If this option is set to prohibit-password (or its deprecated
707 password and keyboard-interactive authentication are disabled for 720 alias, without-password), password and keyboard-interactive
708 root. 721 authentication are disabled for root.
709 722
710 If this option is set to forced-commands-only, root login with 723 If this option is set to forced-commands-only, root login with
711 public key authentication will be allowed, but only if the 724 public key authentication will be allowed, but only if the
@@ -807,6 +820,13 @@ DESCRIPTION
807 ssh-keygen(1). For more information on KRLs, see the KEY 820 ssh-keygen(1). For more information on KRLs, see the KEY
808 REVOCATION LISTS section in ssh-keygen(1). 821 REVOCATION LISTS section in ssh-keygen(1).
809 822
823 RDomain
824 Specifies an explicit routing domain that is applied after
825 authentication has completed. The user session, as well and any
826 forwarded or listening IP sockets, will be bound to this
827 rdomain(4). If the routing domain is set to %D, then the domain
828 in which the incoming connection was received will be applied.
829
810 StreamLocalBindMask 830 StreamLocalBindMask
811 Sets the octal file creation mode mask (umask) used when creating 831 Sets the octal file creation mode mask (umask) used when creating
812 a Unix-domain socket file for local or remote port forwarding. 832 a Unix-domain socket file for local or remote port forwarding.
@@ -980,6 +1000,8 @@ TOKENS
980 runtime: 1000 runtime:
981 1001
982 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y. 1002 %% A literal M-bM-^@M-^X%M-bM-^@M-^Y.
1003 %D The routing domain in which the incoming connection was
1004 received.
983 %F The fingerprint of the CA key. 1005 %F The fingerprint of the CA key.
984 %f The fingerprint of the key or certificate. 1006 %f The fingerprint of the key or certificate.
985 %h The home directory of the user. 1007 %h The home directory of the user.
@@ -1002,6 +1024,8 @@ TOKENS
1002 1024
1003 ChrootDirectory accepts the tokens %%, %h, and %u. 1025 ChrootDirectory accepts the tokens %%, %h, and %u.
1004 1026
1027 RoutingDomain accepts the token %D.
1028
1005FILES 1029FILES
1006 /etc/ssh/sshd_config 1030 /etc/ssh/sshd_config
1007 Contains configuration data for sshd(8). This file should be 1031 Contains configuration data for sshd(8). This file should be
@@ -1019,4 +1043,4 @@ AUTHORS
1019 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support 1043 versions 1.5 and 2.0. Niels Provos and Markus Friedl contributed support
1020 for privilege separation. 1044 for privilege separation.
1021 1045
1022OpenBSD 6.2 September 27, 2017 OpenBSD 6.2 1046OpenBSD 6.2 February 16, 2018 OpenBSD 6.2
diff --git a/sshd_config.5 b/sshd_config.5
index 251b7467f..e3c7c3936 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.253 2017/09/27 06:45:53 jmc Exp $ 36.\" $OpenBSD: sshd_config.5,v 1.263 2018/02/16 02:40:45 djm Exp $
37.Dd $Mdocdate: September 27 2017 $ 37.Dd $Mdocdate: February 16 2018 $
38.Dt SSHD_CONFIG 5 38.Dt SSHD_CONFIG 5
39.Os 39.Os
40.Sh NAME 40.Sh NAME
@@ -48,6 +48,7 @@ reads configuration data from
48.Fl f 48.Fl f
49on the command line). 49on the command line).
50The file contains keyword-argument pairs, one per line. 50The file contains keyword-argument pairs, one per line.
51For each keyword, the first obtained value will be used.
51Lines starting with 52Lines starting with
52.Ql # 53.Ql #
53and empty lines are interpreted as comments. 54and empty lines are interpreted as comments.
@@ -713,7 +714,6 @@ is not to load any certificates.
713Specifies a file containing a private host key 714Specifies a file containing a private host key
714used by SSH. 715used by SSH.
715The defaults are 716The defaults are
716.Pa /etc/ssh/ssh_host_dsa_key ,
717.Pa /etc/ssh/ssh_host_ecdsa_key , 717.Pa /etc/ssh/ssh_host_ecdsa_key ,
718.Pa /etc/ssh/ssh_host_ed25519_key 718.Pa /etc/ssh/ssh_host_ed25519_key
719and 719and
@@ -776,7 +776,9 @@ Specifies whether
776should ignore the user's 776should ignore the user's
777.Pa ~/.ssh/known_hosts 777.Pa ~/.ssh/known_hosts
778during 778during
779.Cm HostbasedAuthentication . 779.Cm HostbasedAuthentication
780and use only the system-wide known hosts file
781.Pa /etc/ssh/known_hosts .
780The default is 782The default is
781.Cm no . 783.Cm no .
782.It Cm IPQoS 784.It Cm IPQoS
@@ -877,6 +879,12 @@ diffie-hellman-group1-sha1
877.It 879.It
878diffie-hellman-group14-sha1 880diffie-hellman-group14-sha1
879.It 881.It
882diffie-hellman-group14-sha256
883.It
884diffie-hellman-group16-sha512
885.It
886diffie-hellman-group18-sha512
887.It
880diffie-hellman-group-exchange-sha1 888diffie-hellman-group-exchange-sha1
881.It 889.It
882diffie-hellman-group-exchange-sha256 890diffie-hellman-group-exchange-sha256
@@ -893,7 +901,8 @@ The default is:
893curve25519-sha256,curve25519-sha256@libssh.org, 901curve25519-sha256,curve25519-sha256@libssh.org,
894ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521, 902ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,
895diffie-hellman-group-exchange-sha256, 903diffie-hellman-group-exchange-sha256,
896diffie-hellman-group14-sha1 904diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,
905diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
897.Ed 906.Ed
898.Pp 907.Pp
899The list of available key exchange algorithms may also be obtained using 908The list of available key exchange algorithms may also be obtained using
@@ -908,31 +917,47 @@ The following forms may be used:
908.It 917.It
909.Cm ListenAddress 918.Cm ListenAddress
910.Sm off 919.Sm off
911.Ar host | Ar IPv4_addr | Ar IPv6_addr 920.Ar hostname | address
921.Sm on
922.Op Cm rdomain Ar domain
923.It
924.Cm ListenAddress
925.Sm off
926.Ar hostname : port
912.Sm on 927.Sm on
928.Op Cm rdomain Ar domain
913.It 929.It
914.Cm ListenAddress 930.Cm ListenAddress
915.Sm off 931.Sm off
916.Ar host | Ar IPv4_addr : Ar port 932.Ar IPv4_address : port
917.Sm on 933.Sm on
934.Op Cm rdomain Ar domain
918.It 935.It
919.Cm ListenAddress 936.Cm ListenAddress
920.Sm off 937.Sm off
921.Oo 938.Oo Ar hostname | address Oc : Ar port
922.Ar host | Ar IPv6_addr Oc : Ar port
923.Sm on 939.Sm on
940.Op Cm rdomain Ar domain
924.El 941.El
925.Pp 942.Pp
943The optional
944.Cm rdomain
945qualifier requests
946.Xr sshd 8
947listen in an explicit routing domain.
926If 948If
927.Ar port 949.Ar port
928is not specified, 950is not specified,
929sshd will listen on the address and all 951sshd will listen on the address and all
930.Cm Port 952.Cm Port
931options specified. 953options specified.
932The default is to listen on all local addresses. 954The default is to listen on all local addresses on the current default
955routing domain.
933Multiple 956Multiple
934.Cm ListenAddress 957.Cm ListenAddress
935options are permitted. 958options are permitted.
959For more information on routing domains, see
960.Xr rdomain 4 .
936.It Cm LoginGraceTime 961.It Cm LoginGraceTime
937The server disconnects after this time if the user has not 962The server disconnects after this time if the user has not
938successfully logged in. 963successfully logged in.
@@ -1036,8 +1061,15 @@ The available criteria are
1036.Cm Host , 1061.Cm Host ,
1037.Cm LocalAddress , 1062.Cm LocalAddress ,
1038.Cm LocalPort , 1063.Cm LocalPort ,
1064.Cm RDomain ,
1039and 1065and
1040.Cm Address . 1066.Cm Address
1067(with
1068.Cm RDomain
1069representing the
1070.Xr rdomain 4
1071on which the connection was received.)
1072.Pp
1041The match patterns may consist of single entries or comma-separated 1073The match patterns may consist of single entries or comma-separated
1042lists and may use the wildcard and negation operators described in the 1074lists and may use the wildcard and negation operators described in the
1043.Sx PATTERNS 1075.Sx PATTERNS
@@ -1100,6 +1132,7 @@ Available keywords are
1100.Cm PubkeyAuthentication , 1132.Cm PubkeyAuthentication ,
1101.Cm RekeyLimit , 1133.Cm RekeyLimit ,
1102.Cm RevokedKeys , 1134.Cm RevokedKeys ,
1135.Cm RDomain ,
1103.Cm StreamLocalBindMask , 1136.Cm StreamLocalBindMask ,
1104.Cm StreamLocalBindUnlink , 1137.Cm StreamLocalBindUnlink ,
1105.Cm TrustedUserCAKeys , 1138.Cm TrustedUserCAKeys ,
@@ -1188,7 +1221,6 @@ Specifies whether root can log in using
1188The argument must be 1221The argument must be
1189.Cm yes , 1222.Cm yes ,
1190.Cm prohibit-password , 1223.Cm prohibit-password ,
1191.Cm without-password ,
1192.Cm forced-commands-only , 1224.Cm forced-commands-only ,
1193or 1225or
1194.Cm no . 1226.Cm no .
@@ -1197,8 +1229,8 @@ The default is
1197.Pp 1229.Pp
1198If this option is set to 1230If this option is set to
1199.Cm prohibit-password 1231.Cm prohibit-password
1200or 1232(or its deprecated alias,
1201.Cm without-password , 1233.Cm without-password ) ,
1202password and keyboard-interactive authentication are disabled for root. 1234password and keyboard-interactive authentication are disabled for root.
1203.Pp 1235.Pp
1204If this option is set to 1236If this option is set to
@@ -1361,6 +1393,15 @@ an OpenSSH Key Revocation List (KRL) as generated by
1361.Xr ssh-keygen 1 . 1393.Xr ssh-keygen 1 .
1362For more information on KRLs, see the KEY REVOCATION LISTS section in 1394For more information on KRLs, see the KEY REVOCATION LISTS section in
1363.Xr ssh-keygen 1 . 1395.Xr ssh-keygen 1 .
1396.It Cm RDomain
1397Specifies an explicit routing domain that is applied after authentication
1398has completed.
1399The user session, as well and any forwarded or listening IP sockets,
1400will be bound to this
1401.Xr rdomain 4 .
1402If the routing domain is set to
1403.Cm \&%D ,
1404then the domain in which the incoming connection was received will be applied.
1364.It Cm StreamLocalBindMask 1405.It Cm StreamLocalBindMask
1365Sets the octal file creation mode mask 1406Sets the octal file creation mode mask
1366.Pq umask 1407.Pq umask
@@ -1626,6 +1667,8 @@ which are expanded at runtime:
1626.It %% 1667.It %%
1627A literal 1668A literal
1628.Sq % . 1669.Sq % .
1670.It \&%D
1671The routing domain in which the incoming connection was received.
1629.It %F 1672.It %F
1630The fingerprint of the CA key. 1673The fingerprint of the CA key.
1631.It %f 1674.It %f
@@ -1662,6 +1705,9 @@ accepts the tokens %%, %h, and %u.
1662.Pp 1705.Pp
1663.Cm ChrootDirectory 1706.Cm ChrootDirectory
1664accepts the tokens %%, %h, and %u. 1707accepts the tokens %%, %h, and %u.
1708.Pp
1709.Cm RoutingDomain
1710accepts the token %D.
1665.Sh FILES 1711.Sh FILES
1666.Bl -tag -width Ds 1712.Bl -tag -width Ds
1667.It Pa /etc/ssh/sshd_config 1713.It Pa /etc/ssh/sshd_config
diff --git a/sshkey-xmss.c b/sshkey-xmss.c
new file mode 100644
index 000000000..5d66ee790
--- /dev/null
+++ b/sshkey-xmss.c
@@ -0,0 +1,1055 @@
1/* $OpenBSD: sshkey-xmss.c,v 1.1 2018/02/23 15:58:38 markus Exp $ */
2/*
3 * Copyright (c) 2017 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#ifdef WITH_XMSS
28
29#include <sys/types.h>
30#include <sys/uio.h>
31
32#include <stdio.h>
33#include <string.h>
34#include <unistd.h>
35#include <fcntl.h>
36#include <errno.h>
37#ifdef HAVE_SYS_FILE_H
38# include <sys/file.h>
39#endif
40
41#include "ssh2.h"
42#include "ssherr.h"
43#include "sshbuf.h"
44#include "cipher.h"
45#include "sshkey.h"
46#include "sshkey-xmss.h"
47#include "atomicio.h"
48
49#include "xmss_fast.h"
50
51/* opaque internal XMSS state */
52#define XMSS_MAGIC "xmss-state-v1"
53#define XMSS_CIPHERNAME "aes256-gcm@openssh.com"
54struct ssh_xmss_state {
55 xmss_params params;
56 u_int32_t n, w, h, k;
57
58 bds_state bds;
59 u_char *stack;
60 u_int32_t stackoffset;
61 u_char *stacklevels;
62 u_char *auth;
63 u_char *keep;
64 u_char *th_nodes;
65 u_char *retain;
66 treehash_inst *treehash;
67
68 u_int32_t idx; /* state read from file */
69 u_int32_t maxidx; /* resticted # of signatures */
70 int have_state; /* .state file exists */
71 int lockfd; /* locked in sshkey_xmss_get_state() */
72 int allow_update; /* allow sshkey_xmss_update_state() */
73 char *enc_ciphername;/* encrypt state with cipher */
74 u_char *enc_keyiv; /* encrypt state with key */
75 u_int32_t enc_keyiv_len; /* length of enc_keyiv */
76};
77
78int sshkey_xmss_init_bds_state(struct sshkey *);
79int sshkey_xmss_init_enc_key(struct sshkey *, const char *);
80void sshkey_xmss_free_bds(struct sshkey *);
81int sshkey_xmss_get_state_from_file(struct sshkey *, const char *,
82 int *, sshkey_printfn *);
83int sshkey_xmss_encrypt_state(const struct sshkey *, struct sshbuf *,
84 struct sshbuf **);
85int sshkey_xmss_decrypt_state(const struct sshkey *, struct sshbuf *,
86 struct sshbuf **);
87int sshkey_xmss_serialize_enc_key(const struct sshkey *, struct sshbuf *);
88int sshkey_xmss_deserialize_enc_key(struct sshkey *, struct sshbuf *);
89
90#define PRINT(s...) do { if (pr) pr(s); } while (0)
91
92int
93sshkey_xmss_init(struct sshkey *key, const char *name)
94{
95 struct ssh_xmss_state *state;
96
97 if (key->xmss_state != NULL)
98 return SSH_ERR_INVALID_FORMAT;
99 if (name == NULL)
100 return SSH_ERR_INVALID_FORMAT;
101 state = calloc(sizeof(struct ssh_xmss_state), 1);
102 if (state == NULL)
103 return SSH_ERR_ALLOC_FAIL;
104 if (strcmp(name, XMSS_SHA2_256_W16_H10_NAME) == 0) {
105 state->n = 32;
106 state->w = 16;
107 state->h = 10;
108 } else if (strcmp(name, XMSS_SHA2_256_W16_H16_NAME) == 0) {
109 state->n = 32;
110 state->w = 16;
111 state->h = 16;
112 } else if (strcmp(name, XMSS_SHA2_256_W16_H20_NAME) == 0) {
113 state->n = 32;
114 state->w = 16;
115 state->h = 20;
116 } else {
117 free(state);
118 return SSH_ERR_KEY_TYPE_UNKNOWN;
119 }
120 if ((key->xmss_name = strdup(name)) == NULL) {
121 free(state);
122 return SSH_ERR_ALLOC_FAIL;
123 }
124 state->k = 2; /* XXX hardcoded */
125 state->lockfd = -1;
126 if (xmss_set_params(&state->params, state->n, state->h, state->w,
127 state->k) != 0) {
128 free(state);
129 return SSH_ERR_INVALID_FORMAT;
130 }
131 key->xmss_state = state;
132 return 0;
133}
134
135void
136sshkey_xmss_free_state(struct sshkey *key)
137{
138 struct ssh_xmss_state *state = key->xmss_state;
139
140 sshkey_xmss_free_bds(key);
141 if (state) {
142 if (state->enc_keyiv) {
143 explicit_bzero(state->enc_keyiv, state->enc_keyiv_len);
144 free(state->enc_keyiv);
145 }
146 free(state->enc_ciphername);
147 free(state);
148 }
149 key->xmss_state = NULL;
150}
151
152#define SSH_XMSS_K2_MAGIC "k=2"
153#define num_stack(x) ((x->h+1)*(x->n))
154#define num_stacklevels(x) (x->h+1)
155#define num_auth(x) ((x->h)*(x->n))
156#define num_keep(x) ((x->h >> 1)*(x->n))
157#define num_th_nodes(x) ((x->h - x->k)*(x->n))
158#define num_retain(x) (((1ULL << x->k) - x->k - 1) * (x->n))
159#define num_treehash(x) ((x->h) - (x->k))
160
161int
162sshkey_xmss_init_bds_state(struct sshkey *key)
163{
164 struct ssh_xmss_state *state = key->xmss_state;
165 u_int32_t i;
166
167 state->stackoffset = 0;
168 if ((state->stack = calloc(num_stack(state), 1)) == NULL ||
169 (state->stacklevels = calloc(num_stacklevels(state), 1))== NULL ||
170 (state->auth = calloc(num_auth(state), 1)) == NULL ||
171 (state->keep = calloc(num_keep(state), 1)) == NULL ||
172 (state->th_nodes = calloc(num_th_nodes(state), 1)) == NULL ||
173 (state->retain = calloc(num_retain(state), 1)) == NULL ||
174 (state->treehash = calloc(num_treehash(state),
175 sizeof(treehash_inst))) == NULL) {
176 sshkey_xmss_free_bds(key);
177 return SSH_ERR_ALLOC_FAIL;
178 }
179 for (i = 0; i < state->h - state->k; i++)
180 state->treehash[i].node = &state->th_nodes[state->n*i];
181 xmss_set_bds_state(&state->bds, state->stack, state->stackoffset,
182 state->stacklevels, state->auth, state->keep, state->treehash,
183 state->retain, 0);
184 return 0;
185}
186
187void
188sshkey_xmss_free_bds(struct sshkey *key)
189{
190 struct ssh_xmss_state *state = key->xmss_state;
191
192 if (state == NULL)
193 return;
194 free(state->stack);
195 free(state->stacklevels);
196 free(state->auth);
197 free(state->keep);
198 free(state->th_nodes);
199 free(state->retain);
200 free(state->treehash);
201 state->stack = NULL;
202 state->stacklevels = NULL;
203 state->auth = NULL;
204 state->keep = NULL;
205 state->th_nodes = NULL;
206 state->retain = NULL;
207 state->treehash = NULL;
208}
209
210void *
211sshkey_xmss_params(const struct sshkey *key)
212{
213 struct ssh_xmss_state *state = key->xmss_state;
214
215 if (state == NULL)
216 return NULL;
217 return &state->params;
218}
219
220void *
221sshkey_xmss_bds_state(const struct sshkey *key)
222{
223 struct ssh_xmss_state *state = key->xmss_state;
224
225 if (state == NULL)
226 return NULL;
227 return &state->bds;
228}
229
230int
231sshkey_xmss_siglen(const struct sshkey *key, size_t *lenp)
232{
233 struct ssh_xmss_state *state = key->xmss_state;
234
235 if (lenp == NULL)
236 return SSH_ERR_INVALID_ARGUMENT;
237 if (state == NULL)
238 return SSH_ERR_INVALID_FORMAT;
239 *lenp = 4 + state->n +
240 state->params.wots_par.keysize +
241 state->h * state->n;
242 return 0;
243}
244
245size_t
246sshkey_xmss_pklen(const struct sshkey *key)
247{
248 struct ssh_xmss_state *state = key->xmss_state;
249
250 if (state == NULL)
251 return 0;
252 return state->n * 2;
253}
254
255size_t
256sshkey_xmss_sklen(const struct sshkey *key)
257{
258 struct ssh_xmss_state *state = key->xmss_state;
259
260 if (state == NULL)
261 return 0;
262 return state->n * 4 + 4;
263}
264
265int
266sshkey_xmss_init_enc_key(struct sshkey *k, const char *ciphername)
267{
268 struct ssh_xmss_state *state = k->xmss_state;
269 const struct sshcipher *cipher;
270 size_t keylen = 0, ivlen = 0;
271
272 if (state == NULL)
273 return SSH_ERR_INVALID_ARGUMENT;
274 if ((cipher = cipher_by_name(ciphername)) == NULL)
275 return SSH_ERR_INTERNAL_ERROR;
276 if ((state->enc_ciphername = strdup(ciphername)) == NULL)
277 return SSH_ERR_ALLOC_FAIL;
278 keylen = cipher_keylen(cipher);
279 ivlen = cipher_ivlen(cipher);
280 state->enc_keyiv_len = keylen + ivlen;
281 if ((state->enc_keyiv = calloc(state->enc_keyiv_len, 1)) == NULL) {
282 free(state->enc_ciphername);
283 state->enc_ciphername = NULL;
284 return SSH_ERR_ALLOC_FAIL;
285 }
286 arc4random_buf(state->enc_keyiv, state->enc_keyiv_len);
287 return 0;
288}
289
290int
291sshkey_xmss_serialize_enc_key(const struct sshkey *k, struct sshbuf *b)
292{
293 struct ssh_xmss_state *state = k->xmss_state;
294 int r;
295
296 if (state == NULL || state->enc_keyiv == NULL ||
297 state->enc_ciphername == NULL)
298 return SSH_ERR_INVALID_ARGUMENT;
299 if ((r = sshbuf_put_cstring(b, state->enc_ciphername)) != 0 ||
300 (r = sshbuf_put_string(b, state->enc_keyiv,
301 state->enc_keyiv_len)) != 0)
302 return r;
303 return 0;
304}
305
306int
307sshkey_xmss_deserialize_enc_key(struct sshkey *k, struct sshbuf *b)
308{
309 struct ssh_xmss_state *state = k->xmss_state;
310 size_t len;
311 int r;
312
313 if (state == NULL)
314 return SSH_ERR_INVALID_ARGUMENT;
315 if ((r = sshbuf_get_cstring(b, &state->enc_ciphername, NULL)) != 0 ||
316 (r = sshbuf_get_string(b, &state->enc_keyiv, &len)) != 0)
317 return r;
318 state->enc_keyiv_len = len;
319 return 0;
320}
321
322int
323sshkey_xmss_serialize_pk_info(const struct sshkey *k, struct sshbuf *b,
324 enum sshkey_serialize_rep opts)
325{
326 struct ssh_xmss_state *state = k->xmss_state;
327 u_char have_info = 1;
328 u_int32_t idx;
329 int r;
330
331 if (state == NULL)
332 return SSH_ERR_INVALID_ARGUMENT;
333 if (opts != SSHKEY_SERIALIZE_INFO)
334 return 0;
335 idx = k->xmss_sk ? PEEK_U32(k->xmss_sk) : state->idx;
336 if ((r = sshbuf_put_u8(b, have_info)) != 0 ||
337 (r = sshbuf_put_u32(b, idx)) != 0 ||
338 (r = sshbuf_put_u32(b, state->maxidx)) != 0)
339 return r;
340 return 0;
341}
342
343int
344sshkey_xmss_deserialize_pk_info(struct sshkey *k, struct sshbuf *b)
345{
346 struct ssh_xmss_state *state = k->xmss_state;
347 u_char have_info;
348 int r;
349
350 if (state == NULL)
351 return SSH_ERR_INVALID_ARGUMENT;
352 /* optional */
353 if (sshbuf_len(b) == 0)
354 return 0;
355 if ((r = sshbuf_get_u8(b, &have_info)) != 0)
356 return r;
357 if (have_info != 1)
358 return SSH_ERR_INVALID_ARGUMENT;
359 if ((r = sshbuf_get_u32(b, &state->idx)) != 0 ||
360 (r = sshbuf_get_u32(b, &state->maxidx)) != 0)
361 return r;
362 return 0;
363}
364
365int
366sshkey_xmss_generate_private_key(struct sshkey *k, u_int bits)
367{
368 int r;
369 const char *name;
370
371 if (bits == 10) {
372 name = XMSS_SHA2_256_W16_H10_NAME;
373 } else if (bits == 16) {
374 name = XMSS_SHA2_256_W16_H16_NAME;
375 } else if (bits == 20) {
376 name = XMSS_SHA2_256_W16_H20_NAME;
377 } else {
378 name = XMSS_DEFAULT_NAME;
379 }
380 if ((r = sshkey_xmss_init(k, name)) != 0 ||
381 (r = sshkey_xmss_init_bds_state(k)) != 0 ||
382 (r = sshkey_xmss_init_enc_key(k, XMSS_CIPHERNAME)) != 0)
383 return r;
384 if ((k->xmss_pk = malloc(sshkey_xmss_pklen(k))) == NULL ||
385 (k->xmss_sk = malloc(sshkey_xmss_sklen(k))) == NULL) {
386 return SSH_ERR_ALLOC_FAIL;
387 }
388 xmss_keypair(k->xmss_pk, k->xmss_sk, sshkey_xmss_bds_state(k),
389 sshkey_xmss_params(k));
390 return 0;
391}
392
393int
394sshkey_xmss_get_state_from_file(struct sshkey *k, const char *filename,
395 int *have_file, sshkey_printfn *pr)
396{
397 struct sshbuf *b = NULL, *enc = NULL;
398 int ret = SSH_ERR_SYSTEM_ERROR, r, fd = -1;
399 u_int32_t len;
400 unsigned char buf[4], *data = NULL;
401
402 *have_file = 0;
403 if ((fd = open(filename, O_RDONLY)) >= 0) {
404 *have_file = 1;
405 if (atomicio(read, fd, buf, sizeof(buf)) != sizeof(buf)) {
406 PRINT("%s: corrupt state file: %s", __func__, filename);
407 goto done;
408 }
409 len = PEEK_U32(buf);
410 if ((data = calloc(len, 1)) == NULL) {
411 ret = SSH_ERR_ALLOC_FAIL;
412 goto done;
413 }
414 if (atomicio(read, fd, data, len) != len) {
415 PRINT("%s: cannot read blob: %s", __func__, filename);
416 goto done;
417 }
418 if ((enc = sshbuf_from(data, len)) == NULL) {
419 ret = SSH_ERR_ALLOC_FAIL;
420 goto done;
421 }
422 sshkey_xmss_free_bds(k);
423 if ((r = sshkey_xmss_decrypt_state(k, enc, &b)) != 0) {
424 ret = r;
425 goto done;
426 }
427 if ((r = sshkey_xmss_deserialize_state(k, b)) != 0) {
428 ret = r;
429 goto done;
430 }
431 ret = 0;
432 }
433done:
434 if (fd != -1)
435 close(fd);
436 free(data);
437 sshbuf_free(enc);
438 sshbuf_free(b);
439 return ret;
440}
441
442int
443sshkey_xmss_get_state(const struct sshkey *k, sshkey_printfn *pr)
444{
445 struct ssh_xmss_state *state = k->xmss_state;
446 u_int32_t idx = 0;
447 char *filename = NULL;
448 char *statefile = NULL, *ostatefile = NULL, *lockfile = NULL;
449 int lockfd = -1, have_state = 0, have_ostate, tries = 0;
450 int ret = SSH_ERR_INVALID_ARGUMENT, r;
451
452 if (state == NULL)
453 goto done;
454 /*
455 * If maxidx is set, then we are allowed a limited number
456 * of signatures, but don't need to access the disk.
457 * Otherwise we need to deal with the on-disk state.
458 */
459 if (state->maxidx) {
460 /* xmss_sk always contains the current state */
461 idx = PEEK_U32(k->xmss_sk);
462 if (idx < state->maxidx) {
463 state->allow_update = 1;
464 return 0;
465 }
466 return SSH_ERR_INVALID_ARGUMENT;
467 }
468 if ((filename = k->xmss_filename) == NULL)
469 goto done;
470 if (asprintf(&lockfile, "%s.lock", filename) < 0 ||
471 asprintf(&statefile, "%s.state", filename) < 0 ||
472 asprintf(&ostatefile, "%s.ostate", filename) < 0) {
473 ret = SSH_ERR_ALLOC_FAIL;
474 goto done;
475 }
476 if ((lockfd = open(lockfile, O_CREAT|O_RDONLY, 0600)) < 0) {
477 ret = SSH_ERR_SYSTEM_ERROR;
478 PRINT("%s: cannot open/create: %s", __func__, lockfile);
479 goto done;
480 }
481 while (flock(lockfd, LOCK_EX|LOCK_NB) < 0) {
482 if (errno != EWOULDBLOCK) {
483 ret = SSH_ERR_SYSTEM_ERROR;
484 PRINT("%s: cannot lock: %s", __func__, lockfile);
485 goto done;
486 }
487 if (++tries > 10) {
488 ret = SSH_ERR_SYSTEM_ERROR;
489 PRINT("%s: giving up on: %s", __func__, lockfile);
490 goto done;
491 }
492 usleep(1000*100*tries);
493 }
494 /* XXX no longer const */
495 if ((r = sshkey_xmss_get_state_from_file((struct sshkey *)k,
496 statefile, &have_state, pr)) != 0) {
497 if ((r = sshkey_xmss_get_state_from_file((struct sshkey *)k,
498 ostatefile, &have_ostate, pr)) == 0) {
499 state->allow_update = 1;
500 r = sshkey_xmss_forward_state(k, 1);
501 state->idx = PEEK_U32(k->xmss_sk);
502 state->allow_update = 0;
503 }
504 }
505 if (!have_state && !have_ostate) {
506 /* check that bds state is initialized */
507 if (state->bds.auth == NULL)
508 goto done;
509 PRINT("%s: start from scratch idx 0: %u", __func__, state->idx);
510 } else if (r != 0) {
511 ret = r;
512 goto done;
513 }
514 if (state->idx + 1 < state->idx) {
515 PRINT("%s: state wrap: %u", __func__, state->idx);
516 goto done;
517 }
518 state->have_state = have_state;
519 state->lockfd = lockfd;
520 state->allow_update = 1;
521 lockfd = -1;
522 ret = 0;
523done:
524 if (lockfd != -1)
525 close(lockfd);
526 free(lockfile);
527 free(statefile);
528 free(ostatefile);
529 return ret;
530}
531
532int
533sshkey_xmss_forward_state(const struct sshkey *k, u_int32_t reserve)
534{
535 struct ssh_xmss_state *state = k->xmss_state;
536 u_char *sig = NULL;
537 size_t required_siglen;
538 unsigned long long smlen;
539 u_char data;
540 int ret, r;
541
542 if (state == NULL || !state->allow_update)
543 return SSH_ERR_INVALID_ARGUMENT;
544 if (reserve == 0)
545 return SSH_ERR_INVALID_ARGUMENT;
546 if (state->idx + reserve <= state->idx)
547 return SSH_ERR_INVALID_ARGUMENT;
548 if ((r = sshkey_xmss_siglen(k, &required_siglen)) != 0)
549 return r;
550 if ((sig = malloc(required_siglen)) == NULL)
551 return SSH_ERR_ALLOC_FAIL;
552 while (reserve-- > 0) {
553 state->idx = PEEK_U32(k->xmss_sk);
554 smlen = required_siglen;
555 if ((ret = xmss_sign(k->xmss_sk, sshkey_xmss_bds_state(k),
556 sig, &smlen, &data, 0, sshkey_xmss_params(k))) != 0) {
557 r = SSH_ERR_INVALID_ARGUMENT;
558 break;
559 }
560 }
561 free(sig);
562 return r;
563}
564
565int
566sshkey_xmss_update_state(const struct sshkey *k, sshkey_printfn *pr)
567{
568 struct ssh_xmss_state *state = k->xmss_state;
569 struct sshbuf *b = NULL, *enc = NULL;
570 u_int32_t idx = 0;
571 unsigned char buf[4];
572 char *filename = NULL;
573 char *statefile = NULL, *ostatefile = NULL, *nstatefile = NULL;
574 int fd = -1;
575 int ret = SSH_ERR_INVALID_ARGUMENT;
576
577 if (state == NULL || !state->allow_update)
578 return ret;
579 if (state->maxidx) {
580 /* no update since the number of signatures is limited */
581 ret = 0;
582 goto done;
583 }
584 idx = PEEK_U32(k->xmss_sk);
585 if (idx == state->idx) {
586 /* no signature happend, no need to update */
587 ret = 0;
588 goto done;
589 } else if (idx != state->idx + 1) {
590 PRINT("%s: more than one signature happened: idx %u state %u",
591 __func__, idx, state->idx);
592 goto done;
593 }
594 state->idx = idx;
595 if ((filename = k->xmss_filename) == NULL)
596 goto done;
597 if (asprintf(&statefile, "%s.state", filename) < 0 ||
598 asprintf(&ostatefile, "%s.ostate", filename) < 0 ||
599 asprintf(&nstatefile, "%s.nstate", filename) < 0) {
600 ret = SSH_ERR_ALLOC_FAIL;
601 goto done;
602 }
603 unlink(nstatefile);
604 if ((b = sshbuf_new()) == NULL) {
605 ret = SSH_ERR_ALLOC_FAIL;
606 goto done;
607 }
608 if ((ret = sshkey_xmss_serialize_state(k, b)) != 0) {
609 PRINT("%s: SERLIALIZE FAILED: %d", __func__, ret);
610 goto done;
611 }
612 if ((ret = sshkey_xmss_encrypt_state(k, b, &enc)) != 0) {
613 PRINT("%s: ENCRYPT FAILED: %d", __func__, ret);
614 goto done;
615 }
616 if ((fd = open(nstatefile, O_CREAT|O_WRONLY|O_EXCL, 0600)) < 0) {
617 ret = SSH_ERR_SYSTEM_ERROR;
618 PRINT("%s: open new state file: %s", __func__, nstatefile);
619 goto done;
620 }
621 POKE_U32(buf, sshbuf_len(enc));
622 if (atomicio(vwrite, fd, buf, sizeof(buf)) != sizeof(buf)) {
623 ret = SSH_ERR_SYSTEM_ERROR;
624 PRINT("%s: write new state file hdr: %s", __func__, nstatefile);
625 close(fd);
626 goto done;
627 }
628 if (atomicio(vwrite, fd, (void *)sshbuf_ptr(enc), sshbuf_len(enc)) !=
629 sshbuf_len(enc)) {
630 ret = SSH_ERR_SYSTEM_ERROR;
631 PRINT("%s: write new state file data: %s", __func__, nstatefile);
632 close(fd);
633 goto done;
634 }
635 if (fsync(fd) < 0) {
636 ret = SSH_ERR_SYSTEM_ERROR;
637 PRINT("%s: sync new state file: %s", __func__, nstatefile);
638 close(fd);
639 goto done;
640 }
641 if (close(fd) < 0) {
642 ret = SSH_ERR_SYSTEM_ERROR;
643 PRINT("%s: close new state file: %s", __func__, nstatefile);
644 goto done;
645 }
646 if (state->have_state) {
647 unlink(ostatefile);
648 if (link(statefile, ostatefile)) {
649 ret = SSH_ERR_SYSTEM_ERROR;
650 PRINT("%s: backup state %s to %s", __func__, statefile,
651 ostatefile);
652 goto done;
653 }
654 }
655 if (rename(nstatefile, statefile) < 0) {
656 ret = SSH_ERR_SYSTEM_ERROR;
657 PRINT("%s: rename %s to %s", __func__, nstatefile, statefile);
658 goto done;
659 }
660 ret = 0;
661done:
662 if (state->lockfd != -1) {
663 close(state->lockfd);
664 state->lockfd = -1;
665 }
666 if (nstatefile)
667 unlink(nstatefile);
668 free(statefile);
669 free(ostatefile);
670 free(nstatefile);
671 sshbuf_free(b);
672 sshbuf_free(enc);
673 return ret;
674}
675
676int
677sshkey_xmss_serialize_state(const struct sshkey *k, struct sshbuf *b)
678{
679 struct ssh_xmss_state *state = k->xmss_state;
680 treehash_inst *th;
681 u_int32_t i, node;
682 int r;
683
684 if (state == NULL)
685 return SSH_ERR_INVALID_ARGUMENT;
686 if (state->stack == NULL)
687 return SSH_ERR_INVALID_ARGUMENT;
688 state->stackoffset = state->bds.stackoffset; /* copy back */
689 if ((r = sshbuf_put_cstring(b, SSH_XMSS_K2_MAGIC)) != 0 ||
690 (r = sshbuf_put_u32(b, state->idx)) != 0 ||
691 (r = sshbuf_put_string(b, state->stack, num_stack(state))) != 0 ||
692 (r = sshbuf_put_u32(b, state->stackoffset)) != 0 ||
693 (r = sshbuf_put_string(b, state->stacklevels, num_stacklevels(state))) != 0 ||
694 (r = sshbuf_put_string(b, state->auth, num_auth(state))) != 0 ||
695 (r = sshbuf_put_string(b, state->keep, num_keep(state))) != 0 ||
696 (r = sshbuf_put_string(b, state->th_nodes, num_th_nodes(state))) != 0 ||
697 (r = sshbuf_put_string(b, state->retain, num_retain(state))) != 0 ||
698 (r = sshbuf_put_u32(b, num_treehash(state))) != 0)
699 return r;
700 for (i = 0; i < num_treehash(state); i++) {
701 th = &state->treehash[i];
702 node = th->node - state->th_nodes;
703 if ((r = sshbuf_put_u32(b, th->h)) != 0 ||
704 (r = sshbuf_put_u32(b, th->next_idx)) != 0 ||
705 (r = sshbuf_put_u32(b, th->stackusage)) != 0 ||
706 (r = sshbuf_put_u8(b, th->completed)) != 0 ||
707 (r = sshbuf_put_u32(b, node)) != 0)
708 return r;
709 }
710 return 0;
711}
712
713int
714sshkey_xmss_serialize_state_opt(const struct sshkey *k, struct sshbuf *b,
715 enum sshkey_serialize_rep opts)
716{
717 struct ssh_xmss_state *state = k->xmss_state;
718 int r = SSH_ERR_INVALID_ARGUMENT;
719
720 if (state == NULL)
721 return SSH_ERR_INVALID_ARGUMENT;
722 if ((r = sshbuf_put_u8(b, opts)) != 0)
723 return r;
724 switch (opts) {
725 case SSHKEY_SERIALIZE_STATE:
726 r = sshkey_xmss_serialize_state(k, b);
727 break;
728 case SSHKEY_SERIALIZE_FULL:
729 if ((r = sshkey_xmss_serialize_enc_key(k, b)) != 0)
730 break;
731 r = sshkey_xmss_serialize_state(k, b);
732 break;
733 case SSHKEY_SERIALIZE_DEFAULT:
734 r = 0;
735 break;
736 default:
737 r = SSH_ERR_INVALID_ARGUMENT;
738 break;
739 }
740 return r;
741}
742
743int
744sshkey_xmss_deserialize_state(struct sshkey *k, struct sshbuf *b)
745{
746 struct ssh_xmss_state *state = k->xmss_state;
747 treehash_inst *th;
748 u_int32_t i, lh, node;
749 size_t ls, lsl, la, lk, ln, lr;
750 char *magic;
751 int r;
752
753 if (state == NULL)
754 return SSH_ERR_INVALID_ARGUMENT;
755 if (k->xmss_sk == NULL)
756 return SSH_ERR_INVALID_ARGUMENT;
757 if ((state->treehash = calloc(num_treehash(state),
758 sizeof(treehash_inst))) == NULL)
759 return SSH_ERR_ALLOC_FAIL;
760 if ((r = sshbuf_get_cstring(b, &magic, NULL)) != 0 ||
761 (r = sshbuf_get_u32(b, &state->idx)) != 0 ||
762 (r = sshbuf_get_string(b, &state->stack, &ls)) != 0 ||
763 (r = sshbuf_get_u32(b, &state->stackoffset)) != 0 ||
764 (r = sshbuf_get_string(b, &state->stacklevels, &lsl)) != 0 ||
765 (r = sshbuf_get_string(b, &state->auth, &la)) != 0 ||
766 (r = sshbuf_get_string(b, &state->keep, &lk)) != 0 ||
767 (r = sshbuf_get_string(b, &state->th_nodes, &ln)) != 0 ||
768 (r = sshbuf_get_string(b, &state->retain, &lr)) != 0 ||
769 (r = sshbuf_get_u32(b, &lh)) != 0)
770 return r;
771 if (strcmp(magic, SSH_XMSS_K2_MAGIC) != 0)
772 return SSH_ERR_INVALID_ARGUMENT;
773 /* XXX check stackoffset */
774 if (ls != num_stack(state) ||
775 lsl != num_stacklevels(state) ||
776 la != num_auth(state) ||
777 lk != num_keep(state) ||
778 ln != num_th_nodes(state) ||
779 lr != num_retain(state) ||
780 lh != num_treehash(state))
781 return SSH_ERR_INVALID_ARGUMENT;
782 for (i = 0; i < num_treehash(state); i++) {
783 th = &state->treehash[i];
784 if ((r = sshbuf_get_u32(b, &th->h)) != 0 ||
785 (r = sshbuf_get_u32(b, &th->next_idx)) != 0 ||
786 (r = sshbuf_get_u32(b, &th->stackusage)) != 0 ||
787 (r = sshbuf_get_u8(b, &th->completed)) != 0 ||
788 (r = sshbuf_get_u32(b, &node)) != 0)
789 return r;
790 if (node < num_th_nodes(state))
791 th->node = &state->th_nodes[node];
792 }
793 POKE_U32(k->xmss_sk, state->idx);
794 xmss_set_bds_state(&state->bds, state->stack, state->stackoffset,
795 state->stacklevels, state->auth, state->keep, state->treehash,
796 state->retain, 0);
797 return 0;
798}
799
800int
801sshkey_xmss_deserialize_state_opt(struct sshkey *k, struct sshbuf *b)
802{
803 enum sshkey_serialize_rep opts;
804 u_char have_state;
805 int r;
806
807 if ((r = sshbuf_get_u8(b, &have_state)) != 0)
808 return r;
809
810 opts = have_state;
811 switch (opts) {
812 case SSHKEY_SERIALIZE_DEFAULT:
813 r = 0;
814 break;
815 case SSHKEY_SERIALIZE_STATE:
816 if ((r = sshkey_xmss_deserialize_state(k, b)) != 0)
817 return r;
818 break;
819 case SSHKEY_SERIALIZE_FULL:
820 if ((r = sshkey_xmss_deserialize_enc_key(k, b)) != 0 ||
821 (r = sshkey_xmss_deserialize_state(k, b)) != 0)
822 return r;
823 break;
824 default:
825 r = SSH_ERR_INVALID_FORMAT;
826 break;
827 }
828 return r;
829}
830
831int
832sshkey_xmss_encrypt_state(const struct sshkey *k, struct sshbuf *b,
833 struct sshbuf **retp)
834{
835 struct ssh_xmss_state *state = k->xmss_state;
836 struct sshbuf *encrypted = NULL, *encoded = NULL, *padded = NULL;
837 struct sshcipher_ctx *ciphercontext = NULL;
838 const struct sshcipher *cipher;
839 u_char *cp, *key, *iv = NULL;
840 size_t i, keylen, ivlen, blocksize, authlen, encrypted_len, aadlen;
841 int r = SSH_ERR_INTERNAL_ERROR;
842
843 if (retp != NULL)
844 *retp = NULL;
845 if (state == NULL ||
846 state->enc_keyiv == NULL ||
847 state->enc_ciphername == NULL)
848 return SSH_ERR_INTERNAL_ERROR;
849 if ((cipher = cipher_by_name(state->enc_ciphername)) == NULL) {
850 r = SSH_ERR_INTERNAL_ERROR;
851 goto out;
852 }
853 blocksize = cipher_blocksize(cipher);
854 keylen = cipher_keylen(cipher);
855 ivlen = cipher_ivlen(cipher);
856 authlen = cipher_authlen(cipher);
857 if (state->enc_keyiv_len != keylen + ivlen) {
858 r = SSH_ERR_INVALID_FORMAT;
859 goto out;
860 }
861 key = state->enc_keyiv;
862 if ((encrypted = sshbuf_new()) == NULL ||
863 (encoded = sshbuf_new()) == NULL ||
864 (padded = sshbuf_new()) == NULL ||
865 (iv = malloc(ivlen)) == NULL) {
866 r = SSH_ERR_ALLOC_FAIL;
867 goto out;
868 }
869
870 /* replace first 4 bytes of IV with index to ensure uniqueness */
871 memcpy(iv, key + keylen, ivlen);
872 POKE_U32(iv, state->idx);
873
874 if ((r = sshbuf_put(encoded, XMSS_MAGIC, sizeof(XMSS_MAGIC))) != 0 ||
875 (r = sshbuf_put_u32(encoded, state->idx)) != 0)
876 goto out;
877
878 /* padded state will be encrypted */
879 if ((r = sshbuf_putb(padded, b)) != 0)
880 goto out;
881 i = 0;
882 while (sshbuf_len(padded) % blocksize) {
883 if ((r = sshbuf_put_u8(padded, ++i & 0xff)) != 0)
884 goto out;
885 }
886 encrypted_len = sshbuf_len(padded);
887
888 /* header including the length of state is used as AAD */
889 if ((r = sshbuf_put_u32(encoded, encrypted_len)) != 0)
890 goto out;
891 aadlen = sshbuf_len(encoded);
892
893 /* concat header and state */
894 if ((r = sshbuf_putb(encoded, padded)) != 0)
895 goto out;
896
897 /* reserve space for encryption of encoded data plus auth tag */
898 /* encrypt at offset addlen */
899 if ((r = sshbuf_reserve(encrypted,
900 encrypted_len + aadlen + authlen, &cp)) != 0 ||
901 (r = cipher_init(&ciphercontext, cipher, key, keylen,
902 iv, ivlen, 1)) != 0 ||
903 (r = cipher_crypt(ciphercontext, 0, cp, sshbuf_ptr(encoded),
904 encrypted_len, aadlen, authlen)) != 0)
905 goto out;
906
907 /* success */
908 r = 0;
909 out:
910 if (retp != NULL) {
911 *retp = encrypted;
912 encrypted = NULL;
913 }
914 sshbuf_free(padded);
915 sshbuf_free(encoded);
916 sshbuf_free(encrypted);
917 cipher_free(ciphercontext);
918 free(iv);
919 return r;
920}
921
922int
923sshkey_xmss_decrypt_state(const struct sshkey *k, struct sshbuf *encoded,
924 struct sshbuf **retp)
925{
926 struct ssh_xmss_state *state = k->xmss_state;
927 struct sshbuf *copy = NULL, *decrypted = NULL;
928 struct sshcipher_ctx *ciphercontext = NULL;
929 const struct sshcipher *cipher = NULL;
930 u_char *key, *iv = NULL, *dp;
931 size_t keylen, ivlen, authlen, aadlen;
932 u_int blocksize, encrypted_len, index;
933 int r = SSH_ERR_INTERNAL_ERROR;
934
935 if (retp != NULL)
936 *retp = NULL;
937 if (state == NULL ||
938 state->enc_keyiv == NULL ||
939 state->enc_ciphername == NULL)
940 return SSH_ERR_INTERNAL_ERROR;
941 if ((cipher = cipher_by_name(state->enc_ciphername)) == NULL) {
942 r = SSH_ERR_INVALID_FORMAT;
943 goto out;
944 }
945 blocksize = cipher_blocksize(cipher);
946 keylen = cipher_keylen(cipher);
947 ivlen = cipher_ivlen(cipher);
948 authlen = cipher_authlen(cipher);
949 if (state->enc_keyiv_len != keylen + ivlen) {
950 r = SSH_ERR_INTERNAL_ERROR;
951 goto out;
952 }
953 key = state->enc_keyiv;
954
955 if ((copy = sshbuf_fromb(encoded)) == NULL ||
956 (decrypted = sshbuf_new()) == NULL ||
957 (iv = malloc(ivlen)) == NULL) {
958 r = SSH_ERR_ALLOC_FAIL;
959 goto out;
960 }
961
962 /* check magic */
963 if (sshbuf_len(encoded) < sizeof(XMSS_MAGIC) ||
964 memcmp(sshbuf_ptr(encoded), XMSS_MAGIC, sizeof(XMSS_MAGIC))) {
965 r = SSH_ERR_INVALID_FORMAT;
966 goto out;
967 }
968 /* parse public portion */
969 if ((r = sshbuf_consume(encoded, sizeof(XMSS_MAGIC))) != 0 ||
970 (r = sshbuf_get_u32(encoded, &index)) != 0 ||
971 (r = sshbuf_get_u32(encoded, &encrypted_len)) != 0)
972 goto out;
973
974 /* check size of encrypted key blob */
975 if (encrypted_len < blocksize || (encrypted_len % blocksize) != 0) {
976 r = SSH_ERR_INVALID_FORMAT;
977 goto out;
978 }
979 /* check that an appropriate amount of auth data is present */
980 if (sshbuf_len(encoded) < encrypted_len + authlen) {
981 r = SSH_ERR_INVALID_FORMAT;
982 goto out;
983 }
984
985 aadlen = sshbuf_len(copy) - sshbuf_len(encoded);
986
987 /* replace first 4 bytes of IV with index to ensure uniqueness */
988 memcpy(iv, key + keylen, ivlen);
989 POKE_U32(iv, index);
990
991 /* decrypt private state of key */
992 if ((r = sshbuf_reserve(decrypted, aadlen + encrypted_len, &dp)) != 0 ||
993 (r = cipher_init(&ciphercontext, cipher, key, keylen,
994 iv, ivlen, 0)) != 0 ||
995 (r = cipher_crypt(ciphercontext, 0, dp, sshbuf_ptr(copy),
996 encrypted_len, aadlen, authlen)) != 0)
997 goto out;
998
999 /* there should be no trailing data */
1000 if ((r = sshbuf_consume(encoded, encrypted_len + authlen)) != 0)
1001 goto out;
1002 if (sshbuf_len(encoded) != 0) {
1003 r = SSH_ERR_INVALID_FORMAT;
1004 goto out;
1005 }
1006
1007 /* remove AAD */
1008 if ((r = sshbuf_consume(decrypted, aadlen)) != 0)
1009 goto out;
1010 /* XXX encrypted includes unchecked padding */
1011
1012 /* success */
1013 r = 0;
1014 if (retp != NULL) {
1015 *retp = decrypted;
1016 decrypted = NULL;
1017 }
1018 out:
1019 cipher_free(ciphercontext);
1020 sshbuf_free(copy);
1021 sshbuf_free(decrypted);
1022 free(iv);
1023 return r;
1024}
1025
1026u_int32_t
1027sshkey_xmss_signatures_left(const struct sshkey *k)
1028{
1029 struct ssh_xmss_state *state = k->xmss_state;
1030 u_int32_t idx;
1031
1032 if (sshkey_type_plain(k->type) == KEY_XMSS && state &&
1033 state->maxidx) {
1034 idx = k->xmss_sk ? PEEK_U32(k->xmss_sk) : state->idx;
1035 if (idx < state->maxidx)
1036 return state->maxidx - idx;
1037 }
1038 return 0;
1039}
1040
1041int
1042sshkey_xmss_enable_maxsign(struct sshkey *k, u_int32_t maxsign)
1043{
1044 struct ssh_xmss_state *state = k->xmss_state;
1045
1046 if (sshkey_type_plain(k->type) != KEY_XMSS)
1047 return SSH_ERR_INVALID_ARGUMENT;
1048 if (maxsign == 0)
1049 return 0;
1050 if (state->idx + maxsign < state->idx)
1051 return SSH_ERR_INVALID_ARGUMENT;
1052 state->maxidx = state->idx + maxsign;
1053 return 0;
1054}
1055#endif /* WITH_XMSS */
diff --git a/sshkey-xmss.h b/sshkey-xmss.h
new file mode 100644
index 000000000..b9f8ead10
--- /dev/null
+++ b/sshkey-xmss.h
@@ -0,0 +1,56 @@
1/* $OpenBSD: sshkey-xmss.h,v 1.1 2018/02/23 15:58:38 markus Exp $ */
2/*
3 * Copyright (c) 2017 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#ifndef SSHKEY_XMSS_H
26#define SSHKEY_XMSS_H
27
28#define XMSS_SHA2_256_W16_H10_NAME "XMSS_SHA2-256_W16_H10"
29#define XMSS_SHA2_256_W16_H16_NAME "XMSS_SHA2-256_W16_H16"
30#define XMSS_SHA2_256_W16_H20_NAME "XMSS_SHA2-256_W16_H20"
31#define XMSS_DEFAULT_NAME XMSS_SHA2_256_W16_H10_NAME
32
33size_t sshkey_xmss_pklen(const struct sshkey *);
34size_t sshkey_xmss_sklen(const struct sshkey *);
35int sshkey_xmss_init(struct sshkey *, const char *);
36void sshkey_xmss_free_state(struct sshkey *);
37int sshkey_xmss_generate_private_key(struct sshkey *, u_int);
38int sshkey_xmss_serialize_state(const struct sshkey *, struct sshbuf *);
39int sshkey_xmss_serialize_state_opt(const struct sshkey *, struct sshbuf *,
40 enum sshkey_serialize_rep);
41int sshkey_xmss_serialize_pk_info(const struct sshkey *, struct sshbuf *,
42 enum sshkey_serialize_rep);
43int sshkey_xmss_deserialize_state(struct sshkey *, struct sshbuf *);
44int sshkey_xmss_deserialize_state_opt(struct sshkey *, struct sshbuf *);
45int sshkey_xmss_deserialize_pk_info(struct sshkey *, struct sshbuf *);
46
47int sshkey_xmss_siglen(const struct sshkey *, size_t *);
48void *sshkey_xmss_params(const struct sshkey *);
49void *sshkey_xmss_bds_state(const struct sshkey *);
50int sshkey_xmss_get_state(const struct sshkey *, sshkey_printfn *);
51int sshkey_xmss_enable_maxsign(struct sshkey *, u_int32_t);
52int sshkey_xmss_forward_state(const struct sshkey *, u_int32_t);
53int sshkey_xmss_update_state(const struct sshkey *, sshkey_printfn *);
54u_int32_t sshkey_xmss_signatures_left(const struct sshkey *);
55
56#endif /* SSHKEY_XMSS_H */
diff --git a/sshkey.c b/sshkey.c
index e91c54f53..7712fba23 100644
--- a/sshkey.c
+++ b/sshkey.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.c,v 1.56 2017/08/12 06:42:52 djm Exp $ */ 1/* $OpenBSD: sshkey.c,v 1.64 2018/03/22 07:05:48 markus 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.
@@ -55,8 +55,11 @@
55#include "digest.h" 55#include "digest.h"
56#define SSHKEY_INTERNAL 56#define SSHKEY_INTERNAL
57#include "sshkey.h" 57#include "sshkey.h"
58#include "sshkey-xmss.h"
58#include "match.h" 59#include "match.h"
59 60
61#include "xmss_fast.h"
62
60/* openssh private key file format */ 63/* openssh private key file format */
61#define MARK_BEGIN "-----BEGIN OPENSSH PRIVATE KEY-----\n" 64#define MARK_BEGIN "-----BEGIN OPENSSH PRIVATE KEY-----\n"
62#define MARK_END "-----END OPENSSH PRIVATE KEY-----\n" 65#define MARK_END "-----END OPENSSH PRIVATE KEY-----\n"
@@ -71,6 +74,8 @@
71/* Version identification string for SSH v1 identity files. */ 74/* Version identification string for SSH v1 identity files. */
72#define LEGACY_BEGIN "SSH PRIVATE KEY FILE FORMAT 1.1\n" 75#define LEGACY_BEGIN "SSH PRIVATE KEY FILE FORMAT 1.1\n"
73 76
77int sshkey_private_serialize_opt(const struct sshkey *key,
78 struct sshbuf *buf, enum sshkey_serialize_rep);
74static int sshkey_from_blob_internal(struct sshbuf *buf, 79static int sshkey_from_blob_internal(struct sshbuf *buf,
75 struct sshkey **keyp, int allow_cert); 80 struct sshkey **keyp, int allow_cert);
76 81
@@ -87,6 +92,11 @@ static const struct keytype keytypes[] = {
87 { "ssh-ed25519", "ED25519", KEY_ED25519, 0, 0, 0 }, 92 { "ssh-ed25519", "ED25519", KEY_ED25519, 0, 0, 0 },
88 { "ssh-ed25519-cert-v01@openssh.com", "ED25519-CERT", 93 { "ssh-ed25519-cert-v01@openssh.com", "ED25519-CERT",
89 KEY_ED25519_CERT, 0, 1, 0 }, 94 KEY_ED25519_CERT, 0, 1, 0 },
95#ifdef WITH_XMSS
96 { "ssh-xmss@openssh.com", "XMSS", KEY_XMSS, 0, 0, 0 },
97 { "ssh-xmss-cert-v01@openssh.com", "XMSS-CERT",
98 KEY_XMSS_CERT, 0, 1, 0 },
99#endif /* WITH_XMSS */
90#ifdef WITH_OPENSSL 100#ifdef WITH_OPENSSL
91 { "ssh-rsa", "RSA", KEY_RSA, 0, 0, 0 }, 101 { "ssh-rsa", "RSA", KEY_RSA, 0, 0, 0 },
92 { "rsa-sha2-256", "RSA", KEY_RSA, 0, 0, 1 }, 102 { "rsa-sha2-256", "RSA", KEY_RSA, 0, 0, 1 },
@@ -274,6 +284,8 @@ sshkey_size(const struct sshkey *k)
274#endif /* WITH_OPENSSL */ 284#endif /* WITH_OPENSSL */
275 case KEY_ED25519: 285 case KEY_ED25519:
276 case KEY_ED25519_CERT: 286 case KEY_ED25519_CERT:
287 case KEY_XMSS:
288 case KEY_XMSS_CERT:
277 return 256; /* XXX */ 289 return 256; /* XXX */
278 } 290 }
279 return 0; 291 return 0;
@@ -287,6 +299,7 @@ sshkey_type_is_valid_ca(int type)
287 case KEY_DSA: 299 case KEY_DSA:
288 case KEY_ECDSA: 300 case KEY_ECDSA:
289 case KEY_ED25519: 301 case KEY_ED25519:
302 case KEY_XMSS:
290 return 1; 303 return 1;
291 default: 304 default:
292 return 0; 305 return 0;
@@ -314,6 +327,8 @@ sshkey_type_plain(int type)
314 return KEY_ECDSA; 327 return KEY_ECDSA;
315 case KEY_ED25519_CERT: 328 case KEY_ED25519_CERT:
316 return KEY_ED25519; 329 return KEY_ED25519;
330 case KEY_XMSS_CERT:
331 return KEY_XMSS;
317 default: 332 default:
318 return type; 333 return type;
319 } 334 }
@@ -420,8 +435,7 @@ cert_free(struct sshkey_cert *cert)
420 free(cert->principals[i]); 435 free(cert->principals[i]);
421 free(cert->principals); 436 free(cert->principals);
422 sshkey_free(cert->signature_key); 437 sshkey_free(cert->signature_key);
423 explicit_bzero(cert, sizeof(*cert)); 438 freezero(cert, sizeof(*cert));
424 free(cert);
425} 439}
426 440
427static struct sshkey_cert * 441static struct sshkey_cert *
@@ -462,6 +476,8 @@ sshkey_new(int type)
462 k->cert = NULL; 476 k->cert = NULL;
463 k->ed25519_sk = NULL; 477 k->ed25519_sk = NULL;
464 k->ed25519_pk = NULL; 478 k->ed25519_pk = NULL;
479 k->xmss_sk = NULL;
480 k->xmss_pk = NULL;
465 switch (k->type) { 481 switch (k->type) {
466#ifdef WITH_OPENSSL 482#ifdef WITH_OPENSSL
467 case KEY_RSA: 483 case KEY_RSA:
@@ -469,8 +485,7 @@ sshkey_new(int type)
469 if ((rsa = RSA_new()) == NULL || 485 if ((rsa = RSA_new()) == NULL ||
470 (rsa->n = BN_new()) == NULL || 486 (rsa->n = BN_new()) == NULL ||
471 (rsa->e = BN_new()) == NULL) { 487 (rsa->e = BN_new()) == NULL) {
472 if (rsa != NULL) 488 RSA_free(rsa);
473 RSA_free(rsa);
474 free(k); 489 free(k);
475 return NULL; 490 return NULL;
476 } 491 }
@@ -483,8 +498,7 @@ sshkey_new(int type)
483 (dsa->q = BN_new()) == NULL || 498 (dsa->q = BN_new()) == NULL ||
484 (dsa->g = BN_new()) == NULL || 499 (dsa->g = BN_new()) == NULL ||
485 (dsa->pub_key = BN_new()) == NULL) { 500 (dsa->pub_key = BN_new()) == NULL) {
486 if (dsa != NULL) 501 DSA_free(dsa);
487 DSA_free(dsa);
488 free(k); 502 free(k);
489 return NULL; 503 return NULL;
490 } 504 }
@@ -497,6 +511,8 @@ sshkey_new(int type)
497#endif /* WITH_OPENSSL */ 511#endif /* WITH_OPENSSL */
498 case KEY_ED25519: 512 case KEY_ED25519:
499 case KEY_ED25519_CERT: 513 case KEY_ED25519_CERT:
514 case KEY_XMSS:
515 case KEY_XMSS_CERT:
500 /* no need to prealloc */ 516 /* no need to prealloc */
501 break; 517 break;
502 case KEY_UNSPEC: 518 case KEY_UNSPEC:
@@ -545,6 +561,8 @@ sshkey_add_private(struct sshkey *k)
545#endif /* WITH_OPENSSL */ 561#endif /* WITH_OPENSSL */
546 case KEY_ED25519: 562 case KEY_ED25519:
547 case KEY_ED25519_CERT: 563 case KEY_ED25519_CERT:
564 case KEY_XMSS:
565 case KEY_XMSS_CERT:
548 /* no need to prealloc */ 566 /* no need to prealloc */
549 break; 567 break;
550 case KEY_UNSPEC: 568 case KEY_UNSPEC:
@@ -578,38 +596,43 @@ sshkey_free(struct sshkey *k)
578#ifdef WITH_OPENSSL 596#ifdef WITH_OPENSSL
579 case KEY_RSA: 597 case KEY_RSA:
580 case KEY_RSA_CERT: 598 case KEY_RSA_CERT:
581 if (k->rsa != NULL) 599 RSA_free(k->rsa);
582 RSA_free(k->rsa);
583 k->rsa = NULL; 600 k->rsa = NULL;
584 break; 601 break;
585 case KEY_DSA: 602 case KEY_DSA:
586 case KEY_DSA_CERT: 603 case KEY_DSA_CERT:
587 if (k->dsa != NULL) 604 DSA_free(k->dsa);
588 DSA_free(k->dsa);
589 k->dsa = NULL; 605 k->dsa = NULL;
590 break; 606 break;
591# ifdef OPENSSL_HAS_ECC 607# ifdef OPENSSL_HAS_ECC
592 case KEY_ECDSA: 608 case KEY_ECDSA:
593 case KEY_ECDSA_CERT: 609 case KEY_ECDSA_CERT:
594 if (k->ecdsa != NULL) 610 EC_KEY_free(k->ecdsa);
595 EC_KEY_free(k->ecdsa);
596 k->ecdsa = NULL; 611 k->ecdsa = NULL;
597 break; 612 break;
598# endif /* OPENSSL_HAS_ECC */ 613# endif /* OPENSSL_HAS_ECC */
599#endif /* WITH_OPENSSL */ 614#endif /* WITH_OPENSSL */
600 case KEY_ED25519: 615 case KEY_ED25519:
601 case KEY_ED25519_CERT: 616 case KEY_ED25519_CERT:
602 if (k->ed25519_pk) { 617 freezero(k->ed25519_pk, ED25519_PK_SZ);
603 explicit_bzero(k->ed25519_pk, ED25519_PK_SZ); 618 k->ed25519_pk = NULL;
604 free(k->ed25519_pk); 619 freezero(k->ed25519_sk, ED25519_SK_SZ);
605 k->ed25519_pk = NULL; 620 k->ed25519_sk = NULL;
606 } 621 break;
607 if (k->ed25519_sk) { 622#ifdef WITH_XMSS
608 explicit_bzero(k->ed25519_sk, ED25519_SK_SZ); 623 case KEY_XMSS:
609 free(k->ed25519_sk); 624 case KEY_XMSS_CERT:
610 k->ed25519_sk = NULL; 625 freezero(k->xmss_pk, sshkey_xmss_pklen(k));
611 } 626 k->xmss_pk = NULL;
612 break; 627 freezero(k->xmss_sk, sshkey_xmss_sklen(k));
628 k->xmss_sk = NULL;
629 sshkey_xmss_free_state(k);
630 free(k->xmss_name);
631 k->xmss_name = NULL;
632 free(k->xmss_filename);
633 k->xmss_filename = NULL;
634 break;
635#endif /* WITH_XMSS */
613 case KEY_UNSPEC: 636 case KEY_UNSPEC:
614 break; 637 break;
615 default: 638 default:
@@ -617,8 +640,7 @@ sshkey_free(struct sshkey *k)
617 } 640 }
618 if (sshkey_is_cert(k)) 641 if (sshkey_is_cert(k))
619 cert_free(k->cert); 642 cert_free(k->cert);
620 explicit_bzero(k, sizeof(*k)); 643 freezero(k, sizeof(*k));
621 free(k);
622} 644}
623 645
624static int 646static int
@@ -690,6 +712,13 @@ sshkey_equal_public(const struct sshkey *a, const struct sshkey *b)
690 case KEY_ED25519_CERT: 712 case KEY_ED25519_CERT:
691 return a->ed25519_pk != NULL && b->ed25519_pk != NULL && 713 return a->ed25519_pk != NULL && b->ed25519_pk != NULL &&
692 memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0; 714 memcmp(a->ed25519_pk, b->ed25519_pk, ED25519_PK_SZ) == 0;
715#ifdef WITH_XMSS
716 case KEY_XMSS:
717 case KEY_XMSS_CERT:
718 return a->xmss_pk != NULL && b->xmss_pk != NULL &&
719 sshkey_xmss_pklen(a) == sshkey_xmss_pklen(b) &&
720 memcmp(a->xmss_pk, b->xmss_pk, sshkey_xmss_pklen(a)) == 0;
721#endif /* WITH_XMSS */
693 default: 722 default:
694 return 0; 723 return 0;
695 } 724 }
@@ -709,7 +738,8 @@ sshkey_equal(const struct sshkey *a, const struct sshkey *b)
709} 738}
710 739
711static int 740static int
712to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain) 741to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain,
742 enum sshkey_serialize_rep opts)
713{ 743{
714 int type, ret = SSH_ERR_INTERNAL_ERROR; 744 int type, ret = SSH_ERR_INTERNAL_ERROR;
715 const char *typename; 745 const char *typename;
@@ -733,6 +763,9 @@ to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain)
733 case KEY_RSA_CERT: 763 case KEY_RSA_CERT:
734#endif /* WITH_OPENSSL */ 764#endif /* WITH_OPENSSL */
735 case KEY_ED25519_CERT: 765 case KEY_ED25519_CERT:
766#ifdef WITH_XMSS
767 case KEY_XMSS_CERT:
768#endif /* WITH_XMSS */
736 /* Use the existing blob */ 769 /* Use the existing blob */
737 /* XXX modified flag? */ 770 /* XXX modified flag? */
738 if ((ret = sshbuf_putb(b, key->cert->certblob)) != 0) 771 if ((ret = sshbuf_putb(b, key->cert->certblob)) != 0)
@@ -777,6 +810,19 @@ to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain)
777 key->ed25519_pk, ED25519_PK_SZ)) != 0) 810 key->ed25519_pk, ED25519_PK_SZ)) != 0)
778 return ret; 811 return ret;
779 break; 812 break;
813#ifdef WITH_XMSS
814 case KEY_XMSS:
815 if (key->xmss_name == NULL || key->xmss_pk == NULL ||
816 sshkey_xmss_pklen(key) == 0)
817 return SSH_ERR_INVALID_ARGUMENT;
818 if ((ret = sshbuf_put_cstring(b, typename)) != 0 ||
819 (ret = sshbuf_put_cstring(b, key->xmss_name)) != 0 ||
820 (ret = sshbuf_put_string(b,
821 key->xmss_pk, sshkey_xmss_pklen(key))) != 0 ||
822 (ret = sshkey_xmss_serialize_pk_info(key, b, opts)) != 0)
823 return ret;
824 break;
825#endif /* WITH_XMSS */
780 default: 826 default:
781 return SSH_ERR_KEY_TYPE_UNKNOWN; 827 return SSH_ERR_KEY_TYPE_UNKNOWN;
782 } 828 }
@@ -786,18 +832,19 @@ to_blob_buf(const struct sshkey *key, struct sshbuf *b, int force_plain)
786int 832int
787sshkey_putb(const struct sshkey *key, struct sshbuf *b) 833sshkey_putb(const struct sshkey *key, struct sshbuf *b)
788{ 834{
789 return to_blob_buf(key, b, 0); 835 return to_blob_buf(key, b, 0, SSHKEY_SERIALIZE_DEFAULT);
790} 836}
791 837
792int 838int
793sshkey_puts(const struct sshkey *key, struct sshbuf *b) 839sshkey_puts_opts(const struct sshkey *key, struct sshbuf *b,
840 enum sshkey_serialize_rep opts)
794{ 841{
795 struct sshbuf *tmp; 842 struct sshbuf *tmp;
796 int r; 843 int r;
797 844
798 if ((tmp = sshbuf_new()) == NULL) 845 if ((tmp = sshbuf_new()) == NULL)
799 return SSH_ERR_ALLOC_FAIL; 846 return SSH_ERR_ALLOC_FAIL;
800 r = to_blob_buf(key, tmp, 0); 847 r = to_blob_buf(key, tmp, 0, opts);
801 if (r == 0) 848 if (r == 0)
802 r = sshbuf_put_stringb(b, tmp); 849 r = sshbuf_put_stringb(b, tmp);
803 sshbuf_free(tmp); 850 sshbuf_free(tmp);
@@ -805,13 +852,20 @@ sshkey_puts(const struct sshkey *key, struct sshbuf *b)
805} 852}
806 853
807int 854int
855sshkey_puts(const struct sshkey *key, struct sshbuf *b)
856{
857 return sshkey_puts_opts(key, b, SSHKEY_SERIALIZE_DEFAULT);
858}
859
860int
808sshkey_putb_plain(const struct sshkey *key, struct sshbuf *b) 861sshkey_putb_plain(const struct sshkey *key, struct sshbuf *b)
809{ 862{
810 return to_blob_buf(key, b, 1); 863 return to_blob_buf(key, b, 1, SSHKEY_SERIALIZE_DEFAULT);
811} 864}
812 865
813static int 866static int
814to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain) 867to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain,
868 enum sshkey_serialize_rep opts)
815{ 869{
816 int ret = SSH_ERR_INTERNAL_ERROR; 870 int ret = SSH_ERR_INTERNAL_ERROR;
817 size_t len; 871 size_t len;
@@ -823,7 +877,7 @@ to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain)
823 *blobp = NULL; 877 *blobp = NULL;
824 if ((b = sshbuf_new()) == NULL) 878 if ((b = sshbuf_new()) == NULL)
825 return SSH_ERR_ALLOC_FAIL; 879 return SSH_ERR_ALLOC_FAIL;
826 if ((ret = to_blob_buf(key, b, force_plain)) != 0) 880 if ((ret = to_blob_buf(key, b, force_plain, opts)) != 0)
827 goto out; 881 goto out;
828 len = sshbuf_len(b); 882 len = sshbuf_len(b);
829 if (lenp != NULL) 883 if (lenp != NULL)
@@ -844,13 +898,13 @@ to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp, int force_plain)
844int 898int
845sshkey_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp) 899sshkey_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp)
846{ 900{
847 return to_blob(key, blobp, lenp, 0); 901 return to_blob(key, blobp, lenp, 0, SSHKEY_SERIALIZE_DEFAULT);
848} 902}
849 903
850int 904int
851sshkey_plain_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp) 905sshkey_plain_to_blob(const struct sshkey *key, u_char **blobp, size_t *lenp)
852{ 906{
853 return to_blob(key, blobp, lenp, 1); 907 return to_blob(key, blobp, lenp, 1, SSHKEY_SERIALIZE_DEFAULT);
854} 908}
855 909
856int 910int
@@ -869,7 +923,8 @@ sshkey_fingerprint_raw(const struct sshkey *k, int dgst_alg,
869 r = SSH_ERR_INVALID_ARGUMENT; 923 r = SSH_ERR_INVALID_ARGUMENT;
870 goto out; 924 goto out;
871 } 925 }
872 if ((r = to_blob(k, &blob, &blob_len, 1)) != 0) 926 if ((r = to_blob(k, &blob, &blob_len, 1, SSHKEY_SERIALIZE_DEFAULT))
927 != 0)
873 goto out; 928 goto out;
874 if ((ret = calloc(1, SSH_DIGEST_MAX_LENGTH)) == NULL) { 929 if ((ret = calloc(1, SSH_DIGEST_MAX_LENGTH)) == NULL) {
875 r = SSH_ERR_ALLOC_FAIL; 930 r = SSH_ERR_ALLOC_FAIL;
@@ -911,8 +966,7 @@ fingerprint_b64(const char *alg, u_char *dgst_raw, size_t dgst_raw_len)
911 return ret; 966 return ret;
912 if ((r = b64_ntop(dgst_raw, dgst_raw_len, 967 if ((r = b64_ntop(dgst_raw, dgst_raw_len,
913 ret + plen, rlen - plen)) == -1) { 968 ret + plen, rlen - plen)) == -1) {
914 explicit_bzero(ret, rlen); 969 freezero(ret, rlen);
915 free(ret);
916 return NULL; 970 return NULL;
917 } 971 }
918 /* Trim padding characters from end */ 972 /* Trim padding characters from end */
@@ -1161,22 +1215,37 @@ sshkey_fingerprint(const struct sshkey *k, int dgst_alg,
1161 return retval; 1215 return retval;
1162} 1216}
1163 1217
1218static int
1219peek_type_nid(const char *s, size_t l, int *nid)
1220{
1221 const struct keytype *kt;
1222
1223 for (kt = keytypes; kt->type != -1; kt++) {
1224 if (kt->name == NULL || strlen(kt->name) != l)
1225 continue;
1226 if (memcmp(s, kt->name, l) == 0) {
1227 *nid = -1;
1228 if (kt->type == KEY_ECDSA || kt->type == KEY_ECDSA_CERT)
1229 *nid = kt->nid;
1230 return kt->type;
1231 }
1232 }
1233 return KEY_UNSPEC;
1234}
1164 1235
1165/* returns 0 ok, and < 0 error */ 1236/* XXX this can now be made const char * */
1166int 1237int
1167sshkey_read(struct sshkey *ret, char **cpp) 1238sshkey_read(struct sshkey *ret, char **cpp)
1168{ 1239{
1169 struct sshkey *k; 1240 struct sshkey *k;
1170 int retval = SSH_ERR_INVALID_FORMAT; 1241 char *cp, *blobcopy;
1171 char *ep, *cp, *space; 1242 size_t space;
1172 int r, type, curve_nid = -1; 1243 int r, type, curve_nid = -1;
1173 struct sshbuf *blob; 1244 struct sshbuf *blob;
1174 1245
1175 if (ret == NULL) 1246 if (ret == NULL)
1176 return SSH_ERR_INVALID_ARGUMENT; 1247 return SSH_ERR_INVALID_ARGUMENT;
1177 1248
1178 cp = *cpp;
1179
1180 switch (ret->type) { 1249 switch (ret->type) {
1181 case KEY_UNSPEC: 1250 case KEY_UNSPEC:
1182 case KEY_RSA: 1251 case KEY_RSA:
@@ -1187,120 +1256,147 @@ sshkey_read(struct sshkey *ret, char **cpp)
1187 case KEY_ECDSA_CERT: 1256 case KEY_ECDSA_CERT:
1188 case KEY_RSA_CERT: 1257 case KEY_RSA_CERT:
1189 case KEY_ED25519_CERT: 1258 case KEY_ED25519_CERT:
1190 space = strchr(cp, ' '); 1259#ifdef WITH_XMSS
1191 if (space == NULL) 1260 case KEY_XMSS:
1192 return SSH_ERR_INVALID_FORMAT; 1261 case KEY_XMSS_CERT:
1193 *space = '\0'; 1262#endif /* WITH_XMSS */
1194 type = sshkey_type_from_name(cp); 1263 break; /* ok */
1195 if (sshkey_type_plain(type) == KEY_ECDSA && 1264 default:
1196 (curve_nid = sshkey_ecdsa_nid_from_name(cp)) == -1) 1265 return SSH_ERR_INVALID_ARGUMENT;
1197 return SSH_ERR_EC_CURVE_INVALID; 1266 }
1198 *space = ' '; 1267
1199 if (type == KEY_UNSPEC) 1268 /* Decode type */
1200 return SSH_ERR_INVALID_FORMAT; 1269 cp = *cpp;
1201 cp = space+1; 1270 space = strcspn(cp, " \t");
1202 if (*cp == '\0') 1271 if (space == strlen(cp))
1203 return SSH_ERR_INVALID_FORMAT; 1272 return SSH_ERR_INVALID_FORMAT;
1204 if (ret->type != KEY_UNSPEC && ret->type != type) 1273 if ((type = peek_type_nid(cp, space, &curve_nid)) == KEY_UNSPEC)
1205 return SSH_ERR_KEY_TYPE_MISMATCH; 1274 return SSH_ERR_INVALID_FORMAT;
1206 if ((blob = sshbuf_new()) == NULL) 1275
1207 return SSH_ERR_ALLOC_FAIL; 1276 /* skip whitespace */
1208 /* trim comment */ 1277 for (cp += space; *cp == ' ' || *cp == '\t'; cp++)
1209 space = strchr(cp, ' '); 1278 ;
1210 if (space) { 1279 if (*cp == '\0')
1211 /* advance 'space': skip whitespace */ 1280 return SSH_ERR_INVALID_FORMAT;
1212 *space++ = '\0'; 1281 if (ret->type != KEY_UNSPEC && ret->type != type)
1213 while (*space == ' ' || *space == '\t') 1282 return SSH_ERR_KEY_TYPE_MISMATCH;
1214 space++; 1283 if ((blob = sshbuf_new()) == NULL)
1215 ep = space; 1284 return SSH_ERR_ALLOC_FAIL;
1216 } else 1285
1217 ep = cp + strlen(cp); 1286 /* find end of keyblob and decode */
1218 if ((r = sshbuf_b64tod(blob, cp)) != 0) { 1287 space = strcspn(cp, " \t");
1219 sshbuf_free(blob); 1288 if ((blobcopy = strndup(cp, space)) == NULL) {
1220 return r;
1221 }
1222 if ((r = sshkey_from_blob(sshbuf_ptr(blob),
1223 sshbuf_len(blob), &k)) != 0) {
1224 sshbuf_free(blob);
1225 return r;
1226 }
1227 sshbuf_free(blob); 1289 sshbuf_free(blob);
1228 if (k->type != type) { 1290 return SSH_ERR_ALLOC_FAIL;
1229 sshkey_free(k); 1291 }
1230 return SSH_ERR_KEY_TYPE_MISMATCH; 1292 if ((r = sshbuf_b64tod(blob, blobcopy)) != 0) {
1231 } 1293 free(blobcopy);
1232 if (sshkey_type_plain(type) == KEY_ECDSA && 1294 sshbuf_free(blob);
1233 curve_nid != k->ecdsa_nid) { 1295 return r;
1296 }
1297 free(blobcopy);
1298 if ((r = sshkey_fromb(blob, &k)) != 0) {
1299 sshbuf_free(blob);
1300 return r;
1301 }
1302 sshbuf_free(blob);
1303
1304 /* skip whitespace and leave cp at start of comment */
1305 for (cp += space; *cp == ' ' || *cp == '\t'; cp++)
1306 ;
1307
1308 /* ensure type of blob matches type at start of line */
1309 if (k->type != type) {
1310 sshkey_free(k);
1311 return SSH_ERR_KEY_TYPE_MISMATCH;
1312 }
1313 if (sshkey_type_plain(type) == KEY_ECDSA && curve_nid != k->ecdsa_nid) {
1314 sshkey_free(k);
1315 return SSH_ERR_EC_CURVE_MISMATCH;
1316 }
1317
1318 /* Fill in ret from parsed key */
1319 ret->type = type;
1320 if (sshkey_is_cert(ret)) {
1321 if (!sshkey_is_cert(k)) {
1234 sshkey_free(k); 1322 sshkey_free(k);
1235 return SSH_ERR_EC_CURVE_MISMATCH; 1323 return SSH_ERR_EXPECTED_CERT;
1236 }
1237 ret->type = type;
1238 if (sshkey_is_cert(ret)) {
1239 if (!sshkey_is_cert(k)) {
1240 sshkey_free(k);
1241 return SSH_ERR_EXPECTED_CERT;
1242 }
1243 if (ret->cert != NULL)
1244 cert_free(ret->cert);
1245 ret->cert = k->cert;
1246 k->cert = NULL;
1247 } 1324 }
1248 switch (sshkey_type_plain(ret->type)) { 1325 if (ret->cert != NULL)
1326 cert_free(ret->cert);
1327 ret->cert = k->cert;
1328 k->cert = NULL;
1329 }
1330 switch (sshkey_type_plain(ret->type)) {
1249#ifdef WITH_OPENSSL 1331#ifdef WITH_OPENSSL
1250 case KEY_RSA: 1332 case KEY_RSA:
1251 if (ret->rsa != NULL) 1333 RSA_free(ret->rsa);
1252 RSA_free(ret->rsa); 1334 ret->rsa = k->rsa;
1253 ret->rsa = k->rsa; 1335 k->rsa = NULL;
1254 k->rsa = NULL;
1255#ifdef DEBUG_PK 1336#ifdef DEBUG_PK
1256 RSA_print_fp(stderr, ret->rsa, 8); 1337 RSA_print_fp(stderr, ret->rsa, 8);
1257#endif 1338#endif
1258 break; 1339 break;
1259 case KEY_DSA: 1340 case KEY_DSA:
1260 if (ret->dsa != NULL) 1341 DSA_free(ret->dsa);
1261 DSA_free(ret->dsa); 1342 ret->dsa = k->dsa;
1262 ret->dsa = k->dsa; 1343 k->dsa = NULL;
1263 k->dsa = NULL;
1264#ifdef DEBUG_PK 1344#ifdef DEBUG_PK
1265 DSA_print_fp(stderr, ret->dsa, 8); 1345 DSA_print_fp(stderr, ret->dsa, 8);
1266#endif 1346#endif
1267 break; 1347 break;
1268# ifdef OPENSSL_HAS_ECC 1348# ifdef OPENSSL_HAS_ECC
1269 case KEY_ECDSA: 1349 case KEY_ECDSA:
1270 if (ret->ecdsa != NULL) 1350 EC_KEY_free(ret->ecdsa);
1271 EC_KEY_free(ret->ecdsa); 1351 ret->ecdsa = k->ecdsa;
1272 ret->ecdsa = k->ecdsa; 1352 ret->ecdsa_nid = k->ecdsa_nid;
1273 ret->ecdsa_nid = k->ecdsa_nid; 1353 k->ecdsa = NULL;
1274 k->ecdsa = NULL; 1354 k->ecdsa_nid = -1;
1275 k->ecdsa_nid = -1;
1276#ifdef DEBUG_PK 1355#ifdef DEBUG_PK
1277 sshkey_dump_ec_key(ret->ecdsa); 1356 sshkey_dump_ec_key(ret->ecdsa);
1278#endif 1357#endif
1279 break; 1358 break;
1280# endif /* OPENSSL_HAS_ECC */ 1359# endif /* OPENSSL_HAS_ECC */
1281#endif /* WITH_OPENSSL */ 1360#endif /* WITH_OPENSSL */
1282 case KEY_ED25519: 1361 case KEY_ED25519:
1283 free(ret->ed25519_pk); 1362 freezero(ret->ed25519_pk, ED25519_PK_SZ);
1284 ret->ed25519_pk = k->ed25519_pk; 1363 ret->ed25519_pk = k->ed25519_pk;
1285 k->ed25519_pk = NULL; 1364 k->ed25519_pk = NULL;
1286#ifdef DEBUG_PK 1365#ifdef DEBUG_PK
1287 /* XXX */ 1366 /* XXX */
1288#endif 1367#endif
1289 break;
1290 }
1291 *cpp = ep;
1292 retval = 0;
1293/*XXXX*/
1294 sshkey_free(k);
1295 if (retval != 0)
1296 break;
1297 break; 1368 break;
1369#ifdef WITH_XMSS
1370 case KEY_XMSS:
1371 free(ret->xmss_pk);
1372 ret->xmss_pk = k->xmss_pk;
1373 k->xmss_pk = NULL;
1374 free(ret->xmss_state);
1375 ret->xmss_state = k->xmss_state;
1376 k->xmss_state = NULL;
1377 free(ret->xmss_name);
1378 ret->xmss_name = k->xmss_name;
1379 k->xmss_name = NULL;
1380 free(ret->xmss_filename);
1381 ret->xmss_filename = k->xmss_filename;
1382 k->xmss_filename = NULL;
1383#ifdef DEBUG_PK
1384 /* XXX */
1385#endif
1386 break;
1387#endif /* WITH_XMSS */
1298 default: 1388 default:
1299 return SSH_ERR_INVALID_ARGUMENT; 1389 sshkey_free(k);
1390 return SSH_ERR_INTERNAL_ERROR;
1300 } 1391 }
1301 return retval; 1392 sshkey_free(k);
1393
1394 /* success */
1395 *cpp = cp;
1396 return 0;
1302} 1397}
1303 1398
1399
1304int 1400int
1305sshkey_to_base64(const struct sshkey *key, char **b64p) 1401sshkey_to_base64(const struct sshkey *key, char **b64p)
1306{ 1402{
@@ -1410,10 +1506,8 @@ rsa_generate_private_key(u_int bits, RSA **rsap)
1410 private = NULL; 1506 private = NULL;
1411 ret = 0; 1507 ret = 0;
1412 out: 1508 out:
1413 if (private != NULL) 1509 RSA_free(private);
1414 RSA_free(private); 1510 BN_free(f4);
1415 if (f4 != NULL)
1416 BN_free(f4);
1417 return ret; 1511 return ret;
1418} 1512}
1419 1513
@@ -1441,8 +1535,7 @@ dsa_generate_private_key(u_int bits, DSA **dsap)
1441 private = NULL; 1535 private = NULL;
1442 ret = 0; 1536 ret = 0;
1443 out: 1537 out:
1444 if (private != NULL) 1538 DSA_free(private);
1445 DSA_free(private);
1446 return ret; 1539 return ret;
1447} 1540}
1448 1541
@@ -1521,8 +1614,7 @@ ecdsa_generate_private_key(u_int bits, int *nid, EC_KEY **ecdsap)
1521 private = NULL; 1614 private = NULL;
1522 ret = 0; 1615 ret = 0;
1523 out: 1616 out:
1524 if (private != NULL) 1617 EC_KEY_free(private);
1525 EC_KEY_free(private);
1526 return ret; 1618 return ret;
1527} 1619}
1528# endif /* OPENSSL_HAS_ECC */ 1620# endif /* OPENSSL_HAS_ECC */
@@ -1549,6 +1641,11 @@ sshkey_generate(int type, u_int bits, struct sshkey **keyp)
1549 crypto_sign_ed25519_keypair(k->ed25519_pk, k->ed25519_sk); 1641 crypto_sign_ed25519_keypair(k->ed25519_pk, k->ed25519_sk);
1550 ret = 0; 1642 ret = 0;
1551 break; 1643 break;
1644#ifdef WITH_XMSS
1645 case KEY_XMSS:
1646 ret = sshkey_xmss_generate_private_key(k, bits);
1647 break;
1648#endif /* WITH_XMSS */
1552#ifdef WITH_OPENSSL 1649#ifdef WITH_OPENSSL
1553 case KEY_DSA: 1650 case KEY_DSA:
1554 ret = dsa_generate_private_key(bits, &k->dsa); 1651 ret = dsa_generate_private_key(bits, &k->dsa);
@@ -1692,6 +1789,29 @@ sshkey_from_private(const struct sshkey *k, struct sshkey **pkp)
1692 memcpy(n->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); 1789 memcpy(n->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ);
1693 } 1790 }
1694 break; 1791 break;
1792#ifdef WITH_XMSS
1793 case KEY_XMSS:
1794 case KEY_XMSS_CERT:
1795 if ((n = sshkey_new(k->type)) == NULL)
1796 return SSH_ERR_ALLOC_FAIL;
1797 if ((ret = sshkey_xmss_init(n, k->xmss_name)) != 0) {
1798 sshkey_free(n);
1799 return ret;
1800 }
1801 if (k->xmss_pk != NULL) {
1802 size_t pklen = sshkey_xmss_pklen(k);
1803 if (pklen == 0 || sshkey_xmss_pklen(n) != pklen) {
1804 sshkey_free(n);
1805 return SSH_ERR_INTERNAL_ERROR;
1806 }
1807 if ((n->xmss_pk = malloc(pklen)) == NULL) {
1808 sshkey_free(n);
1809 return SSH_ERR_ALLOC_FAIL;
1810 }
1811 memcpy(n->xmss_pk, k->xmss_pk, pklen);
1812 }
1813 break;
1814#endif /* WITH_XMSS */
1695 default: 1815 default:
1696 return SSH_ERR_KEY_TYPE_UNKNOWN; 1816 return SSH_ERR_KEY_TYPE_UNKNOWN;
1697 } 1817 }
@@ -1814,7 +1934,7 @@ cert_parse(struct sshbuf *b, struct sshkey *key, struct sshbuf *certbuf)
1814 goto out; 1934 goto out;
1815 } 1935 }
1816 if ((ret = sshkey_verify(key->cert->signature_key, sig, slen, 1936 if ((ret = sshkey_verify(key->cert->signature_key, sig, slen,
1817 sshbuf_ptr(key->cert->certblob), signed_len, 0)) != 0) 1937 sshbuf_ptr(key->cert->certblob), signed_len, NULL, 0)) != 0)
1818 goto out; 1938 goto out;
1819 1939
1820 /* Success */ 1940 /* Success */
@@ -1833,7 +1953,7 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
1833 int allow_cert) 1953 int allow_cert)
1834{ 1954{
1835 int type, ret = SSH_ERR_INTERNAL_ERROR; 1955 int type, ret = SSH_ERR_INTERNAL_ERROR;
1836 char *ktype = NULL, *curve = NULL; 1956 char *ktype = NULL, *curve = NULL, *xmss_name = NULL;
1837 struct sshkey *key = NULL; 1957 struct sshkey *key = NULL;
1838 size_t len; 1958 size_t len;
1839 u_char *pk = NULL; 1959 u_char *pk = NULL;
@@ -1933,8 +2053,7 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
1933 ret = SSH_ERR_EC_CURVE_MISMATCH; 2053 ret = SSH_ERR_EC_CURVE_MISMATCH;
1934 goto out; 2054 goto out;
1935 } 2055 }
1936 if (key->ecdsa != NULL) 2056 EC_KEY_free(key->ecdsa);
1937 EC_KEY_free(key->ecdsa);
1938 if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid)) 2057 if ((key->ecdsa = EC_KEY_new_by_curve_name(key->ecdsa_nid))
1939 == NULL) { 2058 == NULL) {
1940 ret = SSH_ERR_EC_CURVE_INVALID; 2059 ret = SSH_ERR_EC_CURVE_INVALID;
@@ -1985,6 +2104,36 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
1985 key->ed25519_pk = pk; 2104 key->ed25519_pk = pk;
1986 pk = NULL; 2105 pk = NULL;
1987 break; 2106 break;
2107#ifdef WITH_XMSS
2108 case KEY_XMSS_CERT:
2109 /* Skip nonce */
2110 if (sshbuf_get_string_direct(b, NULL, NULL) != 0) {
2111 ret = SSH_ERR_INVALID_FORMAT;
2112 goto out;
2113 }
2114 /* FALLTHROUGH */
2115 case KEY_XMSS:
2116 if ((ret = sshbuf_get_cstring(b, &xmss_name, NULL)) != 0)
2117 goto out;
2118 if ((key = sshkey_new(type)) == NULL) {
2119 ret = SSH_ERR_ALLOC_FAIL;
2120 goto out;
2121 }
2122 if ((ret = sshkey_xmss_init(key, xmss_name)) != 0)
2123 goto out;
2124 if ((ret = sshbuf_get_string(b, &pk, &len)) != 0)
2125 goto out;
2126 if (len == 0 || len != sshkey_xmss_pklen(key)) {
2127 ret = SSH_ERR_INVALID_FORMAT;
2128 goto out;
2129 }
2130 key->xmss_pk = pk;
2131 pk = NULL;
2132 if (type != KEY_XMSS_CERT &&
2133 (ret = sshkey_xmss_deserialize_pk_info(key, b)) != 0)
2134 goto out;
2135 break;
2136#endif /* WITH_XMSS */
1988 case KEY_UNSPEC: 2137 case KEY_UNSPEC:
1989 default: 2138 default:
1990 ret = SSH_ERR_KEY_TYPE_UNKNOWN; 2139 ret = SSH_ERR_KEY_TYPE_UNKNOWN;
@@ -2007,12 +2156,12 @@ sshkey_from_blob_internal(struct sshbuf *b, struct sshkey **keyp,
2007 out: 2156 out:
2008 sshbuf_free(copy); 2157 sshbuf_free(copy);
2009 sshkey_free(key); 2158 sshkey_free(key);
2159 free(xmss_name);
2010 free(ktype); 2160 free(ktype);
2011 free(curve); 2161 free(curve);
2012 free(pk); 2162 free(pk);
2013#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC) 2163#if defined(WITH_OPENSSL) && defined(OPENSSL_HAS_ECC)
2014 if (q != NULL) 2164 EC_POINT_free(q);
2015 EC_POINT_free(q);
2016#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */ 2165#endif /* WITH_OPENSSL && OPENSSL_HAS_ECC */
2017 return ret; 2166 return ret;
2018} 2167}
@@ -2050,6 +2199,31 @@ sshkey_froms(struct sshbuf *buf, struct sshkey **keyp)
2050} 2199}
2051 2200
2052int 2201int
2202sshkey_sigtype(const u_char *sig, size_t siglen, char **sigtypep)
2203{
2204 int r;
2205 struct sshbuf *b = NULL;
2206 char *sigtype = NULL;
2207
2208 if (sigtypep != NULL)
2209 *sigtypep = NULL;
2210 if ((b = sshbuf_from(sig, siglen)) == NULL)
2211 return SSH_ERR_ALLOC_FAIL;
2212 if ((r = sshbuf_get_cstring(b, &sigtype, NULL)) != 0)
2213 goto out;
2214 /* success */
2215 if (sigtypep != NULL) {
2216 *sigtypep = sigtype;
2217 sigtype = NULL;
2218 }
2219 r = 0;
2220 out:
2221 free(sigtype);
2222 sshbuf_free(b);
2223 return r;
2224}
2225
2226int
2053sshkey_sign(const struct sshkey *key, 2227sshkey_sign(const struct sshkey *key,
2054 u_char **sigp, size_t *lenp, 2228 u_char **sigp, size_t *lenp,
2055 const u_char *data, size_t datalen, const char *alg, u_int compat) 2229 const u_char *data, size_t datalen, const char *alg, u_int compat)
@@ -2077,6 +2251,11 @@ sshkey_sign(const struct sshkey *key,
2077 case KEY_ED25519: 2251 case KEY_ED25519:
2078 case KEY_ED25519_CERT: 2252 case KEY_ED25519_CERT:
2079 return ssh_ed25519_sign(key, sigp, lenp, data, datalen, compat); 2253 return ssh_ed25519_sign(key, sigp, lenp, data, datalen, compat);
2254#ifdef WITH_XMSS
2255 case KEY_XMSS:
2256 case KEY_XMSS_CERT:
2257 return ssh_xmss_sign(key, sigp, lenp, data, datalen, compat);
2258#endif /* WITH_XMSS */
2080 default: 2259 default:
2081 return SSH_ERR_KEY_TYPE_UNKNOWN; 2260 return SSH_ERR_KEY_TYPE_UNKNOWN;
2082 } 2261 }
@@ -2084,11 +2263,12 @@ sshkey_sign(const struct sshkey *key,
2084 2263
2085/* 2264/*
2086 * ssh_key_verify returns 0 for a correct signature and < 0 on error. 2265 * ssh_key_verify returns 0 for a correct signature and < 0 on error.
2266 * If "alg" specified, then the signature must use that algorithm.
2087 */ 2267 */
2088int 2268int
2089sshkey_verify(const struct sshkey *key, 2269sshkey_verify(const struct sshkey *key,
2090 const u_char *sig, size_t siglen, 2270 const u_char *sig, size_t siglen,
2091 const u_char *data, size_t dlen, u_int compat) 2271 const u_char *data, size_t dlen, const char *alg, u_int compat)
2092{ 2272{
2093 if (siglen == 0 || dlen > SSH_KEY_MAX_SIGN_DATA_SIZE) 2273 if (siglen == 0 || dlen > SSH_KEY_MAX_SIGN_DATA_SIZE)
2094 return SSH_ERR_INVALID_ARGUMENT; 2274 return SSH_ERR_INVALID_ARGUMENT;
@@ -2104,11 +2284,16 @@ sshkey_verify(const struct sshkey *key,
2104# endif /* OPENSSL_HAS_ECC */ 2284# endif /* OPENSSL_HAS_ECC */
2105 case KEY_RSA_CERT: 2285 case KEY_RSA_CERT:
2106 case KEY_RSA: 2286 case KEY_RSA:
2107 return ssh_rsa_verify(key, sig, siglen, data, dlen); 2287 return ssh_rsa_verify(key, sig, siglen, data, dlen, alg);
2108#endif /* WITH_OPENSSL */ 2288#endif /* WITH_OPENSSL */
2109 case KEY_ED25519: 2289 case KEY_ED25519:
2110 case KEY_ED25519_CERT: 2290 case KEY_ED25519_CERT:
2111 return ssh_ed25519_verify(key, sig, siglen, data, dlen, compat); 2291 return ssh_ed25519_verify(key, sig, siglen, data, dlen, compat);
2292#ifdef WITH_XMSS
2293 case KEY_XMSS:
2294 case KEY_XMSS_CERT:
2295 return ssh_xmss_verify(key, sig, siglen, data, dlen, compat);
2296#endif /* WITH_XMSS */
2112 default: 2297 default:
2113 return SSH_ERR_KEY_TYPE_UNKNOWN; 2298 return SSH_ERR_KEY_TYPE_UNKNOWN;
2114 } 2299 }
@@ -2132,6 +2317,8 @@ sshkey_demote(const struct sshkey *k, struct sshkey **dkp)
2132 pk->rsa = NULL; 2317 pk->rsa = NULL;
2133 pk->ed25519_pk = NULL; 2318 pk->ed25519_pk = NULL;
2134 pk->ed25519_sk = NULL; 2319 pk->ed25519_sk = NULL;
2320 pk->xmss_pk = NULL;
2321 pk->xmss_sk = NULL;
2135 2322
2136 switch (k->type) { 2323 switch (k->type) {
2137#ifdef WITH_OPENSSL 2324#ifdef WITH_OPENSSL
@@ -2193,6 +2380,29 @@ sshkey_demote(const struct sshkey *k, struct sshkey **dkp)
2193 memcpy(pk->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ); 2380 memcpy(pk->ed25519_pk, k->ed25519_pk, ED25519_PK_SZ);
2194 } 2381 }
2195 break; 2382 break;
2383#ifdef WITH_XMSS
2384 case KEY_XMSS_CERT:
2385 if ((ret = sshkey_cert_copy(k, pk)) != 0)
2386 goto fail;
2387 /* FALLTHROUGH */
2388 case KEY_XMSS:
2389 if ((ret = sshkey_xmss_init(pk, k->xmss_name)) != 0)
2390 goto fail;
2391 if (k->xmss_pk != NULL) {
2392 size_t pklen = sshkey_xmss_pklen(k);
2393
2394 if (pklen == 0 || sshkey_xmss_pklen(pk) != pklen) {
2395 ret = SSH_ERR_INTERNAL_ERROR;
2396 goto fail;
2397 }
2398 if ((pk->xmss_pk = malloc(pklen)) == NULL) {
2399 ret = SSH_ERR_ALLOC_FAIL;
2400 goto fail;
2401 }
2402 memcpy(pk->xmss_pk, k->xmss_pk, pklen);
2403 }
2404 break;
2405#endif /* WITH_XMSS */
2196 default: 2406 default:
2197 ret = SSH_ERR_KEY_TYPE_UNKNOWN; 2407 ret = SSH_ERR_KEY_TYPE_UNKNOWN;
2198 fail: 2408 fail:
@@ -2224,6 +2434,11 @@ sshkey_to_certified(struct sshkey *k)
2224 case KEY_ED25519: 2434 case KEY_ED25519:
2225 newtype = KEY_ED25519_CERT; 2435 newtype = KEY_ED25519_CERT;
2226 break; 2436 break;
2437#ifdef WITH_XMSS
2438 case KEY_XMSS:
2439 newtype = KEY_XMSS_CERT;
2440 break;
2441#endif /* WITH_XMSS */
2227 default: 2442 default:
2228 return SSH_ERR_INVALID_ARGUMENT; 2443 return SSH_ERR_INVALID_ARGUMENT;
2229 } 2444 }
@@ -2308,6 +2523,18 @@ sshkey_certify_custom(struct sshkey *k, struct sshkey *ca, const char *alg,
2308 k->ed25519_pk, ED25519_PK_SZ)) != 0) 2523 k->ed25519_pk, ED25519_PK_SZ)) != 0)
2309 goto out; 2524 goto out;
2310 break; 2525 break;
2526#ifdef WITH_XMSS
2527 case KEY_XMSS_CERT:
2528 if (k->xmss_name == NULL) {
2529 ret = SSH_ERR_INVALID_ARGUMENT;
2530 goto out;
2531 }
2532 if ((ret = sshbuf_put_cstring(cert, k->xmss_name)) ||
2533 (ret = sshbuf_put_string(cert,
2534 k->xmss_pk, sshkey_xmss_pklen(k))) != 0)
2535 goto out;
2536 break;
2537#endif /* WITH_XMSS */
2311 default: 2538 default:
2312 ret = SSH_ERR_INVALID_ARGUMENT; 2539 ret = SSH_ERR_INVALID_ARGUMENT;
2313 goto out; 2540 goto out;
@@ -2465,7 +2692,8 @@ sshkey_format_cert_validity(const struct sshkey_cert *cert, char *s, size_t l)
2465} 2692}
2466 2693
2467int 2694int
2468sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b) 2695sshkey_private_serialize_opt(const struct sshkey *key, struct sshbuf *b,
2696 enum sshkey_serialize_rep opts)
2469{ 2697{
2470 int r = SSH_ERR_INTERNAL_ERROR; 2698 int r = SSH_ERR_INTERNAL_ERROR;
2471 2699
@@ -2551,6 +2779,36 @@ sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b)
2551 ED25519_SK_SZ)) != 0) 2779 ED25519_SK_SZ)) != 0)
2552 goto out; 2780 goto out;
2553 break; 2781 break;
2782#ifdef WITH_XMSS
2783 case KEY_XMSS:
2784 if (key->xmss_name == NULL) {
2785 r = SSH_ERR_INVALID_ARGUMENT;
2786 goto out;
2787 }
2788 if ((r = sshbuf_put_cstring(b, key->xmss_name)) != 0 ||
2789 (r = sshbuf_put_string(b, key->xmss_pk,
2790 sshkey_xmss_pklen(key))) != 0 ||
2791 (r = sshbuf_put_string(b, key->xmss_sk,
2792 sshkey_xmss_sklen(key))) != 0 ||
2793 (r = sshkey_xmss_serialize_state_opt(key, b, opts)) != 0)
2794 goto out;
2795 break;
2796 case KEY_XMSS_CERT:
2797 if (key->cert == NULL || sshbuf_len(key->cert->certblob) == 0 ||
2798 key->xmss_name == NULL) {
2799 r = SSH_ERR_INVALID_ARGUMENT;
2800 goto out;
2801 }
2802 if ((r = sshbuf_put_stringb(b, key->cert->certblob)) != 0 ||
2803 (r = sshbuf_put_cstring(b, key->xmss_name)) != 0 ||
2804 (r = sshbuf_put_string(b, key->xmss_pk,
2805 sshkey_xmss_pklen(key))) != 0 ||
2806 (r = sshbuf_put_string(b, key->xmss_sk,
2807 sshkey_xmss_sklen(key))) != 0 ||
2808 (r = sshkey_xmss_serialize_state_opt(key, b, opts)) != 0)
2809 goto out;
2810 break;
2811#endif /* WITH_XMSS */
2554 default: 2812 default:
2555 r = SSH_ERR_INVALID_ARGUMENT; 2813 r = SSH_ERR_INVALID_ARGUMENT;
2556 goto out; 2814 goto out;
@@ -2562,13 +2820,21 @@ sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b)
2562} 2820}
2563 2821
2564int 2822int
2823sshkey_private_serialize(const struct sshkey *key, struct sshbuf *b)
2824{
2825 return sshkey_private_serialize_opt(key, b,
2826 SSHKEY_SERIALIZE_DEFAULT);
2827}
2828
2829int
2565sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp) 2830sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2566{ 2831{
2567 char *tname = NULL, *curve = NULL; 2832 char *tname = NULL, *curve = NULL, *xmss_name = NULL;
2568 struct sshkey *k = NULL; 2833 struct sshkey *k = NULL;
2569 size_t pklen = 0, sklen = 0; 2834 size_t pklen = 0, sklen = 0;
2570 int type, r = SSH_ERR_INTERNAL_ERROR; 2835 int type, r = SSH_ERR_INTERNAL_ERROR;
2571 u_char *ed25519_pk = NULL, *ed25519_sk = NULL; 2836 u_char *ed25519_pk = NULL, *ed25519_sk = NULL;
2837 u_char *xmss_pk = NULL, *xmss_sk = NULL;
2572#ifdef WITH_OPENSSL 2838#ifdef WITH_OPENSSL
2573 BIGNUM *exponent = NULL; 2839 BIGNUM *exponent = NULL;
2574#endif /* WITH_OPENSSL */ 2840#endif /* WITH_OPENSSL */
@@ -2713,6 +2979,53 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2713 k->ed25519_sk = ed25519_sk; 2979 k->ed25519_sk = ed25519_sk;
2714 ed25519_pk = ed25519_sk = NULL; 2980 ed25519_pk = ed25519_sk = NULL;
2715 break; 2981 break;
2982#ifdef WITH_XMSS
2983 case KEY_XMSS:
2984 if ((k = sshkey_new_private(type)) == NULL) {
2985 r = SSH_ERR_ALLOC_FAIL;
2986 goto out;
2987 }
2988 if ((r = sshbuf_get_cstring(buf, &xmss_name, NULL)) != 0 ||
2989 (r = sshkey_xmss_init(k, xmss_name)) != 0 ||
2990 (r = sshbuf_get_string(buf, &xmss_pk, &pklen)) != 0 ||
2991 (r = sshbuf_get_string(buf, &xmss_sk, &sklen)) != 0)
2992 goto out;
2993 if (pklen != sshkey_xmss_pklen(k) ||
2994 sklen != sshkey_xmss_sklen(k)) {
2995 r = SSH_ERR_INVALID_FORMAT;
2996 goto out;
2997 }
2998 k->xmss_pk = xmss_pk;
2999 k->xmss_sk = xmss_sk;
3000 xmss_pk = xmss_sk = NULL;
3001 /* optional internal state */
3002 if ((r = sshkey_xmss_deserialize_state_opt(k, buf)) != 0)
3003 goto out;
3004 break;
3005 case KEY_XMSS_CERT:
3006 if ((r = sshkey_froms(buf, &k)) != 0 ||
3007 (r = sshkey_add_private(k)) != 0 ||
3008 (r = sshbuf_get_cstring(buf, &xmss_name, NULL)) != 0 ||
3009 (r = sshbuf_get_string(buf, &xmss_pk, &pklen)) != 0 ||
3010 (r = sshbuf_get_string(buf, &xmss_sk, &sklen)) != 0)
3011 goto out;
3012 if (strcmp(xmss_name, k->xmss_name)) {
3013 r = SSH_ERR_INVALID_FORMAT;
3014 goto out;
3015 }
3016 if (pklen != sshkey_xmss_pklen(k) ||
3017 sklen != sshkey_xmss_sklen(k)) {
3018 r = SSH_ERR_INVALID_FORMAT;
3019 goto out;
3020 }
3021 k->xmss_pk = xmss_pk;
3022 k->xmss_sk = xmss_sk;
3023 xmss_pk = xmss_sk = NULL;
3024 /* optional internal state */
3025 if ((r = sshkey_xmss_deserialize_state_opt(k, buf)) != 0)
3026 goto out;
3027 break;
3028#endif /* WITH_XMSS */
2716 default: 3029 default:
2717 r = SSH_ERR_KEY_TYPE_UNKNOWN; 3030 r = SSH_ERR_KEY_TYPE_UNKNOWN;
2718 goto out; 3031 goto out;
@@ -2739,18 +3052,14 @@ sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **kp)
2739 free(tname); 3052 free(tname);
2740 free(curve); 3053 free(curve);
2741#ifdef WITH_OPENSSL 3054#ifdef WITH_OPENSSL
2742 if (exponent != NULL) 3055 BN_clear_free(exponent);
2743 BN_clear_free(exponent);
2744#endif /* WITH_OPENSSL */ 3056#endif /* WITH_OPENSSL */
2745 sshkey_free(k); 3057 sshkey_free(k);
2746 if (ed25519_pk != NULL) { 3058 freezero(ed25519_pk, pklen);
2747 explicit_bzero(ed25519_pk, pklen); 3059 freezero(ed25519_sk, sklen);
2748 free(ed25519_pk); 3060 free(xmss_name);
2749 } 3061 freezero(xmss_pk, pklen);
2750 if (ed25519_sk != NULL) { 3062 freezero(xmss_sk, sklen);
2751 explicit_bzero(ed25519_sk, sklen);
2752 free(ed25519_sk);
2753 }
2754 return r; 3063 return r;
2755} 3064}
2756 3065
@@ -2828,8 +3137,7 @@ sshkey_ec_validate_public(const EC_GROUP *group, const EC_POINT *public)
2828 ret = 0; 3137 ret = 0;
2829 out: 3138 out:
2830 BN_CTX_free(bnctx); 3139 BN_CTX_free(bnctx);
2831 if (nq != NULL) 3140 EC_POINT_free(nq);
2832 EC_POINT_free(nq);
2833 return ret; 3141 return ret;
2834} 3142}
2835 3143
@@ -3006,7 +3314,8 @@ sshkey_private_to_blob2(const struct sshkey *prv, struct sshbuf *blob,
3006 goto out; 3314 goto out;
3007 3315
3008 /* append private key and comment*/ 3316 /* append private key and comment*/
3009 if ((r = sshkey_private_serialize(prv, encrypted)) != 0 || 3317 if ((r = sshkey_private_serialize_opt(prv, encrypted,
3318 SSHKEY_SERIALIZE_FULL)) != 0 ||
3010 (r = sshbuf_put_cstring(encrypted, comment)) != 0) 3319 (r = sshbuf_put_cstring(encrypted, comment)) != 0)
3011 goto out; 3320 goto out;
3012 3321
@@ -3304,7 +3613,7 @@ sshkey_private_pem_to_blob(struct sshkey *key, struct sshbuf *blob,
3304 int blen, len = strlen(_passphrase); 3613 int blen, len = strlen(_passphrase);
3305 u_char *passphrase = (len > 0) ? (u_char *)_passphrase : NULL; 3614 u_char *passphrase = (len > 0) ? (u_char *)_passphrase : NULL;
3306 const EVP_CIPHER *cipher = (len > 0) ? EVP_aes_128_cbc() : NULL; 3615 const EVP_CIPHER *cipher = (len > 0) ? EVP_aes_128_cbc() : NULL;
3307 const u_char *bptr; 3616 char *bptr;
3308 BIO *bio = NULL; 3617 BIO *bio = NULL;
3309 3618
3310 if (len > 0 && len <= 4) 3619 if (len > 0 && len <= 4)
@@ -3367,6 +3676,9 @@ sshkey_private_to_fileblob(struct sshkey *key, struct sshbuf *blob,
3367 passphrase, comment); 3676 passphrase, comment);
3368#endif /* WITH_OPENSSL */ 3677#endif /* WITH_OPENSSL */
3369 case KEY_ED25519: 3678 case KEY_ED25519:
3679#ifdef WITH_XMSS
3680 case KEY_XMSS:
3681#endif /* WITH_XMSS */
3370 return sshkey_private_to_blob2(key, blob, passphrase, 3682 return sshkey_private_to_blob2(key, blob, passphrase,
3371 comment, new_format_cipher, new_format_rounds); 3683 comment, new_format_cipher, new_format_rounds);
3372 default: 3684 default:
@@ -3524,8 +3836,7 @@ sshkey_parse_private_pem_fileblob(struct sshbuf *blob, int type,
3524 } 3836 }
3525 out: 3837 out:
3526 BIO_free(bio); 3838 BIO_free(bio);
3527 if (pk != NULL) 3839 EVP_PKEY_free(pk);
3528 EVP_PKEY_free(pk);
3529 sshkey_free(prv); 3840 sshkey_free(prv);
3530 return r; 3841 return r;
3531} 3842}
@@ -3551,6 +3862,9 @@ sshkey_parse_private_fileblob_type(struct sshbuf *blob, int type,
3551 passphrase, keyp); 3862 passphrase, keyp);
3552#endif /* WITH_OPENSSL */ 3863#endif /* WITH_OPENSSL */
3553 case KEY_ED25519: 3864 case KEY_ED25519:
3865#ifdef WITH_XMSS
3866 case KEY_XMSS:
3867#endif /* WITH_XMSS */
3554 return sshkey_parse_private2(blob, type, passphrase, 3868 return sshkey_parse_private2(blob, type, passphrase,
3555 keyp, commentp); 3869 keyp, commentp);
3556 case KEY_UNSPEC: 3870 case KEY_UNSPEC:
@@ -3582,3 +3896,90 @@ sshkey_parse_private_fileblob(struct sshbuf *buffer, const char *passphrase,
3582 return sshkey_parse_private_fileblob_type(buffer, KEY_UNSPEC, 3896 return sshkey_parse_private_fileblob_type(buffer, KEY_UNSPEC,
3583 passphrase, keyp, commentp); 3897 passphrase, keyp, commentp);
3584} 3898}
3899
3900#ifdef WITH_XMSS
3901/*
3902 * serialize the key with the current state and forward the state
3903 * maxsign times.
3904 */
3905int
3906sshkey_private_serialize_maxsign(const struct sshkey *k, struct sshbuf *b,
3907 u_int32_t maxsign, sshkey_printfn *pr)
3908{
3909 int r, rupdate;
3910
3911 if (maxsign == 0 ||
3912 sshkey_type_plain(k->type) != KEY_XMSS)
3913 return sshkey_private_serialize_opt(k, b,
3914 SSHKEY_SERIALIZE_DEFAULT);
3915 if ((r = sshkey_xmss_get_state(k, pr)) != 0 ||
3916 (r = sshkey_private_serialize_opt(k, b,
3917 SSHKEY_SERIALIZE_STATE)) != 0 ||
3918 (r = sshkey_xmss_forward_state(k, maxsign)) != 0)
3919 goto out;
3920 r = 0;
3921out:
3922 if ((rupdate = sshkey_xmss_update_state(k, pr)) != 0) {
3923 if (r == 0)
3924 r = rupdate;
3925 }
3926 return r;
3927}
3928
3929u_int32_t
3930sshkey_signatures_left(const struct sshkey *k)
3931{
3932 if (sshkey_type_plain(k->type) == KEY_XMSS)
3933 return sshkey_xmss_signatures_left(k);
3934 return 0;
3935}
3936
3937int
3938sshkey_enable_maxsign(struct sshkey *k, u_int32_t maxsign)
3939{
3940 if (sshkey_type_plain(k->type) != KEY_XMSS)
3941 return SSH_ERR_INVALID_ARGUMENT;
3942 return sshkey_xmss_enable_maxsign(k, maxsign);
3943}
3944
3945int
3946sshkey_set_filename(struct sshkey *k, const char *filename)
3947{
3948 if (k == NULL)
3949 return SSH_ERR_INVALID_ARGUMENT;
3950 if (sshkey_type_plain(k->type) != KEY_XMSS)
3951 return 0;
3952 if (filename == NULL)
3953 return SSH_ERR_INVALID_ARGUMENT;
3954 if ((k->xmss_filename = strdup(filename)) == NULL)
3955 return SSH_ERR_ALLOC_FAIL;
3956 return 0;
3957}
3958#else
3959int
3960sshkey_private_serialize_maxsign(const struct sshkey *k, struct sshbuf *b,
3961 u_int32_t maxsign, sshkey_printfn *pr)
3962{
3963 return sshkey_private_serialize_opt(k, b, SSHKEY_SERIALIZE_DEFAULT);
3964}
3965
3966u_int32_t
3967sshkey_signatures_left(const struct sshkey *k)
3968{
3969 return 0;
3970}
3971
3972int
3973sshkey_enable_maxsign(struct sshkey *k, u_int32_t maxsign)
3974{
3975 return SSH_ERR_INVALID_ARGUMENT;
3976}
3977
3978int
3979sshkey_set_filename(struct sshkey *k, const char *filename)
3980{
3981 if (k == NULL)
3982 return SSH_ERR_INVALID_ARGUMENT;
3983 return 0;
3984}
3985#endif /* WITH_XMSS */
diff --git a/sshkey.h b/sshkey.h
index 9093eac51..155cd45ae 100644
--- a/sshkey.h
+++ b/sshkey.h
@@ -1,4 +1,4 @@
1/* $OpenBSD: sshkey.h,v 1.21 2017/07/01 13:50:45 djm Exp $ */ 1/* $OpenBSD: sshkey.h,v 1.24 2018/02/23 15:58:38 markus 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.
@@ -61,6 +61,8 @@ enum sshkey_types {
61 KEY_DSA_CERT, 61 KEY_DSA_CERT,
62 KEY_ECDSA_CERT, 62 KEY_ECDSA_CERT,
63 KEY_ED25519_CERT, 63 KEY_ED25519_CERT,
64 KEY_XMSS,
65 KEY_XMSS_CERT,
64 KEY_UNSPEC 66 KEY_UNSPEC
65}; 67};
66 68
@@ -76,6 +78,14 @@ enum sshkey_fp_rep {
76 SSH_FP_RANDOMART 78 SSH_FP_RANDOMART
77}; 79};
78 80
81/* Private key serialisation formats, used on the wire */
82enum sshkey_serialize_rep {
83 SSHKEY_SERIALIZE_DEFAULT = 0,
84 SSHKEY_SERIALIZE_STATE = 1,
85 SSHKEY_SERIALIZE_FULL = 2,
86 SSHKEY_SERIALIZE_INFO = 254,
87};
88
79/* key is stored in external hardware */ 89/* key is stored in external hardware */
80#define SSHKEY_FLAG_EXT 0x0001 90#define SSHKEY_FLAG_EXT 0x0001
81 91
@@ -104,6 +114,11 @@ struct sshkey {
104 EC_KEY *ecdsa; 114 EC_KEY *ecdsa;
105 u_char *ed25519_sk; 115 u_char *ed25519_sk;
106 u_char *ed25519_pk; 116 u_char *ed25519_pk;
117 char *xmss_name;
118 char *xmss_filename; /* for state file updates */
119 void *xmss_state; /* depends on xmss_name, opaque */
120 u_char *xmss_sk;
121 u_char *xmss_pk;
107 struct sshkey_cert *cert; 122 struct sshkey_cert *cert;
108}; 123};
109 124
@@ -171,13 +186,16 @@ int sshkey_to_blob(const struct sshkey *, u_char **, size_t *);
171int sshkey_to_base64(const struct sshkey *, char **); 186int sshkey_to_base64(const struct sshkey *, char **);
172int sshkey_putb(const struct sshkey *, struct sshbuf *); 187int sshkey_putb(const struct sshkey *, struct sshbuf *);
173int sshkey_puts(const struct sshkey *, struct sshbuf *); 188int sshkey_puts(const struct sshkey *, struct sshbuf *);
189int sshkey_puts_opts(const struct sshkey *, struct sshbuf *,
190 enum sshkey_serialize_rep);
174int sshkey_plain_to_blob(const struct sshkey *, u_char **, size_t *); 191int sshkey_plain_to_blob(const struct sshkey *, u_char **, size_t *);
175int sshkey_putb_plain(const struct sshkey *, struct sshbuf *); 192int sshkey_putb_plain(const struct sshkey *, struct sshbuf *);
176 193
194int sshkey_sigtype(const u_char *, size_t, char **);
177int sshkey_sign(const struct sshkey *, u_char **, size_t *, 195int sshkey_sign(const struct sshkey *, u_char **, size_t *,
178 const u_char *, size_t, const char *, u_int); 196 const u_char *, size_t, const char *, u_int);
179int sshkey_verify(const struct sshkey *, const u_char *, size_t, 197int sshkey_verify(const struct sshkey *, const u_char *, size_t,
180 const u_char *, size_t, u_int); 198 const u_char *, size_t, const char *, u_int);
181 199
182/* for debug */ 200/* for debug */
183void sshkey_dump_ec_point(const EC_GROUP *, const EC_POINT *); 201void sshkey_dump_ec_point(const EC_GROUP *, const EC_POINT *);
@@ -185,6 +203,8 @@ void sshkey_dump_ec_key(const EC_KEY *);
185 203
186/* private key parsing and serialisation */ 204/* private key parsing and serialisation */
187int sshkey_private_serialize(const struct sshkey *key, struct sshbuf *buf); 205int sshkey_private_serialize(const struct sshkey *key, struct sshbuf *buf);
206int sshkey_private_serialize_opt(const struct sshkey *key, struct sshbuf *buf,
207 enum sshkey_serialize_rep);
188int sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **keyp); 208int sshkey_private_deserialize(struct sshbuf *buf, struct sshkey **keyp);
189 209
190/* private key file format parsing and serialisation */ 210/* private key file format parsing and serialisation */
@@ -199,12 +219,26 @@ int sshkey_parse_private_fileblob_type(struct sshbuf *blob, int type,
199/* XXX should be internal, but used by ssh-keygen */ 219/* XXX should be internal, but used by ssh-keygen */
200int ssh_rsa_generate_additional_parameters(struct sshkey *); 220int ssh_rsa_generate_additional_parameters(struct sshkey *);
201 221
222/* stateful keys (e.g. XMSS) */
223#ifdef NO_ATTRIBUTE_ON_PROTOTYPE_ARGS
224typedef void sshkey_printfn(const char *, ...);
225#else
226typedef void sshkey_printfn(const char *, ...) __attribute__((format(printf, 1, 2)));
227#endif
228int sshkey_set_filename(struct sshkey *, const char *);
229int sshkey_enable_maxsign(struct sshkey *, u_int32_t);
230u_int32_t sshkey_signatures_left(const struct sshkey *);
231int sshkey_forward_state(const struct sshkey *, u_int32_t, sshkey_printfn *);
232int sshkey_private_serialize_maxsign(const struct sshkey *key, struct sshbuf *buf,
233 u_int32_t maxsign, sshkey_printfn *pr);
234
202#ifdef SSHKEY_INTERNAL 235#ifdef SSHKEY_INTERNAL
203int ssh_rsa_sign(const struct sshkey *key, 236int ssh_rsa_sign(const struct sshkey *key,
204 u_char **sigp, size_t *lenp, const u_char *data, size_t datalen, 237 u_char **sigp, size_t *lenp, const u_char *data, size_t datalen,
205 const char *ident); 238 const char *ident);
206int ssh_rsa_verify(const struct sshkey *key, 239int ssh_rsa_verify(const struct sshkey *key,
207 const u_char *sig, size_t siglen, const u_char *data, size_t datalen); 240 const u_char *sig, size_t siglen, const u_char *data, size_t datalen,
241 const char *alg);
208int ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp, 242int ssh_dss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
209 const u_char *data, size_t datalen, u_int compat); 243 const u_char *data, size_t datalen, u_int compat);
210int ssh_dss_verify(const struct sshkey *key, 244int ssh_dss_verify(const struct sshkey *key,
@@ -220,6 +254,11 @@ int ssh_ed25519_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
220int ssh_ed25519_verify(const struct sshkey *key, 254int ssh_ed25519_verify(const struct sshkey *key,
221 const u_char *signature, size_t signaturelen, 255 const u_char *signature, size_t signaturelen,
222 const u_char *data, size_t datalen, u_int compat); 256 const u_char *data, size_t datalen, u_int compat);
257int ssh_xmss_sign(const struct sshkey *key, u_char **sigp, size_t *lenp,
258 const u_char *data, size_t datalen, u_int compat);
259int ssh_xmss_verify(const struct sshkey *key,
260 const u_char *signature, size_t signaturelen,
261 const u_char *data, size_t datalen, u_int compat);
223#endif 262#endif
224 263
225#if !defined(WITH_OPENSSL) 264#if !defined(WITH_OPENSSL)
diff --git a/sshpty.c b/sshpty.c
index fe2fb5aa2..4da84d05f 100644
--- a/sshpty.c
+++ b/sshpty.c
@@ -100,30 +100,6 @@ pty_make_controlling_tty(int *ttyfd, const char *tty)
100{ 100{
101 int fd; 101 int fd;
102 102
103#ifdef _UNICOS
104 if (setsid() < 0)
105 error("setsid: %.100s", strerror(errno));
106
107 fd = open(tty, O_RDWR|O_NOCTTY);
108 if (fd != -1) {
109 signal(SIGHUP, SIG_IGN);
110 ioctl(fd, TCVHUP, (char *)NULL);
111 signal(SIGHUP, SIG_DFL);
112 setpgid(0, 0);
113 close(fd);
114 } else {
115 error("Failed to disconnect from controlling tty.");
116 }
117
118 debug("Setting controlling tty using TCSETCTTY.");
119 ioctl(*ttyfd, TCSETCTTY, NULL);
120 fd = open("/dev/tty", O_RDWR);
121 if (fd < 0)
122 error("%.100s: %.100s", tty, strerror(errno));
123 close(*ttyfd);
124 *ttyfd = fd;
125#else /* _UNICOS */
126
127 /* First disconnect from the old controlling tty. */ 103 /* First disconnect from the old controlling tty. */
128#ifdef TIOCNOTTY 104#ifdef TIOCNOTTY
129 fd = open(_PATH_TTY, O_RDWR | O_NOCTTY); 105 fd = open(_PATH_TTY, O_RDWR | O_NOCTTY);
@@ -167,7 +143,6 @@ pty_make_controlling_tty(int *ttyfd, const char *tty)
167 strerror(errno)); 143 strerror(errno));
168 else 144 else
169 close(fd); 145 close(fd);
170#endif /* _UNICOS */
171} 146}
172 147
173/* Changes the window size associated with the pty. */ 148/* Changes the window size associated with the pty. */
diff --git a/ttymodes.c b/ttymodes.c
index 845139635..f9fdb92de 100644
--- a/ttymodes.c
+++ b/ttymodes.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ttymodes.c,v 1.32 2017/04/30 23:26:54 djm Exp $ */ 1/* $OpenBSD: ttymodes.c,v 1.33 2018/02/16 04:43:11 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
@@ -56,6 +56,7 @@
56#include "log.h" 56#include "log.h"
57#include "compat.h" 57#include "compat.h"
58#include "buffer.h" 58#include "buffer.h"
59#include "compat.h"
59 60
60#define TTY_OP_END 0 61#define TTY_OP_END 0
61/* 62/*
@@ -308,9 +309,15 @@ tty_make_modes(int fd, struct termios *tiop)
308 buffer_put_char(&buf, OP); \ 309 buffer_put_char(&buf, OP); \
309 buffer_put_int(&buf, special_char_encode(tio.c_cc[NAME])); 310 buffer_put_int(&buf, special_char_encode(tio.c_cc[NAME]));
310 311
312#define SSH_TTYMODE_IUTF8 42 /* for SSH_BUG_UTF8TTYMODE */
313
311#define TTYMODE(NAME, FIELD, OP) \ 314#define TTYMODE(NAME, FIELD, OP) \
312 buffer_put_char(&buf, OP); \ 315 if (OP == SSH_TTYMODE_IUTF8 && (datafellows & SSH_BUG_UTF8TTYMODE)) { \
313 buffer_put_int(&buf, ((tio.FIELD & NAME) != 0)); 316 debug3("%s: SSH_BUG_UTF8TTYMODE", __func__); \
317 } else { \
318 buffer_put_char(&buf, OP); \
319 buffer_put_int(&buf, ((tio.FIELD & NAME) != 0)); \
320 }
314 321
315#include "ttymodes.h" 322#include "ttymodes.h"
316 323
diff --git a/umac.c b/umac.c
index 9f2187c9a..eab831072 100644
--- a/umac.c
+++ b/umac.c
@@ -1,6 +1,6 @@
1/* $OpenBSD: umac.c,v 1.12 2017/05/31 08:09:45 markus Exp $ */ 1/* $OpenBSD: umac.c,v 1.16 2017/12/12 15:06:12 naddy Exp $ */
2/* ----------------------------------------------------------------------- 2/* -----------------------------------------------------------------------
3 * 3 *
4 * umac.c -- C Implementation UMAC Message Authentication 4 * umac.c -- C Implementation UMAC Message Authentication
5 * 5 *
6 * Version 0.93b of rfc4418.txt -- 2006 July 18 6 * Version 0.93b of rfc4418.txt -- 2006 July 18
@@ -10,7 +10,7 @@
10 * Please report bugs and suggestions to the UMAC webpage. 10 * Please report bugs and suggestions to the UMAC webpage.
11 * 11 *
12 * Copyright (c) 1999-2006 Ted Krovetz 12 * Copyright (c) 1999-2006 Ted Krovetz
13 * 13 *
14 * Permission to use, copy, modify, and distribute this software and 14 * Permission to use, copy, modify, and distribute this software and
15 * its documentation for any purpose and with or without fee, is hereby 15 * its documentation for any purpose and with or without fee, is hereby
16 * granted provided that the above copyright notice appears in all copies 16 * granted provided that the above copyright notice appears in all copies
@@ -18,10 +18,10 @@
18 * holder not be used in advertising or publicity pertaining to 18 * holder not be used in advertising or publicity pertaining to
19 * distribution of the software without specific, written prior permission. 19 * distribution of the software without specific, written prior permission.
20 * 20 *
21 * Comments should be directed to Ted Krovetz (tdk@acm.org) 21 * Comments should be directed to Ted Krovetz (tdk@acm.org)
22 * 22 *
23 * ---------------------------------------------------------------------- */ 23 * ---------------------------------------------------------------------- */
24 24
25 /* ////////////////////// IMPORTANT NOTES ///////////////////////////////// 25 /* ////////////////////// IMPORTANT NOTES /////////////////////////////////
26 * 26 *
27 * 1) This version does not work properly on messages larger than 16MB 27 * 1) This version does not work properly on messages larger than 16MB
@@ -47,7 +47,7 @@
47 * produced under gcc with optimizations set -O3 or higher. Dunno why. 47 * produced under gcc with optimizations set -O3 or higher. Dunno why.
48 * 48 *
49 /////////////////////////////////////////////////////////////////////// */ 49 /////////////////////////////////////////////////////////////////////// */
50 50
51/* ---------------------------------------------------------------------- */ 51/* ---------------------------------------------------------------------- */
52/* --- User Switches ---------------------------------------------------- */ 52/* --- User Switches ---------------------------------------------------- */
53/* ---------------------------------------------------------------------- */ 53/* ---------------------------------------------------------------------- */
@@ -187,11 +187,11 @@ static void kdf(void *bufp, aes_int_key key, UINT8 ndx, int nbytes)
187 UINT8 out_buf[AES_BLOCK_LEN]; 187 UINT8 out_buf[AES_BLOCK_LEN];
188 UINT8 *dst_buf = (UINT8 *)bufp; 188 UINT8 *dst_buf = (UINT8 *)bufp;
189 int i; 189 int i;
190 190
191 /* Setup the initial value */ 191 /* Setup the initial value */
192 in_buf[AES_BLOCK_LEN-9] = ndx; 192 in_buf[AES_BLOCK_LEN-9] = ndx;
193 in_buf[AES_BLOCK_LEN-1] = i = 1; 193 in_buf[AES_BLOCK_LEN-1] = i = 1;
194 194
195 while (nbytes >= AES_BLOCK_LEN) { 195 while (nbytes >= AES_BLOCK_LEN) {
196 aes_encryption(in_buf, out_buf, key); 196 aes_encryption(in_buf, out_buf, key);
197 memcpy(dst_buf,out_buf,AES_BLOCK_LEN); 197 memcpy(dst_buf,out_buf,AES_BLOCK_LEN);
@@ -208,7 +208,7 @@ static void kdf(void *bufp, aes_int_key key, UINT8 ndx, int nbytes)
208} 208}
209 209
210/* The final UHASH result is XOR'd with the output of a pseudorandom 210/* The final UHASH result is XOR'd with the output of a pseudorandom
211 * function. Here, we use AES to generate random output and 211 * function. Here, we use AES to generate random output and
212 * xor the appropriate bytes depending on the last bits of nonce. 212 * xor the appropriate bytes depending on the last bits of nonce.
213 * This scheme is optimized for sequential, increasing big-endian nonces. 213 * This scheme is optimized for sequential, increasing big-endian nonces.
214 */ 214 */
@@ -222,10 +222,10 @@ typedef struct {
222static void pdf_init(pdf_ctx *pc, aes_int_key prf_key) 222static void pdf_init(pdf_ctx *pc, aes_int_key prf_key)
223{ 223{
224 UINT8 buf[UMAC_KEY_LEN]; 224 UINT8 buf[UMAC_KEY_LEN];
225 225
226 kdf(buf, prf_key, 0, UMAC_KEY_LEN); 226 kdf(buf, prf_key, 0, UMAC_KEY_LEN);
227 aes_key_setup(buf, pc->prf_key); 227 aes_key_setup(buf, pc->prf_key);
228 228
229 /* Initialize pdf and cache */ 229 /* Initialize pdf and cache */
230 memset(pc->nonce, 0, sizeof(pc->nonce)); 230 memset(pc->nonce, 0, sizeof(pc->nonce));
231 aes_encryption(pc->nonce, pc->cache, pc->prf_key); 231 aes_encryption(pc->nonce, pc->cache, pc->prf_key);
@@ -238,7 +238,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
238 * of the AES output. If last time around we returned the ndx-1st 238 * of the AES output. If last time around we returned the ndx-1st
239 * element, then we may have the result in the cache already. 239 * element, then we may have the result in the cache already.
240 */ 240 */
241 241
242#if (UMAC_OUTPUT_LEN == 4) 242#if (UMAC_OUTPUT_LEN == 4)
243#define LOW_BIT_MASK 3 243#define LOW_BIT_MASK 3
244#elif (UMAC_OUTPUT_LEN == 8) 244#elif (UMAC_OUTPUT_LEN == 8)
@@ -255,7 +255,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
255#endif 255#endif
256 *(UINT32 *)t.tmp_nonce_lo = ((const UINT32 *)nonce)[1]; 256 *(UINT32 *)t.tmp_nonce_lo = ((const UINT32 *)nonce)[1];
257 t.tmp_nonce_lo[3] &= ~LOW_BIT_MASK; /* zero last bit */ 257 t.tmp_nonce_lo[3] &= ~LOW_BIT_MASK; /* zero last bit */
258 258
259 if ( (((UINT32 *)t.tmp_nonce_lo)[0] != ((UINT32 *)pc->nonce)[1]) || 259 if ( (((UINT32 *)t.tmp_nonce_lo)[0] != ((UINT32 *)pc->nonce)[1]) ||
260 (((const UINT32 *)nonce)[0] != ((UINT32 *)pc->nonce)[0]) ) 260 (((const UINT32 *)nonce)[0] != ((UINT32 *)pc->nonce)[0]) )
261 { 261 {
@@ -263,7 +263,7 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
263 ((UINT32 *)pc->nonce)[1] = ((UINT32 *)t.tmp_nonce_lo)[0]; 263 ((UINT32 *)pc->nonce)[1] = ((UINT32 *)t.tmp_nonce_lo)[0];
264 aes_encryption(pc->nonce, pc->cache, pc->prf_key); 264 aes_encryption(pc->nonce, pc->cache, pc->prf_key);
265 } 265 }
266 266
267#if (UMAC_OUTPUT_LEN == 4) 267#if (UMAC_OUTPUT_LEN == 4)
268 *((UINT32 *)buf) ^= ((UINT32 *)pc->cache)[ndx]; 268 *((UINT32 *)buf) ^= ((UINT32 *)pc->cache)[ndx];
269#elif (UMAC_OUTPUT_LEN == 8) 269#elif (UMAC_OUTPUT_LEN == 8)
@@ -284,28 +284,28 @@ static void pdf_gen_xor(pdf_ctx *pc, const UINT8 nonce[8], UINT8 buf[8])
284/* ---------------------------------------------------------------------- */ 284/* ---------------------------------------------------------------------- */
285 285
286/* The NH-based hash functions used in UMAC are described in the UMAC paper 286/* The NH-based hash functions used in UMAC are described in the UMAC paper
287 * and specification, both of which can be found at the UMAC website. 287 * and specification, both of which can be found at the UMAC website.
288 * The interface to this implementation has two 288 * The interface to this implementation has two
289 * versions, one expects the entire message being hashed to be passed 289 * versions, one expects the entire message being hashed to be passed
290 * in a single buffer and returns the hash result immediately. The second 290 * in a single buffer and returns the hash result immediately. The second
291 * allows the message to be passed in a sequence of buffers. In the 291 * allows the message to be passed in a sequence of buffers. In the
292 * muliple-buffer interface, the client calls the routine nh_update() as 292 * muliple-buffer interface, the client calls the routine nh_update() as
293 * many times as necessary. When there is no more data to be fed to the 293 * many times as necessary. When there is no more data to be fed to the
294 * hash, the client calls nh_final() which calculates the hash output. 294 * hash, the client calls nh_final() which calculates the hash output.
295 * Before beginning another hash calculation the nh_reset() routine 295 * Before beginning another hash calculation the nh_reset() routine
296 * must be called. The single-buffer routine, nh(), is equivalent to 296 * must be called. The single-buffer routine, nh(), is equivalent to
297 * the sequence of calls nh_update() and nh_final(); however it is 297 * the sequence of calls nh_update() and nh_final(); however it is
298 * optimized and should be prefered whenever the multiple-buffer interface 298 * optimized and should be prefered whenever the multiple-buffer interface
299 * is not necessary. When using either interface, it is the client's 299 * is not necessary. When using either interface, it is the client's
300 * responsability to pass no more than L1_KEY_LEN bytes per hash result. 300 * responsability to pass no more than L1_KEY_LEN bytes per hash result.
301 * 301 *
302 * The routine nh_init() initializes the nh_ctx data structure and 302 * The routine nh_init() initializes the nh_ctx data structure and
303 * must be called once, before any other PDF routine. 303 * must be called once, before any other PDF routine.
304 */ 304 */
305 305
306 /* The "nh_aux" routines do the actual NH hashing work. They 306 /* The "nh_aux" routines do the actual NH hashing work. They
307 * expect buffers to be multiples of L1_PAD_BOUNDARY. These routines 307 * expect buffers to be multiples of L1_PAD_BOUNDARY. These routines
308 * produce output for all STREAMS NH iterations in one call, 308 * produce output for all STREAMS NH iterations in one call,
309 * allowing the parallel implementation of the streams. 309 * allowing the parallel implementation of the streams.
310 */ 310 */
311 311
@@ -328,10 +328,10 @@ typedef struct {
328#if (UMAC_OUTPUT_LEN == 4) 328#if (UMAC_OUTPUT_LEN == 4)
329 329
330static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen) 330static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
331/* NH hashing primitive. Previous (partial) hash result is loaded and 331/* NH hashing primitive. Previous (partial) hash result is loaded and
332* then stored via hp pointer. The length of the data pointed at by "dp", 332* then stored via hp pointer. The length of the data pointed at by "dp",
333* "dlen", is guaranteed to be divisible by L1_PAD_BOUNDARY (32). Key 333* "dlen", is guaranteed to be divisible by L1_PAD_BOUNDARY (32). Key
334* is expected to be endian compensated in memory at key setup. 334* is expected to be endian compensated in memory at key setup.
335*/ 335*/
336{ 336{
337 UINT64 h; 337 UINT64 h;
@@ -340,7 +340,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
340 const UINT32 *d = (const UINT32 *)dp; 340 const UINT32 *d = (const UINT32 *)dp;
341 UINT32 d0,d1,d2,d3,d4,d5,d6,d7; 341 UINT32 d0,d1,d2,d3,d4,d5,d6,d7;
342 UINT32 k0,k1,k2,k3,k4,k5,k6,k7; 342 UINT32 k0,k1,k2,k3,k4,k5,k6,k7;
343 343
344 h = *((UINT64 *)hp); 344 h = *((UINT64 *)hp);
345 do { 345 do {
346 d0 = LOAD_UINT32_LITTLE(d+0); d1 = LOAD_UINT32_LITTLE(d+1); 346 d0 = LOAD_UINT32_LITTLE(d+0); d1 = LOAD_UINT32_LITTLE(d+1);
@@ -353,7 +353,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
353 h += MUL64((k1 + d1), (k5 + d5)); 353 h += MUL64((k1 + d1), (k5 + d5));
354 h += MUL64((k2 + d2), (k6 + d6)); 354 h += MUL64((k2 + d2), (k6 + d6));
355 h += MUL64((k3 + d3), (k7 + d7)); 355 h += MUL64((k3 + d3), (k7 + d7));
356 356
357 d += 8; 357 d += 8;
358 k += 8; 358 k += 8;
359 } while (--c); 359 } while (--c);
@@ -421,7 +421,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
421 UINT32 d0,d1,d2,d3,d4,d5,d6,d7; 421 UINT32 d0,d1,d2,d3,d4,d5,d6,d7;
422 UINT32 k0,k1,k2,k3,k4,k5,k6,k7, 422 UINT32 k0,k1,k2,k3,k4,k5,k6,k7,
423 k8,k9,k10,k11,k12,k13,k14,k15; 423 k8,k9,k10,k11,k12,k13,k14,k15;
424 424
425 h1 = *((UINT64 *)hp); 425 h1 = *((UINT64 *)hp);
426 h2 = *((UINT64 *)hp + 1); 426 h2 = *((UINT64 *)hp + 1);
427 h3 = *((UINT64 *)hp + 2); 427 h3 = *((UINT64 *)hp + 2);
@@ -434,26 +434,26 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
434 d6 = LOAD_UINT32_LITTLE(d+6); d7 = LOAD_UINT32_LITTLE(d+7); 434 d6 = LOAD_UINT32_LITTLE(d+6); d7 = LOAD_UINT32_LITTLE(d+7);
435 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11); 435 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11);
436 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15); 436 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15);
437 437
438 h1 += MUL64((k0 + d0), (k4 + d4)); 438 h1 += MUL64((k0 + d0), (k4 + d4));
439 h2 += MUL64((k4 + d0), (k8 + d4)); 439 h2 += MUL64((k4 + d0), (k8 + d4));
440 h3 += MUL64((k8 + d0), (k12 + d4)); 440 h3 += MUL64((k8 + d0), (k12 + d4));
441 441
442 h1 += MUL64((k1 + d1), (k5 + d5)); 442 h1 += MUL64((k1 + d1), (k5 + d5));
443 h2 += MUL64((k5 + d1), (k9 + d5)); 443 h2 += MUL64((k5 + d1), (k9 + d5));
444 h3 += MUL64((k9 + d1), (k13 + d5)); 444 h3 += MUL64((k9 + d1), (k13 + d5));
445 445
446 h1 += MUL64((k2 + d2), (k6 + d6)); 446 h1 += MUL64((k2 + d2), (k6 + d6));
447 h2 += MUL64((k6 + d2), (k10 + d6)); 447 h2 += MUL64((k6 + d2), (k10 + d6));
448 h3 += MUL64((k10 + d2), (k14 + d6)); 448 h3 += MUL64((k10 + d2), (k14 + d6));
449 449
450 h1 += MUL64((k3 + d3), (k7 + d7)); 450 h1 += MUL64((k3 + d3), (k7 + d7));
451 h2 += MUL64((k7 + d3), (k11 + d7)); 451 h2 += MUL64((k7 + d3), (k11 + d7));
452 h3 += MUL64((k11 + d3), (k15 + d7)); 452 h3 += MUL64((k11 + d3), (k15 + d7));
453 453
454 k0 = k8; k1 = k9; k2 = k10; k3 = k11; 454 k0 = k8; k1 = k9; k2 = k10; k3 = k11;
455 k4 = k12; k5 = k13; k6 = k14; k7 = k15; 455 k4 = k12; k5 = k13; k6 = k14; k7 = k15;
456 456
457 d += 8; 457 d += 8;
458 k += 8; 458 k += 8;
459 } while (--c); 459 } while (--c);
@@ -477,7 +477,7 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
477 UINT32 k0,k1,k2,k3,k4,k5,k6,k7, 477 UINT32 k0,k1,k2,k3,k4,k5,k6,k7,
478 k8,k9,k10,k11,k12,k13,k14,k15, 478 k8,k9,k10,k11,k12,k13,k14,k15,
479 k16,k17,k18,k19; 479 k16,k17,k18,k19;
480 480
481 h1 = *((UINT64 *)hp); 481 h1 = *((UINT64 *)hp);
482 h2 = *((UINT64 *)hp + 1); 482 h2 = *((UINT64 *)hp + 1);
483 h3 = *((UINT64 *)hp + 2); 483 h3 = *((UINT64 *)hp + 2);
@@ -492,31 +492,31 @@ static void nh_aux(void *kp, const void *dp, void *hp, UINT32 dlen)
492 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11); 492 k8 = *(k+8); k9 = *(k+9); k10 = *(k+10); k11 = *(k+11);
493 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15); 493 k12 = *(k+12); k13 = *(k+13); k14 = *(k+14); k15 = *(k+15);
494 k16 = *(k+16); k17 = *(k+17); k18 = *(k+18); k19 = *(k+19); 494 k16 = *(k+16); k17 = *(k+17); k18 = *(k+18); k19 = *(k+19);
495 495
496 h1 += MUL64((k0 + d0), (k4 + d4)); 496 h1 += MUL64((k0 + d0), (k4 + d4));
497 h2 += MUL64((k4 + d0), (k8 + d4)); 497 h2 += MUL64((k4 + d0), (k8 + d4));
498 h3 += MUL64((k8 + d0), (k12 + d4)); 498 h3 += MUL64((k8 + d0), (k12 + d4));
499 h4 += MUL64((k12 + d0), (k16 + d4)); 499 h4 += MUL64((k12 + d0), (k16 + d4));
500 500
501 h1 += MUL64((k1 + d1), (k5 + d5)); 501 h1 += MUL64((k1 + d1), (k5 + d5));
502 h2 += MUL64((k5 + d1), (k9 + d5)); 502 h2 += MUL64((k5 + d1), (k9 + d5));
503 h3 += MUL64((k9 + d1), (k13 + d5)); 503 h3 += MUL64((k9 + d1), (k13 + d5));
504 h4 += MUL64((k13 + d1), (k17 + d5)); 504 h4 += MUL64((k13 + d1), (k17 + d5));
505 505
506 h1 += MUL64((k2 + d2), (k6 + d6)); 506 h1 += MUL64((k2 + d2), (k6 + d6));
507 h2 += MUL64((k6 + d2), (k10 + d6)); 507 h2 += MUL64((k6 + d2), (k10 + d6));
508 h3 += MUL64((k10 + d2), (k14 + d6)); 508 h3 += MUL64((k10 + d2), (k14 + d6));
509 h4 += MUL64((k14 + d2), (k18 + d6)); 509 h4 += MUL64((k14 + d2), (k18 + d6));
510 510
511 h1 += MUL64((k3 + d3), (k7 + d7)); 511 h1 += MUL64((k3 + d3), (k7 + d7));
512 h2 += MUL64((k7 + d3), (k11 + d7)); 512 h2 += MUL64((k7 + d3), (k11 + d7));
513 h3 += MUL64((k11 + d3), (k15 + d7)); 513 h3 += MUL64((k11 + d3), (k15 + d7));
514 h4 += MUL64((k15 + d3), (k19 + d7)); 514 h4 += MUL64((k15 + d3), (k19 + d7));
515 515
516 k0 = k8; k1 = k9; k2 = k10; k3 = k11; 516 k0 = k8; k1 = k9; k2 = k10; k3 = k11;
517 k4 = k12; k5 = k13; k6 = k14; k7 = k15; 517 k4 = k12; k5 = k13; k6 = k14; k7 = k15;
518 k8 = k16; k9 = k17; k10 = k18; k11 = k19; 518 k8 = k16; k9 = k17; k10 = k18; k11 = k19;
519 519
520 d += 8; 520 d += 8;
521 k += 8; 521 k += 8;
522 } while (--c); 522 } while (--c);
@@ -541,7 +541,7 @@ static void nh_transform(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes)
541 */ 541 */
542{ 542{
543 UINT8 *key; 543 UINT8 *key;
544 544
545 key = hc->nh_key + hc->bytes_hashed; 545 key = hc->nh_key + hc->bytes_hashed;
546 nh_aux(key, buf, hc->state, nbytes); 546 nh_aux(key, buf, hc->state, nbytes);
547} 547}
@@ -613,7 +613,7 @@ static void nh_update(nh_ctx *hc, const UINT8 *buf, UINT32 nbytes)
613/* even multiple of HASH_BUF_BYTES. */ 613/* even multiple of HASH_BUF_BYTES. */
614{ 614{
615 UINT32 i,j; 615 UINT32 i,j;
616 616
617 j = hc->next_data_empty; 617 j = hc->next_data_empty;
618 if ((j + nbytes) >= HASH_BUF_BYTES) { 618 if ((j + nbytes) >= HASH_BUF_BYTES) {
619 if (j) { 619 if (j) {
@@ -677,12 +677,12 @@ static void nh_final(nh_ctx *hc, UINT8 *result)
677 if (hc->next_data_empty != 0) { 677 if (hc->next_data_empty != 0) {
678 nh_len = ((hc->next_data_empty + (L1_PAD_BOUNDARY - 1)) & 678 nh_len = ((hc->next_data_empty + (L1_PAD_BOUNDARY - 1)) &
679 ~(L1_PAD_BOUNDARY - 1)); 679 ~(L1_PAD_BOUNDARY - 1));
680 zero_pad(hc->data + hc->next_data_empty, 680 zero_pad(hc->data + hc->next_data_empty,
681 nh_len - hc->next_data_empty); 681 nh_len - hc->next_data_empty);
682 nh_transform(hc, hc->data, nh_len); 682 nh_transform(hc, hc->data, nh_len);
683 hc->bytes_hashed += hc->next_data_empty; 683 hc->bytes_hashed += hc->next_data_empty;
684 } else if (hc->bytes_hashed == 0) { 684 } else if (hc->bytes_hashed == 0) {
685 nh_len = L1_PAD_BOUNDARY; 685 nh_len = L1_PAD_BOUNDARY;
686 zero_pad(hc->data, L1_PAD_BOUNDARY); 686 zero_pad(hc->data, L1_PAD_BOUNDARY);
687 nh_transform(hc, hc->data, nh_len); 687 nh_transform(hc, hc->data, nh_len);
688 } 688 }
@@ -711,10 +711,10 @@ static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,
711 */ 711 */
712{ 712{
713 UINT32 nbits; 713 UINT32 nbits;
714 714
715 /* Initialize the hash state */ 715 /* Initialize the hash state */
716 nbits = (unpadded_len << 3); 716 nbits = (unpadded_len << 3);
717 717
718 ((UINT64 *)result)[0] = nbits; 718 ((UINT64 *)result)[0] = nbits;
719#if (UMAC_OUTPUT_LEN >= 8) 719#if (UMAC_OUTPUT_LEN >= 8)
720 ((UINT64 *)result)[1] = nbits; 720 ((UINT64 *)result)[1] = nbits;
@@ -725,7 +725,7 @@ static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,
725#if (UMAC_OUTPUT_LEN == 16) 725#if (UMAC_OUTPUT_LEN == 16)
726 ((UINT64 *)result)[3] = nbits; 726 ((UINT64 *)result)[3] = nbits;
727#endif 727#endif
728 728
729 nh_aux(hc->nh_key, buf, result, padded_len); 729 nh_aux(hc->nh_key, buf, result, padded_len);
730} 730}
731 731
@@ -744,16 +744,16 @@ static void nh(nh_ctx *hc, const UINT8 *buf, UINT32 padded_len,
744 * buffers are presented sequentially. In the sequential interface, the 744 * buffers are presented sequentially. In the sequential interface, the
745 * UHASH client calls the routine uhash_update() as many times as necessary. 745 * UHASH client calls the routine uhash_update() as many times as necessary.
746 * When there is no more data to be fed to UHASH, the client calls 746 * When there is no more data to be fed to UHASH, the client calls
747 * uhash_final() which 747 * uhash_final() which
748 * calculates the UHASH output. Before beginning another UHASH calculation 748 * calculates the UHASH output. Before beginning another UHASH calculation
749 * the uhash_reset() routine must be called. The all-at-once UHASH routine, 749 * the uhash_reset() routine must be called. The all-at-once UHASH routine,
750 * uhash(), is equivalent to the sequence of calls uhash_update() and 750 * uhash(), is equivalent to the sequence of calls uhash_update() and
751 * uhash_final(); however it is optimized and should be 751 * uhash_final(); however it is optimized and should be
752 * used whenever the sequential interface is not necessary. 752 * used whenever the sequential interface is not necessary.
753 * 753 *
754 * The routine uhash_init() initializes the uhash_ctx data structure and 754 * The routine uhash_init() initializes the uhash_ctx data structure and
755 * must be called once, before any other UHASH routine. 755 * must be called once, before any other UHASH routine.
756 */ 756 */
757 757
758/* ---------------------------------------------------------------------- */ 758/* ---------------------------------------------------------------------- */
759/* ----- Constants and uhash_ctx ---------------------------------------- */ 759/* ----- Constants and uhash_ctx ---------------------------------------- */
@@ -802,13 +802,13 @@ static UINT64 poly64(UINT64 cur, UINT64 key, UINT64 data)
802 x_lo, 802 x_lo,
803 x_hi; 803 x_hi;
804 UINT64 X,T,res; 804 UINT64 X,T,res;
805 805
806 X = MUL64(key_hi, cur_lo) + MUL64(cur_hi, key_lo); 806 X = MUL64(key_hi, cur_lo) + MUL64(cur_hi, key_lo);
807 x_lo = (UINT32)X; 807 x_lo = (UINT32)X;
808 x_hi = (UINT32)(X >> 32); 808 x_hi = (UINT32)(X >> 32);
809 809
810 res = (MUL64(key_hi, cur_hi) + x_hi) * 59 + MUL64(key_lo, cur_lo); 810 res = (MUL64(key_hi, cur_hi) + x_hi) * 59 + MUL64(key_lo, cur_lo);
811 811
812 T = ((UINT64)x_lo << 32); 812 T = ((UINT64)x_lo << 32);
813 res += T; 813 res += T;
814 if (res < T) 814 if (res < T)
@@ -832,10 +832,10 @@ static void poly_hash(uhash_ctx_t hc, UINT32 data_in[])
832{ 832{
833 int i; 833 int i;
834 UINT64 *data=(UINT64*)data_in; 834 UINT64 *data=(UINT64*)data_in;
835 835
836 for (i = 0; i < STREAMS; i++) { 836 for (i = 0; i < STREAMS; i++) {
837 if ((UINT32)(data[i] >> 32) == 0xfffffffful) { 837 if ((UINT32)(data[i] >> 32) == 0xfffffffful) {
838 hc->poly_accum[i] = poly64(hc->poly_accum[i], 838 hc->poly_accum[i] = poly64(hc->poly_accum[i],
839 hc->poly_key_8[i], p64 - 1); 839 hc->poly_key_8[i], p64 - 1);
840 hc->poly_accum[i] = poly64(hc->poly_accum[i], 840 hc->poly_accum[i] = poly64(hc->poly_accum[i],
841 hc->poly_key_8[i], (data[i] - 59)); 841 hc->poly_key_8[i], (data[i] - 59));
@@ -862,7 +862,7 @@ static UINT64 ip_aux(UINT64 t, UINT64 *ipkp, UINT64 data)
862 t = t + ipkp[1] * (UINT64)(UINT16)(data >> 32); 862 t = t + ipkp[1] * (UINT64)(UINT16)(data >> 32);
863 t = t + ipkp[2] * (UINT64)(UINT16)(data >> 16); 863 t = t + ipkp[2] * (UINT64)(UINT16)(data >> 16);
864 t = t + ipkp[3] * (UINT64)(UINT16)(data); 864 t = t + ipkp[3] * (UINT64)(UINT16)(data);
865 865
866 return t; 866 return t;
867} 867}
868 868
@@ -870,7 +870,7 @@ static UINT32 ip_reduce_p36(UINT64 t)
870{ 870{
871/* Divisionless modular reduction */ 871/* Divisionless modular reduction */
872 UINT64 ret; 872 UINT64 ret;
873 873
874 ret = (t & m36) + 5 * (t >> 36); 874 ret = (t & m36) + 5 * (t >> 36);
875 if (ret >= p36) 875 if (ret >= p36)
876 ret -= p36; 876 ret -= p36;
@@ -888,7 +888,7 @@ static void ip_short(uhash_ctx_t ahc, UINT8 *nh_res, u_char *res)
888{ 888{
889 UINT64 t; 889 UINT64 t;
890 UINT64 *nhp = (UINT64 *)nh_res; 890 UINT64 *nhp = (UINT64 *)nh_res;
891 891
892 t = ip_aux(0,ahc->ip_keys, nhp[0]); 892 t = ip_aux(0,ahc->ip_keys, nhp[0]);
893 STORE_UINT32_BIG((UINT32 *)res+0, ip_reduce_p36(t) ^ ahc->ip_trans[0]); 893 STORE_UINT32_BIG((UINT32 *)res+0, ip_reduce_p36(t) ^ ahc->ip_trans[0]);
894#if (UMAC_OUTPUT_LEN >= 8) 894#if (UMAC_OUTPUT_LEN >= 8)
@@ -919,7 +919,7 @@ static void ip_long(uhash_ctx_t ahc, u_char *res)
919 if (ahc->poly_accum[i] >= p64) 919 if (ahc->poly_accum[i] >= p64)
920 ahc->poly_accum[i] -= p64; 920 ahc->poly_accum[i] -= p64;
921 t = ip_aux(0,ahc->ip_keys+(i*4), ahc->poly_accum[i]); 921 t = ip_aux(0,ahc->ip_keys+(i*4), ahc->poly_accum[i]);
922 STORE_UINT32_BIG((UINT32 *)res+i, 922 STORE_UINT32_BIG((UINT32 *)res+i,
923 ip_reduce_p36(t) ^ ahc->ip_trans[i]); 923 ip_reduce_p36(t) ^ ahc->ip_trans[i]);
924 } 924 }
925} 925}
@@ -958,13 +958,13 @@ static void uhash_init(uhash_ctx_t ahc, aes_int_key prf_key)
958{ 958{
959 int i; 959 int i;
960 UINT8 buf[(8*STREAMS+4)*sizeof(UINT64)]; 960 UINT8 buf[(8*STREAMS+4)*sizeof(UINT64)];
961 961
962 /* Zero the entire uhash context */ 962 /* Zero the entire uhash context */
963 memset(ahc, 0, sizeof(uhash_ctx)); 963 memset(ahc, 0, sizeof(uhash_ctx));
964 964
965 /* Initialize the L1 hash */ 965 /* Initialize the L1 hash */
966 nh_init(&ahc->hash, prf_key); 966 nh_init(&ahc->hash, prf_key);
967 967
968 /* Setup L2 hash variables */ 968 /* Setup L2 hash variables */
969 kdf(buf, prf_key, 2, sizeof(buf)); /* Fill buffer with index 1 key */ 969 kdf(buf, prf_key, 2, sizeof(buf)); /* Fill buffer with index 1 key */
970 for (i = 0; i < STREAMS; i++) { 970 for (i = 0; i < STREAMS; i++) {
@@ -978,17 +978,17 @@ static void uhash_init(uhash_ctx_t ahc, aes_int_key prf_key)
978 ahc->poly_key_8[i] &= ((UINT64)0x01ffffffu << 32) + 0x01ffffffu; 978 ahc->poly_key_8[i] &= ((UINT64)0x01ffffffu << 32) + 0x01ffffffu;
979 ahc->poly_accum[i] = 1; /* Our polyhash prepends a non-zero word */ 979 ahc->poly_accum[i] = 1; /* Our polyhash prepends a non-zero word */
980 } 980 }
981 981
982 /* Setup L3-1 hash variables */ 982 /* Setup L3-1 hash variables */
983 kdf(buf, prf_key, 3, sizeof(buf)); /* Fill buffer with index 2 key */ 983 kdf(buf, prf_key, 3, sizeof(buf)); /* Fill buffer with index 2 key */
984 for (i = 0; i < STREAMS; i++) 984 for (i = 0; i < STREAMS; i++)
985 memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64), 985 memcpy(ahc->ip_keys+4*i, buf+(8*i+4)*sizeof(UINT64),
986 4*sizeof(UINT64)); 986 4*sizeof(UINT64));
987 endian_convert_if_le(ahc->ip_keys, sizeof(UINT64), 987 endian_convert_if_le(ahc->ip_keys, sizeof(UINT64),
988 sizeof(ahc->ip_keys)); 988 sizeof(ahc->ip_keys));
989 for (i = 0; i < STREAMS*4; i++) 989 for (i = 0; i < STREAMS*4; i++)
990 ahc->ip_keys[i] %= p36; /* Bring into Z_p36 */ 990 ahc->ip_keys[i] %= p36; /* Bring into Z_p36 */
991 991
992 /* Setup L3-2 hash variables */ 992 /* Setup L3-2 hash variables */
993 /* Fill buffer with index 4 key */ 993 /* Fill buffer with index 4 key */
994 kdf(ahc->ip_trans, prf_key, 4, STREAMS * sizeof(UINT32)); 994 kdf(ahc->ip_trans, prf_key, 4, STREAMS * sizeof(UINT32));
@@ -1006,7 +1006,7 @@ static uhash_ctx_t uhash_alloc(u_char key[])
1006 uhash_ctx_t ctx; 1006 uhash_ctx_t ctx;
1007 u_char bytes_to_add; 1007 u_char bytes_to_add;
1008 aes_int_key prf_key; 1008 aes_int_key prf_key;
1009 1009
1010 ctx = (uhash_ctx_t)malloc(sizeof(uhash_ctx)+ALLOC_BOUNDARY); 1010 ctx = (uhash_ctx_t)malloc(sizeof(uhash_ctx)+ALLOC_BOUNDARY);
1011 if (ctx) { 1011 if (ctx) {
1012 if (ALLOC_BOUNDARY) { 1012 if (ALLOC_BOUNDARY) {
@@ -1029,7 +1029,7 @@ static int uhash_free(uhash_ctx_t ctx)
1029{ 1029{
1030/* Free memory allocated by uhash_alloc */ 1030/* Free memory allocated by uhash_alloc */
1031 u_char bytes_to_sub; 1031 u_char bytes_to_sub;
1032 1032
1033 if (ctx) { 1033 if (ctx) {
1034 if (ALLOC_BOUNDARY) { 1034 if (ALLOC_BOUNDARY) {
1035 bytes_to_sub = *((u_char *)ctx - 1); 1035 bytes_to_sub = *((u_char *)ctx - 1);
@@ -1050,12 +1050,12 @@ static int uhash_update(uhash_ctx_t ctx, const u_char *input, long len)
1050 UWORD bytes_hashed, bytes_remaining; 1050 UWORD bytes_hashed, bytes_remaining;
1051 UINT64 result_buf[STREAMS]; 1051 UINT64 result_buf[STREAMS];
1052 UINT8 *nh_result = (UINT8 *)&result_buf; 1052 UINT8 *nh_result = (UINT8 *)&result_buf;
1053 1053
1054 if (ctx->msg_len + len <= L1_KEY_LEN) { 1054 if (ctx->msg_len + len <= L1_KEY_LEN) {
1055 nh_update(&ctx->hash, (const UINT8 *)input, len); 1055 nh_update(&ctx->hash, (const UINT8 *)input, len);
1056 ctx->msg_len += len; 1056 ctx->msg_len += len;
1057 } else { 1057 } else {
1058 1058
1059 bytes_hashed = ctx->msg_len % L1_KEY_LEN; 1059 bytes_hashed = ctx->msg_len % L1_KEY_LEN;
1060 if (ctx->msg_len == L1_KEY_LEN) 1060 if (ctx->msg_len == L1_KEY_LEN)
1061 bytes_hashed = L1_KEY_LEN; 1061 bytes_hashed = L1_KEY_LEN;
@@ -1128,15 +1128,15 @@ static int uhash(uhash_ctx_t ahc, u_char *msg, long len, u_char *res)
1128 UINT8 nh_result[STREAMS*sizeof(UINT64)]; 1128 UINT8 nh_result[STREAMS*sizeof(UINT64)];
1129 UINT32 nh_len; 1129 UINT32 nh_len;
1130 int extra_zeroes_needed; 1130 int extra_zeroes_needed;
1131 1131
1132 /* If the message to be hashed is no longer than L1_HASH_LEN, we skip 1132 /* If the message to be hashed is no longer than L1_HASH_LEN, we skip
1133 * the polyhash. 1133 * the polyhash.
1134 */ 1134 */
1135 if (len <= L1_KEY_LEN) { 1135 if (len <= L1_KEY_LEN) {
1136 if (len == 0) /* If zero length messages will not */ 1136 if (len == 0) /* If zero length messages will not */
1137 nh_len = L1_PAD_BOUNDARY; /* be seen, comment out this case */ 1137 nh_len = L1_PAD_BOUNDARY; /* be seen, comment out this case */
1138 else 1138 else
1139 nh_len = ((len + (L1_PAD_BOUNDARY - 1)) & ~(L1_PAD_BOUNDARY - 1)); 1139 nh_len = ((len + (L1_PAD_BOUNDARY - 1)) & ~(L1_PAD_BOUNDARY - 1));
1140 extra_zeroes_needed = nh_len - len; 1140 extra_zeroes_needed = nh_len - len;
1141 zero_pad((UINT8 *)msg + len, extra_zeroes_needed); 1141 zero_pad((UINT8 *)msg + len, extra_zeroes_needed);
1142 nh(&ahc->hash, (UINT8 *)msg, nh_len, len, nh_result); 1142 nh(&ahc->hash, (UINT8 *)msg, nh_len, len, nh_result);
@@ -1161,7 +1161,7 @@ static int uhash(uhash_ctx_t ahc, u_char *msg, long len, u_char *res)
1161 1161
1162 ip_long(ahc, res); 1162 ip_long(ahc, res);
1163 } 1163 }
1164 1164
1165 uhash_reset(ahc); 1165 uhash_reset(ahc);
1166 return 1; 1166 return 1;
1167} 1167}
@@ -1175,9 +1175,9 @@ static int uhash(uhash_ctx_t ahc, u_char *msg, long len, u_char *res)
1175 1175
1176/* The UMAC interface has two interfaces, an all-at-once interface where 1176/* The UMAC interface has two interfaces, an all-at-once interface where
1177 * the entire message to be authenticated is passed to UMAC in one buffer, 1177 * the entire message to be authenticated is passed to UMAC in one buffer,
1178 * and a sequential interface where the message is presented a little at a 1178 * and a sequential interface where the message is presented a little at a
1179 * time. The all-at-once is more optimaized than the sequential version and 1179 * time. The all-at-once is more optimaized than the sequential version and
1180 * should be preferred when the sequential interface is not required. 1180 * should be preferred when the sequential interface is not required.
1181 */ 1181 */
1182struct umac_ctx { 1182struct umac_ctx {
1183 uhash_ctx hash; /* Hash function for message compression */ 1183 uhash_ctx hash; /* Hash function for message compression */
@@ -1213,14 +1213,14 @@ int umac_delete(struct umac_ctx *ctx)
1213/* ---------------------------------------------------------------------- */ 1213/* ---------------------------------------------------------------------- */
1214 1214
1215struct umac_ctx *umac_new(const u_char key[]) 1215struct umac_ctx *umac_new(const u_char key[])
1216/* Dynamically allocate a umac_ctx struct, initialize variables, 1216/* Dynamically allocate a umac_ctx struct, initialize variables,
1217 * generate subkeys from key. Align to 16-byte boundary. 1217 * generate subkeys from key. Align to 16-byte boundary.
1218 */ 1218 */
1219{ 1219{
1220 struct umac_ctx *ctx, *octx; 1220 struct umac_ctx *ctx, *octx;
1221 size_t bytes_to_add; 1221 size_t bytes_to_add;
1222 aes_int_key prf_key; 1222 aes_int_key prf_key;
1223 1223
1224 octx = ctx = xcalloc(1, sizeof(*ctx) + ALLOC_BOUNDARY); 1224 octx = ctx = xcalloc(1, sizeof(*ctx) + ALLOC_BOUNDARY);
1225 if (ctx) { 1225 if (ctx) {
1226 if (ALLOC_BOUNDARY) { 1226 if (ALLOC_BOUNDARY) {
@@ -1234,7 +1234,7 @@ struct umac_ctx *umac_new(const u_char key[])
1234 uhash_init(&ctx->hash, prf_key); 1234 uhash_init(&ctx->hash, prf_key);
1235 explicit_bzero(prf_key, sizeof(prf_key)); 1235 explicit_bzero(prf_key, sizeof(prf_key));
1236 } 1236 }
1237 1237
1238 return (ctx); 1238 return (ctx);
1239} 1239}
1240 1240
@@ -1245,7 +1245,7 @@ int umac_final(struct umac_ctx *ctx, u_char tag[], const u_char nonce[8])
1245{ 1245{
1246 uhash_final(&ctx->hash, (u_char *)tag); 1246 uhash_final(&ctx->hash, (u_char *)tag);
1247 pdf_gen_xor(&ctx->pdf, (const UINT8 *)nonce, (UINT8 *)tag); 1247 pdf_gen_xor(&ctx->pdf, (const UINT8 *)nonce, (UINT8 *)tag);
1248 1248
1249 return (1); 1249 return (1);
1250} 1250}
1251 1251
@@ -1263,14 +1263,14 @@ int umac_update(struct umac_ctx *ctx, const u_char *input, long len)
1263/* ---------------------------------------------------------------------- */ 1263/* ---------------------------------------------------------------------- */
1264 1264
1265#if 0 1265#if 0
1266int umac(struct umac_ctx *ctx, u_char *input, 1266int umac(struct umac_ctx *ctx, u_char *input,
1267 long len, u_char tag[], 1267 long len, u_char tag[],
1268 u_char nonce[8]) 1268 u_char nonce[8])
1269/* All-in-one version simply calls umac_update() and umac_final(). */ 1269/* All-in-one version simply calls umac_update() and umac_final(). */
1270{ 1270{
1271 uhash(&ctx->hash, input, len, (u_char *)tag); 1271 uhash(&ctx->hash, input, len, (u_char *)tag);
1272 pdf_gen_xor(&ctx->pdf, (UINT8 *)nonce, (UINT8 *)tag); 1272 pdf_gen_xor(&ctx->pdf, (UINT8 *)nonce, (UINT8 *)tag);
1273 1273
1274 return (1); 1274 return (1);
1275} 1275}
1276#endif 1276#endif
diff --git a/umac128.c b/umac128.c
new file mode 100644
index 000000000..f71792506
--- /dev/null
+++ b/umac128.c
@@ -0,0 +1,10 @@
1/* $OpenBSD: umac128.c,v 1.2 2018/02/08 04:12:32 dtucker Exp $ */
2
3#define UMAC_OUTPUT_LEN 16
4#define umac_new umac128_new
5#define umac_update umac128_update
6#define umac_final umac128_final
7#define umac_delete umac128_delete
8#define umac_ctx umac128_ctx
9
10#include "umac.c"
diff --git a/version.h b/version.h
index e093f623b..ea52b26f5 100644
--- a/version.h
+++ b/version.h
@@ -1,6 +1,6 @@
1/* $OpenBSD: version.h,v 1.80 2017/09/30 22:26:33 djm Exp $ */ 1/* $OpenBSD: version.h,v 1.81 2018/03/24 19:29:03 markus Exp $ */
2 2
3#define SSH_VERSION "OpenSSH_7.6" 3#define SSH_VERSION "OpenSSH_7.7"
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
diff --git a/xmss_commons.c b/xmss_commons.c
new file mode 100644
index 000000000..59486aead
--- /dev/null
+++ b/xmss_commons.c
@@ -0,0 +1,36 @@
1/* $OpenBSD: xmss_commons.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3xmss_commons.c 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include "xmss_commons.h"
13#include <stdlib.h>
14#include <stdio.h>
15#ifdef HAVE_STDINT_H
16#include <stdint.h>
17#endif
18
19void to_byte(unsigned char *out, unsigned long long in, uint32_t bytes)
20{
21 int32_t i;
22 for (i = bytes-1; i >= 0; i--) {
23 out[i] = in & 0xff;
24 in = in >> 8;
25 }
26}
27
28#if 0
29void hexdump(const unsigned char *a, size_t len)
30{
31 size_t i;
32 for (i = 0; i < len; i++)
33 printf("%02x", a[i]);
34}
35#endif
36#endif /* WITH_XMSS */
diff --git a/xmss_commons.h b/xmss_commons.h
new file mode 100644
index 000000000..a98e4799c
--- /dev/null
+++ b/xmss_commons.h
@@ -0,0 +1,21 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_commons.h,v 1.3 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4xmss_commons.h 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9#ifndef XMSS_COMMONS_H
10#define XMSS_COMMONS_H
11
12#include <stdlib.h>
13#ifdef HAVE_STDINT_H
14#include <stdint.h>
15#endif
16#endif
17void to_byte(unsigned char *output, unsigned long long in, uint32_t bytes);
18#if 0
19void hexdump(const unsigned char *a, size_t len);
20#endif
21#endif /* WITH_XMSS */
diff --git a/xmss_fast.c b/xmss_fast.c
new file mode 100644
index 000000000..e37447f60
--- /dev/null
+++ b/xmss_fast.c
@@ -0,0 +1,1106 @@
1/* $OpenBSD: xmss_fast.c,v 1.3 2018/03/22 07:06:11 markus Exp $ */
2/*
3xmss_fast.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include <stdlib.h>
13#include <string.h>
14#ifdef HAVE_STDINT_H
15#include <stdint.h>
16#endif
17
18#include "xmss_fast.h"
19#include "crypto_api.h"
20#include "xmss_wots.h"
21#include "xmss_hash.h"
22
23#include "xmss_commons.h"
24#include "xmss_hash_address.h"
25// For testing
26#include "stdio.h"
27
28
29
30/**
31 * Used for pseudorandom keygeneration,
32 * generates the seed for the WOTS keypair at address addr
33 *
34 * takes n byte sk_seed and returns n byte seed using 32 byte address addr.
35 */
36static void get_seed(unsigned char *seed, const unsigned char *sk_seed, int n, uint32_t addr[8])
37{
38 unsigned char bytes[32];
39 // Make sure that chain addr, hash addr, and key bit are 0!
40 setChainADRS(addr,0);
41 setHashADRS(addr,0);
42 setKeyAndMask(addr,0);
43 // Generate pseudorandom value
44 addr_to_byte(bytes, addr);
45 prf(seed, bytes, sk_seed, n);
46}
47
48/**
49 * Initialize xmss params struct
50 * parameter names are the same as in the draft
51 * parameter k is K as used in the BDS algorithm
52 */
53int xmss_set_params(xmss_params *params, int n, int h, int w, int k)
54{
55 if (k >= h || k < 2 || (h - k) % 2) {
56 fprintf(stderr, "For BDS traversal, H - K must be even, with H > K >= 2!\n");
57 return 1;
58 }
59 params->h = h;
60 params->n = n;
61 params->k = k;
62 wots_params wots_par;
63 wots_set_params(&wots_par, n, w);
64 params->wots_par = wots_par;
65 return 0;
66}
67
68/**
69 * Initialize BDS state struct
70 * parameter names are the same as used in the description of the BDS traversal
71 */
72void xmss_set_bds_state(bds_state *state, unsigned char *stack, int stackoffset, unsigned char *stacklevels, unsigned char *auth, unsigned char *keep, treehash_inst *treehash, unsigned char *retain, int next_leaf)
73{
74 state->stack = stack;
75 state->stackoffset = stackoffset;
76 state->stacklevels = stacklevels;
77 state->auth = auth;
78 state->keep = keep;
79 state->treehash = treehash;
80 state->retain = retain;
81 state->next_leaf = next_leaf;
82}
83
84/**
85 * Initialize xmssmt_params struct
86 * parameter names are the same as in the draft
87 *
88 * Especially h is the total tree height, i.e. the XMSS trees have height h/d
89 */
90int xmssmt_set_params(xmssmt_params *params, int n, int h, int d, int w, int k)
91{
92 if (h % d) {
93 fprintf(stderr, "d must divide h without remainder!\n");
94 return 1;
95 }
96 params->h = h;
97 params->d = d;
98 params->n = n;
99 params->index_len = (h + 7) / 8;
100 xmss_params xmss_par;
101 if (xmss_set_params(&xmss_par, n, (h/d), w, k)) {
102 return 1;
103 }
104 params->xmss_par = xmss_par;
105 return 0;
106}
107
108/**
109 * Computes a leaf from a WOTS public key using an L-tree.
110 */
111static void l_tree(unsigned char *leaf, unsigned char *wots_pk, const xmss_params *params, const unsigned char *pub_seed, uint32_t addr[8])
112{
113 unsigned int l = params->wots_par.len;
114 unsigned int n = params->n;
115 uint32_t i = 0;
116 uint32_t height = 0;
117 uint32_t bound;
118
119 //ADRS.setTreeHeight(0);
120 setTreeHeight(addr, height);
121
122 while (l > 1) {
123 bound = l >> 1; //floor(l / 2);
124 for (i = 0; i < bound; i++) {
125 //ADRS.setTreeIndex(i);
126 setTreeIndex(addr, i);
127 //wots_pk[i] = RAND_HASH(pk[2i], pk[2i + 1], SEED, ADRS);
128 hash_h(wots_pk+i*n, wots_pk+i*2*n, pub_seed, addr, n);
129 }
130 //if ( l % 2 == 1 ) {
131 if (l & 1) {
132 //pk[floor(l / 2) + 1] = pk[l];
133 memcpy(wots_pk+(l>>1)*n, wots_pk+(l-1)*n, n);
134 //l = ceil(l / 2);
135 l=(l>>1)+1;
136 }
137 else {
138 //l = ceil(l / 2);
139 l=(l>>1);
140 }
141 //ADRS.setTreeHeight(ADRS.getTreeHeight() + 1);
142 height++;
143 setTreeHeight(addr, height);
144 }
145 //return pk[0];
146 memcpy(leaf, wots_pk, n);
147}
148
149/**
150 * Computes the leaf at a given address. First generates the WOTS key pair, then computes leaf using l_tree. As this happens position independent, we only require that addr encodes the right ltree-address.
151 */
152static void gen_leaf_wots(unsigned char *leaf, const unsigned char *sk_seed, const xmss_params *params, const unsigned char *pub_seed, uint32_t ltree_addr[8], uint32_t ots_addr[8])
153{
154 unsigned char seed[params->n];
155 unsigned char pk[params->wots_par.keysize];
156
157 get_seed(seed, sk_seed, params->n, ots_addr);
158 wots_pkgen(pk, seed, &(params->wots_par), pub_seed, ots_addr);
159
160 l_tree(leaf, pk, params, pub_seed, ltree_addr);
161}
162
163static int treehash_minheight_on_stack(bds_state* state, const xmss_params *params, const treehash_inst *treehash) {
164 unsigned int r = params->h, i;
165 for (i = 0; i < treehash->stackusage; i++) {
166 if (state->stacklevels[state->stackoffset - i - 1] < r) {
167 r = state->stacklevels[state->stackoffset - i - 1];
168 }
169 }
170 return r;
171}
172
173/**
174 * Merkle's TreeHash algorithm. The address only needs to initialize the first 78 bits of addr. Everything else will be set by treehash.
175 * Currently only used for key generation.
176 *
177 */
178static void treehash_setup(unsigned char *node, int height, int index, bds_state *state, const unsigned char *sk_seed, const xmss_params *params, const unsigned char *pub_seed, const uint32_t addr[8])
179{
180 unsigned int idx = index;
181 unsigned int n = params->n;
182 unsigned int h = params->h;
183 unsigned int k = params->k;
184 // use three different addresses because at this point we use all three formats in parallel
185 uint32_t ots_addr[8];
186 uint32_t ltree_addr[8];
187 uint32_t node_addr[8];
188 // only copy layer and tree address parts
189 memcpy(ots_addr, addr, 12);
190 // type = ots
191 setType(ots_addr, 0);
192 memcpy(ltree_addr, addr, 12);
193 setType(ltree_addr, 1);
194 memcpy(node_addr, addr, 12);
195 setType(node_addr, 2);
196
197 uint32_t lastnode, i;
198 unsigned char stack[(height+1)*n];
199 unsigned int stacklevels[height+1];
200 unsigned int stackoffset=0;
201 unsigned int nodeh;
202
203 lastnode = idx+(1<<height);
204
205 for (i = 0; i < h-k; i++) {
206 state->treehash[i].h = i;
207 state->treehash[i].completed = 1;
208 state->treehash[i].stackusage = 0;
209 }
210
211 i = 0;
212 for (; idx < lastnode; idx++) {
213 setLtreeADRS(ltree_addr, idx);
214 setOTSADRS(ots_addr, idx);
215 gen_leaf_wots(stack+stackoffset*n, sk_seed, params, pub_seed, ltree_addr, ots_addr);
216 stacklevels[stackoffset] = 0;
217 stackoffset++;
218 if (h - k > 0 && i == 3) {
219 memcpy(state->treehash[0].node, stack+stackoffset*n, n);
220 }
221 while (stackoffset>1 && stacklevels[stackoffset-1] == stacklevels[stackoffset-2])
222 {
223 nodeh = stacklevels[stackoffset-1];
224 if (i >> nodeh == 1) {
225 memcpy(state->auth + nodeh*n, stack+(stackoffset-1)*n, n);
226 }
227 else {
228 if (nodeh < h - k && i >> nodeh == 3) {
229 memcpy(state->treehash[nodeh].node, stack+(stackoffset-1)*n, n);
230 }
231 else if (nodeh >= h - k) {
232 memcpy(state->retain + ((1 << (h - 1 - nodeh)) + nodeh - h + (((i >> nodeh) - 3) >> 1)) * n, stack+(stackoffset-1)*n, n);
233 }
234 }
235 setTreeHeight(node_addr, stacklevels[stackoffset-1]);
236 setTreeIndex(node_addr, (idx >> (stacklevels[stackoffset-1]+1)));
237 hash_h(stack+(stackoffset-2)*n, stack+(stackoffset-2)*n, pub_seed,
238 node_addr, n);
239 stacklevels[stackoffset-2]++;
240 stackoffset--;
241 }
242 i++;
243 }
244
245 for (i = 0; i < n; i++)
246 node[i] = stack[i];
247}
248
249static void treehash_update(treehash_inst *treehash, bds_state *state, const unsigned char *sk_seed, const xmss_params *params, const unsigned char *pub_seed, const uint32_t addr[8]) {
250 int n = params->n;
251
252 uint32_t ots_addr[8];
253 uint32_t ltree_addr[8];
254 uint32_t node_addr[8];
255 // only copy layer and tree address parts
256 memcpy(ots_addr, addr, 12);
257 // type = ots
258 setType(ots_addr, 0);
259 memcpy(ltree_addr, addr, 12);
260 setType(ltree_addr, 1);
261 memcpy(node_addr, addr, 12);
262 setType(node_addr, 2);
263
264 setLtreeADRS(ltree_addr, treehash->next_idx);
265 setOTSADRS(ots_addr, treehash->next_idx);
266
267 unsigned char nodebuffer[2 * n];
268 unsigned int nodeheight = 0;
269 gen_leaf_wots(nodebuffer, sk_seed, params, pub_seed, ltree_addr, ots_addr);
270 while (treehash->stackusage > 0 && state->stacklevels[state->stackoffset-1] == nodeheight) {
271 memcpy(nodebuffer + n, nodebuffer, n);
272 memcpy(nodebuffer, state->stack + (state->stackoffset-1)*n, n);
273 setTreeHeight(node_addr, nodeheight);
274 setTreeIndex(node_addr, (treehash->next_idx >> (nodeheight+1)));
275 hash_h(nodebuffer, nodebuffer, pub_seed, node_addr, n);
276 nodeheight++;
277 treehash->stackusage--;
278 state->stackoffset--;
279 }
280 if (nodeheight == treehash->h) { // this also implies stackusage == 0
281 memcpy(treehash->node, nodebuffer, n);
282 treehash->completed = 1;
283 }
284 else {
285 memcpy(state->stack + state->stackoffset*n, nodebuffer, n);
286 treehash->stackusage++;
287 state->stacklevels[state->stackoffset] = nodeheight;
288 state->stackoffset++;
289 treehash->next_idx++;
290 }
291}
292
293/**
294 * Computes a root node given a leaf and an authapth
295 */
296static void validate_authpath(unsigned char *root, const unsigned char *leaf, unsigned long leafidx, const unsigned char *authpath, const xmss_params *params, const unsigned char *pub_seed, uint32_t addr[8])
297{
298 unsigned int n = params->n;
299
300 uint32_t i, j;
301 unsigned char buffer[2*n];
302
303 // If leafidx is odd (last bit = 1), current path element is a right child and authpath has to go to the left.
304 // Otherwise, it is the other way around
305 if (leafidx & 1) {
306 for (j = 0; j < n; j++)
307 buffer[n+j] = leaf[j];
308 for (j = 0; j < n; j++)
309 buffer[j] = authpath[j];
310 }
311 else {
312 for (j = 0; j < n; j++)
313 buffer[j] = leaf[j];
314 for (j = 0; j < n; j++)
315 buffer[n+j] = authpath[j];
316 }
317 authpath += n;
318
319 for (i=0; i < params->h-1; i++) {
320 setTreeHeight(addr, i);
321 leafidx >>= 1;
322 setTreeIndex(addr, leafidx);
323 if (leafidx&1) {
324 hash_h(buffer+n, buffer, pub_seed, addr, n);
325 for (j = 0; j < n; j++)
326 buffer[j] = authpath[j];
327 }
328 else {
329 hash_h(buffer, buffer, pub_seed, addr, n);
330 for (j = 0; j < n; j++)
331 buffer[j+n] = authpath[j];
332 }
333 authpath += n;
334 }
335 setTreeHeight(addr, (params->h-1));
336 leafidx >>= 1;
337 setTreeIndex(addr, leafidx);
338 hash_h(root, buffer, pub_seed, addr, n);
339}
340
341/**
342 * Performs one treehash update on the instance that needs it the most.
343 * Returns 1 if such an instance was not found
344 **/
345static char bds_treehash_update(bds_state *state, unsigned int updates, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, const uint32_t addr[8]) {
346 uint32_t i, j;
347 unsigned int level, l_min, low;
348 unsigned int h = params->h;
349 unsigned int k = params->k;
350 unsigned int used = 0;
351
352 for (j = 0; j < updates; j++) {
353 l_min = h;
354 level = h - k;
355 for (i = 0; i < h - k; i++) {
356 if (state->treehash[i].completed) {
357 low = h;
358 }
359 else if (state->treehash[i].stackusage == 0) {
360 low = i;
361 }
362 else {
363 low = treehash_minheight_on_stack(state, params, &(state->treehash[i]));
364 }
365 if (low < l_min) {
366 level = i;
367 l_min = low;
368 }
369 }
370 if (level == h - k) {
371 break;
372 }
373 treehash_update(&(state->treehash[level]), state, sk_seed, params, pub_seed, addr);
374 used++;
375 }
376 return updates - used;
377}
378
379/**
380 * Updates the state (typically NEXT_i) by adding a leaf and updating the stack
381 * Returns 1 if all leaf nodes have already been processed
382 **/
383static char bds_state_update(bds_state *state, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, const uint32_t addr[8]) {
384 uint32_t ltree_addr[8];
385 uint32_t node_addr[8];
386 uint32_t ots_addr[8];
387
388 int n = params->n;
389 int h = params->h;
390 int k = params->k;
391
392 int nodeh;
393 int idx = state->next_leaf;
394 if (idx == 1 << h) {
395 return 1;
396 }
397
398 // only copy layer and tree address parts
399 memcpy(ots_addr, addr, 12);
400 // type = ots
401 setType(ots_addr, 0);
402 memcpy(ltree_addr, addr, 12);
403 setType(ltree_addr, 1);
404 memcpy(node_addr, addr, 12);
405 setType(node_addr, 2);
406
407 setOTSADRS(ots_addr, idx);
408 setLtreeADRS(ltree_addr, idx);
409
410 gen_leaf_wots(state->stack+state->stackoffset*n, sk_seed, params, pub_seed, ltree_addr, ots_addr);
411
412 state->stacklevels[state->stackoffset] = 0;
413 state->stackoffset++;
414 if (h - k > 0 && idx == 3) {
415 memcpy(state->treehash[0].node, state->stack+state->stackoffset*n, n);
416 }
417 while (state->stackoffset>1 && state->stacklevels[state->stackoffset-1] == state->stacklevels[state->stackoffset-2]) {
418 nodeh = state->stacklevels[state->stackoffset-1];
419 if (idx >> nodeh == 1) {
420 memcpy(state->auth + nodeh*n, state->stack+(state->stackoffset-1)*n, n);
421 }
422 else {
423 if (nodeh < h - k && idx >> nodeh == 3) {
424 memcpy(state->treehash[nodeh].node, state->stack+(state->stackoffset-1)*n, n);
425 }
426 else if (nodeh >= h - k) {
427 memcpy(state->retain + ((1 << (h - 1 - nodeh)) + nodeh - h + (((idx >> nodeh) - 3) >> 1)) * n, state->stack+(state->stackoffset-1)*n, n);
428 }
429 }
430 setTreeHeight(node_addr, state->stacklevels[state->stackoffset-1]);
431 setTreeIndex(node_addr, (idx >> (state->stacklevels[state->stackoffset-1]+1)));
432 hash_h(state->stack+(state->stackoffset-2)*n, state->stack+(state->stackoffset-2)*n, pub_seed, node_addr, n);
433
434 state->stacklevels[state->stackoffset-2]++;
435 state->stackoffset--;
436 }
437 state->next_leaf++;
438 return 0;
439}
440
441/**
442 * Returns the auth path for node leaf_idx and computes the auth path for the
443 * next leaf node, using the algorithm described by Buchmann, Dahmen and Szydlo
444 * in "Post Quantum Cryptography", Springer 2009.
445 */
446static void bds_round(bds_state *state, const unsigned long leaf_idx, const unsigned char *sk_seed, const xmss_params *params, unsigned char *pub_seed, uint32_t addr[8])
447{
448 unsigned int i;
449 unsigned int n = params->n;
450 unsigned int h = params->h;
451 unsigned int k = params->k;
452
453 unsigned int tau = h;
454 unsigned int startidx;
455 unsigned int offset, rowidx;
456 unsigned char buf[2 * n];
457
458 uint32_t ots_addr[8];
459 uint32_t ltree_addr[8];
460 uint32_t node_addr[8];
461 // only copy layer and tree address parts
462 memcpy(ots_addr, addr, 12);
463 // type = ots
464 setType(ots_addr, 0);
465 memcpy(ltree_addr, addr, 12);
466 setType(ltree_addr, 1);
467 memcpy(node_addr, addr, 12);
468 setType(node_addr, 2);
469
470 for (i = 0; i < h; i++) {
471 if (! ((leaf_idx >> i) & 1)) {
472 tau = i;
473 break;
474 }
475 }
476
477 if (tau > 0) {
478 memcpy(buf, state->auth + (tau-1) * n, n);
479 // we need to do this before refreshing state->keep to prevent overwriting
480 memcpy(buf + n, state->keep + ((tau-1) >> 1) * n, n);
481 }
482 if (!((leaf_idx >> (tau + 1)) & 1) && (tau < h - 1)) {
483 memcpy(state->keep + (tau >> 1)*n, state->auth + tau*n, n);
484 }
485 if (tau == 0) {
486 setLtreeADRS(ltree_addr, leaf_idx);
487 setOTSADRS(ots_addr, leaf_idx);
488 gen_leaf_wots(state->auth, sk_seed, params, pub_seed, ltree_addr, ots_addr);
489 }
490 else {
491 setTreeHeight(node_addr, (tau-1));
492 setTreeIndex(node_addr, leaf_idx >> tau);
493 hash_h(state->auth + tau * n, buf, pub_seed, node_addr, n);
494 for (i = 0; i < tau; i++) {
495 if (i < h - k) {
496 memcpy(state->auth + i * n, state->treehash[i].node, n);
497 }
498 else {
499 offset = (1 << (h - 1 - i)) + i - h;
500 rowidx = ((leaf_idx >> i) - 1) >> 1;
501 memcpy(state->auth + i * n, state->retain + (offset + rowidx) * n, n);
502 }
503 }
504
505 for (i = 0; i < ((tau < h - k) ? tau : (h - k)); i++) {
506 startidx = leaf_idx + 1 + 3 * (1 << i);
507 if (startidx < 1U << h) {
508 state->treehash[i].h = i;
509 state->treehash[i].next_idx = startidx;
510 state->treehash[i].completed = 0;
511 state->treehash[i].stackusage = 0;
512 }
513 }
514 }
515}
516
517/*
518 * Generates a XMSS key pair for a given parameter set.
519 * Format sk: [(32bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
520 * Format pk: [root || PUB_SEED] omitting algo oid.
521 */
522int xmss_keypair(unsigned char *pk, unsigned char *sk, bds_state *state, xmss_params *params)
523{
524 unsigned int n = params->n;
525 // Set idx = 0
526 sk[0] = 0;
527 sk[1] = 0;
528 sk[2] = 0;
529 sk[3] = 0;
530 // Init SK_SEED (n byte), SK_PRF (n byte), and PUB_SEED (n byte)
531 randombytes(sk+4, 3*n);
532 // Copy PUB_SEED to public key
533 memcpy(pk+n, sk+4+2*n, n);
534
535 uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
536
537 // Compute root
538 treehash_setup(pk, params->h, 0, state, sk+4, params, sk+4+2*n, addr);
539 // copy root to sk
540 memcpy(sk+4+3*n, pk, n);
541 return 0;
542}
543
544/**
545 * Signs a message.
546 * Returns
547 * 1. an array containing the signature followed by the message AND
548 * 2. an updated secret key!
549 *
550 */
551int xmss_sign(unsigned char *sk, bds_state *state, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmss_params *params)
552{
553 unsigned int h = params->h;
554 unsigned int n = params->n;
555 unsigned int k = params->k;
556 uint16_t i = 0;
557
558 // Extract SK
559 unsigned long idx = ((unsigned long)sk[0] << 24) | ((unsigned long)sk[1] << 16) | ((unsigned long)sk[2] << 8) | sk[3];
560 unsigned char sk_seed[n];
561 memcpy(sk_seed, sk+4, n);
562 unsigned char sk_prf[n];
563 memcpy(sk_prf, sk+4+n, n);
564 unsigned char pub_seed[n];
565 memcpy(pub_seed, sk+4+2*n, n);
566
567 // index as 32 bytes string
568 unsigned char idx_bytes_32[32];
569 to_byte(idx_bytes_32, idx, 32);
570
571 unsigned char hash_key[3*n];
572
573 // Update SK
574 sk[0] = ((idx + 1) >> 24) & 255;
575 sk[1] = ((idx + 1) >> 16) & 255;
576 sk[2] = ((idx + 1) >> 8) & 255;
577 sk[3] = (idx + 1) & 255;
578 // -- Secret key for this non-forward-secure version is now updated.
579 // -- A productive implementation should use a file handle instead and write the updated secret key at this point!
580
581 // Init working params
582 unsigned char R[n];
583 unsigned char msg_h[n];
584 unsigned char ots_seed[n];
585 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
586
587 // ---------------------------------
588 // Message Hashing
589 // ---------------------------------
590
591 // Message Hash:
592 // First compute pseudorandom value
593 prf(R, idx_bytes_32, sk_prf, n);
594 // Generate hash key (R || root || idx)
595 memcpy(hash_key, R, n);
596 memcpy(hash_key+n, sk+4+3*n, n);
597 to_byte(hash_key+2*n, idx, n);
598 // Then use it for message digest
599 h_msg(msg_h, msg, msglen, hash_key, 3*n, n);
600
601 // Start collecting signature
602 *sig_msg_len = 0;
603
604 // Copy index to signature
605 sig_msg[0] = (idx >> 24) & 255;
606 sig_msg[1] = (idx >> 16) & 255;
607 sig_msg[2] = (idx >> 8) & 255;
608 sig_msg[3] = idx & 255;
609
610 sig_msg += 4;
611 *sig_msg_len += 4;
612
613 // Copy R to signature
614 for (i = 0; i < n; i++)
615 sig_msg[i] = R[i];
616
617 sig_msg += n;
618 *sig_msg_len += n;
619
620 // ----------------------------------
621 // Now we start to "really sign"
622 // ----------------------------------
623
624 // Prepare Address
625 setType(ots_addr, 0);
626 setOTSADRS(ots_addr, idx);
627
628 // Compute seed for OTS key pair
629 get_seed(ots_seed, sk_seed, n, ots_addr);
630
631 // Compute WOTS signature
632 wots_sign(sig_msg, msg_h, ots_seed, &(params->wots_par), pub_seed, ots_addr);
633
634 sig_msg += params->wots_par.keysize;
635 *sig_msg_len += params->wots_par.keysize;
636
637 // the auth path was already computed during the previous round
638 memcpy(sig_msg, state->auth, h*n);
639
640 if (idx < (1U << h) - 1) {
641 bds_round(state, idx, sk_seed, params, pub_seed, ots_addr);
642 bds_treehash_update(state, (h - k) >> 1, sk_seed, params, pub_seed, ots_addr);
643 }
644
645/* TODO: save key/bds state here! */
646
647 sig_msg += params->h*n;
648 *sig_msg_len += params->h*n;
649
650 //Whipe secret elements?
651 //zerobytes(tsk, CRYPTO_SECRETKEYBYTES);
652
653
654 memcpy(sig_msg, msg, msglen);
655 *sig_msg_len += msglen;
656
657 return 0;
658}
659
660/**
661 * Verifies a given message signature pair under a given public key.
662 */
663int xmss_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmss_params *params)
664{
665 unsigned int n = params->n;
666
667 unsigned long long i, m_len;
668 unsigned long idx=0;
669 unsigned char wots_pk[params->wots_par.keysize];
670 unsigned char pkhash[n];
671 unsigned char root[n];
672 unsigned char msg_h[n];
673 unsigned char hash_key[3*n];
674
675 unsigned char pub_seed[n];
676 memcpy(pub_seed, pk+n, n);
677
678 // Init addresses
679 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
680 uint32_t ltree_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
681 uint32_t node_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
682
683 setType(ots_addr, 0);
684 setType(ltree_addr, 1);
685 setType(node_addr, 2);
686
687 // Extract index
688 idx = ((unsigned long)sig_msg[0] << 24) | ((unsigned long)sig_msg[1] << 16) | ((unsigned long)sig_msg[2] << 8) | sig_msg[3];
689 printf("verify:: idx = %lu\n", idx);
690
691 // Generate hash key (R || root || idx)
692 memcpy(hash_key, sig_msg+4,n);
693 memcpy(hash_key+n, pk, n);
694 to_byte(hash_key+2*n, idx, n);
695
696 sig_msg += (n+4);
697 sig_msg_len -= (n+4);
698
699 // hash message
700 unsigned long long tmp_sig_len = params->wots_par.keysize+params->h*n;
701 m_len = sig_msg_len - tmp_sig_len;
702 h_msg(msg_h, sig_msg + tmp_sig_len, m_len, hash_key, 3*n, n);
703
704 //-----------------------
705 // Verify signature
706 //-----------------------
707
708 // Prepare Address
709 setOTSADRS(ots_addr, idx);
710 // Check WOTS signature
711 wots_pkFromSig(wots_pk, sig_msg, msg_h, &(params->wots_par), pub_seed, ots_addr);
712
713 sig_msg += params->wots_par.keysize;
714 sig_msg_len -= params->wots_par.keysize;
715
716 // Compute Ltree
717 setLtreeADRS(ltree_addr, idx);
718 l_tree(pkhash, wots_pk, params, pub_seed, ltree_addr);
719
720 // Compute root
721 validate_authpath(root, pkhash, idx, sig_msg, params, pub_seed, node_addr);
722
723 sig_msg += params->h*n;
724 sig_msg_len -= params->h*n;
725
726 for (i = 0; i < n; i++)
727 if (root[i] != pk[i])
728 goto fail;
729
730 *msglen = sig_msg_len;
731 for (i = 0; i < *msglen; i++)
732 msg[i] = sig_msg[i];
733
734 return 0;
735
736
737fail:
738 *msglen = sig_msg_len;
739 for (i = 0; i < *msglen; i++)
740 msg[i] = 0;
741 *msglen = -1;
742 return -1;
743}
744
745/*
746 * Generates a XMSSMT key pair for a given parameter set.
747 * Format sk: [(ceil(h/8) bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
748 * Format pk: [root || PUB_SEED] omitting algo oid.
749 */
750int xmssmt_keypair(unsigned char *pk, unsigned char *sk, bds_state *states, unsigned char *wots_sigs, xmssmt_params *params)
751{
752 unsigned int n = params->n;
753 unsigned int i;
754 unsigned char ots_seed[params->n];
755 // Set idx = 0
756 for (i = 0; i < params->index_len; i++) {
757 sk[i] = 0;
758 }
759 // Init SK_SEED (n byte), SK_PRF (n byte), and PUB_SEED (n byte)
760 randombytes(sk+params->index_len, 3*n);
761 // Copy PUB_SEED to public key
762 memcpy(pk+n, sk+params->index_len+2*n, n);
763
764 // Set address to point on the single tree on layer d-1
765 uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
766 setLayerADRS(addr, (params->d-1));
767 // Set up state and compute wots signatures for all but topmost tree root
768 for (i = 0; i < params->d - 1; i++) {
769 // Compute seed for OTS key pair
770 treehash_setup(pk, params->xmss_par.h, 0, states + i, sk+params->index_len, &(params->xmss_par), pk+n, addr);
771 setLayerADRS(addr, (i+1));
772 get_seed(ots_seed, sk+params->index_len, n, addr);
773 wots_sign(wots_sigs + i*params->xmss_par.wots_par.keysize, pk, ots_seed, &(params->xmss_par.wots_par), pk+n, addr);
774 }
775 treehash_setup(pk, params->xmss_par.h, 0, states + i, sk+params->index_len, &(params->xmss_par), pk+n, addr);
776 memcpy(sk+params->index_len+3*n, pk, n);
777 return 0;
778}
779
780/**
781 * Signs a message.
782 * Returns
783 * 1. an array containing the signature followed by the message AND
784 * 2. an updated secret key!
785 *
786 */
787int xmssmt_sign(unsigned char *sk, bds_state *states, unsigned char *wots_sigs, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmssmt_params *params)
788{
789 unsigned int n = params->n;
790
791 unsigned int tree_h = params->xmss_par.h;
792 unsigned int h = params->h;
793 unsigned int k = params->xmss_par.k;
794 unsigned int idx_len = params->index_len;
795 uint64_t idx_tree;
796 uint32_t idx_leaf;
797 uint64_t i, j;
798 int needswap_upto = -1;
799 unsigned int updates;
800
801 unsigned char sk_seed[n];
802 unsigned char sk_prf[n];
803 unsigned char pub_seed[n];
804 // Init working params
805 unsigned char R[n];
806 unsigned char msg_h[n];
807 unsigned char hash_key[3*n];
808 unsigned char ots_seed[n];
809 uint32_t addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
810 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
811 unsigned char idx_bytes_32[32];
812 bds_state tmp;
813
814 // Extract SK
815 unsigned long long idx = 0;
816 for (i = 0; i < idx_len; i++) {
817 idx |= ((unsigned long long)sk[i]) << 8*(idx_len - 1 - i);
818 }
819
820 memcpy(sk_seed, sk+idx_len, n);
821 memcpy(sk_prf, sk+idx_len+n, n);
822 memcpy(pub_seed, sk+idx_len+2*n, n);
823
824 // Update SK
825 for (i = 0; i < idx_len; i++) {
826 sk[i] = ((idx + 1) >> 8*(idx_len - 1 - i)) & 255;
827 }
828 // -- Secret key for this non-forward-secure version is now updated.
829 // -- A productive implementation should use a file handle instead and write the updated secret key at this point!
830
831
832 // ---------------------------------
833 // Message Hashing
834 // ---------------------------------
835
836 // Message Hash:
837 // First compute pseudorandom value
838 to_byte(idx_bytes_32, idx, 32);
839 prf(R, idx_bytes_32, sk_prf, n);
840 // Generate hash key (R || root || idx)
841 memcpy(hash_key, R, n);
842 memcpy(hash_key+n, sk+idx_len+3*n, n);
843 to_byte(hash_key+2*n, idx, n);
844
845 // Then use it for message digest
846 h_msg(msg_h, msg, msglen, hash_key, 3*n, n);
847
848 // Start collecting signature
849 *sig_msg_len = 0;
850
851 // Copy index to signature
852 for (i = 0; i < idx_len; i++) {
853 sig_msg[i] = (idx >> 8*(idx_len - 1 - i)) & 255;
854 }
855
856 sig_msg += idx_len;
857 *sig_msg_len += idx_len;
858
859 // Copy R to signature
860 for (i = 0; i < n; i++)
861 sig_msg[i] = R[i];
862
863 sig_msg += n;
864 *sig_msg_len += n;
865
866 // ----------------------------------
867 // Now we start to "really sign"
868 // ----------------------------------
869
870 // Handle lowest layer separately as it is slightly different...
871
872 // Prepare Address
873 setType(ots_addr, 0);
874 idx_tree = idx >> tree_h;
875 idx_leaf = (idx & ((1 << tree_h)-1));
876 setLayerADRS(ots_addr, 0);
877 setTreeADRS(ots_addr, idx_tree);
878 setOTSADRS(ots_addr, idx_leaf);
879
880 // Compute seed for OTS key pair
881 get_seed(ots_seed, sk_seed, n, ots_addr);
882
883 // Compute WOTS signature
884 wots_sign(sig_msg, msg_h, ots_seed, &(params->xmss_par.wots_par), pub_seed, ots_addr);
885
886 sig_msg += params->xmss_par.wots_par.keysize;
887 *sig_msg_len += params->xmss_par.wots_par.keysize;
888
889 memcpy(sig_msg, states[0].auth, tree_h*n);
890 sig_msg += tree_h*n;
891 *sig_msg_len += tree_h*n;
892
893 // prepare signature of remaining layers
894 for (i = 1; i < params->d; i++) {
895 // put WOTS signature in place
896 memcpy(sig_msg, wots_sigs + (i-1)*params->xmss_par.wots_par.keysize, params->xmss_par.wots_par.keysize);
897
898 sig_msg += params->xmss_par.wots_par.keysize;
899 *sig_msg_len += params->xmss_par.wots_par.keysize;
900
901 // put AUTH nodes in place
902 memcpy(sig_msg, states[i].auth, tree_h*n);
903 sig_msg += tree_h*n;
904 *sig_msg_len += tree_h*n;
905 }
906
907 updates = (tree_h - k) >> 1;
908
909 setTreeADRS(addr, (idx_tree + 1));
910 // mandatory update for NEXT_0 (does not count towards h-k/2) if NEXT_0 exists
911 if ((1 + idx_tree) * (1 << tree_h) + idx_leaf < (1ULL << h)) {
912 bds_state_update(&states[params->d], sk_seed, &(params->xmss_par), pub_seed, addr);
913 }
914
915 for (i = 0; i < params->d; i++) {
916 // check if we're not at the end of a tree
917 if (! (((idx + 1) & ((1ULL << ((i+1)*tree_h)) - 1)) == 0)) {
918 idx_leaf = (idx >> (tree_h * i)) & ((1 << tree_h)-1);
919 idx_tree = (idx >> (tree_h * (i+1)));
920 setLayerADRS(addr, i);
921 setTreeADRS(addr, idx_tree);
922 if (i == (unsigned int) (needswap_upto + 1)) {
923 bds_round(&states[i], idx_leaf, sk_seed, &(params->xmss_par), pub_seed, addr);
924 }
925 updates = bds_treehash_update(&states[i], updates, sk_seed, &(params->xmss_par), pub_seed, addr);
926 setTreeADRS(addr, (idx_tree + 1));
927 // if a NEXT-tree exists for this level;
928 if ((1 + idx_tree) * (1 << tree_h) + idx_leaf < (1ULL << (h - tree_h * i))) {
929 if (i > 0 && updates > 0 && states[params->d + i].next_leaf < (1ULL << h)) {
930 bds_state_update(&states[params->d + i], sk_seed, &(params->xmss_par), pub_seed, addr);
931 updates--;
932 }
933 }
934 }
935 else if (idx < (1ULL << h) - 1) {
936 memcpy(&tmp, states+params->d + i, sizeof(bds_state));
937 memcpy(states+params->d + i, states + i, sizeof(bds_state));
938 memcpy(states + i, &tmp, sizeof(bds_state));
939
940 setLayerADRS(ots_addr, (i+1));
941 setTreeADRS(ots_addr, ((idx + 1) >> ((i+2) * tree_h)));
942 setOTSADRS(ots_addr, (((idx >> ((i+1) * tree_h)) + 1) & ((1 << tree_h)-1)));
943
944 get_seed(ots_seed, sk+params->index_len, n, ots_addr);
945 wots_sign(wots_sigs + i*params->xmss_par.wots_par.keysize, states[i].stack, ots_seed, &(params->xmss_par.wots_par), pub_seed, ots_addr);
946
947 states[params->d + i].stackoffset = 0;
948 states[params->d + i].next_leaf = 0;
949
950 updates--; // WOTS-signing counts as one update
951 needswap_upto = i;
952 for (j = 0; j < tree_h-k; j++) {
953 states[i].treehash[j].completed = 1;
954 }
955 }
956 }
957
958 //Whipe secret elements?
959 //zerobytes(tsk, CRYPTO_SECRETKEYBYTES);
960
961 memcpy(sig_msg, msg, msglen);
962 *sig_msg_len += msglen;
963
964 return 0;
965}
966
967/**
968 * Verifies a given message signature pair under a given public key.
969 */
970int xmssmt_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmssmt_params *params)
971{
972 unsigned int n = params->n;
973
974 unsigned int tree_h = params->xmss_par.h;
975 unsigned int idx_len = params->index_len;
976 uint64_t idx_tree;
977 uint32_t idx_leaf;
978
979 unsigned long long i, m_len;
980 unsigned long long idx=0;
981 unsigned char wots_pk[params->xmss_par.wots_par.keysize];
982 unsigned char pkhash[n];
983 unsigned char root[n];
984 unsigned char msg_h[n];
985 unsigned char hash_key[3*n];
986
987 unsigned char pub_seed[n];
988 memcpy(pub_seed, pk+n, n);
989
990 // Init addresses
991 uint32_t ots_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
992 uint32_t ltree_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
993 uint32_t node_addr[8] = {0, 0, 0, 0, 0, 0, 0, 0};
994
995 // Extract index
996 for (i = 0; i < idx_len; i++) {
997 idx |= ((unsigned long long)sig_msg[i]) << (8*(idx_len - 1 - i));
998 }
999 printf("verify:: idx = %llu\n", idx);
1000 sig_msg += idx_len;
1001 sig_msg_len -= idx_len;
1002
1003 // Generate hash key (R || root || idx)
1004 memcpy(hash_key, sig_msg,n);
1005 memcpy(hash_key+n, pk, n);
1006 to_byte(hash_key+2*n, idx, n);
1007
1008 sig_msg += n;
1009 sig_msg_len -= n;
1010
1011
1012 // hash message (recall, R is now on pole position at sig_msg
1013 unsigned long long tmp_sig_len = (params->d * params->xmss_par.wots_par.keysize) + (params->h * n);
1014 m_len = sig_msg_len - tmp_sig_len;
1015 h_msg(msg_h, sig_msg + tmp_sig_len, m_len, hash_key, 3*n, n);
1016
1017
1018 //-----------------------
1019 // Verify signature
1020 //-----------------------
1021
1022 // Prepare Address
1023 idx_tree = idx >> tree_h;
1024 idx_leaf = (idx & ((1 << tree_h)-1));
1025 setLayerADRS(ots_addr, 0);
1026 setTreeADRS(ots_addr, idx_tree);
1027 setType(ots_addr, 0);
1028
1029 memcpy(ltree_addr, ots_addr, 12);
1030 setType(ltree_addr, 1);
1031
1032 memcpy(node_addr, ltree_addr, 12);
1033 setType(node_addr, 2);
1034
1035 setOTSADRS(ots_addr, idx_leaf);
1036
1037 // Check WOTS signature
1038 wots_pkFromSig(wots_pk, sig_msg, msg_h, &(params->xmss_par.wots_par), pub_seed, ots_addr);
1039
1040 sig_msg += params->xmss_par.wots_par.keysize;
1041 sig_msg_len -= params->xmss_par.wots_par.keysize;
1042
1043 // Compute Ltree
1044 setLtreeADRS(ltree_addr, idx_leaf);
1045 l_tree(pkhash, wots_pk, &(params->xmss_par), pub_seed, ltree_addr);
1046
1047 // Compute root
1048 validate_authpath(root, pkhash, idx_leaf, sig_msg, &(params->xmss_par), pub_seed, node_addr);
1049
1050 sig_msg += tree_h*n;
1051 sig_msg_len -= tree_h*n;
1052
1053 for (i = 1; i < params->d; i++) {
1054 // Prepare Address
1055 idx_leaf = (idx_tree & ((1 << tree_h)-1));
1056 idx_tree = idx_tree >> tree_h;
1057
1058 setLayerADRS(ots_addr, i);
1059 setTreeADRS(ots_addr, idx_tree);
1060 setType(ots_addr, 0);
1061
1062 memcpy(ltree_addr, ots_addr, 12);
1063 setType(ltree_addr, 1);
1064
1065 memcpy(node_addr, ltree_addr, 12);
1066 setType(node_addr, 2);
1067
1068 setOTSADRS(ots_addr, idx_leaf);
1069
1070 // Check WOTS signature
1071 wots_pkFromSig(wots_pk, sig_msg, root, &(params->xmss_par.wots_par), pub_seed, ots_addr);
1072
1073 sig_msg += params->xmss_par.wots_par.keysize;
1074 sig_msg_len -= params->xmss_par.wots_par.keysize;
1075
1076 // Compute Ltree
1077 setLtreeADRS(ltree_addr, idx_leaf);
1078 l_tree(pkhash, wots_pk, &(params->xmss_par), pub_seed, ltree_addr);
1079
1080 // Compute root
1081 validate_authpath(root, pkhash, idx_leaf, sig_msg, &(params->xmss_par), pub_seed, node_addr);
1082
1083 sig_msg += tree_h*n;
1084 sig_msg_len -= tree_h*n;
1085
1086 }
1087
1088 for (i = 0; i < n; i++)
1089 if (root[i] != pk[i])
1090 goto fail;
1091
1092 *msglen = sig_msg_len;
1093 for (i = 0; i < *msglen; i++)
1094 msg[i] = sig_msg[i];
1095
1096 return 0;
1097
1098
1099fail:
1100 *msglen = sig_msg_len;
1101 for (i = 0; i < *msglen; i++)
1102 msg[i] = 0;
1103 *msglen = -1;
1104 return -1;
1105}
1106#endif /* WITH_XMSS */
diff --git a/xmss_fast.h b/xmss_fast.h
new file mode 100644
index 000000000..2ffba7057
--- /dev/null
+++ b/xmss_fast.h
@@ -0,0 +1,111 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_fast.h,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4xmss_fast.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#include "xmss_wots.h"
11
12#ifndef XMSS_H
13#define XMSS_H
14typedef struct{
15 unsigned int level;
16 unsigned long long subtree;
17 unsigned int subleaf;
18} leafaddr;
19
20typedef struct{
21 wots_params wots_par;
22 unsigned int n;
23 unsigned int h;
24 unsigned int k;
25} xmss_params;
26
27typedef struct{
28 xmss_params xmss_par;
29 unsigned int n;
30 unsigned int h;
31 unsigned int d;
32 unsigned int index_len;
33} xmssmt_params;
34
35typedef struct{
36 unsigned int h;
37 unsigned int next_idx;
38 unsigned int stackusage;
39 unsigned char completed;
40 unsigned char *node;
41} treehash_inst;
42
43typedef struct {
44 unsigned char *stack;
45 unsigned int stackoffset;
46 unsigned char *stacklevels;
47 unsigned char *auth;
48 unsigned char *keep;
49 treehash_inst *treehash;
50 unsigned char *retain;
51 unsigned int next_leaf;
52} bds_state;
53
54/**
55 * Initialize BDS state struct
56 * parameter names are the same as used in the description of the BDS traversal
57 */
58void xmss_set_bds_state(bds_state *state, unsigned char *stack, int stackoffset, unsigned char *stacklevels, unsigned char *auth, unsigned char *keep, treehash_inst *treehash, unsigned char *retain, int next_leaf);
59/**
60 * Initializes parameter set.
61 * Needed, for any of the other methods.
62 */
63int xmss_set_params(xmss_params *params, int n, int h, int w, int k);
64/**
65 * Initialize xmssmt_params struct
66 * parameter names are the same as in the draft
67 *
68 * Especially h is the total tree height, i.e. the XMSS trees have height h/d
69 */
70int xmssmt_set_params(xmssmt_params *params, int n, int h, int d, int w, int k);
71/**
72 * Generates a XMSS key pair for a given parameter set.
73 * Format sk: [(32bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
74 * Format pk: [root || PUB_SEED] omitting algo oid.
75 */
76int xmss_keypair(unsigned char *pk, unsigned char *sk, bds_state *state, xmss_params *params);
77/**
78 * Signs a message.
79 * Returns
80 * 1. an array containing the signature followed by the message AND
81 * 2. an updated secret key!
82 *
83 */
84int xmss_sign(unsigned char *sk, bds_state *state, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg,unsigned long long msglen, const xmss_params *params);
85/**
86 * Verifies a given message signature pair under a given public key.
87 *
88 * Note: msg and msglen are pure outputs which carry the message in case verification succeeds. The (input) message is assumed to be within sig_msg which has the form (sig||msg).
89 */
90int xmss_sign_open(unsigned char *msg,unsigned long long *msglen, const unsigned char *sig_msg,unsigned long long sig_msg_len, const unsigned char *pk, const xmss_params *params);
91
92/*
93 * Generates a XMSSMT key pair for a given parameter set.
94 * Format sk: [(ceil(h/8) bit) idx || SK_SEED || SK_PRF || PUB_SEED || root]
95 * Format pk: [root || PUB_SEED] omitting algo oid.
96 */
97int xmssmt_keypair(unsigned char *pk, unsigned char *sk, bds_state *states, unsigned char *wots_sigs, xmssmt_params *params);
98/**
99 * Signs a message.
100 * Returns
101 * 1. an array containing the signature followed by the message AND
102 * 2. an updated secret key!
103 *
104 */
105int xmssmt_sign(unsigned char *sk, bds_state *state, unsigned char *wots_sigs, unsigned char *sig_msg, unsigned long long *sig_msg_len, const unsigned char *msg, unsigned long long msglen, const xmssmt_params *params);
106/**
107 * Verifies a given message signature pair under a given public key.
108 */
109int xmssmt_sign_open(unsigned char *msg, unsigned long long *msglen, const unsigned char *sig_msg, unsigned long long sig_msg_len, const unsigned char *pk, const xmssmt_params *params);
110#endif
111#endif /* WITH_XMSS */
diff --git a/xmss_hash.c b/xmss_hash.c
new file mode 100644
index 000000000..b9eee7cff
--- /dev/null
+++ b/xmss_hash.c
@@ -0,0 +1,140 @@
1/* $OpenBSD: xmss_hash.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3hash.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include "xmss_hash_address.h"
13#include "xmss_commons.h"
14#include "xmss_hash.h"
15
16#include <stddef.h>
17#ifdef HAVE_STDINT_H
18#include <stdint.h>
19#endif
20#include <stdio.h>
21#include <string.h>
22#include <openssl/sha.h>
23#include <openssl/hmac.h>
24#include <openssl/evp.h>
25
26int core_hash_SHA2(unsigned char *, const unsigned int, const unsigned char *,
27 unsigned int, const unsigned char *, unsigned long long, unsigned int);
28
29unsigned char* addr_to_byte(unsigned char *bytes, const uint32_t addr[8]){
30#if IS_LITTLE_ENDIAN==1
31 int i = 0;
32 for(i=0;i<8;i++)
33 to_byte(bytes+i*4, addr[i],4);
34 return bytes;
35#else
36 memcpy(bytes, addr, 32);
37 return bytes;
38#endif
39}
40
41int core_hash_SHA2(unsigned char *out, const unsigned int type, const unsigned char *key, unsigned int keylen, const unsigned char *in, unsigned long long inlen, unsigned int n){
42 unsigned long long i = 0;
43 unsigned char buf[inlen + n + keylen];
44
45 // Input is (toByte(X, 32) || KEY || M)
46
47 // set toByte
48 to_byte(buf, type, n);
49
50 for (i=0; i < keylen; i++) {
51 buf[i+n] = key[i];
52 }
53
54 for (i=0; i < inlen; i++) {
55 buf[keylen + n + i] = in[i];
56 }
57
58 if (n == 32) {
59 SHA256(buf, inlen + keylen + n, out);
60 return 0;
61 }
62 else {
63 if (n == 64) {
64 SHA512(buf, inlen + keylen + n, out);
65 return 0;
66 }
67 }
68 return 1;
69}
70
71/**
72 * Implements PRF
73 */
74int prf(unsigned char *out, const unsigned char *in, const unsigned char *key, unsigned int keylen)
75{
76 return core_hash_SHA2(out, 3, key, keylen, in, 32, keylen);
77}
78
79/*
80 * Implemts H_msg
81 */
82int h_msg(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *key, const unsigned int keylen, const unsigned int n)
83{
84 if (keylen != 3*n){
85 // H_msg takes 3n-bit keys, but n does not match the keylength of keylen
86 return -1;
87 }
88 return core_hash_SHA2(out, 2, key, keylen, in, inlen, n);
89}
90
91/**
92 * We assume the left half is in in[0]...in[n-1]
93 */
94int hash_h(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n)
95{
96
97 unsigned char buf[2*n];
98 unsigned char key[n];
99 unsigned char bitmask[2*n];
100 unsigned char byte_addr[32];
101 unsigned int i;
102
103 setKeyAndMask(addr, 0);
104 addr_to_byte(byte_addr, addr);
105 prf(key, byte_addr, pub_seed, n);
106 // Use MSB order
107 setKeyAndMask(addr, 1);
108 addr_to_byte(byte_addr, addr);
109 prf(bitmask, byte_addr, pub_seed, n);
110 setKeyAndMask(addr, 2);
111 addr_to_byte(byte_addr, addr);
112 prf(bitmask+n, byte_addr, pub_seed, n);
113 for (i = 0; i < 2*n; i++) {
114 buf[i] = in[i] ^ bitmask[i];
115 }
116 return core_hash_SHA2(out, 1, key, n, buf, 2*n, n);
117}
118
119int hash_f(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n)
120{
121 unsigned char buf[n];
122 unsigned char key[n];
123 unsigned char bitmask[n];
124 unsigned char byte_addr[32];
125 unsigned int i;
126
127 setKeyAndMask(addr, 0);
128 addr_to_byte(byte_addr, addr);
129 prf(key, byte_addr, pub_seed, n);
130
131 setKeyAndMask(addr, 1);
132 addr_to_byte(byte_addr, addr);
133 prf(bitmask, byte_addr, pub_seed, n);
134
135 for (i = 0; i < n; i++) {
136 buf[i] = in[i] ^ bitmask[i];
137 }
138 return core_hash_SHA2(out, 0, key, n, buf, n, n);
139}
140#endif /* WITH_XMSS */
diff --git a/xmss_hash.h b/xmss_hash.h
new file mode 100644
index 000000000..d19c62152
--- /dev/null
+++ b/xmss_hash.h
@@ -0,0 +1,22 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_hash.h,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4hash.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#ifndef HASH_H
11#define HASH_H
12
13#define IS_LITTLE_ENDIAN 1
14
15unsigned char* addr_to_byte(unsigned char *bytes, const uint32_t addr[8]);
16int prf(unsigned char *out, const unsigned char *in, const unsigned char *key, unsigned int keylen);
17int h_msg(unsigned char *out,const unsigned char *in,unsigned long long inlen, const unsigned char *key, const unsigned int keylen, const unsigned int n);
18int hash_h(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n);
19int hash_f(unsigned char *out, const unsigned char *in, const unsigned char *pub_seed, uint32_t addr[8], const unsigned int n);
20
21#endif
22#endif /* WITH_XMSS */
diff --git a/xmss_hash_address.c b/xmss_hash_address.c
new file mode 100644
index 000000000..c6c1347e9
--- /dev/null
+++ b/xmss_hash_address.c
@@ -0,0 +1,66 @@
1/* $OpenBSD: xmss_hash_address.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3hash_address.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8#include "includes.h"
9#ifdef WITH_XMSS
10
11#ifdef HAVE_STDINT_H
12#include <stdint.h>
13#endif
14#include "xmss_hash_address.h" /* prototypes */
15
16void setLayerADRS(uint32_t adrs[8], uint32_t layer){
17 adrs[0] = layer;
18}
19
20void setTreeADRS(uint32_t adrs[8], uint64_t tree){
21 adrs[1] = (uint32_t) (tree >> 32);
22 adrs[2] = (uint32_t) tree;
23}
24
25void setType(uint32_t adrs[8], uint32_t type){
26 adrs[3] = type;
27 int i;
28 for(i = 4; i < 8; i++){
29 adrs[i] = 0;
30 }
31}
32
33void setKeyAndMask(uint32_t adrs[8], uint32_t keyAndMask){
34 adrs[7] = keyAndMask;
35}
36
37// OTS
38
39void setOTSADRS(uint32_t adrs[8], uint32_t ots){
40 adrs[4] = ots;
41}
42
43void setChainADRS(uint32_t adrs[8], uint32_t chain){
44 adrs[5] = chain;
45}
46
47void setHashADRS(uint32_t adrs[8], uint32_t hash){
48 adrs[6] = hash;
49}
50
51// L-tree
52
53void setLtreeADRS(uint32_t adrs[8], uint32_t ltree){
54 adrs[4] = ltree;
55}
56
57// Hash Tree & L-tree
58
59void setTreeHeight(uint32_t adrs[8], uint32_t treeHeight){
60 adrs[5] = treeHeight;
61}
62
63void setTreeIndex(uint32_t adrs[8], uint32_t treeIndex){
64 adrs[6] = treeIndex;
65}
66#endif /* WITH_XMSS */
diff --git a/xmss_hash_address.h b/xmss_hash_address.h
new file mode 100644
index 000000000..66bb4cc4d
--- /dev/null
+++ b/xmss_hash_address.h
@@ -0,0 +1,40 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_hash_address.h,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
3/*
4hash_address.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#ifdef HAVE_STDINT_H
11#include <stdint.h>
12#endif
13
14void setLayerADRS(uint32_t adrs[8], uint32_t layer);
15
16void setTreeADRS(uint32_t adrs[8], uint64_t tree);
17
18void setType(uint32_t adrs[8], uint32_t type);
19
20void setKeyAndMask(uint32_t adrs[8], uint32_t keyAndMask);
21
22// OTS
23
24void setOTSADRS(uint32_t adrs[8], uint32_t ots);
25
26void setChainADRS(uint32_t adrs[8], uint32_t chain);
27
28void setHashADRS(uint32_t adrs[8], uint32_t hash);
29
30// L-tree
31
32void setLtreeADRS(uint32_t adrs[8], uint32_t ltree);
33
34// Hash Tree & L-tree
35
36void setTreeHeight(uint32_t adrs[8], uint32_t treeHeight);
37
38void setTreeIndex(uint32_t adrs[8], uint32_t treeIndex);
39
40#endif /* WITH_XMSS */
diff --git a/xmss_wots.c b/xmss_wots.c
new file mode 100644
index 000000000..b4702ed8d
--- /dev/null
+++ b/xmss_wots.c
@@ -0,0 +1,192 @@
1/* $OpenBSD: xmss_wots.c,v 1.2 2018/02/26 03:56:44 dtucker Exp $ */
2/*
3wots.c version 20160722
4Andreas Hülsing
5Joost Rijneveld
6Public domain.
7*/
8
9#include "includes.h"
10#ifdef WITH_XMSS
11
12#include <stdlib.h>
13#ifdef HAVE_STDINT_H
14#include <stdint.h>
15#endif
16#include <limits.h>
17#include "xmss_commons.h"
18#include "xmss_hash.h"
19#include "xmss_wots.h"
20#include "xmss_hash_address.h"
21
22
23/* libm-free version of log2() for wots */
24static inline int
25wots_log2(uint32_t v)
26{
27 int b;
28
29 for (b = sizeof (v) * CHAR_BIT - 1; b >= 0; b--) {
30 if ((1U << b) & v) {
31 return b;
32 }
33 }
34 return 0;
35}
36
37void
38wots_set_params(wots_params *params, int n, int w)
39{
40 params->n = n;
41 params->w = w;
42 params->log_w = wots_log2(params->w);
43 params->len_1 = (CHAR_BIT * n) / params->log_w;
44 params->len_2 = (wots_log2(params->len_1 * (w - 1)) / params->log_w) + 1;
45 params->len = params->len_1 + params->len_2;
46 params->keysize = params->len * params->n;
47}
48
49/**
50 * Helper method for pseudorandom key generation
51 * Expands an n-byte array into a len*n byte array
52 * this is done using PRF
53 */
54static void expand_seed(unsigned char *outseeds, const unsigned char *inseed, const wots_params *params)
55{
56 uint32_t i = 0;
57 unsigned char ctr[32];
58 for(i = 0; i < params->len; i++){
59 to_byte(ctr, i, 32);
60 prf((outseeds + (i*params->n)), ctr, inseed, params->n);
61 }
62}
63
64/**
65 * Computes the chaining function.
66 * out and in have to be n-byte arrays
67 *
68 * interpretes in as start-th value of the chain
69 * addr has to contain the address of the chain
70 */
71static void gen_chain(unsigned char *out, const unsigned char *in, unsigned int start, unsigned int steps, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
72{
73 uint32_t i, j;
74 for (j = 0; j < params->n; j++)
75 out[j] = in[j];
76
77 for (i = start; i < (start+steps) && i < params->w; i++) {
78 setHashADRS(addr, i);
79 hash_f(out, out, pub_seed, addr, params->n);
80 }
81}
82
83/**
84 * base_w algorithm as described in draft.
85 *
86 *
87 */
88static void base_w(int *output, const int out_len, const unsigned char *input, const wots_params *params)
89{
90 int in = 0;
91 int out = 0;
92 uint32_t total = 0;
93 int bits = 0;
94 int consumed = 0;
95
96 for (consumed = 0; consumed < out_len; consumed++) {
97 if (bits == 0) {
98 total = input[in];
99 in++;
100 bits += 8;
101 }
102 bits -= params->log_w;
103 output[out] = (total >> bits) & (params->w - 1);
104 out++;
105 }
106}
107
108void wots_pkgen(unsigned char *pk, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
109{
110 uint32_t i;
111 expand_seed(pk, sk, params);
112 for (i=0; i < params->len; i++) {
113 setChainADRS(addr, i);
114 gen_chain(pk+i*params->n, pk+i*params->n, 0, params->w-1, params, pub_seed, addr);
115 }
116}
117
118
119int wots_sign(unsigned char *sig, const unsigned char *msg, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
120{
121 //int basew[params->len];
122 int csum = 0;
123 uint32_t i = 0;
124 int *basew = calloc(params->len, sizeof(int));
125 if (basew == NULL)
126 return -1;
127
128 base_w(basew, params->len_1, msg, params);
129
130 for (i=0; i < params->len_1; i++) {
131 csum += params->w - 1 - basew[i];
132 }
133
134 csum = csum << (8 - ((params->len_2 * params->log_w) % 8));
135
136 int len_2_bytes = ((params->len_2 * params->log_w) + 7) / 8;
137
138 unsigned char csum_bytes[len_2_bytes];
139 to_byte(csum_bytes, csum, len_2_bytes);
140
141 int csum_basew[params->len_2];
142 base_w(csum_basew, params->len_2, csum_bytes, params);
143
144 for (i = 0; i < params->len_2; i++) {
145 basew[params->len_1 + i] = csum_basew[i];
146 }
147
148 expand_seed(sig, sk, params);
149
150 for (i = 0; i < params->len; i++) {
151 setChainADRS(addr, i);
152 gen_chain(sig+i*params->n, sig+i*params->n, 0, basew[i], params, pub_seed, addr);
153 }
154 free(basew);
155 return 0;
156}
157
158int wots_pkFromSig(unsigned char *pk, const unsigned char *sig, const unsigned char *msg, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8])
159{
160 int csum = 0;
161 uint32_t i = 0;
162 int *basew = calloc(params->len, sizeof(int));
163 if (basew == NULL)
164 return -1;
165
166 base_w(basew, params->len_1, msg, params);
167
168 for (i=0; i < params->len_1; i++) {
169 csum += params->w - 1 - basew[i];
170 }
171
172 csum = csum << (8 - ((params->len_2 * params->log_w) % 8));
173
174 int len_2_bytes = ((params->len_2 * params->log_w) + 7) / 8;
175
176 unsigned char csum_bytes[len_2_bytes];
177 to_byte(csum_bytes, csum, len_2_bytes);
178
179 int csum_basew[params->len_2];
180 base_w(csum_basew, params->len_2, csum_bytes, params);
181
182 for (i = 0; i < params->len_2; i++) {
183 basew[params->len_1 + i] = csum_basew[i];
184 }
185 for (i=0; i < params->len; i++) {
186 setChainADRS(addr, i);
187 gen_chain(pk+i*params->n, sig+i*params->n, basew[i], params->w-1-basew[i], params, pub_seed, addr);
188 }
189 free(basew);
190 return 0;
191}
192#endif /* WITH_XMSS */
diff --git a/xmss_wots.h b/xmss_wots.h
new file mode 100644
index 000000000..1eebf3b21
--- /dev/null
+++ b/xmss_wots.h
@@ -0,0 +1,64 @@
1#ifdef WITH_XMSS
2/* $OpenBSD: xmss_wots.h,v 1.3 2018/02/26 12:14:53 dtucker Exp $ */
3/*
4wots.h version 20160722
5Andreas Hülsing
6Joost Rijneveld
7Public domain.
8*/
9
10#ifndef WOTS_H
11#define WOTS_H
12
13#ifdef HAVE_STDINT_H
14#include "stdint.h"
15#endif
16
17/**
18 * WOTS parameter set
19 *
20 * Meaning as defined in draft-irtf-cfrg-xmss-hash-based-signatures-02
21 */
22typedef struct {
23 uint32_t len_1;
24 uint32_t len_2;
25 uint32_t len;
26 uint32_t n;
27 uint32_t w;
28 uint32_t log_w;
29 uint32_t keysize;
30} wots_params;
31
32/**
33 * Set the WOTS parameters,
34 * only m, n, w are required as inputs,
35 * len, len_1, and len_2 are computed from those.
36 *
37 * Assumes w is a power of 2
38 */
39void wots_set_params(wots_params *params, int n, int w);
40
41/**
42 * WOTS key generation. Takes a 32byte seed for the secret key, expands it to a full WOTS secret key and computes the corresponding public key.
43 * For this it takes the seed pub_seed which is used to generate bitmasks and hash keys and the address of this WOTS key pair addr
44 *
45 * params, must have been initialized before using wots_set params for params ! This is not done in this function
46 *
47 * Places the computed public key at address pk.
48 */
49void wots_pkgen(unsigned char *pk, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
50
51/**
52 * Takes a m-byte message and the 32-byte seed for the secret key to compute a signature that is placed at "sig".
53 *
54 */
55int wots_sign(unsigned char *sig, const unsigned char *msg, const unsigned char *sk, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
56
57/**
58 * Takes a WOTS signature, a m-byte message and computes a WOTS public key that it places at pk.
59 *
60 */
61int wots_pkFromSig(unsigned char *pk, const unsigned char *sig, const unsigned char *msg, const wots_params *params, const unsigned char *pub_seed, uint32_t addr[8]);
62
63#endif
64#endif /* WITH_XMSS */